Linux 内核自带 LED 驱动使能
在linux内核代码根目录下输入 make menuconfig,打开图形 配置。
按照如下途径配置Linux自带的LED驱动:
按照上述路径,选择“
LED Support for GPIO connected LEDs
”,将其编译进
Linux
内核,也
即是在此选项上按下“
Y
”键,使此选项前面变为“
<*>
”。
重新编译
Linux
内核,然后使用新编译出来的
zImage
镜像启动开发板。
Linux 内核自带 LED 驱动简介
LED
灯驱动文件为
/drivers/leds/leds-gpio.c
,打开
/drivers/leds/Makefile
这个文件:
Makefile文件:
leds-gpio.c
这个驱动文件:
第
236~239
行,
LED
驱动的匹配表,此表只有一个匹配项,
compatible
内容为“
gpio-leds
”,
因此设备树中的
LED
灯设备节点的
compatible
属性值也要为“
gpio-leds
”,否则设备和驱动匹
配不成功,驱动就没法工作。
290 static struct platform_driver gpio_led_driver = {
291 .probe = gpio_led_probe,
292 .remove = gpio_led_remove,
293 .driver = {
294 .name = "leds-gpio",
295 .of_match_table = of_gpio_leds_match,
296 },
297 };
298
299 module_platform_driver(gpio_led_driver);
第
290~296
行,
platform_driver
驱动结构体变量,可以看出,
Linux
内核自带的
LED
驱动
采用了
platform
框架。第
291
行可以看出
probe
函数为
gpio_led_probe
,因此当驱动和设备匹配
成功以后
gpio_led_probe
函数就会执行。从
294
行可以看出,驱动名字为“
leds-gpio
”,因此会
在
/sys/bus/platform/drivers
目录下存在一个名为“
leds-gpio
”的文件,如下图所示:
设备树节点编写
在
imx6ull-alientek-emmc.dts
中添加如下所示
LED
灯设备节点:
1 dtsleds {
2 compatible = "gpio-leds";
3
4 led0 {
5 label = "red";
6 gpios = <&gpio1 3 GPIO_ACTIVE_LOW>;
7 default-state = "off";
8 };
9 };
执行make dtbs编译设备树文件
运行测试
用 新 的
zImage
和
imx6ull-alientek-emmc.dtb
启 动 开 发 板 , 启 动 以 后 查 看
/sys/bus/platform/devices/dtsleds
这个目录是否存在,如果存在的话就如到此目录中,
(我的没有)
(官方有)
进入到 leds 目录中,
在
leds
目录下有一个名为“
red
”子目录,这个子目录的名字就是我
们在设备树中第
5
行设置的
label
属性值。
echo 1 > /sys/class/leds/red/brightness //
打开
LED0
echo 0 > /sys/class/leds/red/brightness //关闭
LED0