文章目录
- 前言
- dts片段
- 通用属性介绍
- 地址大小
- 中断
- phandle
- compatible
- mmc节点介绍
前言
arm开发,早晚要了解设备树
dts片段
interrupt-parent = <0x8005>;
model = "linux,dummy-virt";
#size-cells = <0x02>;
#address-cells = <0x02>;
compatible = "linux,dummy-virt";vmmc_supply: regulator {compatible = "regulator-fixed";regulator-name = "3V3";regulator-min-microvolt = <3300000>;regulator-max-microvolt = <3300000>;regulator-always-on;
};mmc@80000000 {compatible = "arm,pl181", "arm,primecell";reg = <0x00 0x80000000 0x00 0x1000>;interrupts = <0x00 0x0a 0x04>, <0x00 0x0b 0x04>;clocks = <0x8000>;clock-names = "apb_pclk";bus-width = <4>;max-frequency = <5000000>;vmmc-supply = <&vmmc_supply>;wp-gpios = <0x8007 6 0>;cd-gpios = <0x8007 7 1>;
};intc@8000000 {phandle = <0x8005>;reg = <0x00 0x8000000 0x00 0x10000 0x00 0x8010000 0x00 0x10000>;compatible = "arm,cortex-a15-gic";ranges;#size-cells = <0x02>;#address-cells = <0x02>;interrupt-controller;#interrupt-cells = <0x03>;v2m@8020000 {phandle = <0x8006>;reg = <0x00 0x8020000 0x00 0x1000>;msi-controller;compatible = "arm,gic-v2m-frame";};
};pl061@9030000 {phandle = <0x8007>;clock-names = "apb_pclk";clocks = <0x8000>;interrupts = <0x00 0x07 0x04>;gpio-controller;#gpio-cells = <0x02>;compatible = "arm,pl061\0arm,primecell";reg = <0x00 0x9030000 0x00 0x1000>;
};apb-pclk {phandle = <0x8000>;clock-output-names = "clk24mhz";clock-frequency = <0x16e3600>;#clock-cells = <0x00>;compatible = "fixed-clock";
};chosen {linux,initrd-end = <0x00 0x49543a83>;linux,initrd-start = <0x00 0x48000000>;bootargs = "root=/dev/ram0 console=ttyAMA0 init=/linuxrc ignore_loglevel nokaslr";stdout-path = "/pl011@9000000";rng-seed = <0x7970a02d 0x64c75176 0xfe4a335f 0xdade1615 0x97ff89ee 0x6f4b3574 0x15a3ce06 0x15c5d6f8>;kaslr-seed = <0x898db457 0x75d6280>;
};
通用属性介绍
地址大小
#size-cells = <0x02>;
#address-cells = <0x02>;
这个的意思是,地址和大小需要两个cell来表示,一个cell是32位
reg = <0x80000000 0x1000>;
这是cell=1的写法, 0x80000000开始,往后0x1000字节
cell=2时,每个值分成了64位的高低位, 应该是:
reg = <0x00 0x80000000 0x00 0x1000>;
中断
interrupt-parent = <0x8005>;
interrupts = <0x00 0x07 0x04>;
interrupts-extended = <0x00 0x07 0x04>;
interrupts参数:中断类型(SGI PPI SPI LPI), 中断号, 触发类型(上升/下降沿、高/低电平)
如果指定了interrupt-parent, 那使用interrupts的时候就不用再指定phandle了, 而且所有interrupt都使用那个中断控制器
如果想为不同的中断指定不同的控制器, 可以用interrupt-extended, 这个可以指定phandle
phandle
phandle = <0x8000>;
clocks = <0x8000>;
vmmc-supply = <&vmmc_supply>;
引用其他节点,可以通过标签,也可以通过显式声明的phandle引用 (反编译dtb得到的估计都是值
compatible
compatible = "arm,pl061\0arm,primecell";
兼容性,驱动代码里会读设备树的这个属性,看自己适不适配
mmc节点介绍
cell=1,32位;cell=2,64位
reg = <0x80000000 0x1000>;
这是cell=1的写法
cell=2时,每个值分成了64位的高低位
cell=2时,应该是:
reg = <0x00 0x80000000 0x00 0x1000>;