在linux嵌入式设备开发中,对GPIO的操作是最常用的,在一般的情况下,一般都有对应的驱动,应用程序打开对应的驱动,然后通过ioctl函数就可以对其进行操作。在linux中,其实有一个通用的GPIO驱动,应用通过调用文件的形式来进行读写操作,这个文件是/sys/class/gpio,本文就简单的来讲解一下通用GPIO接口的读写。

一、 以echo的形式调用system函数进行操作,这种形式编程比较简单,结构比较清晰,如下:

[cpp] view plaincopy
  1. void set_gpio64_low(void)
  2. {
  3. system("echo 64 > /sys/class/gpio/export");
  4. system("echo out > /sys/class/gpio/gpio64/direction");
  5. system("echo 0 > /sys/class/gpio/gpio64/value");
  6. }

只要完成三个步骤,就可以了

[cpp] view plaincopy
  1. void set_gpio64_high(void)
  2. {
  3. system("echo 64 > /sys/class/gpio/export");
  4. system("echo out > /sys/class/gpio/gpio64/direction");
  5. system("echo 1 > /sys/class/gpio/gpio64/value");
  6. }

二、 通过文件的形式来调用

[cpp] view plaincopy
  1. int set_io_value_high(int gpio)
  2. {
  3. FILE *fp;
  4. char buffer[10];
  5. int value;
  6. char s[50]="";
  7. char s1[50]="";
  8. if ((fp = fopen("/sys/class/gpio/export", "w")) == NULL)
  9. {
  10. printf("Cannot open export file.\n");
  11. return -1;
  12. }
  13. fprintf(fp, "%d", gpio);
  14. fclose(fp);
  15. sprintf(s,"/sys/class/gpio/gpio%d/direction",gpio);
  16. if ((fp = fopen(s, "rb+")) == NULL)
  17. {
  18. printf("Cannot open %s.\n",s);
  19. return -1;
  20. }
  21. fprintf(fp, "out");
  22. fclose(fp);
  23. sprintf(s1,"/sys/class/gpio/gpio%d/value",gpio);
  24. if ((fp = fopen(s1, "rb+")) == NULL)
  25. {
  26. printf("Cannot open %s.\n",s1);
  27. return -1;
  28. }
  29. strcpy(buffer,"1");
  30. fwrite(buffer, sizeof(char), sizeof(buffer) - 1, fp);
  31. fclose(fp);
  32. return 1;
  33. }
[cpp] view plaincopy
  1. int set_io_value_low(int gpio)
  2. {
  3. FILE *fp;
  4. char buffer[10];
  5. int value;
  6. char s[50]="";
  7. char s1[50]="";
  8. if ((fp = fopen("/sys/class/gpio/export", "w")) == NULL)
  9. {
  10. printf("Cannot open export file.\n");
  11. return -1;
  12. }
  13. fprintf(fp, "%d", gpio);
  14. fclose(fp);
  15. sprintf(s,"/sys/class/gpio/gpio%d/direction",gpio);
  16. if ((fp = fopen(s, "rb+")) == NULL)
  17. {
  18. printf("Cannot open %s.\n",s);
  19. return -1;
  20. }
  21. fprintf(fp, "out");
  22. fclose(fp);
  23. sprintf(s1,"/sys/class/gpio/gpio%d/value",gpio);
  24. if ((fp = fopen(s1, "rb+")) == NULL)
  25. {
  26. printf("Cannot open %s.\n",s1);
  27. return -1;
  28. }
  29. strcpy(buffer,"0");
  30. fwrite(buffer, sizeof(char), sizeof(buffer) - 1, fp);
  31. fclose(fp);
  32. return 1;
  33. }

