ARM40-A5应用程序——ledlike
2019.3.2
版权声明:本文为博主原创文章,允许转载。
Linux系统将控制LED灯的这部分功能整合起来,设计成了一个标准的LED子系统,对LED子系统的操作在shell环境中就能完成。
由于蜂鸣器、继电器、用作输出的gpio、看门狗喂狗信号等都类似于LED,因此我们将此类设备称为ledlike。
我们结合ARM40-A5看一下操作ledlike设备(蜂鸣器)的实例:
一、生成 /sys/class/leds/buzz
1.1、使用shell命令生成 /sys/class/leds/buzz
ARM40-A5的PC31脚接蜂鸣器电路,我们操作蜂鸣器来了解LED子系统的用法。
首先要生成 /sys/class/leds/buzz,未生成该文件前,/sys/class/leds/的内容可能如下:
root@ARM40:~# ls /sys/class/leds
heartbeat vled wdt
生成 /sys/class/leds/buzz 后,/sys/class/leds/ 的内容如下:
root@ARM40:~# ls /sys/class/leds
buzz heartbeat vled wdt
在shell中生成/sys/class/leds/buzz 及类似ledlike文件的方法为:
echo buzz 95 > /sys/class/leds/vled/new_device
① buzz为新生成的ledlike(蜂鸣器)设备的名称,注意该名称不能与已经存在的ledlike设备的名称相同
② 该名称不能超过20个字符
③ 95为该ledlike设备使用的gpio_num,对应关系为:
· PA0-PA31 对应的gpio_num为 (0-31)
· PB0-PB31 对应的gpio_num为 (0-31)+32
· PC0-PC31 对应的gpio_num为 (0-31)+64
· PD0-PD31 对应的gpio_num为 (0-31)+96
· PE0-PE31 对应的gpio_num为 (0-31)+128
注意gpio_num不能重复使用。
若要撤销/sys/class/leds/buzz,重启系统即可。
1.2、上电即生成 /sys/class/leds/buzz
若希望系统上电后,自动生成 /sys/class/leds/buzz,需要两个文件:
/etc/init.d/S01ledlike
/opt/user/user1ledlike.sh
并且:
chmod 755 /etc/init.d/S01ledlike
chmod 755 /opt/user/user1ledlike.sh
系统启动后会运行/etc/init.d/S01ledlike
,在其中会调用/opt/user/user1ledlike.sh
/etc/init.d/S01ledlike
的部分内容为:
#!/bin/sh
set -e
start()
{
/opt/user/user1ledlike.sh &
}
case "$1" in
start)
start
;;
stop)
;;
*)
;;
esac
# User program
/etc/init.d/S01ledlike
的部分内容为:
#!/bin/sh
set -e
#PE6=134, use as heartbeat(LED), it is native
#PD30=126, use as wdt(watchdog), it is native
#
echo "Starting ledlike..."
#PC31=95,use as buzz
echo buzz 95 > /sys/class/leds/vled/new_device
#PD16=112,use as stat
#echo stat 112 > /sys/class/leds/vled/new_device
#echo heartbeat > /sys/class/leds/stat/trigger
二、操作/sys/class/leds/buzz
生成 /sys/class/leds/buzz 后,我们可以看到如下文件:
root@ARM40:~# ls /sys/class/leds/buzz/
brightness max_brightness subsystem uevent
device power trigger
root@ARM40:~# cat /sys/class/leds/buzz/trigger #trigger支持的类型
[none] nand-disk mmc0 timer heartbeat gpio
root@ARM40:~# echo 1 > /sys/class/leds/buzz/brightness #PC31输出高电平,蜂鸣器长响
root@ARM40:~# echo 0 > /sys/class/leds/buzz/brightness #PC31输出低电平,蜂鸣器不响
root@ARM40:~# echo heartbeat > /sys/class/leds/buzz/trigger #蜂鸣器"心跳"响
root@ARM40:~# echo timer > /sys/class/leds/buzz/trigger #蜂鸣器嘀...嘀...响
root@ARM40:~# ls /sys/class/leds/buzz/ #蜂鸣器嘀...嘀...响时,可以设置响和不响的时间
brightness device subsystem
delay_off max_brightness trigger
delay_on power uevent
root@ARM40:~# cat /sys/class/leds/buzz/delay_on
500 //500ms
root@ARM40:~# cat /sys/class/leds/buzz/delay_off
500 //500ms
root@ARM40:~# echo 200 > /sys/class/leds/buzz/delay_on #减少蜂鸣器响的时间
改为 timer后,PC31的波形为:(高电平时蜂鸣器响)
三、C语言操作ledlike
参考《ARM40-A5应用程序——GPIO输出高低电平》。
参考文章:
LED configuration /etc/config/system
https://openwrt.org/docs/guide-user/base-system/led_configuration
BeagleBone Black板第四课:简单LED控制实验
http://blog.csdn.net/luyejie8888/article/details/38361525
How_to_use_GPIO_signals
http://blog.csdn.net/drivermonkey/article/details/20132241?utm_source=tuicool
内核中led触发器实例
https://blog.csdn.net/yuanlulu/article/details/6438847
GPIO应用于Linux LED子系统和输入事件侦测
https://blog.csdn.net/cdemtronix/article/details/82021359
荟聚计划:共商 共建 共享 Grant