博客:
http://blog.youkuaiyun.com/qq_28992301/article/details/53321610
设备树概述:
描述设备信息和资源,并由内核展开
设备树文件:
1. DTS 设备树描述文件,位于 arch/(board)/boot/dts里
其中,通用部分为 dtsi ,通用部分层层包含,上一级比下一级通用范围最广,最上面是 skeleton.dtsi 。而 dts 是最后的针对某一种芯片的设备树
此文件有类似 C 的语法如宏和头文件的引用,且会经过预编译
2. DTC 将 DTS 编译为 DTB 的工具,位于 scripts/dtc 中
对于 arch/(board)/boot/dts/Makefile 文件选择编译哪个 dts
3. DTB 被编译后的设备树文件
应用:
3.1 放在内存的某个位置,有bootloarder引导读取传送给内核。uboot 编译时在.config文件加入 #define CONFIG_OF_LIBFDT。使得可以使用fdt相关命令写入读取设备树
3.2 和zImage编译成镜像。在编译时使能 COMFIG_ARM_APPENDED_DTB
4. binding 描述设备细节的 txt 文档。位于/Documentation/devicetree/bindings 中
如果有在 compatible 中加入新的字符串,则需要添加相应文档解释??
设备树文件简述:
可分为节点和属性。节点又分为父子节点。
以下是常用属性:
0. label的命名:名字,地址
firmware@0203F000
1. compatible属性,其字符串可有多个,第一个最为特定,以后都依次较少但通用兼容性增大
后面的字符串涵盖的范围会比前面的更广
compatible = "insignal,origen4412", "samsung,exynos4412", "samsung,exynos4";
2. #address-cells = <1>; 决定地址数量
#size-cells = <0>; 决定地址长度数量
表现于 <reg> 中
例子:
regulators {
compatible = "simple-bus";
#address-cells = <1>;
#size-cells = <0>;
mmc_reg: regulator@0 {
reg = <0>;
};
};
3. 地址映射表 ranges
其也关联于
#address-cells = <1>;
#size-cells = <0>;
例子:
ranges = <0 0 0x10100000 0x10000>
表示片选0,便宜0,映射到0x10100000,映射大小为0x10000
4.中断属性:
interrupts - 中断号,出发方式等
interrupts-names :中断名
interrupts-cells:中断数量
5. GPIO
gpio-cell:gpio数量
xxx-gpios = <&gpiox,0> 用x号gpio,0表示高电平有效,1表示低电平有效
dtiver中使用设备树:
driver用结构体描述 compatible 对应的名字
然后用相应设备的设备树匹配函数匹配资源