虽然您可以自行开发驱动程序来在内核空间中控制 GPIO,但从用户空间访问 GPIO 有一种更为简便的方法。当时间要求不严格时,您可以使用 GPIO-SYSFS。
SYSFS 是一个虚拟文件系统,它将内核内部框架的一些功能导出到用户空间,而 GPIO 是可以通过 SYSFS 导出功能的框架之一。
GPIO-SYSFS 功能自内核 2.6.27 版本起,在所有主线内核中均已可用。
要在 SYSFS 中启用 GPIO,请选择以下内核选项:
设备驱动程序 ---> --- GPIO 支持 [*] /sys/class/gpio/... (sysfs 接口)
启用 GPIO-SYSFS 功能后,您可以使用新内核启动设备,以进行一些测试。
首先,您需要将要测试的 GPIO 导出到用户空间:
echo XX > /sys/class/gpio/export
XX 应由以下算法确定:
GPIOA_[B] 是您需要导出的 GPIO,其中,“A” 表示 GPIO 组,“B” 表示该组中引脚的偏移量。若第一个可用的 GPIO 存储区是 0 // (例如 iMX.28) XX = A×32 + B; 否则 // 第一个 GPIO 存储区是 1 XX = (A-1)×32 + B;
导出 GPIO 引脚后,您将能够看到 GPIO 接口被导出到:
/sys/class/gpio/gpioXX
通过该接口,您现在可以执行一些操作,例如:
# 读取引脚值 cat /sys/class/gpio/gpioXX/value # 更改引脚方向 echo in > /sys/class/gpio/gpioXX/direction echo out > /sys/class/gpio/gpioXX/direction # 切换 GPIO 输出电平 echo 0 > /sys/class/gpio/gpioXX/value echo 1 > /sys/class/gpio/gpioXX/value
这或许是个愚蠢的问题,但我要怎样才能知道哪个引脚在物理上与 gpioXX 相连呢?