前言

  • 接下来记录的是 led子系统
  • 目前不涉及驱动源码

linux子系统

  • 在 Linux 系统中

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

led子系统

  • led子系统相关描述可在内核源码 Documentation/leds/leds-class.txt 了解。
  • led子系统是一个简单的 linux子系统 ,在目录 /sys/class/leds 下展示该子系统设备。
/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 triggerx86平台

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

      • 修改触发方式
        • 例子: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注意图中 []

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

  • 使用系统调用方式 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 <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h> //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子系统的更多相关文章

  1. linux led子系统(二)

    对于led子系统中,有那么多得trigger,下面就来简单了解下. 1.default-on static void defon_trig_activate(struct led_classdev * ...

  2. linux led子系统(一)

    就像学编程第一个范例helloworld一样,学嵌入式,单片机.fpga之类的第一个范例就是点亮一盏灯.对于庞大的linux系统,当然可以编写一个字符设备驱动来实现我们需要的led灯,也可以直接利用g ...

  3. (linux)LED子系统

    数据结构(/include/linux/leds.h) enum led_brightness { LED_OFF = 0, LED_HALF = 127, LED_FULL = 255, }; le ...

  4. 初探linux子系统集之led子系统(二)

    巴西世界杯,德国7比1东道主,那个惨不忍睹啊,早上起来看新闻,第一眼看到7:1还以为点球也能踢成这样,后来想想,点球对多嘛6比1啊,接着就是各种新闻铺天盖地的来了.其实失败并没有什么,人生若是能够成功 ...

  5. 初探linux子系统集之led子系统(一)

    就像学编程第一个范例helloworld一样,学嵌入式,单片机.fpga之类的第一个范例就是点亮一盏灯.对于庞大的linux系统,当然可以编写一个字符设备驱动来实现我们需要的led灯,也可以直接利用g ...

  6. arm Linux 驱动LED子系统 测试

    Linux内核在3.0以上引入了设备树概念(具体哪个版本不清楚)在编译内核后需要将与之对应的dtb文件也下载人板子上才能使内核与硬件关联起来. dtb文件是有dts文件编译后生成的:例如 /* * C ...

  7. 初探linux子系统集之led子系统(二)【转】

    本文转载自:http://blog.csdn.net/eastmoon502136/article/details/37606487 巴西世界杯,德国7比1东道主,那个惨不忍睹啊,早上起来看新闻,第一 ...

  8. 初探linux子系统集之led子系统(一)【转】

    本文转载自:http://blog.csdn.net/eastmoon502136/article/details/37569789 就像学编程第一个范例helloworld一样,学嵌入式,单片机.f ...

  9. 初探linux子系统集之led子系统(三)

    世界杯结束了,德国战车夺得了大力神杯,阿根廷最终还是失败了.也许3年,5年,或者10年后,人们就不知道巴西世界杯的亚军是谁,但是总是会记得冠军是谁.就像什么考试,比赛,第一永远会被人们所记住,所以我们 ...

随机推荐

  1. install Wine + WeChat in Fedora 31

    install Wine + WeChat in Fedora 31 dnf -y install dnf-plugins-core dnf config-manager --add-repo htt ...

  2. [Docker] redis 全配置

    启动容器,加载配置文件并持久化数据 docker run -d --privileged=true -p 6379:6379 --restart always -v /usr/redis/conf:/ ...

  3. python中的对文件的读写

    简单的实例 open函数获取文件,w是写权限,可以对文件进行io操作 file=open('C:/Users/Administrator/Desktop/yes.txt','w') file.writ ...

  4. 【UR #9】App 管理器

    UOJ小清新题表 题目内容 UOJ链接 一句话题意:给出一个强联通的混合图,有一些有向边和无向边.删除一些边使其维持强联通的状态,求删边方案. 数据范围 \(1\leq n\leq 5000,0\le ...

  5. ansible使用setup模块查看受控机的信息(ansible2.9.5)

    一,ansible的setup模块的用途: 用来获取主机的信息 说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest 对应的 ...

  6. js改变,设置table单双行颜色,jquery改变,设置table单双行颜色

    1.js实现单双行以不同颜色显示 $(document).ready(function () { var color = "#ffeab3"; $("#GvList tr ...

  7. RocketMQ扫盲篇

    本篇博客主要参考: <浅入浅出>-RocketMQ 敖丙 APACHE-RocketMQ Gitee RocketMQ官方文档 RocketMQ 实战与进阶 GitChat 又是好久没有写 ...

  8. fiddler 实用小技巧

    1.添加查看响应时间

  9. vue中上拉加载数据的实现

    获取屏幕高度来判断数据的加载                                       效果是这样的

  10. 实战二:nacos服务注册与发现,openfeign服务调用

    一,参照上一篇创建好微服务结构后,按业务需求编写各微服务逻辑 二,服务注册 1,安装nacos:下载,解压,运行startup.cmd 2,访问 http://localhost:8848/nacos ...