树莓派3通过Yocto构建镜像后无法使用ttyAMA0串口的问题
解决Yocto构建镜像下树莓派3 ttyAMA0串口无响应的问题
我之前在树莓派3上用Yocto构建镜像时也碰到过一模一样的串口问题,结合我的排查经验,给你几个关键的配置修改和排查方向:
1. 确保设备树overlay正确生效
虽然你已经添加了MACHINE_FEATURES += "pi3-disable-bt",但需要确认这个feature是否正确触发了设备树overlay的加载:
- 在
local.conf里明确指定要包含的overlay文件:IMAGE_BOOT_FILES += "bcm2837-rpi-3-b.dtb overlays/pi3-disable-bt.dtbo" - 生成镜像后,检查boot分区的
config.txt是否包含以下两行:
如果没有,可能是enable_uart=1 dtoverlay=pi3-disable-btENABLE_UART的设置没有正确传递到config.txt,可以在local.conf里强制添加:
然后在CONFIG_FRAGMENTS += "${TOPDIR}/conf/config.txt.fragment"config.txt.fragment里写入:enable_uart=1 dtoverlay=pi3-disable-bt
2. 验证串口设备节点与权限
- 启动系统后,检查
/dev/ttyAMA0是否存在:ls -l /dev/ttyAMA0 - 如果存在,确保当前用户属于
dialout组(默认串口设备属于该组):
或者临时开放权限测试:usermod -aG dialout your_usernamechmod 666 /dev/ttyAMA0
3. 检查内核驱动与引脚复用
- 确认PL011串口驱动已加载:
正常应该看到lsmod | grep pl011uart_pl011模块存在。 - 检查GPIO14(TX0)和GPIO15(RX0)的复用模式:
输出应该显示raspi-gpio get 14,15GPIO14: level=1 fsel=0 alt=0 func=TXD0和GPIO15: level=1 fsel=0 alt=0 func=RXD0,如果是其他模式,说明引脚复用配置错误。
4. 禁用可能占用串口的系统服务
即使你修改了SERIAL_CONSOLE = '115200 tty1',仍可能有serial-getty服务占用ttyAMA0:
- 检查服务状态:
systemctl status serial-getty@ttyAMA0.service - 如果服务正在运行,禁用并停止它:
systemctl disable --now serial-getty@ttyAMA0.service
5. 硬件层面的测试验证
- 用最简单的命令测试串口输出:
同时用示波器观察GPIO14引脚的电平变化,或者用另一块开发板的RX引脚连接到树莓派的TX引脚,用串口工具接收数据,排除硬件本身的问题。echo "Hello UART" > /dev/ttyAMA0
内容的提问来源于stack exchange,提问作者AntonioS
相关产品推荐
相关产品推荐

