Linux开发平台实现了通用GPIO的驱动,用户通过,SHell或者系统调用能控制GPIO的输出和读取其输入值。其属性文件均在/sys/class/gpio/目录下,该目录下有export和unexport两个属性文件,其余都是连接文件,如gpiochipN等。

export文件导出某个GPIO,unexport将导出的GPIO从/sysfs中删除。向export文件写入要操作的GPIO序号N可以导出对应的GPIO设备目录,例如:

#echo 68>/sys/class/gpio/export

通过以上操作,在/sys/class/gpio/目录下生成gpio68/目录。通过读写该目录下的属性文件就可以操作该GPIO引脚。该目录具有一下属性文件:

1、active_low:具有读写属性,决定value中的值是否翻转,0不翻转,1翻转。

2、edge:具有读写属性,设置GPIO中断或检测中断是否发生。

3、subsystem:符号链接,指向父目录。

4、value:具有读写属性,GPIO引脚电平属性读取或者设置

5、direction:具有读写属性,用于设置或查看GPIO引脚输入输出方向

6、power:设备与供电方面相关的信息

7、uevent:内核与(udev,自动设备发现程序)之间的通信接口。

输入输出设置:

#echo out>/sys/class/gpio/gpioN/direction   #设置输出

#echo in>/sys/class/gpio/gpioN/direction   #设置输入

输入读取:

#echo in>/sys/class/gpio/gpioN/direction #设置输入

#cat /sys/class/gpio/gpioN/value  #查看电平

输出控制:

#echo out>/sys/class/gpio/gpioN/direction

#echo 0>/sys/class/gpio/gpioN/value  #输出低电平

#echo 1>/sys/class/gpio/gpioN/value #输出高电平

在C中操作GPIO

int fd_export=open("/sys/class/gpio/export",0_RDWR);//打开GPIO导出设备

write(fd_export,"N",,strlen("N"));

close(fd_export);

int fd_direcction = open("/sys/class/gpio/gpioN/direction",o_RDWR);

write(fd_direction,"out",strlen("out"));//设置为输出

close(fd_direction);

int fd_value=open("/sys/'class/gpio/gpioN/value",O_RDWR);

write(fd_value,"1",strlen("1"));

close(fd_value);

2018年3月14日:

最近在用文件读写的方式操着GPIO引脚的应用中发现写操作不能及时生效,linux系统再读写文件时默认是再内存中先缓存的,设备文件也比例外,所以偶尔一块应用中会出现操作写设备文件不生效。如果要及时生效可以采用一下几个方法之一:

1、条用系统命令:system("sync");

 2、再打开文件时添加:QIODevice::Unbuffered标志,如  open(QIODevice::ReadWrite | QIODevice::Unbuffered);

3、写动作完成之后立即读取。

个人建议采用第2种,第一种资源开销太大;第三种太耗费时间。

linux通用GPIO驱动,写GPIO文件不立即生效问题解决的更多相关文章

  1. 基于Linux ALSA音频驱动的wav文件解析及播放程序 2012

    本设计思路:先打开一个普通wav音频文件,从定义的文件头前面的44个字节中,取出文件头的定义消息,置于一个文件头的结构体中.然后打开alsa音频驱动,从文件头结构体取出采样精度,声道数,采样频率三个重 ...

  2. 通过linux核映射驱动访问GPIO

    1. HPS GPIO原理 1.功能方块图 linux内核是通过Linux内核memory-mapped device驱动访问GPIO控制器的寄存器而控制HPS端用户的LED和KEY的.memory- ...

  3. 调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之一

    /** ****************************************************************************** * @author    暴走的小 ...

  4. 调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之二

    /** ****************************************************************************** * @author    暴走的小 ...

  5. 调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之三

    /** ****************************************************************************** * @author    暴走的小 ...

  6. Davinci DM6446开发攻略——LINUX GPIO驱动源码移植

    一.             DM6446 GPIO的介绍      说到LINUX 驱动移植,没有移植过的朋友,或刚刚进入LINUX领域的朋友,最好去看看<LINUX 设备驱动程序>第三 ...

  7. Linux内核驱动之GPIO子系统API接口概述

    1.前言 在嵌入式Linux开发中,对嵌入式SoC中的GPIO进行控制非常重要,Linux内核中提供了GPIO子系统,驱动开发者在驱动代码中使用GPIO子系统提供的API函数,便可以达到对GPIO控制 ...

  8. Linux驱动之GPIO子系统和pinctrl子系统

    前期知识   1.如何编写一个简单的Linux驱动(一)--驱动的基本框架   2.如何编写一个简单的Linux驱动(二)--设备操作集file_operations   3.如何编写一个简单的Lin ...

  9. Linux内核驱动之GPIO子系统(一)GPIO的使用

    转自:http://blog.csdn.net/mirkerson/article/details/8464290 一 概述 Linux内核中gpio是最简单,最常用的资源(和 interrupt , ...

随机推荐

  1. JVM:java类的加载机制

    原文连接:https://www.cnblogs.com/ityouknow/p/5603287.html 类加载机制的奥妙. 1.什么是类的加载 类的加载指的是将类的.class文件中的二进制数据读 ...

  2. Spring课程 Spring入门篇 3-2 Spring bean装配(上)之bean的生命周期

    课程链接: 本节主要讲了三大块内容 1 bean的生命周期概念 2 bean的初始化和销毁的三种方式对比(代码演练) 3 总结 1 bean的生命周期概念 1.1 bean的定义:xml中关于bean ...

  3. 特殊的流程控制语句break continue exit

    break语句可以结束当前的for.foreach.while.do-while.或者switch的执行. for($i=1; $i<10; $i++) { if($i == 5) { echo ...

  4. echarts自适应宽度

    const myChartContainer = document.getElementById( id ); const resizeMyChartContainer = function () { ...

  5. Cloud Computing

    More numbers, More power. We waste much more every day. Everything can be connectible through specia ...

  6. 【从业余项目中学习2】C# 实现调用Matlab函数(Visual Studio:2008, Matlab:R2009a)

    最近正在给客户做的个人项目,要求实现C#与Matlab之间的调用,即C# winform界面收集用户输入的参数,将参数传递给Matlab的算法计算,Matlab函数返回的结果显示在winform界面上 ...

  7. DB2安装教程图解

    下载好之后,是exe文件,但是双击后基本上都是解压,但是使用自身的解压的话会有很多文件解压失败的情况,所以推荐使用自己电脑上自带的解压工具直接解压(如360解压,好压等). 解压之后直接运行setup ...

  8. 05、Spark

    05.Spark shell连接到Spark集群执行作业 5.1 Spark shell连接到Spark集群介绍 Spark shell可以连接到Spark集群,spark shell本身也是spar ...

  9. CPU的段寄存器

    http://www.cnblogs.com/tolimit/p/4775945.html?utm_source=tuicool&utm_medium=referral CPU的段寄存器 在C ...

  10. PHP编译安装时常见错误及解决办法,大全

    1.   configure: error: xslt-config not found. Please reinstall the libxslt >= 1.1.0 distribution ...