linux-kernel - Yocto 设备树覆盖

标签 linux-kernel beagleboneblack yocto bitbake

我正在使用 Yocto 开发 Beaglebone Black。

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

最好的解决方案是创建一个设备树覆盖,就像 Saad Ahmad 先生正在做的那样,但我不明白如何使用 Yocto 来做到这一点。

我没有使用capemgr,但我正在使用meta-bbb 。我还有自定义层 meta-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-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.*/都具有相同的结构,以反射(reflect) meta-bbb 中的镜像结构。

我的 .bbappend 文件如下所示:

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

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

但是,在进行 bitbaking 时,会出现错误,提示 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

最佳答案

当您想要使用自定义设备树并编辑 KERNEL_DEVICETREE 变量时,会在 arch/arm/中搜索设备树源(*.dts 文件和 *.dtsi 文件) 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"

关于linux-kernel - Yocto 设备树覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39326073/

相关文章:

linux - 一个线程获取信号量而另一个线程释放信号量的有效用例是什么?

linux - Beaglebone devm_pwm_get 返回 ENODEV

embedded-linux - linuxrc 的目的是什么,在 rootfs 中是否需要它?

mmap可以通过函数传递地址吗?

android - 通过 usb 电缆使用 android 智能手机控制 beaglebone black (linux)

linux - ../util-linux-2.28.1/schedutils/chrt.c :88:17: error: ‘__NR_sched_setattr’ undeclared (first use in this function)

yocto - u-boot 脚本允许选择要启动的 rootfs 部分 (RAUC)

linux - 最大进程数和最大 PID 值

linux - 新内核是否包含具有所有选项的所有补丁

linux - 当系统内存大于 8GB 时,为什么 linux 禁用磁盘写缓冲区?