Linux 内核 dtb 与 dtbo
Posted
技术标签:
【中文标题】Linux 内核 dtb 与 dtbo【英文标题】:Linux kernel dtb vs dtbo 【发布时间】:2016-11-28 18:04:46 【问题描述】:我正在为设备开发设备驱动程序。除了编写设备驱动程序之外,我还想知道什么以及何时需要它 - 设备树 blob (dtb) 或设备树覆盖 (dtbo)。
是否可以动态插入 dtb(使用 dtc 编译器编译后)并测试驱动程序(可动态加载)。
对于静态构建 dtb,除了设备驱动程序的 Kconfig 之外,我还必须处理 dtb 文件的任何 Kconfig。
【问题讨论】:
我认为下面链接中的内核文档应该可以帮助您理解,lxr.free-electrons.com/source/Documentation/devicetree/… 也可以参考 gist.github.com/bodokaiser/6854708。看起来 DTBO 与 DTB 类似,唯一的区别是它可以在运行时添加节点。我对这件事不太了解。 【参考方案1】:您没有提到这是什么平台,但我假设它是广泛使用设备树进行硬件描述的架构之一,例如ARM、PPC 以及您实际上需要 devicetree。
设备树覆盖需要用户空间的支持,以覆盖管理器的形式,该管理器知道在运行时要加载哪些覆盖。除非您的设备处于可能会消失的非常动态的环境中,否则在大多数情况下,您需要一个简单的硬编码设备树。
编写驱动程序后,您需要定义compatible property 来告诉内核何时加载此驱动程序,然后在arch/<foo>/boot/dts/*/*
下的设备树(.dts/.dtsi)文件中添加一个最能描述您的板的节点.
例如请参阅此兼容的registration 以及一组特定于 SoC 的设备树 1、2、3 中的相应硬件描述。这个驱动程序通过在兼容标志后面添加特定于 SoC 的功能,适用于所有这些 SoC。
【讨论】:
以上是关于Linux 内核 dtb 与 dtbo的主要内容,如果未能解决你的问题,请参考以下文章
RK3399平台开发系列讲解(内核子系统篇)2.27DTB (of API)解析
RK3399平台开发系列讲解(内核设备树篇)4.21设备树二进制文件DTB解析