linux通用GPIO驱动,写GPIO文件不立即生效问题解决
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文件不立即生效问题解决的更多相关文章
- 基于Linux ALSA音频驱动的wav文件解析及播放程序 2012
本设计思路:先打开一个普通wav音频文件,从定义的文件头前面的44个字节中,取出文件头的定义消息,置于一个文件头的结构体中.然后打开alsa音频驱动,从文件头结构体取出采样精度,声道数,采样频率三个重 ...
- 通过linux核映射驱动访问GPIO
1. HPS GPIO原理 1.功能方块图 linux内核是通过Linux内核memory-mapped device驱动访问GPIO控制器的寄存器而控制HPS端用户的LED和KEY的.memory- ...
- 调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之一
/** ****************************************************************************** * @author 暴走的小 ...
- 调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之二
/** ****************************************************************************** * @author 暴走的小 ...
- 调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之三
/** ****************************************************************************** * @author 暴走的小 ...
- Davinci DM6446开发攻略——LINUX GPIO驱动源码移植
一. DM6446 GPIO的介绍 说到LINUX 驱动移植,没有移植过的朋友,或刚刚进入LINUX领域的朋友,最好去看看<LINUX 设备驱动程序>第三 ...
- Linux内核驱动之GPIO子系统API接口概述
1.前言 在嵌入式Linux开发中,对嵌入式SoC中的GPIO进行控制非常重要,Linux内核中提供了GPIO子系统,驱动开发者在驱动代码中使用GPIO子系统提供的API函数,便可以达到对GPIO控制 ...
- Linux驱动之GPIO子系统和pinctrl子系统
前期知识 1.如何编写一个简单的Linux驱动(一)--驱动的基本框架 2.如何编写一个简单的Linux驱动(二)--设备操作集file_operations 3.如何编写一个简单的Lin ...
- Linux内核驱动之GPIO子系统(一)GPIO的使用
转自:http://blog.csdn.net/mirkerson/article/details/8464290 一 概述 Linux内核中gpio是最简单,最常用的资源(和 interrupt , ...
随机推荐
- JS的函数参数传递为值传递
function setAge(i) { alert(i);//24 i = 18; alert(i);//18,i的改变不会影响外面的age }; var age = 24; setAge(age) ...
- 转:清除arcsde空间垃圾数据以及解决sde图层名称被占用的问题
因为对空间数据管理的不善(非法的删除.重命名等),导致sde中存在一些垃圾数据.和图层名称被占用,这种问题已经有好几个同事问我怎么解决了?现把这个问题已经解决了,下面将整个详细过程写出来,共享给碰到同 ...
- Excel 解析 (大文件读取)BingExcel
最近在整理一个excel读取与写出的orm框架.使用的saxreader方式,支持百万级别的excel读取. 并且在通常使用中提供了监听的读取方式.如感兴趣的朋友可以稍微了解下 ,项目地址https: ...
- django 定制admin
https://www.cnblogs.com/liwenzhou/p/9519321.html
- sudo使用
/etc/sudo.conf /etc/sudoers /etc/sudoers.d/ /etc/sudo-ldap.conf /etc/sudoer sudo安全策略配置文件 Defaults re ...
- 简单粗暴的更换固态硬盘及WIN10 Ubuntu双系统
简介:本文希望帮助如本人一样的计算机小白,能够以最快的速度更换固态硬盘及安装系统. 1.提前将准备空白U盘(至少8G),利用UltraISO工具,或者软媒魔方,制作U盘启动盘. PS:需提前下载好WI ...
- MYSQL忘记超级用户密码修改
#service mysql stop #mysqld_safe --skip-grant-tables 另外开个SSH连接或终端 [root@localhost ~]# mysql mysql> ...
- python 爬图片
学了两天python,语法慢慢熟悉吧,数据结构都没写过. 写了一个爬图片的小东西.挺有意思的.都是女神照 (✿◡‿◡) 用的是正则表达式, ''' 符号: . 匹配任意字符,\n除外 * 匹配前一个字 ...
- Python 连接、操作数据库
使用python3+pymysql 一.安装python3 a) 从网上下载安装吧 二.安装pymysql https://pypi.python.org/pypi/PyMySQL h ...
- 2017.11.12 web中JDBC 方式访问数据库的技术
JavaWeb------ 第四章 JDBC数据库访问技术 在JavaWeb应用程序中数据库访问是通过Java数据库连接(JavaDateBase Connectivity简称JDBC)数据库的链接一 ...