Device Tree(设备树基础一)

Device Tree
📋
1. device tree的基本单元是node。
2. 这些node被组织成树状结构,除了root node,每个node都只有一个parent。
3. 一个device tree文件中只能有一个root node。
4. 每个node中包含了若干的property/value来描述该node的一些特性。
5. 每个node用节点名字(node name)标识,节点名字的格式是node-name@unit-address。
在一个树状结构的device tree中,要想唯一指定一个node必须使用full path,例如/node-name-1/node-name-2/node-name-N。

📋
1)属性值是text string或者string list,用双引号表示。例如device_type = "memory"
 
2)属性值是32bit unsigned integers,用尖括号表示。例如#size-cells = <1>
 
3)属性值是binary data,用方括号表示。例如binary-property = [0x01 0x23 0x45 0x67]
📋
1. device tree用于HW platform识别,runtime parameter传递以及硬件设备描述。chosen节点并没有描述任何硬件设备节点的信息,它只是传递了runtime parameter。
 
2. aliases 节点定义一些设备节点full path的缩写。
 
3. 系统中有一个interrrupt tree的根节点,device1、device2以及PCI host bridge的interrupt line都是连接到root interrupt controller的。PCI host bridge设备中有一些下游的设备,也会产生中断,但是他们的中断都是连接到PCI host bridge上的interrupt controller(术语叫做interrupt nexus),然后报告到root interrupt controller的。
 
4. pinctrl0是一个缩写,他是/pinctrl@56000000的别名。这里同样也是使用了Labels and References机制。
 
pinctrl

📋
   device-node-name{
   //定义该device自己的属性
    pinctrl-names= "sleep","default","idle";
    pinctrl-0 = &xxx_State_sleep;
    pinctrl-1 = &xxx_state_default;
    pinctrl-2 = &xxx_state_idle;
}
pinctrl-0 pinctrl-1 pinctrl-2 .....表示了该设备的一个个状态,这里我们定义了三个pinctrl-0 pinctrl-1 pinctrl-2,数字0、1、2就是pinctrl-names中对应的字符串数组的index。其中pinctrl-0就是“sleep”状态,pinctrl-1就是“default”状态,pinctrl-2就是“idle”状态。而xxx_state_sleep,xxx_state_default,xxx_state_idel就是驱动具体的pin配置项了,需要在pinctrl设备节点处定义:
 
pinctrl@e01b0000{
      pinctrl-names = "default";
      pinctrl-0 = <&state_default>;
 
      state_default:pinctrl_default{
      };
 
      xxx_state_sleep:xxx_sleep{
         xxx_mfp{
            actions,groups = "fmp1_3_1spi0_ss","mfp1_3_1_spi0_miso","mfp1_5_4";
            actions,function = "spi0";
         };
       };
 
Pinctrl子系统在加载时,会调用pinctrl_dt_to_map函数将dts文件中有关pinctrl的配置项解析出来,并根据dts各驱动节点对pinctrl的引用关系,将phandle挂到各个驱动的device tree子节点,各个驱动就可以通过自己的dev句柄获得pinctrl的配置了。
 
📋
serial@50000000 {  
        …… 
        pinctrl-names = "default"; 
        pinctrl-0 = <0x2 0x3>; 
    };
 
该serial device只定义了一个state就是default,对应pinctrl-0属性定义。pinctrl-0是一个句柄(phandle)列表,每个句柄指向一个pin configuration。0x2对应上节中的uart0-data节点,0x03对应uart0-fctl 节点,也就是说,这个串口有两种配置,一种是从gph bank中的第一个和第二个GPIO pin引出,另外一个是从gph bank中的第8个和第9个GPIO pin引出。
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嵌入式空白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值