【问题标题】:How to setup an own device tree for a RaspberryPI in yocto?如何在 yocto 中为 RaspberryPI 设置自己的设备树?
【发布时间】:2017-11-25 21:53:00
【问题描述】:

我喜欢在我的 RPi 项目中禁用和启用一些引脚。 它们是 GPIO 6、GPIO 5 和 GPIO 26。我喜欢在自己的内核驱动程序中使用这些 PIN。

对于这个项目,我通过 GPIO 连接了一个简单的电路板。最小系统是通过 yocto 构建的。我喜欢更改设备树文件以禁用/启用 GPIO。

我需要更改或制作我自己的 dts 文件。为此,我认为我需要:

  1. 找到原始 RPi dts
  2. 修补它或创建我自己的 dts
  3. 将其添加到 layer.conf 中
  4. 通过追加将文件添加到内核配方

我该怎么做?或者我在哪里可以找到来源?

实际上,我正在努力寻找我正在使用的 RPi2 的 dts 文件。我正在检查“raspberrypi2-poky-linux-gnueabi”配方结果(并没有找到任何文件)。

我没有找到任何教程如何设置 yocto + meta-raspberrypi + 自己的 dts。如果我们能找出必要的步骤,那就太好了。

【问题讨论】:

    标签: raspberry-pi yocto device-tree


    【解决方案1】:

    我不相信这个问题已经得到很好的回答,所以让我花几分钟时间记录一下我为向 yocto 构建添加设备树覆盖所做的工作。

    这是一个多问题的过程。

    我将做一些假设: * 您在 shell 中获取 oe-init-build-env,并在终端中手动构建 bitbake(或者您知道如何使用等效工具进行构建) * 您知道(或已经在学习)device trees 的基础知识...

    1. 从您自己的元层开始。我的在 github 上。
    2. 您需要创建一个*-overlay.dts 源文件。您可以从一个简单的占位符开始,然后将它(字面意思)填充到您的系统中任何地方。在下一步中,我们将使用 bitbake 将其导入您的元层,以执行一些暂存操作以及不适合我们的操作。
    3. recipetool appendsrcfile -wm rpi /path/to/your-layer-meta virtual/kernel /path/to/your-overlay.dts 'arch/${ARCH}/boot/dts/overlays/your-overlay.dts

    此时,您应该最终得到一个带有适当 bbappend 的 $MACHINE 类型的 -wm(rpi,如上)的 recipes-kernel/linux 目录,准备将设备树源文件复制到正确的位置让 bitbake 在构建内核时找到它。但它仍然不会包含在您的内核构建中。

    我们需要将覆盖引用添加到KERNEL_DEVICETREE 变量,在将涵盖以下范围的位置:linuxbootfiles 和来自 meta-raspberrypi 的sdcard_image-rpi.bbclass

    1. 在步骤 3 中创建的 linux bbappend 中,添加 KERNEL_DEVICETREE += "overlays/your-overlay.dtbo" 以使 linux 内核构建包含您的 dts 作为要编译成 dtbo 的内容。

    2. 要让 sdcard_image-rpi.bbclass 复制文件,您需要将 KERNEL_DEVICETREE =+ "overlays/your-overlay.dtbo" 添加到您的图像配方中。

    3. 要使叠加层处于活动状态,您需要创建一个recipes-bsp/bootfiles/rpi-config_git.bbappend,您可以在其中附加一个do_deploy 步骤以将dtoverlay=your 行添加到config.txt

    我将我的层用于多个项目,所以我觉得可以让 dts 与每个内核一起编译,但只将它复制到我的 image 配方将它添加到 KERNEL_DEVICETREE 的图像中。为了进一步确保我不会让这些东西干扰我不希望它们进入的图像,我的 rpi-config 附加有一个测试,看看我是否应该将 dtoverlay 行添加到 config.txt

    当然,这一切都假设您将使用自己的本土 DTS,而不从内核来源的 DTS 开始。该过程基本相同,但您可以修补现有的,或复制它,或在您的 linux 配方中做任何您想做的事情。

    我希望这会有所帮助!我知道这是一个老问题。

    【讨论】:

    • 只是为了向其他人澄清,您的 DTS 文件必须具有“-overlay.dts”后缀。但是在设置 KERNEL_DEVICETREE 变量时,您在没有“-overlay”后缀的情况下引用它 - 例如如果文件名为“something-overlay.dts”,则 KERNEL_DEVICETREE 将包含“overlays/something.dtbo”。否则将无法编译。
    • KERNEL_DEVICETREE 变量上的 cmets 很少。首先 KERNEL_DEVICETREE += "overlays/your-overlay.dtbo" 行只能在您的 layer.conf 文件中添加一次,因此您不必重复代码。然后我的 meta-raspberrypi KERNEL_DEVICETREE 设置在机器 conf 文件中,使用 ??= 运算符包含所有必要的设备树。这意味着如果您执行“KERNEL_DEVICETREE +=”,则惰性运算符 ??= 将不会生效。因此,您可能想要复制分配,使用 = 运算符执行此操作,然后将您的过度添加到列表末尾。
    【解决方案2】:

    首先你需要找到你的 yocto 项目使用的内核,配方是 linux-raspberry.bb 或类似 linux-*.bb 的东西。首选内核可能设置在您的local.confmachine.confPREFERRED_PROVIDER_virtual/kernel ?= "linux-raspberry" 这是通过“rpi-base.inc”包含的“meta-raspberrypi/conf/machine/include/rpi-default-providers.inc”间接设置的

    找到后,看一下recipe,克隆内核的git仓库,在右侧分支,在右侧SRCREV重置。

    下载后,dts 文件位于/path/of/my/kernel/linux-raspberry/arch/arm/boot/dts/。您可以找到内核配方中使用的设备树文件的名称,local.confmachine.conf,变量为 KERNEL_DEVICETREE = "..."

    对于选择的 meta-raspberry 和 rpi2,dts 文件可以在<path to build dir>/linux-raspberrypi2-standard-build/source/arch/arm/boot/dts/ 中找到。源目录是 git 源的链接目录。

    您可以通过创建 dtsi/dts 文件来添加新的 dtb(不要忘记在 Makefile 中添加它)。

    创建一个补丁,将其添加到内核配方中:

    SRC_URI += "file://0001-mypatch.patch"
    

    并将这样的补丁文件放入您的元中

    ├── files
    │     └── 0001-mypatch.patch
    └── linux-raspberry.bb
    

    修改 KERNEL_DEVICETREE 变量以添加您的新 dtb。

    现在您可以对内核/映像进行 bitbake,您的新 dtb 将被创建。

    【讨论】:

      猜你喜欢
      • 2019-01-26
      • 1970-01-01
      • 2021-09-14
      • 2018-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多