工程师笔记之DTBO相关问题讲解

Comake Online


作者| kk


DTBO(DTB Overlay,设备树块覆盖)用于在 DTB的基础上添加或修改节点信息。它可以配置 ODM和OEM特有的设备节点,使这些配置与 SoC 隔离,从而让配置与更新更加方便灵活。



01

DTBO语法及常见用法介绍



首先本质上dtbo其实也是一个dtb文件,都是通过dtc工具编译出来的,它们甚至使用的dtc编译命令都是一样的。



可见在编译dtb和dtbo时的“input format”均是dts,“output format”均是dtb。


dtbo和dtb的主要差异是在其dts的写法上,dtbo的dts需要添加/plugin/;以表示该文件在编译时允许对不存在的解决做未定义引用。



例如:



DTB overlay是以node为单位的,并且需要被overlay的node需要在其node name前添加:,例如本例中的my_node。在dtbo中则是通过&\来引用要被overlay的节点,再去覆盖、新增property或者新增子节点。


其原理是:当调用dtc编译dtb时,如果额外地传入了"-@"参数,dtc会在最终的dtb中生成__symbols__节点,该节点中会收集所有带label的节点的在设备树中位置信息,格式= "";,形如:



DTB Overlay支持的行为及写法:


1 覆盖

2 追加


3 子节点的新增、追加和覆盖



02

如何确定DTBO是否加载成功



开机log提示:



那么我们如何确保我们的新增或者想要覆盖的节点新增成功呢?


我们可以查看/proc/devices-tree下对应节点的子节点是否有新增。例如:再csi中新增csi_sr3_lane_pn_swap节点,在dtbo完成overlay之后就可以在csi节点下找到该子节点。



那么我们如何确保我们的新增或者想要覆盖的节点覆盖成功呢?


我们可能需要查看当前外设对应的设备树里面配置的信息,比如分辨率、时钟等. status、bus-width、name、max-frequency等 上面的属性,有些是string类型,有些是int类型。对于string类型,我们只需要找到对应的文件,直接cat,就能获取对应的信息。对于int类型,我们只需要找到对应的文件,通过hexdump来获取,以vif_sr0_mipi_mode为例, hexdump出来的信息如下:



hexdump出来的信息如上:


第一列0000000、0000004表示偏移量(可以自己去dump一个几十K的文件就明白了) 其他:0000 0600是数据。


可以参考覆盖前和覆盖后的数据差异知道是否有覆盖成功。



03

如何开启dtbo功能



SigmaStar平台的DTB overlay都是在U-boot中完成的,所起开关以及相关的配置都是在U-boot的Kconfig中配置。


Uboot下:



每个Kconfig的作用参考其help信息,其中CONFIG_SSTAR_BUILTIN_KERNEL_DTB这一项的作用是将对builtin DTB的支持关闭。


例如:


其中CONFIG_SSTAR_UBOOT_DTB_OVERLAY用于使能U-boot DTB overlay功能, 


CONFIG_SSTAR_KERNEL_DTB_OVERLAY用于使能Kernel DTB overlay功能。


Kernel下:


Kernel设计的Kconfig并不多,最主要的是将builtin DTB的功能关闭,使Kernel接受并使用由U-boot传递过来的设备树。



例如:




04

如何单独编译烧录DTBO分区



目前在SigmaStar的Kernel中已经将dtbo、dtbo.img的制作整合成了一个kernel的build targe:dtbo_image,其定义位于kernel根目录的makefile。



所以基于kernel的环境,在kernel的根目录下执行:make dtbo_image,即会在当前目录生成dtbo.image.


手动release dtbo.image到imge包中,将名字修改为dtbo,替换原本image中的dtbo文件,在uboot下利用网络升级,使用命令estar scripts/[[dtbo.es即可完成dtbo的烧录替换。



05

如何利用DTBO修改padmux



为什么在利用dtbo功能修改padmux属性时,会出现其他bsp功能mode出错的情况?


dtbo功能只能完成对节点的追加覆盖, 在dtbo文件中对padmux操作其下的schematic子节点(数组属性的子节点,保存有一些IO的mode choose信息)时,只能对schmatic完成覆盖功能,即dtb_overlay文件中的schematic属性将会完全替代主设备树中的schematic属性。


所以我们在修改dtbo文件中修改padmux时,需要一并copy所有主设备树中padmux下的schmatic中所有其他我们不需要修改的配置,这样才会在改到我们自己想要修改的内容的同时,不影响到其他bsp功能。


END.


如果您对相关问题感兴趣,欢迎进入Comake社区开发论坛互动交流,或咨询官方客服。


推荐阅读:《社区资源汇总》



扫码进入论坛

原厂答疑|产品选型|官方资源



扫码咨询客服

资料下载|社区商店购买


点击阅读原文↓,进入作者个人主页


X 提交 下一题

查看更多