9. 控制LED灯设备(LED子系统)

您所在的位置:网站首页 数字系统有哪些LED 9. 控制LED灯设备(LED子系统)

9. 控制LED灯设备(LED子系统)

2024-07-11 00:23| 来源: 网络整理| 查看: 265

9. 控制LED灯设备(LED子系统)¶

本章分别使用C库和系统调用的文件操作方式控制开发板的LED灯,展示如何在应用层通过系统提供的设备文件控制相关硬件。

本章的示例代码目录为:base_code/linux_app/led/sys_class_leds。

9.1. LED子系统¶

在Linux系统中,绝大多数硬件设备都有非常成熟的驱动框架,驱动工程师使用这些框架添加与板子相关的硬件支持,建立硬件与Linux内核的联系,内核再通过统一文件系统接口呈现给用户,用户通过对应的设备文件控制硬件。

对于LED设备,Linux提供了LED子系统驱动框架,在Linux内核源码中的“Documentation/leds/leds-class.txt”有相关的描述,它实现了一个leds类,用户层通过sysfs文件系统对LED进行控制。

9.1.1. LED设备目录¶

使用了LED子系统驱动的设备,会被展现在/sys/class/leds目录下,可在主机和开发板使用如下命令查看,命令的输出可能会因为硬件环境不同而不一样:

1 2 3 4 5 6 7 8 9 10 11#在主机或ARM板的终端上执行如下命令: ls /sys/class/leds/ #根据具体的目录内容继续查看: #在主机上有input2::capslock目录,可在主机执行如下命令查看 ls /sys/class/leds/input2::capslock #在开发板上有cpu目录,可在开发板上执行如下命令查看 ls /sys/class/leds/cpu

如下图

上图可看到,示例中的Ubuntu主机和开发板/sys/class/leds下包含了以LED设备名 字命名的目录,如“input2::capslock”、“input2::numlock”和“blue”、“cpu”等LED灯,这 些目录对应的具体LED灯如下表所示。

表 /sys/class/leds下目录对应的设备

/sys/class/leds下的目录

对应的LED灯设备

input2::capslock

键盘大写锁定指示灯(input后的数字编号可能不同)

input2::numlock

键盘数字键盘指示灯(input后的数字编号可能不同)

input2::scrolllock

键盘ScrollLock指示灯(input后的数字编号可能不同)

cpu

开发板的心跳灯

red

Pro开发板RGB灯的红色,Mini开发板的用户灯

green

Pro开发板RGB灯的绿色,Mini开发板的用户灯

blue

Pro开发板RGB灯的蓝色,Mini开发板的用户灯

mmc0:

SD卡指示灯(出厂镜像默认没有启用)

9.1.2. LED设备属性¶

上图中,在具体的LED目录下又包含brightness、max_brightness、trigger等文件,这些文件包含了LED设备的属性和控制接口。

max_brightness文件:表示LED灯的最大亮度值。

brightness文件:表示当前LED灯的亮度值,它的可取 值范围为[0~max_brightness],一些LED设备不支持多级亮度,直接以非0值来 表示LED为点亮状态,0值表示灭状态。

trigger文件:则指示了LED灯的触发方式,查看该文件的内容时,该文件会 列出它的所有可用触方式,而当前使用的触发方式会以“[]”符号括起。常见的触 发方式如下表所示。

表 trigger常见的触发方式

触发方式

说明

none

无触发方式

disk-activity

硬盘活动

nand-disk

nand flash活动

mtd

mtd设备活动

timer

定时器

heartbeat

系统心跳

9.2. 控制LED实验(C库函数)¶

在《命令行点灯和检测按键》章节中,我们演示了使用echo命令修改设备文件,实际上也可以使用gedit、Vim等编辑器进 行修改,修改时注意用户权限即可。既然设备是以文件形式提供的,那么自然也可以使用C库函数 或系统调用的方式读写文件,达到控制设备的目的。

9.2.1. 实验代码分析¶

本小节的示例代码目录为:led/sys_class_leds/c_stdio。

本小节先演示使用C库函数控制LED,具体如下所示。

通过C库函数控制LED(base_code/linux_app/led/sys_class_leds/c_stdio/sources/main.c文件)¶ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70#include #include #include //ARM 开发板LED设备的路径 #define RLED_DEV_PATH "/sys/class/leds/red/brightness" #define GLED_DEV_PATH "/sys/class/leds/green/brightness" #define BLED_DEV_PATH "/sys/class/leds/blue/brightness" //Ubuntu主机LED设备的路径,具体请根据自己的主机LED设备修改 // #define RLED_DEV_PATH "/sys/class/leds/input2::capslock/brightness" // #define GLED_DEV_PATH "/sys/class/leds/input2::numlock/brightness" // #define BLED_DEV_PATH "/sys/class/leds/input2::scrolllock/brightness" int main(int argc, char *argv[]) { FILE *r_fd, *g_fd, *b_fd; printf("This is the led demo\n"); //获取红灯的设备文件描述符 r_fd = fopen(RLED_DEV_PATH, "w"); if(r_fd


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3