sys class gpio 操作方法

2021-07-16 03:46:37 字數 1775 閱讀 3338



在嵌入式裝置中對gpio的操作是最基本的操作。一般的做法是寫乙個單獨驅動程式,網上大多數的例子都是這樣的。其實linux下面有乙個通用的gpio操作介面,那就是我要介紹的 「/sys/class/gpio」 方式。下面以友堅4412開發板上除錯為例子說明流程:

首先,看看系統中有沒有「/sys/class/gpio」這個資料夾。

如果沒有請在編譯核心的時候加入   device drivers  —>  gpio support  —>     /sys/class/gpio/… (sysfs inte***ce)。

/sys/class/gpio 的使用說明: 1、

gpio_operation 通過/sys/檔案介面操作io埠 gpio到檔案系統的對映;

2、控制gpio的目錄位於/sys/class/gpio;

3、 /sys/class/gpio/export檔案用於通知系統需要匯出控制的gpio引腳編號;

4、/sys/class/gpio/unexport 用於通知系統取消匯出;

5、/sys/class/gpio/gpiochipx目錄儲存系統中gpio暫存器的資訊,包括每個暫存器控制引腳的起始編號base,暫存器名稱,引腳總數 匯出乙個引腳的操作步驟;

6、首先計算此引腳編號,引腳編號 = 控制引腳的暫存器基數 + 控制引腳暫存器位數;

7、向/sys/class/gpio/export寫入此編號,比如12號引腳,在shell中可以通過以下命令實現,命令成功後生成/sys/class/gpio/gpio12目錄,如果沒有出現相應的目錄,說明此引腳不可匯出:echo 12 > /sys/class/gpio/export;

8、direction檔案,定義輸入輸入方向,可以通過下面命令定義為輸出;

9、echo out > direction, direction接受的引數:in, out, high, low。high/low同時設定方向為輸出,並將value設定為相應的1/0;

10、value檔案是埠的數值,為1或0.echo 1 > value

下面在4412開發板下進行一下測試

1.取得gpio資訊,在終端中敲入以下命令:

1.1、$ cd /sys/class/gpio;

1.2、$ for i in gpiochip* ; do echo `cat $i/label`: `cat $i/base` ; done

終端中顯示如下:

gpioa: 10

gpioa: 128

gpioa: 160

gpioa: 192

gpioa: 224

gpioa: 193

gpioa: 164

gpioa: 196

2.計算gpio號碼

我們把gpe11用來控制led。

gpe0的頭是128,gpe11 就是128+11 = 139.

$ echo 139 >; /sys/class/gpio/export

ls 一下看看有沒有 gpio139 這個目錄

3.gpio控制測試。

控制led所以是輸出。

所以我們應該執行:

$ echo out > /sys/class/gpio/gpio139/direction

之後就可以進行輸出設定了。

$ echo 1 > /sys/class/gpio/gpio139/value

$ echo 0 > /sys/class/gpio/gpio139/value

關於 sys class gpio 簡介

如果是在已經適配好的linux核心上,那麼相信已經有了完成的gpiochip,可以在使用者空間 sys class gpio目錄下看到,如 export gpiochip0 gpiochip32 gpiochip64 gpiochip96 unexport 然後對照手冊看下需要用到哪個gpio,舉個...

Linux下 sys class gpio驅動除錯

在核心初始化階段,將自動呼叫gpioilib sysfs init 在 sys class中建立gpio類,用於統一管理除錯gpio。export unexport屬性為gpio class成員,在註冊gpio類時,將會在 sys class gpio 目錄下建立export和unexport屬性檔...

js jquery 操作iframe的幾種方法

文章 or iframe在復合文件中經常用到,利用jquery操作iframe可以大幅提高效率,這裡收集一些基本操作 對於iframe框架 dom方法 父視窗操作iframe window.frames iframeson document iframe操作父視窗 window.parent.doc...