【问题标题】:invalid choice: 'kernel_add_dts' in yocto build无效选择:yocto build 中的“kernel_add_dts”
【发布时间】:2021-09-04 13:54:36
【问题描述】:

论点有什么问题, 是否没有 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> ...

【问题讨论】:

    标签: linux yocto bitbake recipe


    【解决方案1】:

    使用 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}"
    

    使用“virtual/kernel”,它将检测提供它的内容(linux-imx、linux-yocto、...)并创建 linux-imx_%.append 文件。

    -w 标志将为任何版本号创建“_%”。

    避免为 DTS 文件添加任何补丁的解决方案:

    如果您的 Linux 内核有补丁,如果您使用新修改来更新 DTS,这些补丁会覆盖补丁预期的某些行,它们将会失败,因此您可以通过 2 种方式干净地完成它:

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

    现在所有补丁都已应用,转到 tmp/work/../linux-(PROVIDER)/../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/files。

    现在,这是您的最终 DTS 文件。

    删除 recipetool 添加的内容:

    其实recipetool里面没有undo子命令,你只需要删除recipetool部署的文件,recipetool复制你指定的文件并创建一个bbappend文件,把这两个文件删除即可。

    示例:您使用 recipetool 添加 example.dts 文件,recipetool 将 example.dts 复制到:

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

    并创建了 bbappend 文件,其中将 example.dts 添加到 SRC_URI 变量中。

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

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

    【讨论】:

    • 谢谢!!我们必须在哪个文件中添加:KERNEL_DEVICETREE += "(NEW_DTS_NAME).dtb" ???还有我的DTS其实是平台修改后的DTS,可以吗?同样在您的上述答案中 SRC_URI += .....example.dts 。正确吗?或者它必须是我的 dts 的名称。请澄清。
    • 如果您使用的是自定义机器 (meta-custom/conf/machine/custom-machine.conf) 或如果您使用的是位于官方层的机器,您可以将其添加到 local.conf,SRC_URI 由 recipetool 自动生成,example.dts 被编译到新的自定义 linux 配方中,检查运行测试输出。您需要指定 DTS 的路径,它会根据您的 DTS 生成它。
    • 奇怪的是我得到了这个:修补文件 arch/arm/boot/dts/myplatform.dts Hunk #1 FAILED at 11. Hunk #2 FAILED at 27. Hunk #3 FAILED at 49. Hunk #4 65 号失败。5 号帅哥在 73 号失败。6 号帅哥在 88 号失败。
    • 为什么要打补丁?myplatform.dts 名称与平台 dts 相同。为什么不采用这个新的?
    • 当您更改 DTS 时,另一个补丁以特定方式预期某些行,但由于您更改了它而失败,我编辑了回复,添加了您最终想要的 DTS 文件,尽管有补丁。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    • 2013-09-23
    • 1970-01-01
    相关资源
    最近更新 更多