內容目錄
4. WSL2 嵌入式工程-AGL篇
車規級 Linux (Automotive Grade Linux) 在 2022 最新release 的 branch 是 needlefish。但目前 在樹莓派4 我只編譯成功上一版的 marlin 的 agl-demo-platform。
4.1 .bashrc 設置
我在 .bashrc 為 AGL添加了:
#==== AGL
export AGL_TOP=~/AGL
#export AGL_BRANCH=needlefish
export AGL_BRANCH=marlin
#export AGL_BRANCH=master
export AGL_SDK=$AGL_TOP/$AGL_BRANCH
alias agl-create='mkdir -p $AGL_SDK;cd $AGL_SDK;repo init -b $AGL_BRANCH -u https://gerrit.automotivelinux.org/gerrit/AGL/AGL-repo;repo sync'
alias agl-qemu86='cd $AGL_TOP;source $AGL_SDK/meta-agl/scripts/aglsetup.sh -f -m qemux86-64 -b build-${AGL_BRANCH}-x86 agl-demo agl-devel'
alias agl-rpi4='cd $AGL_TOP;source $AGL_SDK/meta-agl/scripts/aglsetup.sh -f -m raspberrypi4 -b build-${AGL_BRANCH}-rpi4 agl-demo'
alias agl-rpi4-devel='cd $AGL_TOP; source $AGL_SDK/meta-agl/scripts/aglsetup.sh -f -m raspberrypi4 -b build-${AGL_BRANCH}-rpi4 agl-demo agl-devel'
#alias agl-rpi4-devel-all='cd $AGL_TOP; source $AGL_SDK/meta-agl/scripts/aglsetup.sh -f -m raspberrypi4 -b build-${AGL_BRANCH}-rrpi4 agl-demo agl-devel agl-all->
alias agl-rpi4-html5='cd $AGL_TOP; source $AGL_SDK/meta-agl/scripts/aglsetup.sh -f -m raspberrypi4 -b build-${AGL_BRANCH}-rrpi4 agl-demo agl-devel agl-image-graphical-html5'
alias agl-cache='mkdir -p ${AGL_SDK}-cache/downloads;mkdir -p ${AGL_SDK}-cache/sstate-cache;ln -s ${AGL_SDK}-cache/downloads downloads; ln -s ${AGL_SDK}-cache/sstate-cache sstate-cache'
alias bb-demo='time bitbake agl-demo-platform'
alias bb-html5='time bitbake agl-demo-platform-html5'
# 下面指令添加 Yacto 和 AGL的源镜像服务
alias bb-addmirrors='sed -i "s@#SSTATE_MIRRORS ?= \"f@SSTATE_MIRRORS ?= \"f@g" conf/local.conf ; sed -i "s@#SSTATE_MIRRORS += \"f@SSTATE_MIRRORS += \"f@g" conf/local.conf'
#alias bb-makelink='ln -s /media/psf/AllFiles/Volumes/Work/AGL/sstate-cache sstate-cache;ln -s /media/psf/AllFiles/Volumes/Work/AGL/downloads downloads'
4.2 toolchain 安裝
# AGL marlin 文档只说要:
# - git 1.8.3.1 以上
# - tar 1.2.7 以上
# - python 3.4 以上
# - gcc5 以上
# - curl 加上 yacto 的需求
# yacto说 ubuntu 下要安装(我加上 curl, 比AGL说的多了zstd等。。。):
# (ubuntu22.04 使用 pylint 包更名/取代 pylint3 包)
sudo apt install gawk wget git diffstat unzip texinfo gcc build-essential chrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev pylint xterm python3-subunit mesa-common-dev zstd liblz4-tool curl -y
# 使用 python3 取代系统预设的 python2
mkdir -p ~/bin
ln -s /usr/bin/python3 ~/bin/python
4.3 repo 安裝
mkdir -p ~/bin
export PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
# 设定缺省的 git 的用户账号邮箱。repo是用 git 管理/下载工程的。
git config --global user.email "cyue12@me.com"
git config --global user.name "cyue12"
4.4 執行 alias 設置的工程與 bitbake 烘焙 AGL
# 拉取 repo 工程(根據 $AGL_TOP $AGL_BRANCH $AGL_SDK ,將工程拉到指定位置)
agl-create
# 建立樹莓派需要的 build環境
agl-rpi4
# 把 download 和 sstate 目錄獨立,方便備份並節省不同設置下的下載時間
agl-cache
# 運行 bitbake 建立 agl-demo-platform
bb-demo
除了官方的 AGL_TOP,加上了 AGL_BRANCH 和 AGL_SDK 兩個變數。
此外,我用 alias 建立了幾個別名,來簡化build工作,流程如下:
- agl-create : 從 repo 拉出當前 AGL_BRANCH 的 SDK (scripts)。
- agl-rpi4-devel : 建立樹莓派 demo + devel 的 build 目錄,之後將在此目錄build。
- agl-cache: build目錄下指向我的 cache位置,這樣不同的工程不必重複下載已下載的 sourcecode。
- bb-demo: 用 bitbake 建立 demo code (qt版GUI)。
RAM 24G、DISK 320G 可以編譯成功 demo
部分 code 需要大量的 RAM 來 build。 我的32GB筆記本的WSL2 預設使用16GB的RAM。可以另開 terminal,用 top 來看系統現況。比如 mozjs 需要 6GB,多工時可能fail,需要多 bitbake幾次。。。
4.5 燒錄鏡像到 TF Card
使用樹莓派官網的鏡像燒錄器將鏡像燒錄到TF卡即可運行。剛烘焙好的鏡像位置在:
<BUILD DIR>/tmp/deploy/images/raspberrypi4-64/agl-demo-platform-raspberrypi4-64.wic.xz
樹莓派4下的 AGL demo 不支持 USB Boot,只能用傳統的 SD Card Boot。
留言