无效选择:在 YOCTO 构建中'kernel_add_dts'



参数有什么问题,是没有kernel_add_dts子命令。

每当我尝试运行时,都会出现以下错误$recipetool kernel_add_dts元本地/path/to/my.dts

recipetool: error: argument <subcommand>: invalid choice: 'kernel_add_dts' (choose from 'edit', 'create', 'newappend', 'appendfile', 'appendsrcfiles', 'appendsrcfile', 'setvar')
usage: recipetool [-d] [-q] [--color COLOR] [-h] <subcommand> ...

使用recipetool按照以下语法向自定义层添加新的设备树:

recipetool appendsrcfile -wm (MACHINE) (PATH/TO/LAYER) virtual/kernel (PATH/TO/DTS) 'arch/${ARCH}/boot/dts/(YOUR_DTS_NAME).dts'

详细信息:

  • (MACHINE(:您的构建机器名称
  • (PATH/TO/LAYER(:将创建带有新DTS的linux-xx_%.bbappend文件所在层的路径
  • (PATH/TO/DTS(:新DTS文件的路径
  • (YOUR_DTS_NAME(:DTS文件名

重要提示:

如果默认设备树名称与您要添加的名称相同,则这不是问题,如果不是,请确保将其添加到KERNEL_DEVICETREE变量中,以便将其与启动分区中的所有DTS文件一起提供。

KERNEL_DEVICETREE += "(NEW_DTS_NAME).dtb"

之后,您可以停止Uboot(如果您正在使用Uboot(,并使用指定新的DTS文件

setenv fdt_file (NEW_DTS_NAME).dtb
saveenv (If you want to save it for every boot)

请运行">printenv";以确保">fdt_file";变量的名称。

实际运行测试:

recipetool appendsrcfile -wm imx8mmddr3lval /home/talel/Desktop/final_git/meta-node virtual/kernel /home/talel/Desktop/example.dts 'arch/${ARCH}/boot/dts/example.dts'
...
NOTE: Writing append file /home/talel/Desktop/final_git/meta-node/recipes-kernel/linux/linux-imx_%.bbappend
NOTE: Copying /home/talel/Desktop/example.dts to /home/talel/Desktop/final_git/meta-node/recipes-kernel/linux/linux-imx/imx8mmddr3lval/example.dts

新的bbappend文件是:

$ cat /home/talel/Desktop/final_git/meta-node/recipes-kernel/linux/linux-imx_%.bbappend
SRC_URI += "file://example.dts;subdir=git/arch/${ARCH}/boot/dts"
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
PACKAGE_ARCH = "${MACHINE_ARCH}"

带";虚拟/内核";它将检测提供它的内容(linux-imx,linux-yocto,…(,并创建linux-imx_%.append文件。

-w标志将创建"_%"对于任何版本号。

避免对DTS文件进行任何修补的解决方案:

如果你的Linux内核有补丁,如果你用新的修改来更新DTS,这些修改会覆盖补丁所期望的一些行,那么它们就会失败,所以你可以用两种方法干净地完成:

bitbake virtual/kernel -c cleansstate
bitbake virtual/kernel -c patch

现在所有补丁都已应用,请转到tmp/work//linux-(提供者(//git和:

git add .
git commit -m "commiting old patches"

现在编辑DTS文件并:

git add arch/../boot/dts/../myplatform.dts
git commit -m "changes"
git format-patch -1 -o /path/to/meta-custom/recipes-kernel/linux/files

现在将其添加到/path/to/meta custom/recipes kernel/linux/linux-(PROVIDER(_%.bbappend:

SRC_URI_append = " file://patch_file.patch"

或者,另一种方法是在补丁完成后添加您的最终DTS:

SRC_URI_append = " file://myplatform.dts"
do_configure_append(){
cp ${WORKDIR}/myplatform.dts ${S}/arch/(ARCH)/boot/dts/....
}

并将您的myplatform.dts复制到/path/to/meta custom/recipes kernel/linux/文件中。

现在,这是您的最后一个DTS文件。

删除recipetool添加的内容:

事实上,recipetool中没有undo子命令,您只需要删除recipeool部署的文件,recipeool复制您指定的文件并创建一个bbappend文件,因此删除这两个文件。

示例:您使用recipetool添加Example.dts文件,recipeool将sample.dts制到:

meta-custom/recipes-kernel/linux/(MACHINE)/example.dts

并创建了bbappend文件,在该文件中向SRC_URI变量添加了example.dts

如果你需要保留bbappend文件,因为你正在以其他方式使用它,只需修改它并删除recipetool添加的行,该行包含:

SRC_URI ... "file://example.dts ..."

最新更新