Yocto设备树覆盖层

5
我正在使用Yocto开发板Beaglebone Black上的IT技术。在使用此PWM驱动实现作为指南时,我无法将我的PWM添加到设备树中。最好的解决方案是像Saad Ahmad先生一样创建一个设备树覆盖层,但我不知道如何在Yocto中执行此操作。我没有使用capemgr,但我仍然在使用meta-bbb。我还有一个自定义层meta-tfe,其中包含pwm-driver和一些示例。该层还定义了一个新的bitbake镜像配方:
include recipes-core/images/core-image-base.bb

IMAGE_INSTALL += "\
        helloworld \
        hellokernel \
        bbb-pwm \
"

KERNEL_MODULE_AUTOLOAD += "\
        hellokernel \
        bbb-pwm \
"

export IMAGE_BASENAME = "tfe-image-base"

以下是pwm-driver的.bb文件:
DESCRIPTION = "PWM kernel module"
LICENSE = "GPLv2"
LIC_FILES_CHKSUM = "file://COPYING;md5=d41d8cd98f00b204e9800998ecf8427e"

PR = "r0"

inherit module

SRC_URI = "file://bbb-pwm.c \
    file://Makefile \
    file://COPYING \
"

S = "${WORKDIR}" 

有人知道怎么做吗?

编辑: 一位同事暗示我可以使用 .bbappend 文件,在 meta-bbb 中附加内核构建规则。因此,我按照这个方法操作,现在我的 recipes-kernel 目录看起来像这样:

.
├── bbb-pwm
│   ├── bbb-pwm.bb
│   └── files
│       ├── bbb-pwm.c
│       ├── COPYING
│       └── Makefile
├── hellokernel
│   └── {...}
└── linux
    ├── linux-stable_4.1
    │   └── {...}
    ├── linux-stable_4.1.bbappend
    ├── linux-stable_4.4
    │   └── {...}
    ├── linux-stable_4.4.bbappend
    ├── linux-stable_4.5
    │   └── dts
    │       ├── bbb-pwm.dts
    │       └── sc_pwm_P8_13-00A0.dtsi
    └── linux-stable_4.5.bbappend

所有的 linux-stable_4.*/ 目录结构都相同,以反映在 meta-bbb 中镜像的结构。

我的 .bbappend 文件看起来像这样:

FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}/dts:"

KERNEL_DEVICETREE_beaglebone += " \
    bbb-pwm.dtb \
"

然而,在进行比特烘焙时,会出现错误,提示bbb-pwm.dtb没有构建规则:

| make[3]: *** No rule to make target 'arch/arm/boot/dts/bbb-pwm.dtb'.  Stop.
| arch/arm/Makefile:333: recipe for target 'bbb-pwm.dtb' failed

编辑: 这里是sc_pwm_P8_13-00A0.dtsi

1个回答

4
当您想使用自定义设备树并编辑KERNEL_DEVICETREE变量时,设备树源文件(*.dts文件和*.dtsi文件)将在arch/arm/boot/dts中搜索(根据您的架构)。
在您的示例中,您的文件放置在一个单独的文件夹中,并且不会被bbappend文件获取。正确的层结构应该如下所示:
└── linux
    ├── linux-stable_4.5
    │   └── git
    │       └── arch
    │           └── arm
    │               └── boot
    │                   └── dts
    │                       ├── bbb-pwm.dts
    │                       └── sc_pwm_P8_13-00A0.dtsi
    └── linux-stable_4.5.bbappend

为了让bitbake识别新文件,必须通过bbappend文件中的变量进行添加:

SRC_URI += "file://git/arch/arm/boot/dts/bbb-pwm.dts"
SRC_URI += "file://git/arch/arm/boot/dts/sc_pwm_P8_13-00A0.dtsi"

谢谢。那个有点用(不过必须将路径更改为git/arch/arm/boot/dts,我会更正您的答案以反映这一点)。然而,这并不是非常便携。是否有Yocto/OE变量保存此路径? - Tom
1
这是Linux内核中设备树源代码的默认文件夹。我怀疑是否有其他解决方案,因为这是一个固定的位置。设备树可以在运行时使用,所以我想它必须在那里。 - h0ch5tr4355
文件已经存在怎么办?有强制复制的方法吗,还是我必须制作一个补丁? - Franz Forstmayr
@FranzForstmayr 两种方法都是可行的。如果您创建一个具有相同文件名的新文件,则您的文件具有优先权,前提是您的层比其他设备树文件所在的层具有更高的优先级。 - h0ch5tr4355

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接