如何在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/目录下即可实现修改。


How to use own an own device tree and modified kernel config in Yocto?
Modifying the BusyBox config in OpenEmbedded

你可能感兴趣的:(Yocto)