1. 使能linux内核选项CONFIG_GPIO_SYSFS

  CONFIG_GPIO_SYSFS=y

2. 测试方法

  2.1 关注/sys/class/gpio下的文件

    --export/unexport文件

    --gpioX指代具体的gpio引脚

    --gpio_chipY指代gpio控制器

  2.2 申请将某个gpio(假设申请gpio3的第27个gpio, gpio3对应gpiochip416)的控制权导出到用户空间

    # ls /sys/class/gpio

    export gpiochip416  gpiochip448  gpiochip480  unexport

    # echo 443 /sys/class/gpio/export (443 = 416 + 27, 这样就将gpio3的第27个gpio给导出到用户空间了)

    此操作会生成目录/sys/class/gpio/gpio443, 指代具体的gpio引脚

    gpio443目录下有以下文件: 

      direction 表示gpio端口的方向,读取结果是in或out。该文件也可以写,写入out 时该gpio设为输出同时电平默认为低。写入low或high则不仅可以设置为输出还可以设置输出的电平

      value 表示gpio引脚的电平,0(低电平)1(高电平),如果gpio被配置为输出,这个值是可写的,记住任何非零的值都将输出高电平, 如果某个引脚能并且已经被配置为中断,则可以调用poll(2)函数监听该中断,中断触发后poll(2)函数就会返回。

      edge 表示中断的触发方式,edge文件有如下四个值:none, rising, falling,both。

      none表示引脚为输入,不是中断引脚

      rising表示引脚为中断输入,上升沿触发

      falling表示引脚为中断输入,下降沿触发

      both表示引脚为中断输入,边沿触发,这个文件节点只有在引脚被配置为输入引脚的时候才存在。 当值是none时可以通过如下方法将变为中断引脚

        echo "both" > edge;对于是both,falling还是rising依赖具体硬件的中断的触发方式。此方法即用户态gpio转换为中断引脚的方式

      active_low

  2.3 /sys/class/gpio/gpiochipN

    gpiochipN表示的就是一个gpio_chip,用来管理和控制一组gpio端口的控制器,该目录下存在以下属性文件:

    base 和N相同,表示控制器管理的小的端口编号。

    lable 诊断使用的标志(并不总是唯一的)

    ngpio 表示控制器管理的gpio端口数量(端口范围是:N ~ N+ngpio-1)

在linux的用户空间操作gpio的更多相关文章

  1. linux下通过sysfs操作GPIO

    linux下通过sysfs操作GPIO 在嵌入式设备中对GPIO的操作是最基本的操作.一般的做法是写一个单独驱动程序,网上大多数的例子都是这样的.其实linux下面有一个通用的GPIO操作接口,那就是 ...

  2. linux驱动开发:用户空间操作LCD显示简单的图片【转】

    转自:http://blog.csdn.net/changliang7731/article/details/53074616 上一章我们简单介绍了LCD的一些基本原理.当然更深奥的还有,比如gamm ...

  3. 如何看待Linux操作系统的用户空间和内核空间

    作为中央核心处理单元的CPU,除了生产工艺的不断革新进步外,在处理数据和响应速度方面也需要有权衡.稍有微机原理基础的人都知道Intel X86体系的CPU提供了四种特权模式ring0~ring3,其中 ...

  4. [转]五个Linux下用户空间的调试工具

    有几个Linux下的用户空间调试工具和技术,它们用来分析用户空间的问题相当有用.它们是: 'print' 语句 查询 (/proc, /sys 等) 跟踪 (strace/ltrace) Valgri ...

  5. linux 从用户空间的 I/O 存取

    刚刚描述的这些函数主要打算被设备驱动使用, 但它们也可从用户空间使用, 至少在 PC- 类 的计算机. GNU C 库在 <sys/io.h> 中定义它们. 下列条件应当应用来对于 inb ...

  6. CK:User mode Bus Error(用户空间操作内核地址导致的异常)

    关键词:VEC_ACCESS.coredump.LR.PC等. CK中存在一种VEC_ACCESS异常,可能原因是用户空间访问了内核空间,还有一种是内核访问不存在的总线地址. 下面简单构造VEC_AC ...

  7. Linux创建用户等操作

    转自: https://www.linuxidc.com/Linux/2017-06/144916.htm 与大家分享下Linux系统中创建用户.设置密码.修改用户.删除用户的命令,希望对你有所帮助. ...

  8. Linux:用户&用户组操作

    用户:查看用户:whoami.who am i.who mom likes创建用户:adduser dgw切换登录用户:su -l dgw退出当前用户: exit删除用户:deluser dgw -- ...

  9. Linux之用户相关操作

    1. 创建用户 useradd -m wolf #即创建一个用户并且创建同名的家目录 2. 设置密码 passwd wolf

随机推荐

  1. IDEA实用教程(十一)—— 使用Maven创建JavaSE项目

    第一步 第二步 在IDEA中,我们常用三种骨架 org.apache.maven.archetypes:maven-archetype-quickstart : 打包方式为jar org.apache ...

  2. JS之try..catch...

    try 测试代码块的错误. catch 语句处理错误. throw 创建并跑出错误. try { //在这里运行代码 抛出错误 }catch(err){ //在这里处理错误 } 实例: <p&g ...

  3. npm start a http server( 在windows的任意目录上开启一个http server 用来测试html 页面和js代码,不用放到nginx的webroot目录下!!)

    原文:https://stackabuse.com/how-to-start-a-node-server-examples-with-the-most-popular-frameworks/#:~:t ...

  4. 1211 BBS后台管理文章添加

    目录 昨日内容回顾 侧边栏inclusion_tag inclusion_tag的响应 使用 自定义inclusion_tag,标签,过滤器 文章的点赞点踩 前端 后端 校验规则 文章的评论功能 1. ...

  5. java -static的特性和使用,静态类/方法/块/内部类/回收机制

    mark一下,今天的作业. java-core P115 如果将域定义为static,每个类中只有一个这样的域.(这里的域应该是指一片物理数据空间,而不是单纯的指代某一个变量,而是静态域). publ ...

  6. EPL II 编程打印

    一.EPL II 格式及打印测试 注意N命令前的换行和最后P1后的换行.将此段代码复制到windows记事本里另存为Print.ext,文件名随便,后缀为ext.然后通过cmd控制命令行输入" ...

  7. Django admin中文报错Incorrect string value 解决办法

  8. Backpack V

    Description Given n items with size nums[i] which an integer array and all positive numbers. An inte ...

  9. [C++11]C++可变参数模板

    可变参数模板 原文链接: http://blog.csdn.net/xiaohu2022/article/details/69076281 普通模板只可以采取固定数量的模板参数.然而,有时候我们希望模 ...

  10. C宏定义和使用

    #include <stdio.h> #include "head.h" #define TRUE 1 #define FALSE 0 #if defined (TRU ...