orangepi linux内核中自带的LED驱动
1.硬件电路
另外添加的LED控制引脚信息:
2. 内核配置及设备树修改
linux内核已经自带了LED驱动,目录是drivers/leds/leds-gpio.c
配置内核支持LED驱动
Device Drivers --->
[*] LED Support --->
<*> LED Class Support
<*> LED Support for GPIO connected LEDs
[*] LED Trigger support --->
在设备树中配置硬件信息,匹配驱动需求:
leds {
/* 用于匹配加载驱动 */
compatible = "gpio-leds";
pwr_led {
label = "green_led-pl0";
/* GPIO引脚信息, GPIO_ACTIVE_HIGH表示高电平点亮 */
gpios = <&r_pio 0 10 GPIO_ACTIVE_HIGH>;
default-state = "on"; /* 初始状态 */
};
status_led {
label = "red_led-pa15";
gpios = <&pio 0 15 GPIO_ACTIVE_HIGH>;
};
/* 下面二个引脚是另外添加的 */
pa11_led {
label = "led-pa11";
gpios = <&pio 0 11 GPIO_ACTIVE_HIGH>;
};
pa12_led {
label = "led-pa12";
gpios = <&pio 0 12 GPIO_ACTIVE_HIGH>;
};
};
3. 测试LED驱动
linux内核通过/sys/class文件系统,向应用层提供了可以操作LED的接口。
# 进入LED系统接口目录
cd /sys/class/leds
# 可以在这里看到在设备树中配置的LED
orangePiOne /sys/class/leds # ls
green_led-pl0 led-pa11 led-pa12 red_led-pa15
# 进入绿灯的设置目录
cd /sys/class/leds/green_led-pl0
# 熄灭绿灯
orangePiOne /sys/devices/platform/leds/leds/green_led-pl0 # echo 0 > brightness
# 点亮绿灯
orangePiOne /sys/devices/platform/leds/leds/green_led-pl0 # echo 1 > brightness
# 闪烁功能用的是LED的trigger功能,已经在内核中配置了
# 设置绿灯闪烁
orangePiOne /sys/devices/platform/leds/leds/green_led-pl0 # echo heartbeat > trigger
# 设置绿灯停止闪烁
orangePiOne /sys/devices/platform/leds/leds/green_led-pl0 # echo none> trigger
备注:
led-pa11和led-pa12只有IO口,可以通过/sys/class/leds/led_pa1x来操作IO口,用万用表测试电平的变化