一、libgpiod – C library
(1)libgpiod
用于与 linux GPIO 字符设备交互的 C 库和工具
字符设备(gpiod 代表 GPIO 设备)
从 linux 4.8 开始,不推荐使用 GPIO sysfs 接口。用户空间应该使用
字符设备。这个库封装了 ioctl 调用和简单的 API 背后的数据结构。
其实还有另一个库Raspberry Pi,但是现在已经停止维护了,所以我们不再继续使用。
(2)安装编译
-
下载地址:
https://git.kernel.org/pub/scm/libs/libgpiod/libgpiod.git/about/ -
下载解压之后,我们首先确保安装依赖:
autoconf --version
- 配置编译安装
./autogen.sh
./configure
make
sudo make install
(3)命令行使用
目前有六个命令行工具可用:
-
gpiodetect - 列出系统上存在的所有 gpiochips,它们的名称,标和 GPIO 线数
-
gpioinfo - 列出指定 gpiochips 的所有行、它们的名称、消费者、方向、活动状态和附加标志
-
gpioget - 读取指定 GPIO 线的值
-
gpioset - 设置指定 GPIO 线的值,可能保留这些线导出并等待超时、用户输入或信号
-
gpiofind - 找到 gpiochip 名称和给定行名称的行偏移
-
gpiomon - 等待 GPIO 线上的事件,指定要观看的事件,退出前要处理多少事件或事件应该报告给控制台
例子:
# 获取帮助信息
$ gpio -h
# 获取BCM编号
$ gpio readall
# 读取单个 GPIO 线的值。
$ gpioget gpiochip1 23
0
# 同时读取两个值。设置线的活动状态
# 低。
$ gpioget --active-low gpiochip1 23 24
1 1
# 设置两行的值,然后守护进程并等待信号(SIGINT 或
# SIGTERM) 在释放它们之前。
$ gpioset --mode=signal --background gpiochip1 23=1 24=0
# 设置单行的值,然后立即退出。这很有用
# 用于浮动引脚。
$ gpioset gpiochip1 23=1
# 按名称查找 GPIO 行。
$ gpiofind "USR-LED-2"
GPIO芯片1 23
# 按名称切换 GPIO,然后等待用户按 ENTER。
$ gpioset --mode=wait `gpiofind "USR-LED-2"`=1
# 等待单个 GPIO 线上的三个上升沿事件,然后退出。
$ gpiomon --num-e