在Linux 中的应用层操作gpio的方法
背景:
由于在调试WiFi驱动模块的时候需要增加一个功能:就是用户按下一个按键就可以,将WiFi的ssid和psk恢复到出场模式。所以这里就需要开辟一个线程去检测按键的状态。第一步首先是用户按下按键后应用层能够检测到相应的gpio的电平的变化。
gpio的状态应该是mpu中最基本的操作,所以在厂家提供的SDK中应该已经有相应的驱动了,所以用户层可以直接使用,通过上网查询后,先整理如下:
要在应用层字节使用提供好的gpio的驱动,需要在Linux的内核编译前使用menuconfig,增加Linux的gpio驱动部分。
device drivers -> gpio support ->/sys/class/gpio.....(sysfs interface)
在应用层可以使用sysfs中的gpio子系统。
编译好了之后烧写到目标板子中,gpio的操作有多种方法:
1.在命令行界面操作。
(1)进入gpio的目录:
cd /sys/class/gpio/
(2)将相应的gpio引脚从内核层导入到用户层,下面中的d,是具体的gpio引脚。笔者使用的是瑞星微的rv1108芯片。
GPIOx_yZ -----------d= x*32 + (y - a) * 8 + Z
例如:
GPIO0_A7 -----------d= 0*32 + (a - a) * 8 + 7 = 7
echo d > export
执行完成后可以通过ls命令查看:
进入生成的gpio7目录:
(3)设置gpio的输入输出方向
echo "in" > direction -----------输入方向
echo "out" > direction -----------输出方向
(4)获取或者控制gpio的状态
获取:(在direction 为 in的情况下)
cat value
0 ----------引脚电平为低
1 ----------引脚电平为高
控制:(在direction为out的情况下)
echo 1 > value -------输出高电平
echo 0 > value -------输出低电平
编译好了之后烧写到目标板子中,gpio的操作有多种方法:
1.在命令行界面操作。
(1)进入gpio的目录:
cd /sys/class/gpio/
(2)将相应的gpio引脚从内核层导入到用户层,下面中的d,是具体的gpio引脚。笔者使用的是瑞星微的rv1108芯片。
GPIOx_yZ -----------d= x*32 + (y - a) * 8 + Z
例如:
GPIO0_A7 -----------d= 0*32 + (a - a) * 8 + 7 = 7
echo d > export
(3)设置gpio的输入输出方向
echo "in" > direction -----------输入方向
echo "out" > direction -----------输出方向
(4)获取或者控制gpio的状态
获取:(在direction 为 in的情况下)
cat value
0 ----------引脚电平为低
1 ----------引脚电平为高
控制:(在direction为out的情况下)
echo 1 > value -------输出高电平
echo 0 > value -------输出低电平
2.在应用程序中操作。
{
char value;int export_fd, direction_fd, gpiovalue_fd;export_fd = open("/sys/class/gpio/export", O_WRONLY);if(-1 == export_fd){printf("[%s]:[%d] open gpio export file error\r\n", __FUNCTION__, __LINE__);exit(1);}if(-1 == write(export_fd, "7", 1)){printf("write file operation error\r\n");exit(1);}close(export_fd);//sleep(2000);direction_fd = open("/sys/class/gpio/gpio7/direction", O_WRONLY);if(-1 == direction_fd){printf("[%s]:[%d] open gpio direction file error\r\n", __FUNCTION__, __LINE__);exit(1);}if(-1 == write(direction_fd, "in", sizeof("in"))){printf("[%s]:[%d] write operation direction error\r\n", __FUNCTION__, __LINE__);close(direction_fd);exit(1);}close(direction_fd);printf("[%s]:[%d] debug information print\r\n", __FUNCTION__, __LINE__);gpiovalue_fd = open("/sys/class/gpio/gpio7/value", O_RDONLY);if(-1 == gpiovalue_fd){printf("[%s]:[%d]: open value file error\r\n", __FUNCTION__, __LINE__);exit(1);}while(1){if(-1 == read(gpiovalue_fd, &value, sizeof(value))){printf("[%s]:[%d] read gpiovalue is fail\r\n", __FUNCTION__, __LINE__);close(gpiovalue_fd);exit(1);}if('0' == value){printf("now, the reset key is pressing and the key value = %c !!!!\r\n", value);lseek(gpiovalue_fd, 0, SEEK_SET);sleep(1);}close(gpiovalue_fd);
}
在Linux 中的应用层操作gpio的方法相关推荐
- linux环境配置以后生效,Linux中修改环境变量及生效方法
Linux中修改环境变量及生效方法 在/etc/profile文件中添加变量[对所有用户生效(永久的)] 用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且 ...
- Linux中打印文件行号的方法
Linux中打印文件行号的方法 准备环境 [root@max mytest]# cat >/mytest/number.txt<<EOF > no root,no fruit ...
- linux查看vmware的版本,linux中查看系统版本信息的方法
前言 测试环境:测试环境: centos7.2 64位 测试用户:root 查看系统位数(32位或64位) 方法1: [root@VM_0_13_centos ~]# uname -a Linux V ...
- linux环境变量生效方式,Linux中修改环境变量及生效方法
Linux中修改环境变量及生效方法 方法一: 在/etc/profile文件中添加变量[对所有用户生效(永久的)] 用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户 ...
- Linux应用层操作GPIO,查看GPIO状态
1.操作GPIO system("echo 421 >/sys/class/gpio/export"); system("echo out >/sys/cla ...
- 嵌入式linux中的端口配置,GPIO接口 - 嵌入式Linux学习笔记_Linux编程_Linux公社-Linux系统门户网站...
一.GPIO介绍 GPIO意为通用输入输出端口,简单说就是一些引脚,通过它们输出高低电平或者通过它们读取引脚高低电平状态 S3C2440有130个I/O端口,分为A-J共9组:GPA.GPB....G ...
- Linux中的vi操作详解【转】
vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的任何版本,vi编辑器是完全相 ...
- 关于Linux中使用USE(使用率/饱和度/错误)方法分析系统性能的一些笔记
写在前面 今天和小伙伴们分享通过USE方法对系统进行性能分析和性能调整 博文内容涉及: 什么是USE方法,以及USE的使用建议 具体的USE指标采集分析 食用方式: 需要Linux基础知识 理解不足小 ...
- 在 Linux 中强制卸载的 3 种方法显示“设备正忙”
在某些情况下,当您尝试卸载文件系统尤其是 NFS 时,它会显示"设备正忙"消息.当 NFS 服务器有一些问题(主要是无法访问)并且您有一个软 NFS 挂载时,通常会发生这种情况. ...
最新文章
- 刚过国家线计算机考研报哪个好,考研估分刚过了去年国家线,今年上岸还有希望吗?有!...
- software enginer1
- PyTorch view() 函数
- 使用 rocketmq-spring-boot-starter 来配置、发送和消费 RocketMQ 消息
- 神舟电脑冲击创业板失败 首发未获证监会通过
- larvel 路由未生效_laravel-5 – 将Laravel 5项目部署到托管后路由无效
- (四) 数据库表基本操作
- Linux中eclipse配置Maven,eclipse maven选项怎么配置settings
- jQuery阻止表单提交
- HTTP Live Streaming (HLS) - 概念
- 我眼中的嵌入式是这样的!
- 架构组件—Android应用中使用视图绑定(binding)
- LinuxAndroid网络前缀和子网掩码的关系
- Nginx代理静态页面
- 批量转换文件编码(By notepad++)
- 51单片机4位数码管按键显示
- easyexcel实现导出
- yii通过uc实现同步登陆
- 基于linux的智能小车_基于ARM10与LINUX智能小车系统设计.doc
- 解决no matching host key type found. Their offer: ssh-rsa报错信息具体方法