AM57x平台Linux 4.9系统下GPIO247置高失败求助
解决AM57x平台GPIO247无法通过sysfs设置电平的问题
问题背景
- 设备:AM57x,Linux内核版本4.9
- 需求:将GPIOCHIP7的247号GPIO输出电平设置为
hi - 当前状态:通过
cat /sys/kernel/debug/gpio确认,gpio-247已绑定到enable功能,当前输出为lo - 操作失败现象:
- 执行
echo 247 > /sys/class/gpio/export返回echo: write error: Device or resource busy - 执行
echo 247 > /sys/class/gpio/unexport返回echo: write error: Invalid argument - 其他GPIO可正常通过sysfs操作
- 执行
原因分析
gpio-247已被内核驱动或设备树绑定到特定硬件功能,sysfs接口因资源被占用无法直接操作该GPIO。
解决方法
方法1:修改设备树(永久生效)
- 找到设备树中对应gpio-247的配置节点,通常格式类似
enable-gpios = <&gpio7 23 GPIO_ACTIVE_HIGH>;(注:gpio7的247号对应芯片内偏移为247-224=23) - 根据需求调整配置:要么移除该GPIO的功能绑定,要么直接设置默认输出为高电平,或修改驱动逻辑允许sysfs控制
- 重新编译设备树并烧写到设备中
方法2:通过debugfs临时修改(重启后失效)
利用内核debugfs直接操作GPIO电平:
# 确保debugfs已挂载,未挂载则执行 mount -t debugfs none /sys/kernel/debug # 将gpio-247设置为高电平 echo 1 > /sys/kernel/debug/gpio/gpiochip7/gpio247/value
注:部分内核版本的debugfs路径可能存在差异,若上述路径不存在,可查看
/sys/kernel/debug/gpio下的具体目录结构
方法3:卸载占用GPIO的驱动(临时生效)
- 查找占用gpio-247的驱动模块:
grep -r "247" /sys/class/gpio/ # 或结合设备树绑定信息,找到对应驱动名后执行 lsmod | grep <目标驱动名>
- 卸载驱动模块(需确保该驱动卸载不影响系统核心功能):
rmmod <目标驱动模块名>
- 重新通过sysfs操作GPIO:
echo 247 > /sys/class/gpio/export echo out > /sys/class/gpio/gpio247/direction echo 1 > /sys/class/gpio/gpio247/value
内容的提问来源于stack exchange,提问作者bibira6546
相关产品推荐
相关产品推荐

