【linux】led子系统
前言
- 接下来记录的是 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 trigger(x86平台)
查看该文件的内容时,该文件会 列出它的所有可用触方式,而当前使用的触发方式会以“[]”符号括起。
- 修改触发方式
- 例子:
echo none > /sys/class/leds/ledA/trigger- none:none触发方式
- ledA:ledA设备
- 修改后,便按新的触发方式触发
- 例子:
- 常见的触发方式
- brightness
设计哲学
- 简单哈哈
推荐命名格式
- "设备名字:颜色:功能"
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子系统的更多相关文章
- linux led子系统(二)
对于led子系统中,有那么多得trigger,下面就来简单了解下. 1.default-on static void defon_trig_activate(struct led_classdev * ...
- linux led子系统(一)
就像学编程第一个范例helloworld一样,学嵌入式,单片机.fpga之类的第一个范例就是点亮一盏灯.对于庞大的linux系统,当然可以编写一个字符设备驱动来实现我们需要的led灯,也可以直接利用g ...
- (linux)LED子系统
数据结构(/include/linux/leds.h) enum led_brightness { LED_OFF = 0, LED_HALF = 127, LED_FULL = 255, }; le ...
- 初探linux子系统集之led子系统(二)
巴西世界杯,德国7比1东道主,那个惨不忍睹啊,早上起来看新闻,第一眼看到7:1还以为点球也能踢成这样,后来想想,点球对多嘛6比1啊,接着就是各种新闻铺天盖地的来了.其实失败并没有什么,人生若是能够成功 ...
- 初探linux子系统集之led子系统(一)
就像学编程第一个范例helloworld一样,学嵌入式,单片机.fpga之类的第一个范例就是点亮一盏灯.对于庞大的linux系统,当然可以编写一个字符设备驱动来实现我们需要的led灯,也可以直接利用g ...
- arm Linux 驱动LED子系统 测试
Linux内核在3.0以上引入了设备树概念(具体哪个版本不清楚)在编译内核后需要将与之对应的dtb文件也下载人板子上才能使内核与硬件关联起来. dtb文件是有dts文件编译后生成的:例如 /* * C ...
- 初探linux子系统集之led子系统(二)【转】
本文转载自:http://blog.csdn.net/eastmoon502136/article/details/37606487 巴西世界杯,德国7比1东道主,那个惨不忍睹啊,早上起来看新闻,第一 ...
- 初探linux子系统集之led子系统(一)【转】
本文转载自:http://blog.csdn.net/eastmoon502136/article/details/37569789 就像学编程第一个范例helloworld一样,学嵌入式,单片机.f ...
- 初探linux子系统集之led子系统(三)
世界杯结束了,德国战车夺得了大力神杯,阿根廷最终还是失败了.也许3年,5年,或者10年后,人们就不知道巴西世界杯的亚军是谁,但是总是会记得冠军是谁.就像什么考试,比赛,第一永远会被人们所记住,所以我们 ...
随机推荐
- Makefile常用函数(转)
一.字符串处理函数 1.$(subst FROM,TO,TEXT) 函数名称:字符串替换函数-subst. 函数功能:把字串"TEXT"中的"FROM"字符替换 ...
- Rust之路(3)——数据类型 下篇
[未经书面同意,严禁转载] -- 2020-10-14 -- 架构是道,数据是术.道可道,非常道:术不名,不成术!道无常形,术却可循规. 学习与分析数据类型,最基本的方法就是搞清楚其存储原理,变量和对 ...
- MeteoInfoLab脚本示例:OMI Swath HDF数据
这个例子读取OMI卫星Swath数据中的CloudFaction变量并绘图.脚本程序: #Add data file folder = 'D:/Temp/hdf/' fns = 'OMI-Aura_L ...
- 用Pycharm创建指定的Django版本
最近在学习胡阳老师(the5fire)的<Django企业级开发实战>,想要使用pycharm创建django项目时,在使用virtualenv创建虚拟环境后,在pycharm内,无论如何 ...
- 第二十章 nginx常见问题
一.Nginx常见问题 一.nginx多server优先级 在开始处理一个http请求时,nginx会取出header头中的Host变量,与nginx.conf中的每个server_name进行匹配, ...
- 编译安装tree命令
查看当前的tree [12:33:33 root@C8[ ~]#rpm -qi tree Name : tree Version : 1.7.0 Release : 15.el8 Architectu ...
- ERROR [RMI TCP Connection(3)-127.0.0.1] - init datasource error
运行报错 ERROR [RMI TCP Connection(3)-127.0.0.1] - init datasource error, url: jdbc:mysql://localhost:33 ...
- 国内npm镜像源设置
淘宝npm镜像 搜索地址:http://npm.taobao.org/ registry地址:http://registry.npm.taobao.org/ cnpmjs镜像 搜索地址:http:// ...
- python抓取动态验证码,具体第几帧数的位置静态图片
一.代码+注解 import os from PIL import Image import requests import io def save_img(): headers = { 'User- ...
- JavaWeb宿舍管理系统(附 演示、源码下载地址)
宿舍管理是高校管理的重要组成部分,一套优秀的管理系统不仅可以降低宿舍管理的难度,也能在一定程度上减少学校管理费用的支出,能是建设现代化高校管理体系的重要标志. 本篇文章将带你从运行环境搭建.系统设计. ...


