您的位置:首页 > 运维架构 > Linux

学习Linux(32)控制LED设备

2020-07-20 18:21 225 查看

在Linux系统中,绝大多数硬件设备都有非常成熟的驱动框架,驱动工程师使用这些框架添加与板子相关的硬件支持,建立硬件与Linux内核的联系,内核再通过统一文件系统接口呈现给用户,用户通过对应的设备文件控制硬件。
对于LED设备,Linux提供了LED子系统驱动框架,在Linux内核源码中的“Documentation/leds/leds-class.txt”有相关的描述,它实现了一个leds类,用户层通过sysfs文件系统对LED进行控制。

驱动程序:为迎接设备创建相应的设备节点文件。规定好设备文件的使用方式
应用程序:根据驱动程序规定的设备文件使用方式去控制硬件
控制硬件设备步骤:

1、找出硬件设备所对应的设备节点文件
/dev 目录下
对驱动程序熟悉的工程师可以使用,一个设备节点文件控制硬件全部特性
/sys 目录下
业余工程师使用,一个设备节点文件只控制硬件的一个特性

2、找出驱动程序规定的设备文件使用方式

LED灯设备文件
设备节点
/sys/class/leds

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

//Ubuntu主机LED设备的路径,具体请根据自己的主机LED设备修改
// #define RLED_DEV_PATH "/sys/class/leds/input2::capslock/brightness"
// #define GLED_DEV_PATH "/sys/class/leds/input2::numlock/brightness"
// #define BLED_DEV_PATH "/sys/class/leds/input2::scrolllock/brightness"

int main(int argc, char *argv[])
{
int res = 0;
int r_fd, g_fd, b_fd;

printf("This is the led demo\n");
//获取红灯的设备文件描述符
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);
//延时1s
sleep(1);
//红灯灭
write(r_fd, "0", 1);

//绿灯亮
write(g_fd, "255", 3);
//延时1s
sleep(1);
//绿灯灭
write(g_fd, "0", 1);

//蓝灯亮
write(b_fd, "255", 3);
//延时1s
sleep(1);
//蓝灯亮
write(b_fd, "0", 1);
}
}



Hankin
2020.07.17

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: