本主题介绍如何创建、构建和部署设备树覆盖层。有关设备树覆盖的介绍,请参见设备树文件和覆盖。
设备树覆盖格式
一个设备树覆盖包含修改这可以应用于现有的设备树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
文件:
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
从操作系统
瞄准你的目标,重新装上linux分区为读写。(默认情况下挂载为只读)。
#Mount -o remount,rw /mnt/linux
将文件从主机复制到重新挂载的文件夹中的目标。
将映像工件编程到linux分区
有关更新完整映像工件的说明,请参见从U-Boot程序固件。
启用设备树覆盖
要使用设备树覆盖,请在U-Boot中执行以下步骤:
将覆盖文件名添加到U-Boot变量的逗号分隔列表中
覆盖
。(它最初可能是空的):=>环境编辑覆盖编辑:_ov_custom_foo. dbo
运行
dboot
命令从eMMC启动:=>启动Linux MMC
有关Digi设备树覆盖机制的详细信息,请参见设备树覆盖机制。