基于iMX8M Plus的自定义板U-Boot无法识别USB棒的解决咨询
问题解决方案
是的,你需要在U-Boot中移植phy-fsl-imx8mq-usb.c驱动,这是解决USB控制器probe失败(错误码-110)的核心步骤,原因如下:
- U-Boot的USB子系统依赖对应PHY驱动完成控制器初始化,而当前U-Boot源码缺失该PHY驱动,导致dwc3控制器无法完成probe
- Linux用户空间能识别USB棒,正是因为内核自带了该PHY驱动;你移除内核驱动后识别失败的现象,也验证了该PHY驱动是USB功能正常工作的必要条件
具体实施步骤
移植PHY驱动到U-Boot
- 将内核源码中的
phy-fsl-imx8mq-usb.c复制到U-Boot的drivers/phy/fsl/目录下 - 适配U-Boot头文件体系:替换内核特有头文件(如
<linux/xxx.h>)为U-Boot对应头文件(如<asm/xxx.h>、<dm/device.h>、<phy/phy.h>等),重点对齐U-Boot设备模型(DM)的接口规范 - 添加编译配置:
- 在
drivers/phy/fsl/Kconfig中新增配置项:config PHY_FSL_IMX8MQ_USB bool "FSL i.MX8MQ/8MP USB PHY support" depends on PHY && ARCH_IMX8MP help Enable support for the i.MX8MQ and i.MX8MP USB PHY controller. - 在
drivers/phy/fsl/Makefile中添加编译规则:obj-$(CONFIG_PHY_FSL_IMX8MQ_USB) += phy-fsl-imx8mq-usb.o
- 在
- 将内核源码中的
调整设备树与U-Boot配置
- 确保自定义板DTS中
usb3_phy0/usb3_phy1节点的compatible属性为fsl,imx8mp-usb-phy,且驱动代码中匹配该字符串 - 开启U-Boot必要配置:在
.config中确保CONFIG_USB、CONFIG_USB_DWC3、CONFIG_USB_DWC3_IMX、CONFIG_PHY、CONFIG_PHY_FSL_IMX8MQ_USB均已启用 - 检查PHY节点的时钟、电源域配置,确保U-Boot能正确初始化这些硬件资源
- 确保自定义板DTS中
调试probe超时问题
- 错误码-110对应
ETIMEDOUT,通常是PHY初始化超时;可在驱动的probe函数中添加调试打印,定位具体失败步骤 - 参考U-Boot中同系列PHY驱动(如
phy-fsl-imx8m-usb.c)的实现逻辑,对齐初始化流程
- 错误码-110对应
内容的提问来源于stack exchange,提问作者void_brain
相关产品推荐
相关产品推荐

