资讯详情

了解设备树配置(1)

1文件类型

后缀 作用
dtsi 一种芯片的统一资源相当于头文件
dts 每张板卡都可以定义具体的硬件信息dts
dtc 编译dts可通过的工具apt命令安装,核源码scripts/dtc路径下也已包含dtc工具
dtb dts二进制文件的编译可以通过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属性的具体值。,请注意,当我们谈到父节点时,中断也可以嵌套;
IO gpio-controller gpio控制器
#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>;
		};
	};

标签: rk093电位器rk0971110909电位器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台