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的主要内容,如果未能解决你的问题,请参考以下文章

arm Linux 驱动LED子系统 测试

RK3399平台开发系列讲解(内核子系统篇)2.27DTB (of API)解析

RK3399平台开发系列讲解(内核设备树篇)4.21设备树二进制文件DTB解析

dtb是啥文件?怎么打开

RK3399平台开发系列讲解(内核设备树原理)3.9内核启动阶段获得dtb位置指针过程介绍

第01节_从源头分析_内核head.S对dtb的简单处理