自己不倒,别人推不倒。自己不想站起来,别人扶也扶不起来。
前言
-
当前新版本的 Linux 内核 设备驱动框架,与设备树(Device Tree)结合密切,整体 设备树的设备驱动框架,比较的庞大,但又非常的经典。
-
一个个的 设备树解析函数,都是前人【智慧】的结晶,了解 设备树的实现,了解设备树的解析,对Linux 设备驱动开发非常有利,并且可以大大提高开发编码能力
-
虽然Linux 内核庞大、开源,但是Linux 内核各个模块的实现都是经典,非常适合学习深造
设备树 dtb 文件
-
设备树 dtb 文件,由 设备树 源文件 (
dts
) 与 设备树头文件(dtsi
,其实还有 dt-bindings 中的类似于 C 语言的设备树头文件.h
)通过 dtc 工具 生成的。 -
设备树相关的规范:设备树并不是Linux 专用的,因为这是一个规范,只要符合规范,其他的系统,依旧可以使用 设备树。Linux 上设备树是当前比较完整的,并且开源、免费使用。
-
设备树规范可以通过 https://github.com/devicetree-org/devicetree-specification 获取到,当前版本是
devicetree-specification-v0.4.pdf
-
设备树 dtb 的文件组织构成
-
一个生成好的设备树 dtb,文件的头部内容,就是
struct fdt_header
,定义如下 -
Linux 内核
scripts\dtc\libfdt\fdt.h
->struct fdt_header
-
这里可以知道, dtb 文件 的头部,前四个字节,应该是
FDT_MAGIC 0xd00dfeed
-
通过二进制查看或者编辑 软件,查看一个设备树 dtb 文件,当前使用
EmEditor
- 这里还有设备树 dtb 文件的总大小,也就是 设备树 dtb 文件 第二个 32位(5-8字节)
- 设备树的其他信息,可以通过代码与 设备树规范、具体设备树 dtb 文件、设备树 源文件,查看对于,发现是一致的。这里就不再深入的分析
小结
-
本篇主要是需要了解一下 设备树 dtb 文件,因为这个文件有 bootloader u-boot 载入了内存,当然可以有系统直接读取 设备树 dtb 文件并解析,也就是操作系统的设备树,需要载入 设备树 dtb 文件
-
设备树 dtb 文件可以认为是 【扁平的】flat,如果需要方便的解析,需要【反扁平化】unflatten 操作,这个在 Linux 内核中,通过
unflatten_device_tree
进行设备树的展开操作,也就是把扁平的生成一个树形结构的设备树组织(内存中)
- 了解设备树 dtb (扁平设备树)的构成,可以对了解设备树加载、反扁平化 unflatten、解析等操作有利。