无效选择:yocto 构建中的 'kernel_add_dts'
invalid choice: 'kernel_add_dts' in yocto build
争论有什么问题,
是不是没有 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}"
使用“virtual/kernel”,它将检测提供它的内容(linux-imx,linux-yocto,...)并创建linux- imx_%.附加文件。
-w 标志将为任何版本号创建“_%”。
避免DTS文件打补丁的解决方法:
如果您的 Linux 内核有补丁,如果您使用覆盖补丁预期的某些行的新修改来更新 DTS,它们将失败,因此您可以通过两种方式干净地完成:
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_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}"
使用“virtual/kernel”,它将检测提供它的内容(linux-imx,linux-yocto,...)并创建linux- imx_%.附加文件。
-w 标志将为任何版本号创建“_%”。
避免DTS文件打补丁的解决方法:
如果您的 Linux 内核有补丁,如果您使用覆盖补丁预期的某些行的新修改来更新 DTS,它们将失败,因此您可以通过两种方式干净地完成:
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 ..."