Beaglebone Black升级Ubuntu 16.04至18.04后PWM驱动LED失效问题
解决BeagleBone Black Ubuntu 18.04升级后PWM失效问题
1. 检查PWM设备节点是否存在
Ubuntu 18.04调整了PWM子系统的设备路径,先确认系统是否识别到PWM控制器:
ls /sys/class/pwm/
正常应显示pwmchip0、pwmchip1等节点,若缺失则说明设备树未正确加载PWM控制器,需重新启用。
2. 重新加载PWM设备树覆盖
BeagleBone Black的PWM依赖设备树覆盖,升级后配置方式可能变更:
- 查看当前加载的覆盖:
cat /sys/devices/platform/bone_capemgr/slots
- 若未加载对应PWM覆盖,手动添加(替换为你的引脚对应的覆盖名称,比如P9_14对应
bone_pwm_P9_14):
echo am33xx_pwm > /sys/devices/platform/bone_capemgr/slots echo bone_pwm_P9_14 > /sys/devices/platform/bone_capemgr/slots
3. 修复权限问题
升级后PWM设备节点权限可能被重置,导致程序无法访问:
- 临时修改权限:
sudo chmod 666 /sys/class/pwm/pwmchip0/*
- 永久设置权限:创建
/etc/udev/rules.d/99-pwm.rules文件,写入:
SUBSYSTEM=="pwm", GROUP="gpio", MODE="0666"
然后重启udev服务:
sudo udevadm control --reload-rules && sudo udevadm trigger
4. 适配旧程序的接口变化
Ubuntu 18.04采用了标准PWM sysfs接口,旧程序可能依赖废弃路径(如/sys/devices/ocp.*/pwm_test_*),需修改程序为标准流程:
- 导出PWM通道:
echo 0 > /sys/class/pwm/pwmchip0/export(0为通道号,根据引脚对应) - 设置周期:
echo 1000000 > /sys/class/pwm/pwmchip0/pwm0/period(单位纳秒) - 设置占空比:
echo 500000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle - 启用PWM:
echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable
5. 硬件功能验证
用命令直接测试PWM是否工作:
echo 0 > /sys/class/pwm/pwmchip0/export echo 1000000 > /sys/class/pwm/pwmchip0/pwm0/period echo 500000 > /sys/class/pwm/pwmchip0/pwm0/duty_cycle echo 1 > /sys/class/pwm/pwmchip0/pwm0/enable
若LED正常闪烁,说明硬件无问题,问题出在程序适配或配置;若仍不工作,检查引脚是否正确或硬件是否损坏。
内容的提问来源于stack exchange,提问作者George
相关产品推荐
相关产品推荐

