WSL2 我採用了挂載 linux SSD 中的 /home 分區的方式運行, 這樣可以在最小的系統損耗,從Windows 下與Linux做 接力開發。。。
ref: https://learn.microsoft.com/zh-tw/windows/wsl/wsl2-mount-disk
由於需求,修改了 AGL的一般性設置。這樣可以簡單的做好不同分支的 AGL的烘焙工作,所有的原始檔案與 cache 都共用。
.bashrc 内容添加
-
常用的分支用獨立的 alias 來初始化: agl-salmon, agl-ricefish, agl-master
-
預設的設置參數是
agl-all-features agl-devel -f,之後只要添加-m machine與-b build_path兩個設置即可工作。 -
不確定還要加什麽的話 添加
-h參數即可查看。 -
設置完後, 會進入剛剛填寫的 build_path 工程目錄。此時再用
agl-cache來將下載與 cache 導向 $AGL_TOP 下的公用目錄。 -
之後即可在此 build_path 目錄用
bitbake烘焙出工程。 -
中斷工作、重啓動, 或是要看有哪些可以烘焙的成品,在 build_path 下執行:
. agl-init-build-env即可。。。
.bashrc 内容添加如下:
# in .bashrc
# AGL settings:
export AGL_TOP=/home/agl
# 建立三個 ALG 分支的 aglsetup.sh 的 alias:
alias agl-salmon='. $AGL_TOP/salmon/meta-agl/scripts/aglsetup.sh agl-all-features agl-devel -f'
alias agl-ricefish='. $AGL_TOP/ricefish/meta-agl/scripts/aglsetup.sh agl-all-features agl-devel -f'
alias agl-master='. $AGL_TOP/master/meta-agl/scripts/aglsetup.sh agl-all-features agl-devel -f'
# 連接公用快取到本地:
alias agl-cache='ln -sf $AGL_TOP/site.conf conf/'
# 資源限制時可以添加
# 1.執行任務數限制:
export BB_NUMBER_THREADS=10
# 2. 分析任務數限制:
#export BB_NUMBER_PARSE_THREADS=16
. .bashrc 或重開 shell 添加這些設置。
預製作相關目錄:
- 公用的下載與 cache目錄要先建好:
sudo mkdir -p $AGL_TOP/downloads
sudo mkdir -p $AGL_TOP/sstate-cache
sudo chmod 777 $AGL_TOP -R
- 添加 DL_DIR 與 SSTATE_DIR 定義到 $AGL_TOP/site.conf 中, 未來 agl-cache 要 link 到工程目錄的 conf/ 下:
echo "DL_DIR = \"/home/agl/downloads/\"
SSTATE_DIR = \"/home/agl/sstate-cache/\"" | sudo tee $AGL_TOP/site.conf
Ubuntu系類的編譯服務器工具套件安裝
這是目前最新 Yocto 的建議。適用於 Ubuntu 20.04、22.04 與 24.04。
sudo apt install build-essential chrpath cpio debianutils diffstat file gawk gcc git iputils-ping libacl1 liblz4-tool locales python3 python3-git python3-jinja2 python3-pexpect python3-pip python3-subunit socat texinfo unzip wget xz-utils zstd
# 需要 QEMU?
sudo apt install qemu-system
locale需要有 en_US.utf8 設置。查看 locale 的命令:
locale --all-locales | grep en_US.utf8
若沒有, 生成 UTF-8 的 locale 的命令 (需要管理員權限):
#打開 en_US.UTF-8 設置:
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
# 呼叫 locale-gen 工具設置 locale:
locale-gen
如果還沒安裝 locale 套件,需要用 dpkg 安裝:
sudo dpkg-reconfigure locales
使用 repo 設置每個分支的工程:
安裝 repo 工具:
# 下載 repo工具到本地預設位置
curl https://storage.googleapis.com/git-repo-downloads/repo > $HOME/.local/bin/repo
chmod a+x $HOME/.local/bin/repo
# google repo 賬號設置
git config --global user.email "cyue12@gmail.com"
git config --global user.name "cyue12"
準備 salmon 分支:
mkdir -p $AGL_TOP/salmon
cd $AGL_TOP/salmon
repo init -b salmon -u https://gerrit.automotivelinux.org/gerrit/AGL/AGL-repo
repo sync
準備 master 分支:
mkdir -p $AGL_TOP/master
cd $AGL_TOP/master
repo init -b master -u https://gerrit.automotivelinux.org/gerrit/AGL/AGL-repo
repo sync
準備 ricefish 分支:
mkdir -p $AGL_TOP/ricefish
cd $AGL_TOP/ricefish
repo init -b ricefish -u https://gerrit.automotivelinux.org/gerrit/AGL/AGL-repo
repo sync
選擇分支開發板與目錄
-
用
agl-BRANCH -m MACHINE -b BAKE_PATH_NAME建立工程 -
用
agl-cache將程式下載包與 cache指向公用的位置。
例子如下:
# 用我的 alias建立工程
agl-master -m raspberrypi5 -b rpi5
agl-cache
會進入定義的 rpi5 工程目錄中。
bitbake
如果之前中斷過的話,重新進入工程目錄,執行 script 重設環境:
. agl-init-build-env
script 會設立環境,並提示可以建立的工程項目。
這裏選擇 agl-ivi-demo-qt 項目:
bitbake agl-ivi-demo-qt
繼續嘗試不同成品:
bitbake agl-ivi-demo-flutter
也可成功!!
之前烘焙不過的原因,後來發現是并行數超出了系統支持的容量。通過限制 process數量可緩解。
我的 20核 12700H,32GB的 RAM 分配給 WSL2 24GB,Process數限制為 10 都可繼續進行完畢。。。
# 資源限制時可以添加
# 1.執行任務數限制:
export BB_NUMBER_THREADS=10
# 2. 分析任務數限制:
#export BB_NUMBER_PARSE_THREADS=16
另開 btop 監視,所有的 20 核 CPU仍有相當多的時間,維持在接近 100% 的負載。。。
參考: https://docs.yoctoproject.org/ref-manual/variables.html#term-BB_NUMBER_THREADS
烘焙完成:
。。。
File /usr/src/debug/dashboard/2.0+git/app/qrc_dashboard.cpp in package dashboard-src contains reference to TMPDIR [buildpaths]
NOTE: Tasks Summary: Attempted 11694 tasks of which 8179 didn't need to be rerun and all succeeded.
Summary: There were 22 WARNING messages.
燒錄
在 WSL下,先把 image copy 到主機上, 再用 Raspberry Pi Imager 燒錄到記憶卡。
cp tmp/deploy/images/raspberrypi5/agl-ivi-demo-qt-raspberrypi5.rootfs.wic.xz /mnt/d/
燒錄完成,記憶卡插到樹莓派上, 開機即可看到建立的工程。
樹莓派5的 qt image 大約 251M,fluter image 大約 358M,但 GUI 更美觀了。。。
留言