新手疑问
阅读量: 101
阅读人次: 102
Linux Kernel 是什么时候加载 DTB 的?
Linux Kernel 源码中一些函数的前缀为 fdt_、of_,它们分别代表什么意思?
FDT(Flattened Device Tree):是设备树源文件(.dts)编译后得到的二进制数据格式,存在于内存中,是“原始数据”。字面意思是“扁平设备树”。所谓“扁平”,是指它在内存中是一段连续的、线性的数据,通过特定的结构(如头、节点块、属性块等)来描述一个树形结构。可以把它想象成一个被序列化后的数据流。在内核启动的最初阶段,内核需要直接解析这段原始的二进制数据。这个阶段的函数通常以 fdt_ 为前缀。
OF(Open Firmware):是内核运行时用来表示和管理设备树的内部数据结构。在启动早期,内核会调用 unflatten_device_tree() 等函数,将 FDT 的二进制数据解析、转换并构建成一个树形的、链接起来的内核数据结构。这个结构中的每个设备节点用一个 struct device_node 来表示。of_ 开头的函数就是用来操作这颗已经在内核内存中建立好的设备树。它们提供了更高级、更易用的接口。这个 API 的设计来源于 Open Firmware 标准。该标准定义了一种跨架构的描述硬件的方法。虽然大多数运行 Linux 的 ARM 设备并没有物理上的 Open Firmware 固件,但 Linux 内核借鉴并实现了这套设备树接口。