了解设备树配置(1)

1文件类型

后缀作用
dtsi一个类型芯片的统一资源,相当于头文件
dts具体的硬件信息,每一款板卡都可以定义自己的dts
dtc编译dts的工具,可以通过apt命令安装,内核源码scripts/dtc路径下也已包含dtc工具
dtbdts编译后的二进制文件,可以通过bootloader引导程序加载进内核
辅助信息
  • 单独编译设备树命令: make dtbs
  • binding文档所在内核位置: Documentation/devicetree/bindings及子设备目录
  • 为了支持设备树,uboot在config文件中添加:#define CONFIG_OF_LIBFDT

2关键字属性

名称关键字作用
标准属性compatible指定系统名称,或者一个确切的设备名称,用字符串列表,可以包含制造商,型号等, 应用列表是为了匹配兼容性,每个字符出长度不要超过31个字节
model指定芯片制造商的设备型号,举例: model = “Rockchip RK3399 Firefly Board(Linux Opensource)” ;model = “wm8960-audio”; //设备模块信息
chosen不代表一个真正的设备,用于根参数,取代以前的bootloader的启动参数,控制台输入等;chosen {bootargs = “noinitrd root=/dev/mtdblock4 rw init=/linuxrc console=ttySAC0,115200”;};
status表示设备的状态: okey、disable、fail、fail-sss
alias比如SoC上有如果多个i2c控制器,alias的相当于给每个i2c控制器分配一个唯一的地址编号;可以批量的指定节点别名,与" : "单独指定节点别名来说,更方便
地址#address-cells = <u32_t param_num>基地址,片选号等绝对起始地址所占字长
长度#size-cells = <u32_t length>用来描述子节点"reg"属性的地址表中用来描述地址长度的cell的数量
寻址reg = <list(param_num, length)>reg 是根据param_num和 length决定的一种列表结构
中断interrupt-controller中断控制器,一个空属性用来声明这个node接收中断信号,即这个node是一个中断控制器
interrupt-parent标识此设备节点属于哪一个中断控制器,如果没有设置这个属性,会自动依附父节点的
interrupts一个中断标识符列表,表示每一个中断输出信号; 1,2,4,8标识不同的电位变化。
#interrupt-cells中断控制器节点的属性,用来标识这个控制器需要几个单位做中断描述符,用来描述子节点中"interrupts"属性使用了父节点中的interrupts属性的具体的哪个值。,注意,我们谈到了父节点,那么中断也是可以嵌套的;一般,如果父节点的该属性的值是3,则子节点的interrupts一个cell的三个32bits整数值分别为:<中断域 中断 触发方式>,如果父节点的该属性是2,则是<中断 触发方式>
IOgpio-controllergpio控制器
#gpio-cells描述gpio使用节点的属性一个cell的内容; 属性 = <&引用GPIO节点别名 GPIO标号 工作模式>
第三个参数: 00: level 3 Mux; 01: sram/nor OE_B, Output; 10: NAND Flash CLE_B, Output; 11 SDIO 1 Power Control, Output
自定义键针对具体的设备,有部分属性很难做到通用,需要驱动自己定义好,通过内核的属性提取解析函数进行值的获取

3符号

符号作用
/根节点
@如果设备有地址,则由此符号指定, i2c中也可指从设备地址
&引用节点
:冒号前的label是为了方便引用给节点起的别名,此label一般使用为&label
,属性名称中可以包含逗号
#并不表示注释,常用于属性
空属性并不一定表示没有赋值。如 interrupt-controller 一个空属性用来声明这个node接收中断信号
" "引号中的为字符串,不超过31字节
< >32 位整型数字
[ ]方括号中的为32位十六进制数,十六机制数据[0x11 0x12 0x13] 其中0x可省略

4 初步认识设备树,不再陌生

以下是stm32f429-disco.dts部分

/ {
	model = "STMicroelectronics STM32F429i-DISCO board";		//指定芯片制造商的设备型号
	compatible = "st,stm32f429i-disco", "st,stm32f429";			//指定系统名称

	chosen {
		bootargs = "root=/dev/ram";		//不代表一个真正的设备,用于根参数,取代以前的bootloader的启动参数
		stdout-path = "serial0:115200n8";
	};

	memory@90000000 {				//在stm32f4xx手册1195页,可以查到地址fsmc存储区域4的起始地址是0x9000 0000
		device_type = "memory";
		reg = <0x90000000 0x800000>;		//起始地址 0x9000 0000, 大小是 0x800 0000
	};

	aliases {
		serial0 = &usart1;	// 引用,得到serial对应的串口编号
	};

	leds {
		compatible = "gpio-leds";
		red {
			gpios = <&gpiog 14 0>;		//三个参数, 选中pg14,  模式为level 3 Mux
		};
		green {
			gpios = <&gpiog 13 0>;
			linux,default-trigger = "heartbeat";		//自定义key
		};
	};

	gpio_keys {
		compatible = "gpio-keys";
		#address-cells = <1>;
		#size-cells = <0>;
		autorepeat;
		button@0 {
			label = "User";
			linux,code = <KEY_HOME>;
			gpios = <&gpioa 0 0>;
		};
	};
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值