设备树属性解读

设备树包含节点和属性:
	1.属性就是键值对:值可以为空或包含一个任意字节流,基本数据表示形式:
		文本字符串(无结束符):可以用双引号表示,例如:a-string-property="A string"
		cells: 32为无符号整数,例如:second-child-property=<1>
		二进制数据:用方括号 例如:a-byte-data-property=[0x01 0x23 0x34]
		混合表示:使用逗号连在一起,例如:mixed-poperty="a string",[0x01 0x23 0x34]
		字符串列表:用逗号连在一起,例如string-list="red fish","blue fish"
	2.节点包含属性和子节点

compatible属性: 有序的字符串列表,一般表示设备名及厂家
chosen:内核参数,initrd镜像地址
在这里插入图片描述
上图设备树包含:

  • 一个单独的根节点:/
  • 两个node1的子节点:child-node1 和 child-node2
  • 一堆分散在设备树中的属性
设备树解析
1.包含dtsi文件
2.节点名称:<名称>[@设备地址]:
其中“名称”不超过31位的简单ascii字符串;
设备地址:访问设备的主地址,并且也体现在reg属性中
同级节点命名最好唯一
3.系统中每个设备都表示为一个设备节点,每个节点都有一个compatible属性,该属性是操作系统用来决定使用哪个设备驱动来绑定到一个设备上的关键,格式:“制造商,型号”其余字符表示与它兼容的设备:

在这里插入图片描述
4.可编址设备用以下属性将地址信息编码进设备树:
reg
#address-cells
#size-cells

  • 每个可编址设备都有 reg,它是一个元组表,形式:reg=<地址1 长度1 [地址2 长度2] [地址3 长度3]>. 每个元组都表示该设备使用的一个地址范围。 每个地址值是一个或多个32位整数列表,成为cell,长度值也可以是一个cell列表或者空。 父节点的#address-cells 和 #size-cells 属性用来声明各个字段的cell的数量==也就是说解释一个reg属性需要用到父节点的#address-cells 和 #size-cells的值;
    例如:
    在这里插入图片描述
    i2c主机控制器是一个父节点,地址长度为一个32位整数,地址长度为0. s5m8767_pmic是i2c主机控制器下的一个子节点,地址为0x66;
    如果一个节点有reg属性,那么该节点名字就必须包含设备地址=reg属性里边第一个值
设备地址
1.内存映射设备的地址表示方式:
	1.1 内存映射的设备有地址范围,32位用一个cell,64位用两个cell来指定地址值;
	1.2 基地址,偏移和长度,用两个cell表示
2.非内存映射设备:
	设备没被映射到内存,父设备的驱动程序会代表cpu执行间接访问,例如i2c设备,nadflash设备

3.地址转换ranges属性:
描述非根节点的直接子节点的地址域:
在这里插入图片描述
在这里插入图片描述
ranges由<子地址 父地址 子地址空间域大小>元组表示;所以以上<0 0x802000 0x1000>表示 子地址0被映射到父地址的 0x802000-0x802fff 处, 子节点即使用这个地址; 如果rangs是空 ,则子节点与父节点使用一个地址域:
在这里插入图片描述
6.描述中断连接要4个属性:
6.1 interrupt-controller: 空属性,用来定义一个接收中断的设备,即中断控制器
6.2#interrupt-cells:中断控制器节点的属性,声明了该控制器中cells个数,类似与#addres-cells
6.3 interrupt-parent: 设备节点属性,指向中断控制器,如果节点没有这个属性,就继承父节点的
6.4 interrupts: 中断指示符列表形式。对应设备上中断输出信号
在这里插入图片描述在这里插入图片描述
上边表示一个中断控制器,接收中断,中断指示符占3个cell
中断设备节点:
在这里插入图片描述
中断连接到 gic 中断控制器,继承父结点interrupt-parent属性=该设备产生的中断连接到 gic 控制器上
3个cell : ”pdma():pdma@12680000“节点的中断指示符"<0 35 0>",知其意需查看控制器文档 得知 ,第一个cell 是中断类型,0是SPI,,第二个 cell表中断号,第三表示中断触发类型,0为不关心;
7.aliases{ ;;;}表节点别名,因为引用节点需要全路径
8.chosen节点不代表设备,是给操作系统传递数据的地方;
9.设备特定数据
定义设备属性,可自由定义,需注意:
9.1 设备特定属性名字防止重复,需使用制造商前缀
9.2 属性和子节点含义需存档在binding文档中,方便驱动程序员解析:Documentation/devicetree/bindings/目录可以查设备属性含义
在这里插入图片描述

regulators {
    compatible = "simple-bus";
    #address-cells = <1>;
    #size-cells = <1>;
    reg_usb_otg1_vbus: regulator@0 {
    ...    //其他一些信息
    reg = <0x00001 0x01 0x000010 0x02>;
    };
};

上面的代码的解析为:
reg的起始地址为0x0001 大小为0x01
reg的起始地址为0x000010 大小为0x02

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值