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

前言

接下来记录的是 led子系统

目前不涉及驱动源码

linux子系统

在 Linux 系统中

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

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

建立硬件与Linux内核的联系

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

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

led子系统

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

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

b75e7771f39168e7362b5d0bf075bc9d.png

/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平台)

b5c3db03d571d6379236dcd918a9a9db.png

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

修改触发方式

例子: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

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

9953a82c2702ef8a1f341d312e02f931.png

使用系统调用方式 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);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值