對於嵌入式開發(驅動和應用都涉及),需要經常編譯u-boot,kernel,dtb,rootfs。
編譯方法,我常用的有兩種:
1 部署交叉編譯工具鏈,單獨編譯(構建rootfs時,複雜一點)
2 應用yocto構建,至於什麼是yocto參見官網 https://www.yoctoproject.org/
以下在ubuntu os 下說明通過yocto的編譯方法。
一 部署yocto :
- 1 需要裝一些必要的軟件工具:
sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib \ build-essential chrpath socat libsdl1.2-dev
sudo apt-get install libsdl1.2-dev xterm sed cvs subversion coreutils texi2html \ docbook-utils python-pysqlite2 help2man make gcc g++ desktop-file-utils \ libgl1-mesa-dev libglu1-mesa-dev mercurial autoconf automake groff curl lzop asciidoc
ubuntu 14.04以上:
sudo apt-get install u-boot-tools
- 2 設置repo utility
mkdir ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo 這個可能不成功,需要翻牆
chmod a+x ~/bin/repo
export PATH=~/bin:$PATH
可以將export PATH=~/bin:$PATH 放置到.bashrc的末尾。
- 3 Yocoto Project Setup
git config --global user.name "Your Name"
git config --global user.email "Your Email"
git config --list
- 4 創建目錄名稱
mkdir imx-yocto-bsp (目錄名稱隨意)
cd imx-yocto-bsp
repo init -u https://source.codeaurora.org/external/imx/imx-manifest -b imx-linux-sumo -m imx-4.14.98-2.0.0_ga.xml 替換下面的目錄:否則不翻牆不成功
repo init -u https://source.codeaurora.org/external/imx/imx-manifest -b imx-linux-sumo -m imx-4.14.98-2.0.0_ga.xml --repo-url=https://mirrors.tuna.tsinghua.edu.cn/git/git-repo
repo sync
執行成功後:所包含內容如下
- 5 開始編譯
DISTRO=fsl-imx-fb MACHINE=imx6ull14x14evk source fsl-setup-release.sh -b build-fb
bitbake fsl-image-qt5-validation-imx
重開一個終端或是機器reboot後重新編譯需要:
source setup-environment <build-dir>
----
bitbake core-image-minimal -c populate_sdk
note:上述build-fb是唯一可執行bitbake(a python script)的地方
----
- 6 定製kernel
1) 通過工具鏈編譯
首先通過yocto環境編譯出一個可用工具鏈,爲了節省時間編譯一個最小的文件系統
如:DISTRO=fsl-imx-fb MACHINE=mx6ull14x14evk bitbake core-image-minimal -c populate_sdk
編譯成功之後會生成一個用於部署工具鏈的腳本,執行即可部署工具鏈到/opt目錄下。注意,環境變量指在當前shell生效,可以添加到bashrc中。
安裝toolchain:
source <toolchain install directory>/environment-setup-<toolchain script>
獲得linux sourcecode
git clone https://source.codeaurora.org/external/imx/linux-imx -b imx_4.14.98-2.0.0_ga
git checkout -b rel_imx_4.14.98-2.0.0_ga
make menuconfig
make
2)通過yocto
首先編譯一個目標開發板的kernel如下:
MACHINE=<> bitbake linux-imx
創建一個用戶定製層
- 7 定製uboot
1)部署工具鏈單獨編譯
2)通過yocto構建
類似kernel步驟
- 8定製自己的rootfs
1)部署工具鏈單獨編譯(針對單獨應用)
2)通過yocto構建
類似kernel步驟
DISTRO=fsl-imx-fb MACHINE=imx6ull14x14evk source fsl-setup-release.sh -b build-custom
未完待續......
這裏指記錄通過yocto步驟:
example:
在已部署的bsp環境下cd sources
參考meta-fsl-release/imx/meta-sdk這一層結構創建定製層。
有幾點需要注意:
在編譯目錄下 conf中的bblayers.conf中加入meta-<custom>
加速編譯步驟:幾個編譯目錄共享cache