背景:

由于在调试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的方法相关推荐

  1. linux环境配置以后生效,Linux中修改环境变量及生效方法

    Linux中修改环境变量及生效方法 在/etc/profile文件中添加变量[对所有用户生效(永久的)] 用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且 ...

  2. Linux中打印文件行号的方法

    Linux中打印文件行号的方法 准备环境 [root@max mytest]# cat >/mytest/number.txt<<EOF > no root,no fruit ...

  3. linux查看vmware的版本,linux中查看系统版本信息的方法

    前言 测试环境:测试环境: centos7.2 64位 测试用户:root 查看系统位数(32位或64位) 方法1: [root@VM_0_13_centos ~]# uname -a Linux V ...

  4. linux环境变量生效方式,Linux中修改环境变量及生效方法

    Linux中修改环境变量及生效方法 方法一: 在/etc/profile文件中添加变量[对所有用户生效(永久的)] 用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户 ...

  5. Linux应用层操作GPIO,查看GPIO状态

    1.操作GPIO system("echo 421 >/sys/class/gpio/export"); system("echo out >/sys/cla ...

  6. 嵌入式linux中的端口配置,GPIO接口 - 嵌入式Linux学习笔记_Linux编程_Linux公社-Linux系统门户网站...

    一.GPIO介绍 GPIO意为通用输入输出端口,简单说就是一些引脚,通过它们输出高低电平或者通过它们读取引脚高低电平状态 S3C2440有130个I/O端口,分为A-J共9组:GPA.GPB....G ...

  7. Linux中的vi操作详解【转】

    vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的任何版本,vi编辑器是完全相 ...

  8. 关于Linux中使用USE(使用率/饱和度/错误)方法分析系统性能的一些笔记

    写在前面 今天和小伙伴们分享通过USE方法对系统进行性能分析和性能调整 博文内容涉及: 什么是USE方法,以及USE的使用建议 具体的USE指标采集分析 食用方式: 需要Linux基础知识 理解不足小 ...

  9. 在 Linux 中强制卸载的 3 种方法显示“设备正忙”

    在某些情况下,当您尝试卸载文件系统尤其是 NFS 时,它会显示"设备正忙"消息.当 NFS 服务器有一些问题(主要是无法访问)并且您有一个软 NFS 挂载时,通常会发生这种情况. ...

最新文章

  1. 刚过国家线计算机考研报哪个好,考研估分刚过了去年国家线,今年上岸还有希望吗?有!...
  2. software enginer1
  3. PyTorch view() 函数
  4. 使用 rocketmq-spring-boot-starter 来配置、发送和消费 RocketMQ 消息
  5. 神舟电脑冲击创业板失败 首发未获证监会通过
  6. larvel 路由未生效_laravel-5 – 将Laravel 5项目部署到托管后路由无效
  7. (四) 数据库表基本操作
  8. Linux中eclipse配置Maven,eclipse maven选项怎么配置settings
  9. jQuery阻止表单提交
  10. HTTP Live Streaming (HLS) - 概念
  11. 我眼中的嵌入式是这样的!
  12. 架构组件—Android应用中使用视图绑定(binding)
  13. LinuxAndroid网络前缀和子网掩码的关系
  14. Nginx代理静态页面
  15. 批量转换文件编码(By notepad++)
  16. 51单片机4位数码管按键显示
  17. easyexcel实现导出
  18. yii通过uc实现同步登陆
  19. 基于linux的智能小车_基于ARM10与LINUX智能小车系统设计.doc
  20. 解决no matching host key type found. Their offer: ssh-rsa报错信息具体方法

热门文章

  1. JSP中的page指令常用的属性
  2. 一家专业的网络系统集成商
  3. Web之后台管理页面布局
  4. Android Framework(一)--对Zygote的理解
  5. MPLS 虚拟专用网络 Hub and Spoke实验
  6. 个人支付接口/支付宝H5拉起支付/转账
  7. 用Java解决:三天打鱼两天晒网问题
  8. 查看parquet文件工具parquet-tools
  9. 5000计算机配置清单,15000的电脑主机配置清单
  10. 网易云音乐客户端 无法联网