管理员
- 积分
- 1063
- 金钱
- 1063
- 注册时间
- 2019-9-19
- 在线时间
- 194 小时
|
一、前言
0、此贴源于新用户需求,熟悉linux应用开发的可跳过;
1、功能需求:在出厂系统的基础上,通过linux应用程序来控制板子出厂系统的led指示灯,注意是使用内核自带的GPIO LED驱动,而不是教程驱动实验的;
2、其实阿尔法教程里面的【xxx驱动开发指南.pdf】里面的驱动实验,也有对应的应用程序来控制板子LED,下面代码引用【第四十一章 嵌入式Linux LED驱动开发实验】的ledApp应用程序。
二、代码演示
- #include "stdio.h"
- #include "unistd.h"
- #include "sys/types.h"
- #include "sys/stat.h"
- #include "fcntl.h"
- #include "stdlib.h"
- #include "string.h"
- #define LEDOFF 0
- #define LEDON 1
- int main(int argc, char *argv[])
- {
- int fd, retvalue;
- char *filename;
- unsigned char databuf[1];
- if(argc != 3){
- printf("Error Usage!\r\n");
- return -1;
- }
- filename = argv[1];
- /* 打开led驱动 */
- fd = open(filename, O_RDWR);
- if(fd < 0){
- printf("file %s open failed!\r\n", argv[1]);
- return -1;
- }
- databuf[0] = atoi(argv[2]); /* 要执行的操作:打开或关闭 */
- if(databuf[0] == LEDON) //添加32-37行
- {
- databuf[0] = '1';
- } else {
- databuf[0] = '0';
- }
- /* 向/dev/led文件写入数据 */
- retvalue = write(fd, databuf, sizeof(databuf));
- if(retvalue < 0){
- printf("LED Control Failed!\r\n");
- close(fd);
- return -1;
- }
- retvalue = close(fd); /* 关闭文件 */
- if(retvalue < 0){
- printf("file %s close failed!\r\n", argv[1]);
- return -1;
- }
- return 0;
- }
复制代码
注意相对于【第四十一章 嵌入式Linux LED驱动开发实验】的ledApp应用程序源码,添加第32行至第37行代码。
三、执行效果
交叉编译ledAPP.c程序后,将ledApp二进制程序文件传到板子验证效果:
1、执行指令./ledApp /sys/class/leds/sys-led/brightness 1点亮出厂系统LED;
2、执行指令./ledApp /sys/class/leds/sys-led/brightness 0熄灭出厂系统LED。
四、后话
1、如果不需要在输入指令里加入LED属性brightness的绝对路径,可以改造上面应用程序(请分析源码逻辑),比如代码写成char *filename = " /sys/class/leds/sys-led/brightness";通过open函数打开这个设备属性即可,再通过write写入设定值,最后close该属性文件;
2、上面应用源码非常简单,可以随意按照自己的想法来重新编写,仅供参考。
|
|