其他对设备树的描述:https://blog.csdn.net/u014650722/article/details/79076352
1.设备树
设备树是一种描述硬件资源的数据结构,它通过bootloader将硬件资源传给内核,使得内核和硬件资源描述相对独立。
Device Tree可以描述的信息包括CPU的数量和类别、内存基地址和大小、总线和桥、外设连接、中断控制器和中断使用情况、GPIO控制器和GPIO使用情况、Clock控制器和Clock使用情况。
另外,设备树对于可热插拔的设备不进行具体描述,它只描述用于控制该热插拔设备的控制器。
设备树的主要优势:对于同一SOC的不同主板,只需更换设备树文件.dtb即可实现不同主板的无差异支持,而无需更换内核文件。
(注:要使得3.x之后的内核支持使用设备树,除了内核编译时需要打开相对应的选项外,bootloader也需要支持将设备树的数据结构传给内核。)
2、设备树的组成和使用
设备树文件由dts和bindings组成:
bindings设备树用到的所有宏定义,都放到/include/dt-bindings目录下
dts分为dts和dtsi文件,dts是板级文件,dtsi是“平台文件”(SOC级),设备树编译器将dts和dtsi文件编译成dtb文件(apt-get install device-tree-compiler)
另外还有相关文档在Documentation/devicetree/下
3.设备树dts的基本构造
1 节点和根节点
{} 框起来的结构,称为节点;
/{} 在dts中最开头的,称为根节点。
节点的标准结构是xxx@yyy{…},
xxx是节点的名字,yyy则不是必须的,其值为节点的地址(寄存器地址或其他地址)。
节点可以包含属性和子节点。
2 属性
设备树学习的主要部分:设备树文件中属性的配置,驱动文件中调用设备树中的属性。
compatible--类似设备名称,(重要,用于与驱动匹配,与各子系统的关联)
reg,label,gpios,pwms,status等等
提取通用属性:
函数:struct property *of_find_property(const struct device_node *np, const char*name, int *lenp);
功能: of_find_property,提取指定属性的值;
参数 np:设备节点指针;
参数 name:属性名称;
参数 lenp:属性值的字节数;
返回值:成功,属性值的首地址;失败,NULL。