Linux驱动开发:设备树dts详解_dts设备树

/ {
aliases {
can0 = &flexcan1;

};
cpus {
#address-cells = <1>;
#size-cells = <0>;

	cpu0: cpu@0 {
		compatible = "arm,cortex-a7";
		device_type = "cpu";
		reg = <0>;
		clock-latency = <61036>; /* two CLK32 periods */
		operating-points = <
			/* kHz	uV */
			996000	1275000
			792000	1225000
			528000	1175000
			396000	1025000
			198000	950000
		>;
						/* kHz	uV */
			996000	1275000
			792000	1225000
			528000	1175000
			396000	1025000
		...
};

intc: interrupt-controller@00a01000 {
	compatible = "arm,cortex-a7-gic";
	#interrupt-cells = <3>;
	interrupt-controller;
	reg = <0x00a01000 0x1000>,
	<0x00a02000 0x100>;
};
	...

文件描述了 **CPU arm**,**cortex-a7** ,支持 **996MHz**、 **792MHz**等频率, 时钟一些信息。


* “/”是根节点,每个设备树文件只有一个根节点
* “/”是根节点,每个设备树文件只有一个根节点



node-name@unit-address


其中 **“node-name”** 是节点名字,为 **ASCII** 字符串,节点名字应该能够清晰的描述出节点的功能,比如 **“uart1”** 就表示这个节点是 **UART1** 外设。**“unit-address”** 一般表示设备的地址或寄存器首地址,如果某个节点没有地址或者寄存器的话 **“unit-address”** 可以不要,比如 **“cpu@0”**、**“interrupt-controller@00a01000”**。



label: node-name@unit-address


引入 **label** 的目的就是为了方便访问节点,可以直接通过 **&label** 来访问这个节点,比如通过**&cpu0** 就可以访问 **“cpu@0”** 这个节点。很明显通过 **&intc** 来访问 **“interrupt-controller@00a01000”** 这个节点要方便很多!


每个节点都有不同属性,不同的属性又有不同的内容,属性都是键值对,值可以为空或任意的字节流。设备树源码中常用的几种数据形式如下所示:


**1、字符串**



compatible = “fairchild,74hc595”;


**2、32 位无符号整数**



reg = <0 0x123456 100>;


**3、字符串列表**



compatible = “fsl,imx6ul-pxp-v4l2”, “fsl,imx6sx-pxp-v4l2”, “fsl,imx6sl-pxp-v4l2”;


## 二、设备树详解


### 2.1 标准属性


**1、compatible 属性**


compatible 属性也叫做“兼容性”属性,这是非常重要的一个属性! compatible 属性的值是一个字符串列表, compatible 属性用于将设备和驱动绑定起来。字符串列表用于选择设备所要使用的驱动程序,compatible 属性的值格式如下所示:



> 
> "manufacturer,model"
> 
> 
> 


其中 **manufacturer** 表示厂商,**model** 一般是模块对应的驱动名字。比如 imx6ull-alientek-emmc.dts 中 sound 节点是 I.MX6U-ALPHA 开发板的音频设备节点,I.MX6U-ALPHA 开发板上的音频芯片采用的欧胜(WOLFSON)出品的 WM8960,sound 节点的 compatible 属性值如下:



> 
> compatible = "fsl,imx6ul-evk-wm8960","fsl,imx-audio-wm8960";
> 
> 
> 


其中 **“fsl”** 表示厂商是飞思卡尔,**“imx6ul-evk-wm8960”**和 **“imx-audio-wm8960”** 表示驱动模块名字。设备首先使用第一个兼容值在 Linux 内核里面查找,如果没有找到的话就使用第二个兼容值查。


**2、 model 属性**


**model** 属性值也是一个字符串,一般 **model** 属性描述设备模块信息,比如名字什么的&#x
  • 20
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值