linux子系统led,【linux】led子系统

前言

接下来记录的是 led子系统

目前不涉及驱动源码

linux子系统

在 Linux 系统中

绝大多数硬件设备都有非常成熟的驱动框架

驱动工程师使用这些框架添加与板子相关的硬件支持

建立硬件与Linux内核的联系

内核再通过统一文件系统接口呈现给用户

用户通过对应的设备文件控制硬件。

led子系统

led子系统相关描述可在内核源码 Documentation/leds/leds-class.txt 了解。

led子系统是一个简单的 linux子系统 ,在目录 /sys/class/leds 下展示该子系统设备。

linux子系统led,【linux】led子系统_第1张图片

/sys/class/leds下的目录

对应的LED灯设备

input2::capslock

键盘大写锁定指示灯

input2::numlock

键盘数字键盘指示灯

input2::scrolllock

键盘ScrollLock指示灯

一些属性值

brightness

brightness 的最大值在 max_brightness 文件中定义。

brightness 的值在 brightness 文件中定义。

注意:大部分 led 不支持亮度调节。

trigger.

常见的触发方式

none:无触发方式

disk-activity:硬盘活动

nand-disknand:flash活动

mtd:mtd设备活动

timer:定时器

heartbeat:系统心跳

查看触发方式

cat trigger (x86平台)

linux子系统led,【linux】led子系统_第2张图片

查看该文件的内容时,该文件会 列出它的所有可用触方式,而当前使用的触发方式会以“[]”符号括起。

修改触发方式

例子:echo none > /sys/class/leds/ledA/trigger

none:none触发方式

ledA:ledA设备

修改后,便按新的触发方式触发

设计哲学

简单哈哈

推荐命名格式

"设备名字:颜色:功能"

API(后面分析驱动再介绍)

led_set_brightness

led_set_brightness_sync

led_classdev_register

led_classdev

led子系统实战-系统调用-ARM平台

先在终端运行

查询触发方式:cat trigger (注意图中 [])

551e65512a09b0216d08e1284a3bec37.png

修改触发方式 (注意图中 [])

linux子系统led,【linux】led子系统_第3张图片

使用系统调用方式 APP

main.c 文件

/** @file main.c

* @brief 简要说明

* @details 详细说明

* @author lzm

* @date 2020-11-10 17:01:15

* @version v1.0

* @copyright Copyright By lizhuming, All Rights Reserved

*

**********************************************************

* @LOG 修改日志:

**********************************************************

*/

#include

#include

#include

#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"

int main(int argc, char *argv[])

{

int res = 0;

int r_fd;

int g_fd;

int b_fd;

printf("this is the led demo\n");

// 获取 LED 设备文件描述符

r_fd = open(RLED_DEV_PATH, O_WRONLY);

if(r_fd < 0){

printf("Fail to open %s device\n",RLED_DEV_PATH);

exit(1);

}

g_fd = open(GLED_DEV_PATH, O_WRONLY);

if(g_fd < 0){

printf("Fail to open %s device\n",GLED_DEV_PATH);

exit(1);

}

b_fd = open(BLED_DEV_PATH, O_WRONLY);

if(b_fd < 0){

printf("Fail to open %s device\n",BLED_DEV_PATH);

exit(1);

}

while(1){

write(r_fd, "255", 3);

sleep(2);

write(g_fd, "255", 3);

sleep(1);

write(r_fd, "0", 1);

sleep(2);

write(g_fd, "0", 1);

sleep(1);

write(b_fd, "255", 3);

sleep(1);

write(b_fd, "0", 1);

sleep(1);

}

}

你可能感兴趣的:(linux子系统led)