Yocto Project開發(八):Linux Kernel 開發

本文介紹使用Yocto Project Linux內核時要執行的幾項常見任務。這些任務包括爲主機開發系統準備內核開發,準備層,修補內核,配置內核等。內核開發最好使用devtool而不是通過傳統的內核工作流方法來完成,下面會介紹這兩個方案的信息。

使用devtool準備開發

  • 初始化BitBake環境
     $ cd ~/poky
     $ source oe-init-build-env
  • 準備local.conf文件:默認情況下,MACHINE變量設置爲“qemux86”,如果你在32位模式下爲QEMU仿真器構建,則可以正常運行。但是,如果不是,則需要在構建目錄中找到MACHINEconf/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開發內核

下面這個過程中的步驟展示瞭如何使用可擴展SDKdevtool對內核進行打補丁。

  • 使用以下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"
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章