完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
设备树是由一系列被命名的节点(Node)和属性(Property)组成。节点本身可包含子节点。设备树可描述的信息有:
. CPU的数量和类别 .内存基地址和大小 .总线和桥 .外设连接 .中断控制器和中断使用情况 .GPIO控制和GPIO使用情况 .时钟控制器和时钟使用情况 Bootloader会将设备树信息传递给内核。(Bootloader也需要支持将编译后的设备树传递给内核。uboot从V1.1.3开始支持设备树) 设备树文件一般放置在arch/arm/boot/dts目录中 DTS文件 一个dts文件对应一个ARM的设备 为了简化把SoC公用的部分或多个设备共用的部分一般提炼为.dtsi。类似于C头文件。其他设备对应的.dts就包括这个.dtsi。dtsi文件也可以包括其他dtsi文件 DTC(Device Tree Compiler) DTC是将.dts编译为.dtb的工具。DTC的源码位于内核的scripts/dtc中。在内核是能设备树的时候主机工具DTC会被编译出来。 DTB 经编译后的二进制设备树文件 设备树语法 DTS文件布局 /dts-v1/;// 版本 [memory reservations] // 格式为: /memreserve/ / { [property definitions] [child nodes] }; 节点 [label:] node-name[@unit-address] { [properties definitions] [child nodes] }; 标准属性 节点都是一堆属性组成,除了用户自定义的属性很多属性是标准属性。 1、compatible属性 compatible属性又称“兼容属性”。 一般驱动程序文件都会有一个 OF 匹配表,此 OF 匹配表保存着一些 compatible 值,如果设备节点的 compatible 属性值和 OF 匹配表中的任何一个值相等,那么就表示设备可以使用这个驱动 对于某个led,可能有A,B,C三个驱动程序都支持它。可以这样写 led{ compatible = "A", "B", "C"; }; 内核启动时会根据优先级A,B,C依次寻找 **根节点 compatible 属性:**用来选择哪一个“machine desc”(机器描述):一个内核可以支持machine A,也支持 machine B,内核启动后会根据根节点的 compatible 属性找到对应的machine desc 结构体,执行其中的初始化函数。 compatible 的值,建议取这样的形式:“manufacturer,model”,即“厂家名,模块名” 2、model model 属性与 compatible 属性有些类似,但是有差别。 compatible 属性是一个字符串列表,表示可以你的硬件兼容 A、B、C等驱动; model 用来准确地定义这个硬件是什么。 / { compatible = "samsung,smdk2440", "samsung,mini2440"; model = "jz2440_v3"; }; 它表示这个单板,可以兼容内核中的“smdk2440”,也兼容“mini2440”。 从 compatible 属性中可以知道它兼容哪些板,但是它到底是什么板?用 model 属性来明确。 3、status dtsi 文件中定义了很多设备,但是在你的板子上某些设备是没有的。这时你可以给这个设备节点添加一个 status 属性,设置为“disabled”: &uart1 { status = "disabled"; }; 4、#address-cells 和#size-cells 属性 #address-cells: address用多少个32位表示 #size-cells: size用多少个32位表示 这两个属性可以用在任何拥有子节点的设备中,用于描述子节点的地址信息 5、reg 属性 /dts-v1/; / { #address-cells = <1>; #size-cells = <1>; memory { reg = <0x80000000 0x20000000>; }; }; 6、 ranges ranges 属性值可以为空或者按照(child-bus-address,parent-bus-address,length)格式编写的数字矩阵 特殊节点 aliases 子节点 打开imx6dl.dtsi有内容如下: aliases { i2c3 = &i2c4; }; 单词 aliases 的意思是“别名”,因此 aliases 节点的主要功能就是定义别名,定义别名的目的就是为了方便访问节点。不过我们一般会在节点命名的时候会加上 label,然后通过&label来访问节点,这样也很方便,而且设备树里面大量的用&label 的形式来访问节点。``` ### chosen 子节点 chosen 并不是一个真实的设备,chosen 节点主要是为了 uboot 向 Linux 内核传递数据,重点是 bootargs 参数。一般.dts 文件中 chosen 节点通常为空或者内容很少 ## 内核解析DTB文件 Linux 内核在启动的时候会解析 DTB 文件,然后在/proc/device-tree 目录下生成相应的设备树节点文件。 原作者:llhm |
|
相关推荐
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
飞凌嵌入式ElfBoard ELF 1板卡-CAN编程示例之开发板测试
769 浏览 0 评论
该问题是用APP给芯海科技的CST92F25芯片发指令是出现的
2583 浏览 1 评论
849 浏览 0 评论
1641 浏览 1 评论
2551 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 07:10 , Processed in 0.627755 second(s), Total 71, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号