本主题介绍如何创建、构建和部署设备树覆盖层。有关设备树覆盖的介绍,请参见设备树文件和覆盖

设备树覆盖格式

一个设备树覆盖包含修改这可以应用于现有的设备树blob。设备树覆盖的格式与常规的略有不同.dts.dtsi文件:

示例设备树叠加

               
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
#include /dts-v1/;/插件/;/ {fragment@0 {target-path = "/";__overlay__ {foo {compatible = "custom,foo";状态= "ok ";gpio = <&gpio3 14 GPIO_ACTIVE_HIGH>;};};};fragment@1 {target = <&bar>; __overlay__ { my-boolean-property; status = "okay"; }; }; };

让我们来看看不同的部分:

设备树头

#include  /dts-v1/;/插件/;

设备树覆盖是独立构建的,与它们要修改的设备树没有任何连接。因此,它们必须像普通的设备树文件一样包含头和说明符。

根节点和片段


                
6 7 8 9 10 11 12 13 14 15 16
/ {fragment@0{[…]]};fragment@1{[…]};…};

设备树覆盖必须有一个根节点。在根节点中,必须插入片段:要修改的原始设备树的每个节点对应一个片段。

片段的结构

带绝对路径的片段

                
7 8 9 10 11 12 13 14 15 16
fragment@0 {Target-path = "/";__overlay__ {foo {compatible = "custom,foo";状态= "ok ";gpio = <&gpio3 14 GPIO_ACTIVE_HIGH>;};};};
带有相对路径的片段

                
18 19 20 21 22 23 24
fragment@1 {目标= <&bar>;__overlay__ {my-boolean-property;状态= "ok ";};};

每个片段有两个元素:

  • 以下两个属性之一:

    • 目标路径绝对路径到片段将要修改的节点,或者

    • 目标相对路径到片段将要修改的节点别名(前缀为&符号)。

  • 一个节点覆盖使用要应用于引用节点的修改。这些修改可以是:

    • 新节点(它们被添加)

    • 新属性(添加)

    • 现有属性(它们将被新值覆盖)

      覆盖只能执行建设性的更改,例如添加或修改节点或属性。它们不能用于执行破坏性更改,例如删除节点或属性。

在上面的例子中:

  • fragment@0是添加节点喷火,带有几个属性,到根节点/

  • fragment@1是否使用别名修改节点酒吧的几个属性,这些属性可以是新的,也可以是现有的。

创建设备树覆盖

在Linux内核源代码树中创建一个设备树覆盖层,常规设备树文件就位于其中。对于ConnectCore 8M Nano,这是拱/ arm64 / boot / dts /数码网络。在此例中,设备树叠加文件名为_ov_custom_foo.dts。有关Digi设备树覆盖命名约定,请参见文件命名约定

构建设备树覆盖

要让Linux内核构建设备树覆盖,请将其添加到拱/ arm64 / boot / dts /数码网络/ Makefile随着扩展dtbo

Dtb-y += _ov_custom_foo.dtb . y

要使Digi Embedded Yocto将覆盖视为值得复制到部署目录的图像工件,请将覆盖文件名添加到KERNEL_DEVICETREE变量conf / local.conf文件:

conf / local.conf
KERNEL_DEVICETREE_append“数码网络/ _ov_custom_foo.dtbo”
注意,在向数组变量追加值时需要留白。

这不仅将编译的设备树覆盖blob复制到部署目录,而且还将文件添加到* .boot.vfat图像,以及平台的其他设备树文件。

部署设备树覆盖

有两种方法可以将设备树覆盖blob部署到目标:

  • 将文件复制到linux分区

  • 程序完整的工件图像到linux分区

将文件拷贝到linux分区

从U-Boot

.dtbo文件在TFTP公开文件夹中。然后使用updatefile命令,将其复制到linux分区:

=>Updatefile Linux TFTP _ov_custom_foo.dtbo . Updatefile

从操作系统

  1. 瞄准你的目标,重新装上linux分区为读写。(默认情况下挂载为只读)。

    #Mount -o remount,rw /mnt/linux
  2. 将文件从主机复制到重新挂载的文件夹中的目标。

将映像工件编程到linux分区

有关更新完整映像工件的说明,请参见从U-Boot程序固件

启用设备树覆盖

要使用设备树覆盖,请在U-Boot中执行以下步骤:

  1. 将覆盖文件名添加到U-Boot变量的逗号分隔列表中覆盖。(它最初可能是空的):

    =>环境编辑覆盖编辑:_ov_custom_foo. dbo
  2. 运行dboot命令从eMMC启动:

    =>启动Linux MMC

有关Digi设备树覆盖机制的详细信息,请参见设备树覆盖机制