【Linux驱动】Linux设备树(二)—— 添加设备树节点

了解了设备树的基本语法以后,就可以试着自己手动添加一个节点了,添加完节点以后,需要重新编译生成 .dtb 文件,然后保存到uboot的加载目录下。


目录

1、查看绑定信息文档

2、添加设备树节点

3、编译设备树文件(.dtb)

4、替换设备树文件(.dtb)


1、查看绑定信息文档

设备树是用来描述板子上的设备信息的,如果我们要在设备树中添加一个节点,添加的外设不同,反映到设备树的属性也不相同。那我们如何知晓我们添加的外设需要哪些属性呢?

Linux 内核源码中有详细的 .txt 文档描述了如何添加节点,而且还进行了详细的分类。(Documentation / devicetree / bindings)

【Linux驱动】Linux设备树(二)—— 添加设备树节点_第1张图片

假设我们要在根节点下添加一个新的节点,这里就参考 common-properties.txt,下面是 common-properties.txt 给出的一个示例: 

【Linux驱动】Linux设备树(二)—— 添加设备树节点_第2张图片

2、添加设备树节点

我们在根节点下添加一个名为 alientek_led 的节点

#address-cells = <1> 表示只用一个u32类型的值便可以表示一个地址

#size-cells = <1> 表示只用一个u32类型的值便可以表示一个地址长度

compatible = "alientek_led" 表示兼容的驱动模块名为 alientek_led

status = "okay" 表示当前节点可被操作

reg 保存了寄存器地址和寄存器长度

alientek_led {
	#address-cells = <1>;
	#size-cells = <1>;
	compatible = "alientek_led";
	status = "okay";
	reg = <
		0x20C406C 0x04			/* CCM_CCGR1 */
		0x20E0068 0x04			/* IOMUXC_SW_MUX_CTL_PAD_GPIO1_IO03 */
		0x20E02F4 0x04			/* IOMUXC_SW_PAD_CTL_PAD_GPIO1_IO03 */
		0x209C004 0x04			/* GPIO1_GDIR */
		0x209C000 0x04			/* GPIO1_DR */
	>;
};

3、编译设备树文件(.dtb)

添加完节点以后,一般通过 make dtbs 来编译设备树,有的就在 dtbs 目录下直接输入 make dtbs,小编这里是在Linux内核源码的顶层目录下输入 make dtbs 进行编译的

【Linux驱动】Linux设备树(二)—— 添加设备树节点_第3张图片

4、替换设备树文件(.dtb)

小编这里开发板上电是通过 tftp 来加载镜像和设备树文件的,所以在设备树编译完毕后,需要替换原本tftp工作目录下的设备树文件。

cp arch/arm/boot/dts/imx6ull-alientek-emmc.dtb /usr/local/tftpboot/

 重启开发板,在 /proc/device-tree 目录下就可以看到新添加的节点了

你可能感兴趣的:(#,Linux驱动,linux,运维,服务器)