英文:
yocto - create a meta layer with a bbappend file adding dts flle to raspberry pi kernel
问题
以下是翻译好的内容:
我正在使用 Yocto Kirkstone。我的目标是将一个dts文件添加到树莓派Linux内核中。我遵循了这个答案,最终创建了一个新的元层和这个目录结构:
meta-main-layer
meta-raspberrypi
meta-mydts/
├── conf
│ └── layer.conf
├── COPYING.MIT
├── README
└── recipes-kernel
└── linux
├── linux-raspberrypi
│ └── raspberrypi4-64
│ └── my.dts
└── linux-raspberrypi_5.15.bbappend
以及 linux-raspberrypi_5.15.bbappend 文件:
SRC_URI += "file://mydts.dts;subdir=git/arch/arm/boot/dts/overlays"
FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
PACKAGE_ARCH = "${MACHINE_ARCH}"
KERNEL_DEVICETREE += "mydst.dtb"
meta-main-layer
是包含图像定义的层,它确实包括 meta-mydts
,并且在其中添加了以下内容:
IMAGE_INSTALL:append += " mydts"
但出于某种原因,yocto
报错,说找不到目标 mydts
,如下所示:
ERROR: Nothing RPROVIDES 'mydts' (but meta-main-layer/recipes-core/images/image-64.bb RDEPENDS on or otherwise requires it)
NOTE: Runtime target 'mydts' is unbuildable, removing...
Missing or unbuildable dependency chain was: ['mydts']
如何将具有Linux内核补丁的元层变成可构建的内容?我漏掉了什么?
英文:
I'm working with Yocto Kirkstone. My goal is to add a dts file to the raspberry pi linux kernel. I followed this answer and ended up with a new meta-layer and this directory tree:
meta-main-layer
meta-raspberrypi
meta-mydts/
├── conf
│   └── layer.conf
├── COPYING.MIT
├── README
└── recipes-kernel
└── linux
├── linux-raspberrypi
│   └── raspberrypi4-64
│   └── my.dts
└── linux-raspberrypi_5.15.bbappend
and the linux-raspberrypi_5.15.bbappend:
SRC_URI += "file://mydts.dts;subdir=git/arch/arm/boot/dts/overlays"
FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:"
PACKAGE_ARCH = "${MACHINE_ARCH}"
KERNEL_DEVICETREE += "mydst.dtb"
meta-main-layer
is the layer with image definition, it does include the meta-mydts
with
IMAGE_INSTALL:append += " mydts"
but for some reason yocto
complains saying that there's no target mydts
as below:
ERROR: Nothing RPROVIDES 'mydts' (but meta-main-layer/recipes-core/images/image-64.bb RDEPENDS on or otherwise requires it)
NOTE: Runtime target 'mydts' is unbuildable, removing...
Missing or unbuildable dependency chain was: ['mydts']
How can a meta-layer with linux kernel patches be turned into something that is buildable? What am I missing?
答案1
得分: 1
你应该阅读Yocto文档RPROVIDE。
基本上,你希望Bitbake能够识别你的元层。
当你希望在最终目标中部署一个包时,需要使用IMAGE_INSTALL:append
。例如,如果在my_helloworld.bb
中有SRC_URI += "helloworld.c"
,那么IMAGE_INSTALL:append = my_helloworld
将在最终目标中添加你的二进制文件helloworld.o
。
现在你可以理解尝试将整个元层附加到IMAGE_INSTALL:append
是不合理的。
使你的元层被Bitbake“发现”的正确方法是进入你的构建目录,在conf/bblayers.conf
文件中的BBLAYERS
变量中添加你的元层路径。
还要注意KERNEL_DEVICETREE += "mydst.dtb"
中存在语法错误。
它应该是KERNEL_DEVICETREE += "mydts.dtb"
。
英文:
You should read Yocto documentation RPROVIDE.
Basically you want Bitbake to recognize your meta-layer.
IMAGE_INSTALL:append
is needed when you want to deploy a package in your final target. For example you have SRC_URI += "helloword.c"
in my_helloword.bb
then
IMAGE_INSTALL:append = my_helloworld
will add your binary helloword.o
in final target.
Now you can understand trying to IMAGE_INSTALL:append
a whole meta-layer is nonsense.
The proper way to make your meta-layer "discoverable" by bitbake is to go in your build directory, add in your conf/bblayers.conf
file the path of your meta-layer in the variable BBLAYERS
.
Also note that there is a syntax error in KERNEL_DEVICETREE += "mydst.dtb"
It should be KERNEL_DEVICETREE += "mydts.dtb"
答案2
得分: 1
我已经找到问题并决定在这里发布步骤。这基于@void_brain的答案和@bvarner的帖子。以下说明适用于Yocto Kirkstone 4.01。
.dts*文件名必须包括-overlay.dts
后缀,每个树莓派dt-overlay文件都必须遵循这个约定(步骤2)。请注意,Device Tree Blob或.dtbo*文件不再可以包含这个后缀(步骤3)。
要添加自定义**-overlay.dts*文件,请按照以下步骤操作:
-
首先,使用
source poky/oe-init-build-env
进入yocto项目的环境,以便访问bitbake
命令。稍后为**overlay-dts*文件创建一个新层:$ bitbake-layers create-layer meta-mydts
-
使用
recipetool
命令将**-overlay.dts文件导入新创建的meta层。它将创建recipes-kernel/linux目录,并包含一个linux-raspberrypi_%.bbappend文件。如果你的**-overlay.dts文件是为特定机器制作的,例如raspberrypi4-64
,请在-wm
参数中包括它的名称。recipetool appendsrcfile -wm raspberrypi4-64 . virtual/kernel path/to/mydts-overlay.dts 'arch/${ARCH}/boot/dts/overlays/mydts-overlay.dts'
-
在**.conf文件中添加
KERNEL_DEVICETREE:append = "overlays/mydts.dtbo"
,不包括-overlay
后缀,该文件可能是meta-mydts/conf/layer.conf*。这将告诉Yocto将你的**-overlay.dts文件构建成**.dtbo并将其包含在映像中。 -
在build/conf/bblayers.conf中包括
meta-mydts
层的路径,以便Yocto可以发现该层。
就是这样。要实现自动激活覆盖,请参考@bvarner的帖子。
编辑:
对我来说最有效的覆盖激活机制是使用RPI_EXTRA_CONFIG
变量。此变量应放在build/conf/local.conf
中,如下所示:
RPI_EXTRA_CONFIG:append = "\ndtoverlay=mydts\n"
另一个位置是包含有图像配方的项目层的layer.conf
。
英文:
I've figured out the problem and decided to post the steps here. This is based on @void_brain answer and @bvarner post. Below instructions are up to date with Yocto Kirkstone 4.01.
The *.dts file name has to include -overlay.dts
suffix, every raspberry pi dt-overlay file has to follow that convention (step 2). Keep in mind, that the Device Tree Blob or *.dtbo file can not include this suffix anymore (step 3).
To add a custom *-overlay.dts file, follow below steps:
-
First, get into the environment of the yocto project with
source poky/oe-init-build-env
to get access to thebitbake
command. Later create a new layer for the *overlay-dts file:$ bitbake-layers create-layer meta-mydts
-
Import the *-overlay.dts file to the freshly created meta-layer with
recipetool
command. It will create recipes-kernel/linux directories with a linux-raspberrypi_%.bbappend file. If your *-overlay.dts file is made for a specific machine, for exampleraspberrypi4-64
, include it's name with the-wm
parameter.recipetool appendsrcfile -wm raspberrypi4-64 . virtual/kernel path/to/mydts-overlay.dts 'arch/${ARCH}/boot/dts/overlays/mydts-overlay.dts'
-
Add
KERNEL_DEVICETREE:append = " overlays/mydts.dtbo"
without the-overlay
suffix to *.conf file, that can be meta-mydts/conf/layer.conf. This will tell Yocto to build your *-overlay.dts file into a *.dtbo and include it in the image. -
Include the path to
meta-mydts
layer in build/conf/bblayers.conf, to make the layer discoverable for Yocto.
That's about it. For automatic activation of the overlay look into the @bvarner post post.
Edit:
The overlay activation mechanism that worked the best for me is with the use of RPI_EXTRA_CONFIG
variable. This variable should be put in the build/conf/local.conf
, as below:
RPI_EXTRA_CONFIG:append = "\ndtoverlay=mydts\n"
The other location is layer.conf
of the layer of your project that has a recipe for the image.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论