一. 简介
二. 设备树下Led驱动代码框架搭建
1. 向设备树文件中添加LED设备节点
打开 移植的 Linux内核源码(NXP官方提供的),因为这里所使用的开发板是 正点原子提供的 nand-Flash版的 ALPHA开发板。所以,对应设备树源文件为 imx6ull-alientek-nand.dts。
为了创建的设备节点更方便的在开发板的目录下找到,所以,这里打算将 Led灯的设备节点创建在设备树的根目录下。
打开 设备树源文件 imx6ull-alientek-nand.dts,该文件调用了:
#include "imx6ull-14x14-evk-gpmi-weim.dts"
于是打开 imx6ull-14x14-evk-gpmi-weim.dts 文件,该文件中代码可以确定,依然没有到设备树的根目录。该文件调用了:
#include "imx6ull-14x14-evk.dts"
打开 imx6ull-14x14-evk.dts文件,该文件中可以看出,这里存在设备树的根目录。所以,可以在 imx6ull-14x14-evk.dts设备树文件下,添加 Led设备节点信息。
在 imx6ull-14x14-evk.dts文件的设备树根节点最后,位置如下:
/dts-v1/;
#include <dt-bindings/input/input.h>
#include "imx6ull.dtsi"
/ {
.........
};
imx6ull-14x14-evk.dts文件的设备树根节点最后。即在 "/ {};" 上面大括号的内部最下面。
添加如下设备节点:
/* LingXueWu/2024/01/16 */
alpha_led{
compatible = "alientek,alpha_led";
#address-cells = <1>;
#size-cells = <1>;
status = "okay";
reg = < 0X020C406C 0x04 /*CCM_CCGR1_BASE */
0X020E0068 0x04 /*SW_MUX_GPIO1_IO03_BASE */
0X020E02F4 0x04 /*SW_PAD_GPIO1_IO03_BASE */
0X0209C004 0x04 /*GPIO1_GDIR_BASE */
0X0209C000 0x04>; /*GPIO1_DR_BASE */
};
分析如下:
Led设备树节点需要写的是 所要操作的寄存器地址,即 设备节点的 "reg"参数值 。所以,就需要
"address-cells"参数与 "size-cells"参数 这两个参数,前者表示地址,后者表示地址所占用的字节长度。
"reg" 参数:前面表示 涉及 Led灯初始化需要操作的寄存器地址,后面 0x04表示地址所占用的字节长度为 4字节。
"compatible" 参数,表示设备树兼容的设备。
"status" 参数,表示设备节点的状态是:打开还是关闭。
编译设备树文件,即 dtb设备树文件,进入 以上 Linux内核源码的根目录下,输入如下命令:
make dtbs
确定重新生成 imx6ull-alientek-nand.dtb设备树文件后,拷贝 设备树文件到 tftp服务所设置的目录下:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/linux/kernel/linux-imx-rel_imx_4.1.15_2.1.0_ga$ sudo cp ./arch/arm/boot/dts/imx6ull-alientek-nand.dtb /home/wangtian/linux/tftp_file/ -f
[sudo] wangtian 的密码:
wangtian@wangtian-virtual-machine:~/zhengdian_Linux/linux/kernel/linux-imx-rel_imx_4.1.15_2.1.0_ga$
2. 开发板上电测试
开发板上电,进入系统下。进入 "/proc/device-tree" 目录,查看是否已经存在 Led设备节点:
可以看出,已经存在 led的设备节点 alpha_led。
进入 alpha_led目录下:
可以看出,led设备节点下的属性,寄存器灯信息已经创建成功。
接下来开始实现 Led驱动代码部分。