QEMU模拟飞思卡尔i.MX6Q SABRE Lite板U-Boot引导设备识别异常求助
问题解决方案汇总
SD/MMC设备无法识别问题
该问题是主线下游U-Boot的imx6 ESDHC驱动与QEMU模拟硬件的兼容性问题导致:主线下游U-Boot默认开启SD卡检测、写保护引脚的电平校验逻辑,但QEMU模拟的sd-card设备并未挂载对应的虚拟GPIO引脚,导致U-Boot直接跳过SD卡识别流程。你可以通过两种方式修复:
- 编译U-Boot前修改配置:在
mx6sabrelite.h配置文件中添加宏定义#define CONFIG_MMC_BROKEN_CD关闭卡检测逻辑,同时注释掉写保护检测相关的配置宏,编译后生成的U-Boot即可正常识别QEMU挂载的SD卡。 - 直接使用Boundary Devices官方维护的U-Boot分支:该分支针对sabrelite板型做了QEMU兼容适配,无需修改配置即可直接识别SD、USB设备,实测2020.04到2022.07的分支版本均可正常使用。
SPI NOR flash启动问题
你当前的参数缺少启动设备指定配置,QEMU的sabrelite机器默认从SD卡启动,要从SPI NOR flash启动需要添加参数-M sabrelite,bootrom=spi,配合你已有的sst25vf016b设备参数即可正常引导。注意需要提前给U-Boot镜像添加i.MX6专用的IVT启动头,不能直接使用编译生成的原始u-boot.bin烧录到flash.bin中。
USB设备无法识别问题
该问题是U-Boot的USB驱动要求控制器节点存在dr_mode属性,但QEMU自带的sabrelite设备树未配置该属性导致,你可以在U-Boot的设备树中给两个USB控制器节点添加dr_mode = "host";配置即可修复,或者使用上述Boundary Devices维护的U-Boot分支,该分支已经默认处理了该兼容问题。
真实硬件U-Boot版本支持说明
真实i.MX6Q SABRE Lite板对U-Boot版本兼容性很强,2017.03之后的主线下游U-Boot版本都可以正常运行,如需同时兼容QEMU模拟环境,优先使用Boundary Devices维护的对应分支即可。
内容的提问来源于stack exchange,提问作者Evgeni Lipatov
相关产品推荐
相关产品推荐

