device tree
devicetree 描述linux 系统设备资源,将数据与逻辑分离。
- DTS: device tree source 设备树源文件,dts 或 dtsi 后缀文件
- DTB: dtc 工具将dts 文件编译后生成的dtb 文件,内核启动时用
- dtc: 是一个c 语言写的工具,源码目录 linux_source/scripts/dtc/
uboot 在引导linux 启动时,将dtb文件导入内存,并将地址传给linux 内核。
dtb转换dts
查看最终生成的dts 设计
1 | kernel_source/scripts/dtc/dtc -O dts -o vexp.dts arch/arm/boot/dts/vexpress-v2p-ca9.dtb |
调试接口
- sysfs 节点: /sys/firmware/devicetree ,内核解析后的设备数据
- dtb 文件:/sys/firmware/fdt , 原始dtb 内容
内核解析流程
内核启动解析dtb 流程
1
2
3
4
5
6
7start_kernel() //init/main.c
{
setup_arch () //init/main.c
{
unflatten_device_tree() //driver/of/fdt.c
}
}sys/firmware/devicetree 节点生成
1 | do_basic_setup() // init/main.c |
devicetree 练习
针对dts 设计有单元测试,可以采用这里的内容练习devicetree 的接口
1 | // driver/of/unittest.c |