U-Boot中用bootaux启动i.MX7D M4固件:TCM失败DDR正常
i.MX7D M4核心加载固件到TCM内存时崩溃重启的排查求助
我需要将固件加载到i.MX7D M4核心上,使用的是Colibri iMX7D-eMMC(MCIMX7D5EVM10S)SoC,已安装包含U-Boot启动加载程序的Yocto Linux构建。将固件加载到DDR内存(地址0x80008000)时一切正常,但加载到TCM内存(地址0x007f8000)时,即便采用相关步骤,系统仍会崩溃并重启。
DDR内存加载固件(正常运行)
使用以下命令加载到DDR内存,固件可正常启动运行:
ext4load mmc 0:2 0x80008000 /home/root/hello_world.elf dcache flush bootaux 0x80008000
TCM内存加载固件(崩溃重启)
尝试将固件复制到TCM内存后启动,系统直接崩溃重启,操作及错误输出如下:
Colibri iMX7 # ext4load mmc 0:2 0x80008000 /home/root/hello_world.elf 164124 bytes read in 7 ms (22.4 MiB/s) Colibri iMX7 # cp.b 0x80008000 0x007f8000 0x20000 Colibri iMX7 # dcache flush Colibri iMX7 # bootaux 0x7f8000 data abort pc : [<bff7b1a0>] lr : [<00000000>] reloc pc : [<878001a0>] lr : [<c7885000>] sp : bdf6fe28 ip : 00a00040 fp : 00000002 r10: bdf8ef70 r9 : bdf78ea0 r8 : 00000000 r7 : 007f8034 r6 : 007f8054 r5 : 007f8000 r4 : 007f8000 r3 : 00000000 r2 : 1fdfffc0 r1 : 00000000 r0 : 007f8000 Flags: nzcv IRQs on FIQs on Mode SVC_32 Code: e3a0d013 e169f00d e1a0e00f e1b0f00e (e24dd048) Resetting CPU ... resetting ...
固件复制验证
执行cp.b 0x80008000 0x007f8000 0x20000复制固件到TCM后,通过md.b 0x007f8000 40检查内存内容,其输出与md.b 0x80008000 40完全一致,说明固件已正确写入TCM。
直接加载到TCM的错误提示
若尝试直接将固件加载到TCM内存,U-Boot会提示该区域已被保留:
Colibri iMX7 # ext4load mmc 0:2 0x007f8000 /home/root/hello_world.elf ** Reading file would overwrite reserved memory ** Failed to load '/home/root/hello_world.elf'
U-Boot相关信息
U-Boot版本信息
U-Boot 2022.07-6.6.0-devel+git.e092e3250270 (Jul 11 2022 - 13:42:58 +0000) CPU: Freescale iMX7D rev1.3 1000 MHz (running at 792 MHz) CPU: Extended Commercial temperature grade (-20C to 105C) at 40C Reset cause: POR DRAM: 1 GiB Core: 52 devices, 17 uclasses, devicetree: separate PMIC: RN5T567 LSIVER=0x01 OTPVER=0x0d MMC: FSL_SDHC: 1, FSL_SDHC: 0 Loading Environment from MMC... OK In: serial Out: serial Err: serial Model: Toradex 0039 Colibri iMX7D 1GB V1.1B Serial#: 15241330 SEC0: RNG instantiated Net: eth0: ethernet@30be0000
bdinfo输出
Colibri iMX7 # bdinfo boot_params = 0x80000100 DRAM bank = 0x00000000 -> start = 0x80000000 -> size = 0x40000000 flashstart = 0x00000000 flashsize = 0x00000000 flashoffset = 0x00000000 baudrate = 115200 bps relocaddr = 0xbff7b000 reloc off = 0x3877b000 Build = 32-bit current eth = ethernet@30be0000 ethaddr = 00:14:2d:e8:90:72 IP addr = 192.168.10.2 fdt_blob = 0xbdf6ffa0 new_fdt = 0xbdf6ffa0 fdt_size = 0x00008f00 lmb_dump_all: memory.cnt = 0x1 memory[0] [0x80000000-0xbfffffff], 0x40000000 bytes flags: 0 reserved.cnt = 0x1 reserved[0] [0xbdf6bd58-0xbfffffff], 0x020942a8 bytes flags: 0 devicetree = separate arch_number = 0x00000000 TLB addr = 0xbfff0000 irq_sp = 0xbdf6ff90 sp start = 0xbdf6ff80 Early malloc usage: 5fc / 2000
目前不清楚错误来源,恳请各位提供排查建议。
内容的提问来源于Stack Exchange,提问作者Francesco Osti
相关产品推荐
相关产品推荐

