树莓派 - 通过sysfs操控GPIO
点亮或熄灭LED
硬件上,一个LED灯接在pi的Pin-25. 该引脚为BCM的GPIO26
$ gpio readall
+-----+-----+---------+------+---+---Pi 3---+---+------+---------+-----+-----+
| BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| | | 3.3v | | | 1 || 2 | | | 5v | | |
| 2 | 8 | SDA.1 | ALT0 | 1 | 3 || 4 | | | 5v | | |
| 3 | 9 | SCL.1 | ALT0 | 1 | 5 || 6 | | | 0v | | |
| 4 | 7 | GPIO. 7 | IN | 1 | 7 || 8 | 1 | ALT5 | TxD | 15 | 14 |
| | | 0v | | | 9 || 10 | 1 | ALT5 | RxD | 16 | 15 |
| 17 | 0 | GPIO. 0 | IN | 0 | 11 || 12 | 1 | IN | GPIO. 1 | 1 | 18 |
| 27 | 2 | GPIO. 2 | IN | 0 | 13 || 14 | | | 0v | | |
| 22 | 3 | GPIO. 3 | IN | 0 | 15 || 16 | 0 | IN | GPIO. 4 | 4 | 23 |
| | | 3.3v | | | 17 || 18 | 0 | IN | GPIO. 5 | 5 | 24 |
| 10 | 12 | MOSI | IN | 0 | 19 || 20 | | | 0v | | |
| 9 | 13 | MISO | IN | 0 | 21 || 22 | 0 | IN | GPIO. 6 | 6 | 25 |
| 11 | 14 | SCLK | IN | 0 | 23 || 24 | 1 | IN | CE0 | 10 | 8 |
| | | 0v | | | 25 || 26 | 1 | IN | CE1 | 11 | 7 |
| 0 | 30 | SDA.0 | IN | 1 | 27 || 28 | 1 | IN | SCL.0 | 31 | 1 |
| 5 | 21 | GPIO.21 | IN | 1 | 29 || 30 | | | 0v | | |
| 6 | 22 | GPIO.22 | IN | 1 | 31 || 32 | 0 | IN | GPIO.26 | 26 | 12 |
| 13 | 23 | GPIO.23 | IN | 0 | 33 || 34 | | | 0v | | |
| 19 | 24 | GPIO.24 | IN | 0 | 35 || 36 | 0 | IN | GPIO.27 | 27 | 16 |
| 26 | 25 | GPIO.25 | OUT | 0 | 37 || 38 | 0 | IN | GPIO.28 | 28 | 20 |
| | | 0v | | | 39 || 40 | 0 | IN | GPIO.29 | 29 | 21 |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| BCM | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | BCM |
+-----+-----+---------+------+---+---Pi 3---+---+------+---------+-----+-----+├
按照下面的命令点亮及熄灭LED
pi@raspberrypi:/sys/class/gpio $echo 26 > export
pi@raspberrypi:/sys/class/gpio $ cd gpio26
pi@raspberrypi:/sys/class/gpio/gpio26 $ ls
active_low device direction edge power subsystem uevent value
pi@raspberrypi:/sys/class/gpio/gpio26 $ cat direction
out
pi@raspberrypi:/sys/class/gpio/gpio26 $ cat value
1
pi@raspberrypi:/sys/class/gpio/gpio26 $ echo 0 >value
pi@raspberrypi:/sys/class/gpio/gpio26 $ cat value
0
sysfs
Linux 2.6以后的内核引入了sysfs文件系统, sysfs被看作是与proc, devfs和devpty同类别的文件系统。该文件系统是一个虚拟的文件系统,它可以产生一个包括所有系统硬件的层级视图。
sysfs把连接在系统上的设备和总线组织成一个分级的文件,它可以由用户空间存取, 向用户空间导出内核数据结构以及他们的属性。
其顶层目录包括, block, bus, dev, devices, class, fs, kernel, power 和firmware
从下面的bus, devices, class中对应的gpiochip1, 可以看到Linux设备模型与总线,设备,驱动,类的状态是对应的。
在linux内核中分别使用bus_type, device_driver, device来描述总线,驱动和设备。
device_driver和device分别表示驱动和设备,这两者都必须依附于一种总线,因此都包含struct bus_type指针。
/sys/bus
pi@raspberrypi:/sys/bus $ tree
├── gpio
│ ├── devices
│ │ ├── gpiochip0 -> ../../../devices/platform/soc/3f200000.gpio/gpiochip0
│ │ ├── gpiochip1 -> ../../../devices/gpiochip1
│ │ └── gpiochip2 -> ../../../devices/gpiochip2
│ ├── drivers
│ ├── drivers_autoprobe
│ ├── drivers_probe
│ └── uevent
/sys/devices
pi@raspberrypi:/sys/devices $ tree | more
├── gpiochip1
│ ├── dev
│ ├── gpio
│ │ └── gpiochip128
│ │ ├── base
│ │ ├── device -> ../../../gpiochip1
│ │ ├── label
│ │ ├── ngpio
│ │ ├── power
│ │ │ ├── autosuspend_delay_ms
│ │ │ ├── control
│ │ │ ├── runtime_active_time
│ │ │ ├── runtime_status
│ │ │ └── runtime_suspended_time
│ │ ├── subsystem -> ../../../../class/gpio
│ │ └── uevent
│ ├── of_node -> ../../firmware/devicetree/base/soc/expgpio
│ ├── power
│ │ ├── autosuspend_delay_ms
│ │ ├── control
│ │ ├── runtime_active_time
│ │ ├── runtime_status
│ │ └── runtime_suspended_time
│ ├── subsystem -> ../../bus/gpio
│ └── uevent
/sys/class
pi@raspberrypi:/sys/class $ tree
├── gpio
│ ├── export
│ ├── gpio26 -> ../../devices/platform/soc/3f200000.gpio/gpiochip0/gpio/gpio26
│ ├── gpiochip0 -> ../../devices/platform/soc/3f200000.gpio/gpio/gpiochip0
│ ├── gpiochip100 -> ../../devices/gpiochip2/gpio/gpiochip100
│ ├── gpiochip128 -> ../../devices/gpiochip1/gpio/gpiochip128
│ └── unexport
树莓派 - 通过sysfs操控GPIO的更多相关文章
- linux下通过sysfs操作GPIO
linux下通过sysfs操作GPIO 在嵌入式设备中对GPIO的操作是最基本的操作.一般的做法是写一个单独驱动程序,网上大多数的例子都是这样的.其实linux下面有一个通用的GPIO操作接口,那就是 ...
- 树莓派 Raspberry PI之GPIO
树莓派 Raspberry PI之GPIO 树莓派各版本硬件原理图:https://www.raspberrypi.org/documentation/hardware/raspberrypi/REA ...
- 树莓派基于scratch2控制GPIO
本文通过MetaWeblog自动发布,原文及更新链接:https://extendswind.top/posts/technical/raspberry_scratch2_gpio_control.m ...
- 树莓派学习之路-GPIO Zero
原来用的都是RPi.GPIO模式开发,写程序 今天看到了GPIOZERO的资料,觉得这个API还是很好用的, 唯一的缺点就是官方资料是英文的,而且目前这方面的资料也不多, 所以开始写这篇博文,将自己学 ...
- sysfs 控制gpio
按照下面的命令点亮及熄灭LED pi@raspberrypi:/sys/class/gpio $echo 26 > exportpi@raspberrypi:/sys/class/gpio $ ...
- 树莓派学习笔记——使用文件IO操作GPIO SysFs方式
0 前言 本文描写叙述假设通过文件IO sysfs方式控制树莓派 GPIO端口.通过sysfs方式控制GPIO,先訪问/sys/class/gpio文件夹,向export文件写入GPIO编号, ...
- 树莓派的GPIO编程
作者:Vamei 出处:http://www.cnblogs.com/vamei 严禁转载. 树莓派除了提供常见的网口和USB接口 ,还提供了一组GPIO(General Purpose Input/ ...
- 树莓派安装FLASK服务;并在端网页读取 GPIO状态和系统时间
做过一些物联网的作品:因为不想一直做APP来控制,因为不能每个人都去下载你自己做的APP,浏览器大家都是有的:那么每个人通过浏览器WEB来访问我们服务器,岂不是很简单和方便,采用flask+pytho ...
- 树莓派Zero W GPIO控制
作者:陈拓 chentuo@ms.xab.ac.cn 2018.06.09/2018.07.05 0. 概述 本文介绍树莓派 Zero W的GPIO控制,并用LED看效果. 0.1 树莓派GPIO编 ...
随机推荐
- E20180228-hm-xa
bounds n. 界限; 界限; 出界; 在(某人允许进入的)界限以外; 出格的; 跳跃( bound的名词复数 ); (球等的) 反跳; indice n. 指数(指指标, 如健康指数的指数); ...
- maven配置文件注意事项
1:安装完成后在C:\Users\Administrator\.m2有一个文件settings.xml需要修改一下配置 2:设置maven从网上下载的jar包.(时间长会很大).我设置它保存我的电脑位 ...
- JavaScript中this的使用方法总结
JavaScript中this的使用方法总结 在JavaScript中,this的使用分为四种场景,具体请参考阮一峰老师关于this的讲解 第一种情况是纯函数使用 var x =1 ; functio ...
- java-通过反射获取目标类的属性,方法,构造器
首先定义一个urse package com.studay_fanshe; public class User { private String uname; private int age; pri ...
- 用jdbc连接数据库并简单执行SQL语句
一:版本一.这种存在一个问题就是每执行一次操作都会创建一次Connection链接和且释放一次链接 1:创建pojo对象(OR映射,一个pojo类对应一张数据库表) package com.yin ...
- Springboot整合elasticsearch以及接口开发
Springboot整合elasticsearch以及接口开发 搭建elasticsearch集群 搭建过程略(我这里用的是elasticsearch5.5.2版本) 写入测试数据 新建索引book( ...
- 暑期训练狂刷系列——Hdu 1698 Just a Hook (线段树区间更新)
题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=1698 题目大意: 有一个钩子有n条棍子组成,棍子有铜银金三种组成,价值分别为1,2,3.为了对付每场 ...
- QT5每日一学(五)QT布局管理器
Qt中的布局管理器主要包括 QBoxLayout基本布局管理器 QGridLayout栅格布局管理器 QFormLayout窗体布局管理器 而基本布局管理器又分为QHBoxLayout水平布局管理器和 ...
- rabbitmq实践笔记(一):安装、配置与使用初探
引言: 对于一个大型的软件系统来说,会有很多的组件.模块及不同的子系统一起协同工作,模块之间的通信需要一个可靠的通信管道来保证 ,通信管道需要解决解决很多问题,比如: 1)信息的发送者和接收者如何维持 ...
- vue watch监听对象及对应值的变化
data:{ a:1, b:{ value:1, type:1, } }, watch:{ a(val, oldVal){//普通的watch监听 console.log("a: " ...