imx6solo平台U-Boot 2020版本NAND启动失败求助
U-Boot 2020版本烧录NAND后无法启动的排查与解决
问题背景
通过Buildroot将U-Boot从2009版本升级至2020.04版本后,新编译的u-boot.imx镜像通过imx_usb_loader加载可正常启动,但烧录至NAND闪存后设备无法启动。无JTAG调试工具,使用的板级文件为mx6sabreauto.c、mx6solo.cfg和mx6sabreauto.h,未使用SPL或DTS,仅生成u-boot.imx。
imx_usb_loader启动日志
U-Boot 2020.04 (Feb 11 2023 - 15:41:38 +0100) CPU: i.MX6SOLO rev1.3 at 792MHz CPU: Industrial temperature grade (-40C to 105C) at 50C Reset cause: POR Model: i.MX6 DualLite/Solo SABRE Automotive Board Board: MX6Q-Sabreauto rev@ DRAM: 2 GiB NAND: nand_base: device found, Manufacturer ID: 0x2c, Chip ID: 0xd3 nand_base: Micron NAND 1GiB 3,3V 8-bit nand_base: Micron NAND 1GiB 3,3V 8-bit nand_base: 1024 MiB, SLC, erase size: 256 KiB, page size: 4096, OOB size: 128 use legacy bch geometry 1024 MiB MMC: FSL_SDHC: 0, FSL_SDHC: 2 Loading Environment from MMC... MMC: no card present mmc_init: -123, time 2 Warning - No block device, using default environment Loading Environment from NAND... Scanning device for bad blocks Warning - bad CRC, using default environment No panel detected: default to Hannstar-XGA Display: Hannstar-XGA (1024x768) In: serial Out: serial Err: serial Net: FEC [PRIME] Warning: FEC (eth0) using random MAC address - ea:37:e5:51:c1:86 Boot from USB for mfgtools Warning - Use default environment for using default environment Hit any key to stop autoboot: 0
烧录操作日志
=> nand erase 0x0 0x40000000 NAND erase: device 0 whole chip Erasing at 0x3ffc0000 -- 100% complete. OK => tftp 0x10800000 u-boot.imx Using FEC device TFTP from server 192.168.30.30; our IP address is 192.168.30.10 Filename 'u-boot.imx'. Load address: 0x10800000 Loading: ##################################################### 3.9 MiB/s done Bytes transferred = 777216 (bdc00 hex) => nand read 0x10800000 0x00000000 777216 NAND read: device 0 offset 0x0, size 0x777216 7827990 bytes read: OK => reset resetting ...
排查与解决步骤
1. 修正烧录命令的核心错误
从烧录日志可见,你执行了nand read命令而非nand write——这只是把NAND数据读回内存,根本没将u-boot.imx写入NAND!正确的烧录命令应为:
=> nand write 0x10800000 0x0 0xbdc00
注:0xbdc00是u-boot.imx字节数(777216)对应的十六进制值,直接使用该值可避免页/块对齐问题。
2. 确认NAND启动的镜像结构与偏移
- i.MX6的NAND启动要求镜像包含完整的IVT(镜像向量表)和DCD(设备配置数据),Buildroot编译时若配置正确会自动生成,可通过
mkimage -l u-boot.imx验证结构完整性。 - 确认NAND启动偏移为0x0(i.MX6 Sabreauto默认NAND启动地址),若2009版本使用过非标准偏移,需同步调整2020版本的配置。
3. 适配NAND BCH校验配置
从启动日志的use legacy bch geometry可知,U-Boot 2020版本的NAND驱动可能与旧版BCH配置存在兼容性问题:
- 检查
mx6sabreauto.c中的NAND初始化代码,确认BCH校验的页大小、OOB大小与你的Micron NAND(4096页/128 OOB)完全匹配。 - 在
mx6solo.cfg中明确启用硬件BCH支持(2009版本可能用软件BCH):CONFIG_SYS_NAND_BCH=y CONFIG_SYS_NAND_ECC_BCH_NUM=8
4. 验证烧录后镜像的完整性
烧录完成后,将NAND中的镜像读回内存并与原文件对比,确认没有坏块或烧录错误:
=> nand read 0x10800000 0x0 0xbdc00 => cmp.b 0x10800000 0x12000000 0xbdc00
注:0x12000000是u-boot.imx通过TFTP加载的备用地址,需提前将原镜像加载到该地址。若对比不一致,需重新擦除NAND并烧录。
5. 确认硬件启动模式设置
检查开发板的启动拨码开关,确保设置为NAND启动模式,避免误触发MMC或USB启动路径。
内容的提问来源于stack exchange,提问作者Aïda Brahim
相关产品推荐
相关产品推荐

