1. 程式人生 > >如何在Yocto中使用自己的裝置樹dts和核心配置

如何在Yocto中使用自己的裝置樹dts和核心配置

如連結 ,之前一直是直接在Yocto專案核心中修改dts,然後編譯核心和我自己的層。
但是慢慢發現,修改的內容連自己都不記得,並且,一旦核心更新,核心dts又需要重新修改一遍,這樣會很繁瑣。
於是,找到方法來在Yocto中使用自己的裝置樹dts和核心配置。

1.自定義自己的layer
切換到fsl-community-bsp/sources 目錄,使用命令新增一個meta-bdgk layer:

yocto-layer create bdgk

命令提示一路回車確認即可。
新增完空layer後,在meta-bdgk目錄下,用如下命令建立目錄樹:

mkdir -p recipes-bdgk
/images

在新建立的目錄下,建立一個bdgk-image.bb檔案,檔案內容填寫如下:

require recipes-core/images/fsl-image-multimedia.bb

此時,我是使用fsl-image-multimedia.bb為模板,給bdgk layer新增一個映象目標,後續對映象的自定義配置也是針對此映象目標來操作,而不是直接去修改預定義的 fsl-image-multimedia 。
如果要編譯 bdgk 的映象,切換到 build 編譯目錄下,並修改 conf/bblayers.conf 檔案,按照已有的格式,將我們建立的 meta-bdgk layer 新增到 BBLAYERS 變數中,如

\
  ${BSPDIR}/sources/meta-bdgk \

輸入如下命令進行映象編譯:

bitbake bdgk-image

2.新增自己的裝置樹dts
可以使用如下命令:

recipetool appendsrcfile -wm your-machine-name path/to/meta-local virtual/kernel /path/to/your.dts 'arch/${ARCH}/boot/dts/your.dts'

在我的專案中,your-machine-name=imx6ulevk,
path/to/meta-local=~/repo/fsl-community-bsp/sources/meta-bdgk,
/path/to/your.dts=~/repo/fsl-community-bsp/sources/meta-bdgk/recipes-kernel/linux/linux-fslc-imx/imx6ulevk/imx6ul-14x14-evk.dts,
‘arch/$

{ARCH}/boot/dts/your.dts’=’arch/${ARCH}/boot/dts/imx6ul-14x14-evk.dts’。

可以發現在/meta-bdgk/recipes-kernel/linux/的目錄下,生成一個.bbappend檔案,裡面我自己的dts路徑已經新增到SRC_URL中。下面,我需要在這個.bbappend檔案中新增如下命令:

KERNEL_DEVICETREE += "imx6ul-14x14-evk.dtb"

此時,修改meta-bdgk/recipes-kernel/linux/linux-fslc-imx/imx6ulevk/目錄下的.dts檔案,就可以實現核心的裝置樹配置。

注意:

recipetool appendsrcfile -wm your-machine-name path/to/meta-local virtual/kernel /path/to/your.dts 'arch/${ARCH}/boot/dts/your.dts'

命令只需要使用一次,之後對dts的修改可以直接對其修改即可。
3.新增自己的核心配置
我使用配置框架來配置自己的核心。手動建立一個配置框架fragment,使用命令配置核心:

bitbake -c menuconfig virtual/kernel

使用‘diffconfig’來建立一個fragment,該fragment裡面有配置的最新修改專案,命令如下:

bitbake -c diffconfig virtual/kernel

然後,新增這個fragment到自己的核心中,使用命令:

recipetool appendsrcfile -wWm your-machine-name meta-local virtual/kernel /path/to/your.cfg

在我的專案中,your-machine-name=imx6ulevk,
meta-local=~/repo/fsl-community-bsp/sources/meta-bdgk,
/path/to/your.cfg=~/repo/fsl-community-bsp/build/tmp/work/imx6ulevk-poky-linux-gnueabi/linux-fslc-imx/4.1-1.0.x+gitAUTOINC+59b38c323b-r0/fragment.cfg。

此時,在meta-bdgk/recipes-kernel/linux/linux-fslc-imx/imx6ulevk/目錄下會出現fragment.cfg檔案。重新編譯核心就可以實現核心配置。
注意:

recipetool appendsrcfile -wWm your-machine-name meta-local virtual/kernel /path/to/your.cfg

命令只需要使用一次,之後可以直接將diffconfig生成的fragment.cfg複製到meta-bdgk/recipes-kernel/linux/linux-fslc-imx/imx6ulevk/目錄下即可實現修改。