前言

  • 接下来记录的是 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. .NET Standard 类库的使用技巧

    系列目录     [已更新最新开发文章,点击查看详细] 在前一篇博客<.NET Standard中配置TargetFrameworks输出多版本类库>中详细介绍了如何创建.配置.条件编译. ...

  2. ThreadLocal什么时候会出现OOM的情况?为什么?

    ThreadLocal里面使用了一个存在弱引用的map,当释放掉threadlocal的强引用以后,map里面的value却没有被回收.而这块value永远不会被访问到了. 所以存在着内存泄露. 最好 ...

  3. 多测师讲解接口测试 _fiddler无法打开浏览器_高级讲师肖sir

    错误现象: 打开fi'd'dler以后浏览器无法打开,关闭fiddler之后可以打开浏览器 解决方案: 1. 2. 在点击确定

  4. 多测师讲解接口测试 _理论基础知识001_高级讲师肖sir

    前言: 我们今天进入接口测试的学习! 今天学习的内容是偏向理论 接口理论 了解接口测试(1) 一.什么是接口测试? 接口统称api,即程序与程序之间的对接.交接.交互.是测试系统组件间接口的一种测试. ...

  5. MeteoInfoLab脚本示例:TRMM 2A12 HDF数据

    TRMM 2A12 HDF数据是卫星观测的SWATH数据(轨道数据),比格点数据处理起来要麻烦一些.数据的经纬度保存在geolocation变量中,需要先将经纬度数据读出来(均为2维数组),然后读取云 ...

  6. bootStrap小结1

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. MySQL:SELECT COUNT 小结

    MySQL:SELECT COUNT 小结 背景 今天团队在做线下代码评审的时候,发现同学们在代码中出现了select count(1) . select count(*),和具体的select co ...

  8. JVM的艺术—类加载器篇(二)

    分享是价值的传递,喜欢就点个赞 引言 今天我们继续来深入的剖析类加载器的内容.上节课我们讲了类加载器的基本内容,没看过的小伙伴请加关注.今天我们继续. 什么是定义类加载器和初始化类加载器? 定义类加载 ...

  9. Java学习的第一天

    1.今天安装了Java操作环境,并运行了helloworld的程序 2.在安装过程中,文件路径丢了,与c++和c之前的差异使我难堪 3.明天准备完成小学期任务以及继续往下学习Java语言读大道至简

  10. nginx反向代理三台web服务器,实现负载均衡

    修改nginx.conf #在http和server之间加入这个模块 upstream guaji{ server 127.0.0.1:8080; server 127.0.0.2:8080; ser ...