linux中通用GPIO接口的操作相关推荐

  1. 关于Linux中的apt-get的相关操作及原理

    关于Linux中的apt-get的相关操作及原理 Linux下的apt-get指令与相关文件夹 apt-get是linux下的一种简便的安装和更新软件的方法,在装软件的时候常用的命令就是 sudo a ...

  2. 黄东升: Linux中形形色色的接口API和ABI

    今天我们来看看Linux中形形色色的接口 前言 如果将内核比作一座工厂,那么Linux中众多的接口就是通往这个巨大工厂的高速公路.这条路要足够坚固,禁得起各种破坏(Robust).要能跑得了运货的卡车 ...

  3. 在 Linux 中使用ImageMagick命令行操作图像文件

    使用 convert 命令,可以无需打开图像编辑器进行修改图像文件.convert命令包含在ImageMagick安装包里. Centos8安装ImageMagick ImageMagick 可以安装 ...

  4. linux中fg jobs ctrl-z bg操作和kill-15、kill-9杀死进程

    Linux 提供了 fg 和 bg 命令,让我们轻松调度正在运行的任务. 假设你发现前台运行的一个程序需要很长的时间,但是需要干其他的事情,你就可以用 Ctrl-Z ,挂起这个程序,然后可以看到系统提 ...

  5. Linux里命令卸载mysql,linux中mysql完整卸载命令操作

    yum方式安装的mysql 1.yum remove mysql mysql-server mysql-libs compat-mysql51 2.rm -rf /var/lib/mysql 3.rm ...

  6. linux中iptables对防火墙的操作

    Iptables教程 1. iptables防火墙简介 Iptables也叫netfilter是Linux下自带的一款免费且优秀的基于包过滤的防火墙工具,它的功能十分强大,使用非常灵活,可以对流入.流 ...

  7. linux 应用层gpio中断_如何在嵌入式Linux中检测GPIO线路上的中断?

    在pandaboard OMAP4中,GPIO_39上每隔10ms产生一次中断.我已在Linux驱动程序代码中为此注册了处理程序,但由于未检测到中断,因此未处理该处理程序. 我确保在硬件级别(通过探测 ...

  8. SONiC中的SAI接口的操作指令以及相应的解释

    SONiC是一个基于开源软件的网络操作系统,它使用SAI(Switch Abstraction Interface)接口来与交换机芯片进行通信.下面是一些常见的SAI接口操作指令及其解释: creat ...

  9. linux中创建gpio节点

    转自:http://blog.chinaunix.net/uid-29165999-id-4296162.html #define GPIO_MAJOR 230 // major device NO. ...

最新文章

  1. BATJ 常考的 21 条 Linux 命令
  2. 使用Redis来实现LBS的应用
  3. Android_微信_设置
  4. css样式之 direction
  5. hdmi光端机运用于多媒体信息发布系统案例介绍
  6. visual设计的界面发布到iis上显示不一样_Material Design暗夜模式设计指南
  7. mean python_Python mean()方法的详细指南
  8. BZOJ 2763 飞行线路
  9. 群晖3617可以有几个网卡_Synology 群晖 DS1621+ 六盘位NAS 开箱拆解评测
  10. 图像函数 imagecreatetruecolor()和imagecreate()的异同点
  11. C#中的常量、类型推断和作用域
  12. 企业微信api发送告警信息
  13. 《CryENGINE+Game+Programming+with+C++,+C#,+and+Lua》第七章
  14. Linux中uuid是什么?UUID由几部分组成?
  15. Java实战之管家婆记账系统(8)——添加账目界面及功能实现
  16. 一个电脑接两个显示器(win10)
  17. scandir 介绍
  18. 【SAP Abap】SAP增强开发总结
  19. 热点的ap频段哪个快_AP频段2.4和5.0哪个好?有什么区别?
  20. java打包exe实例(使用javapackager)

热门文章

  1. Linux/CentOS下的CST和UTC时间的区别以及不一致的解决方法
  2. HAProxy安装与配置(一)
  3. hibernate映射配置文件说明
  4. 复旦的NLP——fudanNLP
  5. G2 可视化引擎-统计图表
  6. matlab中使用libsvm工具箱训练的svm分类器model保存
  7. 计算机怎么弹出专业团队,2018年专业技术人员继续教育答案92分
  8. Javascript第六章基本数据类型和引用数据类型第三课
  9. 从码农到架构师,如何成长为技术领导者?
  10. 关于java构造方法的描述_在JAVA语言中,下面关于构造函数描述正确的是()