我在 SAMA5D27 嵌入式主板上使用 Linux。我还使用 libgpiod 来操作主板的 GPIO 配置。首先,我可以使用命令列出指定 gpiochips 的所有行、它们的名称、消费者、方向、活动状态gpioinfo
,如下所示:
gpiochip0 - 128 lines:
line 0: "PA0" unused input active-high
line 1: "PA1" unused input active-high
line 2: "PA2" unused input active-high
line 3: "PA3" unused input active-high
line 4: "PA4" unused input active-high
line 5: "PA5" unused input active-high
line 6: "PA6" unused input active-high
line 7: "PA7" unused input active-high
line 8: "PA8" unused input active-high
line 9: "PA9" unused input active-high
line 10: "PA10" "red" output active-high [used]
line 11: "PA11" unused input active-high
...
对于我的工作,我想保留“PA10”供个人使用;,此引脚指的是红色 LED。但无论使用什么命令来操作此 GPIO 引脚,它都会向我显示:
error setting the GPIO line values: Device or resource busy
我认为那是因为它显示为[used]
。
有没有办法让它不再使用?让它自由,以便我可以操作它?
答案1
标记used
和Device or resource busy
表示此 I/O 引脚已被驱动程序专用。
有几种方法可以深入了解哪些人可能使用了 PIN 码:
- 检查
/sys/class/gpio/gpio*/
(现已弃用,但仍经常使用) - 检查
/sys/kernel/debug/gpio
(如果有debugfs
可用且已安装) - 检查活动设备树,查看引脚是否与设备或驱动程序关联
它red
在这里命名,你提到它是一个 LED,所以它可以在 下显示/sys/class/leds/*
,可能带有默认触发器?如果是这样,你可以通过修改触发器来重新利用它,或者如果你想更直接地手动控制引脚/使用 libgpiod,则将其取消注册为 LED……编辑设备树可能是使更改永久生效的方法。
答案2
“已使用”表示此引脚连接到外围设备或总线。您可以从内核设备树 dts 文件和电路板原理图中检查哪一个映射到此引脚。例如,如果引脚连接到 i2c 总线,则应使用 i2c 命令而不是 gpio cmd。