10. 命令行点亮LED灯

本章节的命令操作均在板卡的终端执行

前面讲了那么多的内容,终于迎来了重头戏——使用板卡的各种硬件外设, 如入门必备的点灯,按键,蜂鸣器,串口等等。本章先带领大家使用命令行来控制LED灯和检测按键。

10.1. 初探/sys目录

与/proc和/dev目录类似,/sys目录下的文件或文件夹也向用户提供了一些关于设备、内核模块、文件系统以及其他内核组件的信息, 如子目录block中存放了所有的块设备;子目录bus中存放了系统中所有的总线类型,有i2c、usb、sdio、pci等; 子目录class按类型归类设备,如leds、lcd、mtd、pwm等。

尝试在板卡的终端执行以下命令查看sys各层级的目录内容:

1
2
3
4
5
#在板卡上的终端执行以下命令查看
ls /sys
ls /sys/class
ls /sys/class/leds
ls /sys/class/leds/sys_led
../../_images/ledkey1.png

可以看到,本板卡的/sys/class/leds目录有sys_led,它对应LubanCat-Hi3403板卡绿色led,默认被配置为系统状态灯。

/sys/class/leds/sys_led目录下面又包含brightness、device、max_brightness、power、subsystem、trigger、uevent等文件。 其中brightness表示LED灯的亮度,trigger表示LED灯的触发方式,我们可以通过echo、cat等命令来修改或查看这些文件, 从而达到控制LED灯的目的。下面以实例进行讲解。

10.2. 控制心跳灯

控制心跳灯需要root权限进行操作,如果当前是普通用户,可以使用 sudo su 切换为root,如果已经是root则不需要切换。

在控制心跳灯前,我们可以先看下心跳灯的触发方式

1
cat /sys/class/leds/sys_led/trigger

可以看到,等选中的是heartbeat的状态

../../_images/ledkey2.png

LED灯设备下的brightness文件表示了它的亮度值。本板卡提供的内核驱动中, 心跳灯是直接IO控制的,它的亮度范围为1和0表示亮灭;

1
2
3
4
# 熄灭心跳灯
echo 0 > /sys/class/leds/sys_led/brightness
# 点亮心跳灯
echo 1 > /sys/class/leds/sys_led/brightness

当我们完成这操作后,可以查看心跳灯现在的触发方式,现在处于无控制状态

../../_images/ledkey3.png

如果想将灯切换为心跳模式,执行完后,心跳灯重新进入心跳状态

1
2
#在root权限下进行下列操作
echo heartbeat > /sys/class/leds/sys_led/trigger

常用的led模式还有timer模式

../../_images/ledkey13.png

当我们设置为timer模式后,就会出现delay_on和delay_off两个配置项,分别配置了led点亮和熄灭的时间,单位为ms