设备树相关知识

其他对设备树的描述:https://blog.youkuaiyun.com/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
Linux设备树(Device Tree)是一种数据结构,用于描述硬件配置信息。它最初是为了支持PowerPC架构的平台而设计的,后来被引入到ARM架构中,以解决不同平台之间硬件描述的差异性问题[^1]。 ### 设备树原理 设备树的核心思想是将硬件信息从内核代码中分离出来,使得同一份内核可以支持多种不同的硬件平台。设备树是一个包含节点和属性的数据结构,每个节点代表一个硬件组件,而属性则描述了该组件的具体信息。这种结构允许操作系统在启动时读取设备树中的信息,并据此初始化相应的硬件驱动程序[^1]。 ### 使用方法 设备树通常由`.dts`文件编写,这是一种文本格式的源文件,可以通过编译工具转换为二进制格式`.dtb`,供引导加载程序传递给内核使用。编写设备树时,需要了解目标硬件的详细规格,包括但不限于内存映射、中断控制器、DMA控制器等关键部件的信息。 例如,一个简单的设备树源文件可能看起来像这样: ```dts /dts-v1/; / { model = "Example Model"; compatible = "vendor,example-board"; chosen { bootargs = "console=ttyS0,115200 root=/dev/mmcblk0p2 rw"; }; cpus { #address-cells = <1>; #size-cells = <0>; cpu@0 { device_type = "cpu"; reg = <0>; compatible = "arm,cortex-a9"; }; }; memory@80000000 { device_type = "memory"; reg = <0x80000000 0x20000000>; }; }; ``` ### 开发指南 对于Linux设备树的开发,开发者需要熟悉设备树的语法以及如何将其集成到现有的内核构建过程中。此外,还需要理解如何通过设备树绑定文档来正确地描述特定硬件的功能。这些绑定文档通常位于内核源码树中的`Documentation/devicetree/bindings/`目录下,提供了详细的说明和示例。 为了更好地理解和实践设备树开发,建议参考官方文档和社区提供的教程,同时利用现有的开源项目作为学习资源。实际操作时,应该逐步修改并测试设备树配置,确保每次更改后都能正确引导系统并且所有硬件都被恰当地识别和初始化。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值