在前面我们的字符设备驱动LED中,我们是直接在驱动文件中定义相关LED寄存器的物理地址,通过io_remap函数内存映射的到虚拟地址,操作寄存器的虚拟地址来对LED的初始化和操作,二现在我们使用设备树来向Linux内核传递相关寄存器物理地址。
一、修改设备树文件
1、创建子节点
我们在"/"根节点下创建一个"alphaled"的子节点来存储我们LED的寄存器信息,通过获取这个节点的信息来对LED的初始化。
在Linux内核源码中,我们使用的设备树文件是imx6ull-alientek-emmc.dts所以,在这个设备树文件中,在根节点"/"添加我们的子结点(一般在根节点的最后添加):

2、添加子节点属性
①、compatible属性
兼容性属性,一般是描述我们的设备的,所以我们设备compatible属性"alientek,alphaled",正点原子的阿尔法开发板。
②、status属性
表示这个设备的状态,前面设备树中我们已经了解过了,所以我们这里直接设置status属性值为"okay"。如果不知道的可以查看四、(正点原子)Linux设备树-优快云博客。
③、#address-cells和#size-cells属性
表示我们创建的这个节点的子结点的reg的值。都设备为一,表示此节点的子结点的起始地址和地址长度为一个字长。
④、reg属性
描述我们的LED需要使用到的寄存器的物理地址信息。使用到的寄存器我们可以参考《IMX6ULL参考手册》查看,这里我就不仔细介绍了,具体使用到的寄存器有:
1、CCM_CCGR1(打开GPIO时钟) 20C_406Ch
2、SW_MUX_CTL_PAD_GPIO1_IO03(将GPIO复用为GPIO模式) 20E_0068h
3、SW_PAD_CTL_PAD_GPIO1_IO03(设置GPIO的电器属性) 20E_02F4h
4、GPIO1_DR(GPIO的数据) 209_C000h
&

最低0.47元/天 解锁文章
1236

被折叠的 条评论
为什么被折叠?



