1. 程式人生 > >通過sysfs操控GPIO

通過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

[email protected]:/sys/class/gpio $echo 26 > export
[email protected]:/sys/class/gpio $ cd gpio26
[email protected]:/sys/class/gpio/gpio26 $ ls
active_low  device  direction  edge  power  subsystem  uevent  value
[email protected]:/sys/class/gpio/gpio26 $ cat direction 
out
[email protected]
:/sys/class/gpio/gpio26 $ cat value 1 [email protected]:/sys/class/gpio/gpio26 $ echo 0 >value [email protected]:/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

[email protected]:/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

[email protected]:/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

[email protected]:/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

點亮或熄滅LED硬體上,一個LED燈接在pi的Pin-25.  該引腳為BCM的GPIO26$ gpio readall +-----+-----+---------+------+---+---Pi 3---+---+------+---------+-----+----

linux應用開發:使用者空間如何通過sysfs控制GPIO

開發環境Ubuntu:14.04開發板:A33-Vstar開發板系統:linux-3.4.39-----------------------------------------------------1. 啟用GPIO sysfs interface首先看系統中有沒有“/sy

GPIO 通過sysfs匯出到 使用者空間

1.1. 開啟gpiolib支援,在menuconfig中evice Drivers->GPIO Support,選擇: [*] /sys/class/gpio/… (sysfs interface) <*> Generic memory-mapped G

MTK平臺通過adb獲取GPIO狀態

一、節點位置     在MTK平臺,我們可以通過cat節點(mt_gpio)來檢視對應的狀態。不同的平臺,該管腳對應的位置也是不同的,建議直接進入手機目錄檢視: adb shell find -name "mt_gpio" 我這檢視到對應的是:sys/devices

樹莓派通過GPIO控制步進電機

tps 分享 images logs http 分享圖片 .com 控制 圖片 一、接線方式與GPIO調用方法: 電源接入+5v和GND In1-4分別接GPIO1-4 正轉時,GPIO1-4分次傳入:[1,0,0,0],[sleep],[0,1,0,0],[sl

通過Libsoc在嵌入式ARM簡化GPIO呼叫

By Toradex胡珊逢 1). 簡介 嵌入式裝置往往會通過 GPIO 連線外設,從而實現通訊、狀態監測、控制等功能,使用者需要操作特定的 GPIO。在 Linux 系統中,使用者應用一般無法直接訪問 SoC 的 GPIO 暫存器,而使用特定的引腳編號,然而不同ARM模組平臺供應商的管腳定

基於裝置樹的GPIO驅動(通過系統節點控制)

#include <linux/types.h> #include <linux/pm.h> #include <linux/gpio.h> #include <linux/slab.h> #include <linux/init.h> #inclu

通過/dev/mem實現使用者層訪問GPIO暫存器

由於工作需要用到GPIO設定成中斷模式,但是不知道連線是否已經連線到指定的GPIO引腳, 而且配置是否成功,因此通過/dev/mem來檢視GPIO的配置是否成功是必須的。 記錄一下: #include <stdio.h> #include <stdlib.h>

25、新手入手樹莓派教程--通過TCP遠端控制GPIO(C++)

一、分析1、GPIO口初始化藉助wiringPi;2、利用linux下socket中的API,進行TCP通訊二、一個服務端和一個客戶端1、server端// /**********************************************************

通過網路遠端控制ARM系統GPIO應用例項

1). 簡介 本文著重展示基於Embedded Linux快速開發Web應用程式訪問ARM系統以便於遠端操控硬體GPIO或監控其狀態.文中演示例項所採用的ARM系統硬體為Toradex 基於NXP Vybrid的產品級ARM核心板Colibri VF61配合其Colibri

通過platform data 管理gpio資源--dev

#include <linux/gpio/machine.h> #include <linux/platform_device.h> #include "board.h" #

滲透學習筆記1【metasploit通過exe對他人電腦進行操控

                        注:此內容不得用

EasyARM i.mx287學習筆記——通過modbus tcp控制GPIO

0 前言    本文使用freemodbus協議棧,在EasyARM i.mx287上實現了modbus tcp從機。在該從機中定義了線圈暫存器,其中線圈暫存器地址較低的4位和EasyARM的P2.4至P2.5關聯,通過modbus指令可控制GPIO的輸出。本文修改自free

Linux 核心裝置驅動之GPIO驅動之GPIO sysfs支援

需要核心配置CONFIG_GPIO_SYSFS int gpiochip_sysfs_register(struct gpio_device *gdev) {  struct device *dev;  struct device *parent;  struct gpi

樹莓派學習筆記——使用檔案IO操作GPIO SysFs方式

0 前言    本文描述如果通過檔案IO sysfs方式控制樹莓派 GPIO埠。通過sysfs方式控制GPIO,先訪問/sys/class/gpio目錄,向export檔案寫入GPIO編號,使得該GPIO的操作介面從核心空間暴露到使用者空間,GPIO的操作介面包括direction和value等,direct

GPIO在使用者空間(Sysfs)中的檢測與控制

前段時間在編譯安卓系統時有對GPIO控制的需求,經過一定探索之後找到了一個解決的方案,現分享一下。 主要的思路是:通過Sysfs在使用者空間使用GPIO,核心配置時選擇sysfs下對GPIO的支援,然後系統編譯完成後,在使用者空間通過對sysfs的GPIO目錄下的相關“檔

【EmbeddedDev】通過mmap方法訪問ADC/GPIO

正常通過檔案系統訪問AIN串列埠的值, 可以使用fread等檔案IO方式讀取/sys/bus/iio/devices/iio:device0/in_voltage*_raw的內容。 但是這樣在需要高頻

linux操作GPIO通用sysfs方法

查詢/sys/class/gpio目錄,如果沒有,則在編譯核心時,加入Device Drivers->GPIO Support->/sys/class/gpio/...(sysfs interface)。 linux2.6及以上的核心可以使用系統中的GPIOLI

Java通過jdbc遠端操控MySQL資料庫

import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.s

Kernel中GPIOSysfs介面的使用

今天想寫一個gpio的驅動,用於控制SoC上的一個電源控制io。看了一會兒,覺得對於gpio這種標準裝置,kernel中應該有通用的驅動,甚至應該有Sysfs的介面可供使用者空間程式使用。 於是先看了下driver目錄,發現果然有gpio這個目錄,不過裡面的東