本文介紹使用Yocto Project Linux 內(nèi)核時(shí)要執(zhí)行的幾項(xiàng)常見任務(wù),。這些任務(wù)包括為主機(jī)開發(fā)系統(tǒng)準(zhǔn)備內(nèi)核開發(fā),準(zhǔn)備層,,修補(bǔ)內(nèi)核,配置內(nèi)核等,。內(nèi)核開發(fā)最好使用devtool 而不是通過(guò)傳統(tǒng)的內(nèi)核工作流方法來(lái)完成,,下面會(huì)介紹這兩個(gè)方案的信息。
使用devtool 準(zhǔn)備開發(fā)
$ cd ~/poky
$ source oe-init-build-env
- 準(zhǔn)備
local.conf 文件:默認(rèn)情況下,,MACHINE 變量設(shè)置為“qemux86 ”,,如果你在32位模式下為QEMU 仿真器構(gòu)建,,則可以正常運(yùn)行。但是,,如果不是,則需要在構(gòu)建目錄中找到MACHINE 的conf/local.conf 文件中 正確設(shè)置 變量 ,。 - 為修補(bǔ)程序創(chuàng)建圖層:
$ cd ~/poky/build
$ bitbake-layers create-layer ../../meta-mylayer
- 把圖層通知
BitBake 構(gòu)建環(huán)境
$ cd ~/poky/build
$ bitbake-layers add-layer ../../meta-mylayer
$ cd ~/poky/build
$ bitbake core-image-minimal -c populate_sdk_ext
$ cd ~/poky/build/tmp/deploy/sdk
$ ./poky-glibc-x86_64-core-image-minimal-i586-toolchain-ext-2.7.1.sh
- 設(shè)置新終端以使用可擴(kuò)展
SDK :必須要打開一個(gè)新的終端來(lái)使用新的SDK ,不能使用之前使用的BitBake shell ,。
$ source ~/poky_sdk/environment-setup-i586-poky-linux
- 構(gòu)建全新鏡像:準(zhǔn)備在內(nèi)核上工作的最后一步是使用
devtool 在剛剛為SDK 設(shè)置并初始化的新終端中構(gòu)建初始鏡像:
$ devtool build-image
準(zhǔn)備一個(gè)Layer
- 創(chuàng)建圖層的結(jié)構(gòu):
conf 目錄保存配置文件,recipes-kernel 目錄保存追加文件和最終補(bǔ)丁文件,。
$ 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
- 創(chuàng)建層配置文件:移動(dòng)到
meta-mylayer/conf 目錄,創(chuàng)建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"
- 創(chuàng)建內(nèi)核配方附加文件:移動(dòng)到
meta-mylayer/recipes-kernel/linux 目錄并創(chuàng)建內(nèi)核的附加文件。本例使用linux-yocto-4.12 內(nèi)核,。因此,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 開發(fā)內(nèi)核
下面這個(gè)過(guò)程中的步驟展示了如何使用可擴(kuò)展SDK 和devtool 對(duì)內(nèi)核進(jìn)行打補(bǔ)丁,。
- 使用以下
devtool 命令下載內(nèi)核代碼:
$ 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"
- 導(dǎo)出補(bǔ)丁并創(chuàng)建附加文件
$ devtool finish linux-yocto ~/meta-mylayer
$ cd ~/poky/build
$ bitbake core-image-minimal
使用傳統(tǒng)方式開發(fā)內(nèi)核
- 我們可以在下載好的內(nèi)核源碼目錄修改代碼:
$ 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
- 接著進(jìn)入內(nèi)核構(gòu)建目錄:
$ cd poky/build/tmp/work/qemux86-poky-linux/linux-yocto/4.12.12+gitAUTOINC+eda4d18...
...967-r0/linux-qemux86-standard-build/
- 使用可擴(kuò)展
SDK 來(lái)構(gòu)建開發(fā)內(nèi)核:
$ 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"
|