如何在yocto中为RaspberryPI设置自己的设备树?

时间:2017-06-22 14:33:27

标签: raspberry-pi yocto device-tree

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

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

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

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

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

    其实我很难找到我正在使用的RPi2的dts文件。我正在检查" raspberrypi2-poky-linux-gnueabi"配方结果(并且找不到任何文件)。

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

2 个答案:

答案 0 :(得分:2)

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

找到后,查看配方,在右侧分支上克隆内核的git存储库,然后在右侧SRCREV重置。

下载后,dts文件位于/path/of/my/kernel/linux-raspberry/arch/arm/boot/dts/。您可以使用变量local.conf

找到内核配方machine.confKERNEL_DEVICETREE = "..."中使用的设备文件的名称

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

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

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

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

并将补丁文件放在元

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

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

现在你可以咬你的内核/图像,你的新dtb就会被创建。

答案 1 :(得分:1)

我不认为这个问题已经得到了很好的回答,所以让我花几分钟时间并记录一下我为将设备树覆盖添加到yocto版本中所做的工作。

这是一个多问题的过程。

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

的基础知识
  1. 从您自己的元层开始。我的不在github上。
  2. 您需要创建一个*-overlay.dts源文件。您可以从一个简单的占位符开始,然后将其塞满(在字面上)任何地方在您的系统上。下一步,我们将使用bitbake将其导入到您的meta层,以进行一些分阶段以及不适合我们的事情。
  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

在这一点上,您应该以一个recipes-kernel/linux目录结尾,并带有一个针对$MACHINE类型的-wm(如上所示的rpi)的bbappend,准备复制设备树将源文件放入适当的位置,以便在构建内核时进行bitbake查找。但是它仍然不会包含在您的内核构建中。

我们需要将覆盖参考添加到KERNEL_DEVICETREE变量中,该覆盖范围应覆盖以下范围:linuxbootfiles和meta-中的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配方中进行任何操作。

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