学习Linux(32)控制LED设备

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

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

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

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

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


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

//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);
	}
}

学习Linux(32)控制LED设备_第1张图片
学习Linux(32)控制LED设备_第2张图片
学习Linux(32)控制LED设备_第3张图片

Hankin
2020.07.17

你可能感兴趣的:(学习)