You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 12:35:09