OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5052|回复: 0

【简单分享】linux应用程序控制阿尔法内核自带GPIO驱动指示灯LED

[复制链接]

6

主题

200

帖子

0

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
1063
金钱
1063
注册时间
2019-9-19
在线时间
194 小时
发表于 2020-12-7 12:55:51 | 显示全部楼层 |阅读模式
一、前言

0、此贴源于新用户需求,熟悉linux应用开发的可跳过;
1、功能需求:在出厂系统的基础上,通过linux应用程序来控制板子出厂系统的led指示灯,注意是使用内核自带的GPIO LED驱动,而不是教程驱动实验的;
2、其实阿尔法教程里面的【xxx驱动开发指南.pdf】里面的驱动实验,也有对应的应用程序来控制板子LED,下面代码引用【第四十一章 嵌入式Linux LED驱动开发实验】的ledApp应用程序。

二、代码演示
  1. #include "stdio.h"
  2. #include "unistd.h"
  3. #include "sys/types.h"
  4. #include "sys/stat.h"
  5. #include "fcntl.h"
  6. #include "stdlib.h"
  7. #include "string.h"

  8. #define LEDOFF         0
  9. #define LEDON         1

  10. int main(int argc, char *argv[])
  11. {
  12.         int fd, retvalue;
  13.         char *filename;
  14.         unsigned char databuf[1];

  15.         if(argc != 3){
  16.                 printf("Error Usage!\r\n");
  17.                 return -1;
  18.         }

  19.         filename = argv[1];
  20.         /* 打开led驱动 */
  21.         fd = open(filename, O_RDWR);
  22.         if(fd < 0){
  23.                 printf("file %s open failed!\r\n", argv[1]);
  24.                 return -1;
  25.         }

  26.         databuf[0] = atoi(argv[2]);        /* 要执行的操作:打开或关闭 */
  27.         if(databuf[0] == LEDON)     //添加32-37行
  28.         {
  29.                 databuf[0] = '1';
  30.         } else {
  31.                 databuf[0] = '0';        
  32.         }

  33.         /* 向/dev/led文件写入数据 */
  34.         retvalue = write(fd, databuf, sizeof(databuf));
  35.         if(retvalue < 0){
  36.                 printf("LED Control Failed!\r\n");
  37.                 close(fd);
  38.                 return -1;
  39.         }

  40.         retvalue = close(fd); /* 关闭文件 */
  41.         if(retvalue < 0){
  42.                 printf("file %s close failed!\r\n", argv[1]);
  43.                 return -1;
  44.         }

  45.         return 0;
  46. }
复制代码

注意相对于【第四十一章 嵌入式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。
led_test.jpg

四、后话
1、如果不需要在输入指令里加入LED属性brightness的绝对路径,可以改造上面应用程序(请分析源码逻辑),比如代码写成char *filename = " /sys/class/leds/sys-led/brightness";通过open函数打开这个设备属性即可,再通过write写入设定值,最后close该属性文件
2、上面应用源码非常简单,可以随意按照自己的想法来重新编写,仅供参考。




=======================
出征,嗒嗒嗒——
快点上车!
=======================
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-25 20:36

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表