文章目录
/dts-v1/; version
/ 根结点
model
model = “Qualcomm Technologies, Inc. IPQ807x/AP-HK14”;
从软件的层面讲model属性仅仅表示一个名字而已,没有更多的作用;
compatible
范围平台兼容,一般格式是"manufacturer,model”。按名称查找对应驱动,顺序查找。
例如:compatible = “qcom,ipq807x-hk14”, “qcom,ipq807x”;
去内核of表中匹配名为"qcom,ipq807x-hk14"的驱动程序,没有的话去找第二个,一次类推
#address-cells / #size-cells
前者表示“子节点”中“reg”属性所占用的长,后者表示“子节点”中“reg”
举例:
reg = <0x0 0x4e900000 0x0 0x01e00000>;
上述皆为0x2,即需要两个字长表示地址和范围
则0x0 0x4e900000表示寄存器起始地址为0x0+0x4e900000,子节点reg范围是0x0+0x01e00000
interrupt-parent= <&intc>;
子节点的中断属性
interrupt-controller 表示一个物理中断信息,需要驱动支持
interrupt-cells 表示用几个u32字长表示一个中断
interrupt-cells=<3>表示引用该控制器的节点的interrupts需要3个终端号,
interrupts = <GIC_PPI 7 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>; 如果上述参数定义未3,则此处需要3个u32来定义中断参数
aliases
内核加载会通过aliases节点读取具体的节点信息,如ethernet4 = “/soc/dp5”; 对应的是/soc/dp5{…}下的信息,进而加载相关设备
chosen
不是一个真是设备,用于uboot想kernel传递参数、数据等,比如bootargs参数
reserved-memory和memreserve
用于预留内存空间,作用相同,结构不同,以reserved-memory为例理解
如:表示预留0x5110…0x03700000范围的内存地址
reserved-memory{
qcn9000_pcie0@51100000 {
no-map;
reg = <0x0 0x51100000 0x0 0x03700000>;
};
};
no-map
reserved-memory有一些可选参数, 比如no-map, 如果使用了no-map, 那么这段区域执行memblock_remove, 反之执行memblock_reserve.
总结如下:添加no-map;-> 执行memblock_remove():从物理内存中提出,不作为共享内存被进程使用
不添加no-map,调用memblock_reserve() : 将该内存添加到reserve内存,即向其他进程表明该部分内存已经被使用
tlmm
gpio控制节点
例:tlmm: pinctrl@1000000{。。。}
pinctrl-0= <&btcoex_pins>;
定义了一个phandles的类别,每个phandles指向一个pinctrl的节点。表明该设备的工作状态
pingctrl-names = “default”: 便是一种工作状态,如果对应多个names,需要添加多个pinctrl-x,用于不同状态,
如下:
pinctrl-names = “default”, “sleep”;
pinctrl-0 = <&spi1_default>;
pinctrl-1 = <&spi1_sleep>;
drive-strength
驱动强度,越高驱动能力越强
bias-disable
同bias-disable=<0>; 也可以使用bias-pull-up;参数,作用相反
phy-reset-gpio= <&tlmm 37 0>;
如果驱动程序得到dts中定义的该参数,会通过kernel中的gpio驱动框架来重启外部设备。
格式:控制器,gpio_num,High/Low