目录
一、配置内核
二、设备树节点编写
1、确定compatible 属性值
2、编写节点
三、验证
测试
其实 Linux 内核已经自带了 LED 灯驱动,要使用 Linux 内核自带的 LED 灯驱动首先得先配置 Linux 内核,使能自带的 LED 灯驱动。
一、配置内核
在Linux内核目录下输入如下命令打开 Linux 配置菜单
make menuconfig
按照如下路径打开 LED 驱动配置项:
-> Device Drivers
-> LED Support (NEW_LEDS [=y])
->LED Support for GPIO connected LEDs
选择“LED Support for GPIO connected LEDs”,将其编译进 Linux 内核,也即是在此选项上按下“Y”键,使此选项前面变为“<*>”
这个在移植nxp官方Linux的时候已经默认选中的了,按下“?”可以查看这个选项详细信息
选中之后保存退出,也是在linux源码根目录下输入下面命令
vi .config
然后在打开的文件里面,找到下面这个,就说明是开启了 LED 灯驱动
重新编译 Linux 内核,然后使用新编译出来的 zImage 镜像启动开发板
二、设备树节点编写
打开文档 Documentation/devicetree/bindings/leds/目录下的leds-gpio.txt和common.txt,文档详细的讲解了 Linux 自带驱动对应的设备树节点该如何编写。
1、确定compatible 属性值
这个属性用于将设备和驱动绑定起来,其值为字符串列表,用于选择设备所要使用的驱动程序,下面就要找到自带的LED驱动的compatible ,才能写设备树节点
打开Linux源码目录下面路径的文件
/drivers/leds/leds-gpio.c
直接搜 compatible 就能看到自带的LED驱动的compatible
2、编写节点
和之前的设备树节点编写一样,编写如下
187行,节点名字
188行,compatible,一定要和内核自带的LED驱动里面的compatible一样,也就是上一步查找的
189行,这里定义一个子节点名(不重名即可),相当于定义一个物理led灯,如果有多个物理led灯就另外添加子节点,不能在led0里添加
190行,led0的label 属性,此属性为可选,每个子节点都有一个 label 属性, label 属性一般表示LED 灯的名字,比如以颜色区分的话就是 red
191-192行,pinctrl-names 属性,此属性描述 pinctrl 名字一般为“default” ;pinctrl-0 节点,此节点引用自己创建的 pinctrl_gpioled 节点,表示 gpioled 设备的所使用的 PIN 信息保存在pinctrl_gpioled 节点中,在“iomuxc”下定义的,如下
这两行内容和pinctrl_gpioled 节点在之前“pinctrl 和 gpio 子系统点灯”实验中已定义,可以直接使用。要注意的是,检查有别的设备使用GPIO1_IO03__GPIO1_IO03,有就先屏蔽
193行,gpios是添加 GPIO 属性信息,表明gpioled 所使用的 GPIO 是哪个引脚 ,低电平有效。这个要注意的是,有别的设备使用用到”&gpio1 3“,搜索看是否有别的设备使用,有就先屏蔽,比如我们自己写的gpio-led,先屏蔽
194行,default-state”属性值,可以设置为 on、 off 或 keep,为 on 的时候 LED 灯默认打开,为 off 的话 LED 灯默认关闭,为 keep 的话 LED 灯保持当前模式
195行,“linux,default-trigger”属性值,也就是设置 LED 灯的默认功能,可以查阅
Documentation/devicetree/bindings/leds/common.txt 这个文档来查看可选功能,比如:
backlight: LED 灯作为背光;
default-on: LED 灯打开;
heartbeat: LED 灯作为心跳指示灯,可以作为系统运行提示灯;
ide-disk: LED 灯作为硬盘活动指示灯;
timer: LED 灯周期性闪烁,由定时器驱动,闪烁频率可以修改;
这里使用心跳指示灯
三、验证
使用编译好的dtb和zImage启动开发板,加载内核之后灯就会自动“双闪”的亮
可以查看一下设备,进入下面路径
/sys/bus/platform/devices
目录下使用ls,可以找到我们创建的设备树节点"dtsleds"
进入“dtsleds”目录
进入“leds”目录
在这就可以看到我们设备树上面定义的一个red灯
进入“red”目录
测试
先测试关闭led灯,现在是心跳灯的亮法,在"red"目录下输入下面命令
echo 0 > brightness
可以看到执行就会关闭led
测试开灯,在"red"目录下输入下面命令
echo 1 > brightness
可以看到执行就会打开led
重新开启心跳灯,在"red"目录下输入下面命令
echo heartbeat > trigger
好了,测试基本是正常,说明使用自带的led驱动成功