10. 命令行点灯和检测按键

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

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

10.1. 初探/sys目录

与/proc目录类似,/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_status_led
../../_images/ledkey1.png

可以看到,本板卡的/sys/class/leds目录下分别有:sys_status_led 它代表着LubanCat-RK3562/RK3566/RK3568系列板卡上绿色像心脏一样跳动的灯,而且丝印上写着USER

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

10.2. 控制心跳灯

控制心跳灯前,需要切换为root用户操作

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

1
cat /sys/class/leds/sys_status_led/trigger

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

../../_images/ledkey2.png

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

1
2
3
4
#灭了心跳灯,心脏毁灭
echo 0 > /sys/class/leds/sys_status_led/brightness
#亮了心跳灯,心脏永恒
echo 1 > /sys/class/leds/sys_status_led/brightness

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

../../_images/ledkey3.png

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

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

10.3. 初探/dev目录

除了/proc和/sys目录外,/dev目录也包含了非常丰富的设备信息,该目录下包含了Linux系统中使用的所有外部设备, 如/dev/tty为串口设备、/dev/ram为内存、通过这些设备文件,我们也可以访问到对应的硬件设备。

尝试使用以下命令查看dev目录的内容:

看dev目录的内容
1
2
ls /dev
ls /dev/input
../../_images/ledkey4.png

以上图中/dev/input目录下的内容为例,上面的event0是输入设备的事件文件接口, 通过它们可以获知设备上报的输入事件。event后带的数字并不是跟设备绑定的, 可以查看文件/proc/bus/input/devices了解它们分别代表什么。

在板卡的终端执行以下命令:

1
cat /proc/bus/input/devices
../../_images/ledkey5.png

如上图所示,可看到当前板卡的包含了多个个输入设备,在具体的板卡上可能会有差异:

  • event0:名称为gpio-keys/remotectl,它对应的是红外接收器,input0,部分板卡会不具备该功能。

  • event1:名称为rk805 pwrkey”,它对应的电源键on/off,input1,部分板卡会不具备该功能。

  • event2:名称为adc-keys,它对应的是Recovery键,input2,部分板卡会不具备该功能。

  • event3:名称为rk-headset,它对应的是耳机插入检测,input3,部分板卡会不具备该功能。

注解

Recovery键的刷机功能只作用于内核启动的时候,进入系统后,该按键就失去了作用,我们可以通过操作该按键,下面以该按键为例

10.4. 检测按键

在板卡中,我们可以使用evtest工具更方便地查看硬件当前接入的输入设备, 并且对其进行实时检测

apt安装evtest工具

1
sudo apt install evtest

注意:第一次使用apt install命令前,需要先执行以下执行刷新镜像源

1
sudo apt update

使用evtest工具:

1
sudo evtest
  • 执行命令后,它会扫描/dev/input目录下的event设备输入事件文件,并列出到终端,

../../_images/ledkey6.png
  • 它提示我们可以通过数字选择对应的设备进行测试,具体请根据自己板卡上的输出进行选择。

  • 我们选择”adc-keys”,即按’2’然后回车确认,可执行“Ctrl”+“c”退出

../../_images/ledkey7.png
  • adc-keys对应的是Recovery按键(LubanCat-Zero系列不支持)当我进行一次按下和松开操作后,如下图所示

../../_images/ledkey8.png