本文介紹使用Yocto Project Linux
內核時要執行的幾項常見任務。這些任務包括爲主機開發系統準備內核開發,準備層,修補內核,配置內核等。內核開發最好使用devtool
而不是通過傳統的內核工作流方法來完成,下面會介紹這兩個方案的信息。
使用devtool
準備開發
- 初始化
BitBake
環境
$ cd ~/poky
$ source oe-init-build-env
- 準備
local.conf
文件:默認情況下,MACHINE
變量設置爲“qemux86
”,如果你在32位模式下爲QEMU
仿真器構建,則可以正常運行。但是,如果不是,則需要在構建目錄中找到MACHINE
的conf/local.conf
文件中 正確設置 變量 。 - 爲修補程序創建圖層:
$ cd ~/poky/build
$ bitbake-layers create-layer ../../meta-mylayer
- 把圖層通知
BitBake
構建環境
$ cd ~/poky/build
$ bitbake-layers add-layer ../../meta-mylayer
- 構建可擴展
SDK
$ cd ~/poky/build
$ bitbake core-image-minimal -c populate_sdk_ext
- 安裝可擴展
SDK
$ cd ~/poky/build/tmp/deploy/sdk
$ ./poky-glibc-x86_64-core-image-minimal-i586-toolchain-ext-2.7.1.sh
- 設置新終端以使用可擴展
SDK
:必須要打開一個新的終端來使用新的SDK
,不能使用之前使用的BitBake shell
。
$ source ~/poky_sdk/environment-setup-i586-poky-linux
- 構建全新鏡像:準備在內核上工作的最後一步是使用
devtool
在剛剛爲SDK
設置並初始化的新終端中構建初始鏡像:
$ devtool build-image
準備一個Layer
- 創建圖層的結構:
conf
目錄保存配置文件,recipes-kernel
目錄保存追加文件和最終補丁文件。
$ cd $HOME
$ mkdir meta-mylayer
$ mkdir meta-mylayer/conf
$ mkdir meta-mylayer/recipes-kernel
$ mkdir meta-mylayer/recipes-kernel/linux
$ mkdir meta-mylayer/recipes-kernel/linux/linux-yocto
- 創建層配置文件:移動到
meta-mylayer/conf
目錄,創建layer.conf
文件:
# We have a conf and classes directory, add to BBPATH
BBPATH .= ":${LAYERDIR}"
# We have recipes-* directories, add to BBFILES
BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
${LAYERDIR}/recipes-*/*/*.bbappend"
BBFILE_COLLECTIONS += "mylayer"
BBFILE_PATTERN_mylayer = "^${LAYERDIR}/"
BBFILE_PRIORITY_mylayer = "5"
- 創建內核配方附加文件:移動到
meta-mylayer/recipes-kernel/linux
目錄並創建內核的附加文件。本例使用linux-yocto-4.12
內核。因此,append
文件的名稱爲linux-yocto_4.12.bbappend
:
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
SRC_URI_append += "file://patch-file-one"
SRC_URI_append += "file://patch-file-two"
SRC_URI_append += "file://patch-file-three"
使用devtool
開發內核
下面這個過程中的步驟展示瞭如何使用可擴展SDK
和devtool
對內核進行打補丁。
- 使用以下
devtool
命令下載內核代碼:
$ source ~/poky_sdk/environment-setup-i586-poky-linux
$ devtool modify linux-yocto
- 修改內核源碼:
$ cd ~/poky_sdk/workspace/sources/linux-yocto
# Edit the init/calibrate.c file
- 構建更新的內核源代碼
$ devtool build linux-yocto
- 使用新的內核創建鏡像
$ cd ~
$ devtool build-image core-image-minimal
- 測試新的鏡像:
$ runqemu qemux86
# dmesg | less
- 提交修改源碼:
$ cd ~/poky_sdk/workspace/sources/linux-yocto
$ git status
$ git add init/calibrate.c
$ git commit -m "calibrate: Add printk example"
- 導出補丁並創建附加文件
$ devtool finish linux-yocto ~/meta-mylayer
- 使用修改後的內核構建鏡像:
$ cd ~/poky/build
$ bitbake core-image-minimal
使用傳統方式開發內核
- 我們可以在下載好的內核源碼目錄修改代碼:
$ cd poky/build/tmp/work/qemux86-poky-linux/linux-yocto/4.12.12+gitAUTOINC+eda4d18...
...967-r0/linux-qemux86-standard-build/source
# Edit the init/calibrate.c file
- 接着進入內核構建目錄:
$ cd poky/build/tmp/work/qemux86-poky-linux/linux-yocto/4.12.12+gitAUTOINC+eda4d18...
...967-r0/linux-qemux86-standard-build/
- 使用可擴展
SDK
來構建開發內核:
$ source ~/poky_sdk/environment-setup-i586-poky-linux
$ make menuconfig
$ make
- 提交修改源碼:
$ cd poky/build/tmp/work/qemux86-poky-linux/linux-yocto/4.12.12+gitAUTOINC+eda4d18...
...967-r0/linux-qemux86-standard-build/source
$ git status
$ git add init/calibrate.c
$ git commit -m "calibrate: Add printk example"