如何在树莓派5 Debian Bookworm新Linux内核中固定sysfs GPIO引脚编号?
解决树莓派5 Debian Bookworm中GPIO引脚需添加基地址的问题
这是因为Debian Bookworm默认采用libgpiod替代了传统的sysfs GPIO接口,引脚编号从全局统一变为按gpiochip分块管理,以下是几种实用解决方法:
方法1:使用libgpiod工具直接操作(推荐)
libgpiod是官方推荐的GPIO控制方式,支持直接通过gpiochip和物理引脚对应的偏移量操作,无需手动计算基地址:
- 安装工具(未安装的话):
sudo apt install gpiod - 查看系统中的gpiochip控制器:
gpiodetect,输出里的gpiochip4 [pinctrl-bcm2712]就是对应树莓派物理引脚的控制器 - 查看物理引脚对应的偏移量:
gpioinfo gpiochip4,输出会明确标注每个偏移对应的物理引脚(比如line 20: "GPIO20" unused input active-high) - 直接控制引脚:
- 设置引脚20为高电平:
sudo gpioset gpiochip4 20=1 - 设置引脚20为低电平:
sudo gpioset gpiochip4 20=0 - 读取引脚20状态:
sudo gpioget gpiochip4 20
- 设置引脚20为高电平:
方法2:启用传统sysfs GPIO接口
如果习惯旧的sysfs操作逻辑,可以重新启用它,这样就能直接用物理引脚号操作:
- 编辑boot配置文件:
sudo nano /boot/firmware/config.txt - 在文件末尾添加:
dtparam=gpio=sysfs - 保存退出(按
Ctrl+O回车,再Ctrl+X) - 重启树莓派:
sudo reboot - 重启后即可用传统命令,比如导出引脚20:
sudo sh -c "echo 20 > /sys/class/gpio/export",后续操作无需加基地址
方法3:用udev规则创建物理引脚符号链接
如果不想启用sysfs,又想简化操作路径,可以通过udev规则给目标引脚创建对应符号链接:
- 创建udev规则文件:
sudo nano /etc/udev/rules.d/99-rpi-gpio.rules - 添加对应规则(以引脚20为例,它对应gpiochip4的20偏移,基地址571,所以系统节点是
gpio591):
多个引脚就重复添加类似行,替换对应的SUBSYSTEM=="gpio", KERNEL=="gpio591", SYMLINK+="gpio20"KERNEL和SYMLINK编号 - 重新加载规则:
sudo udevadm control --reload-rules && sudo udevadm trigger - 之后就可以通过
/sys/class/gpio/gpio20操作引脚20,无需再记忆基地址
内容的提问来源于stack exchange,提问作者y9a
相关产品推荐
相关产品推荐

