概述
通過 sysfs 方式控制 GPIO,先訪問 /sys/class/gpio 目錄,向 export 文件寫入 GPIO 編號,使得該 GPIO 的操作接口從內核空間暴露到用戶空間,GPIO 的操作接口包括 direction 和 value 等,direction 控制 GPIO 方向,而 value 可控制 GPIO 輸出或獲得 GPIO 輸入。文件 IO 方式操作 GPIO,使用到了4個函數 open、close、read、write。
首先,看看系統中有沒有“/sys/class/gpio”這個文件夾。如果沒有請在編譯內核的時候加入:
Device Drivers ->
GPIO Support ->
/sys/class/gpio/… (sysfs interface)。
/sys/class/gpio 的使用說明
如果是在已經適配好的 Linux 內核上,那么相信已經有了完成的 gpiochip,可以在用戶空間 /sys/class/gpio 目錄下看到如下文件:
export
gpiochip0/ gpiochip32/ gpiochip64/ gpiochip96/ unexport
其中引腳編號可能並不是這些。
說明:
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,寄存器名稱,引腳總數。
導出一個引腳的操作步驟
計算引腳編號
首先計算此引腳編號:
引腳編號 = 控制引腳的寄存器基數 + 控制引腳寄存器位數
導出引腳
向 /sys/class/gpio/export 寫入此編號,比如12號引腳,在 shell 中可以通過以下命令實現:
echo 12 > /sys/class/gpio/export
命令成功后生成 /sys/class/gpio/gpio12 目錄,如果沒有出現相應的目錄,說明此引腳不可導出。
設置方向
direction 文件,定義輸入輸入方向,可以通過下面命令定義為輸出:
echo out > /sys/class/gpio/gpio12/direction
direction 接受的參數可以是:in、out、high、low。其中參數 high / low 在設置方向為輸出的同時,將 value 設置為相應的 1 / 0。
查看方向
cat /sys/class/gpio/gpio12/direction
設置輸出值
echo 1 > /sys/class/gpio/gpio12/value
查看輸出值
cat /sys/class/gpio/gpio12/value
取消導出
echo 12 > /sys/class/gpio/unexport