使用设备树向 Linux 内核传递相关寄存器物理地址,并且使用 OF 函数从设备树中获取所需的属性值,然后使用获取到的属性值来初始化相关 IO。
我们需要做的工作:
(1)在 .dts 文件中创建相应的设备节点。
(2)编写驱动程序,利用 OF 函数获取设备树中相关属性值。
(3)使用获取到的有关属性值来初始化 LED 所使用的 GPIO。
一、创建设备相应设备节点
设备树修改完成后需要重新编译设备树:make dtbs,启动 Linux 内核时使用重新编译后的设备树。
构建 alphaled 节点时没有定义 name 属性值,这个 name 属性值哪里来的?
【答】:这是老版本设备树使用的属性,每个节点里面都有 name 属性,由内核解析设备树时自动添加。
二、利用 OF 函数获取相关属性值初始化 LED
从设备树中获取定义的寄存器物理地址信息,然后使用 ioremap 完成物理地址到虚拟地址的转化。以前寄存器物理地址信息放在驱动文件中,如果驱动是已经加载到内核中了,想要修改非常麻烦。
定义设备树中的设备节点,可以放到设备结构体中。