Linux kernel Yocto设备树覆盖

Linux kernel Yocto设备树覆盖,linux-kernel,beagleboneblack,yocto,bitbake,Linux Kernel,Beagleboneblack,Yocto,Bitbake,我正在用Yocto制作一个Beaglebone黑色 以PWM驱动程序的实现为指导,我无法将PWM添加到设备树中 最好的解决方案是像Saad Ahmad先生所做的那样创建一个设备树覆盖,但我不知道如何使用Yocto来实现这一点 我没有使用capemgr,但我正在使用。我也有自定义层元tfe,目前持有的pwm驱动器和一些例子。该层还定义了一个新的bitbake图像配方: include recipes-core/images/core-image-base.bb IMAGE_INSTALL +=

我正在用Yocto制作一个Beaglebone黑色

以PWM驱动程序的实现为指导,我无法将PWM添加到设备树中

最好的解决方案是像Saad Ahmad先生所做的那样创建一个设备树覆盖,但我不知道如何使用Yocto来实现这一点

我没有使用capemgr,但我正在使用。我也有自定义层元tfe,目前持有的pwm驱动器和一些例子。该层还定义了一个新的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驱动器的.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内核目录如下所示:

.
├── 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
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}/dts:"

KERNEL_DEVICETREE_beaglebone += " \
    bbb-pwm.dtb \
"
目录linux-stable_4.*/都具有相同的结构,以反映meta bbb中的镜像结构

我的.bbappend文件如下所示:

.
├── 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
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

编辑:这里是

当您想要使用自定义设备树并编辑
内核设备树
变量时,设备树源(*.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
变量添加这些文件:

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变量?它是linux内核中设备树源的默认文件夹。我怀疑还有其他解决办法,因为这是一个固定的地方。设备树可以在运行时使用,所以我想它必须在那里。关于文件已经存在的原因是什么?有没有办法强制复制或者我必须制作补丁?@FranzForstmayr这两种方法都是可能的。如果使用相同的文件名创建新文件,则如果您的层的优先级高于其他设备树文件所在的层,则您的文件具有优先级。