作者说明 · 学习记录
本站作为作者的学习记录站,不保证文章内容严谨或完全正确。
版权信息

:::warning

本文章为博主原创文章。遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

:::


:::info
学习笔记记录,非教程。
:::

当使用内部BootROM启动时,发生了什么?

当我们通过设置BOOT_MODE[1:0]为内部启动模式时,即芯片通过执行内部的bootROM固有的代码来启动,在此模式下,芯片会执行内部的 boot ROM 代码,这段 boot ROM 代码会进行硬件初始化(一部分外设),然后从 boot 设备(就是存放代码的设备、比如 SD/EMMC、NAND)中将代码拷贝出来复制到指定的 RAM 中,一般是 DDR。


其中内存管理单元(Memory Management Unit)用于将物理地址翻译为虚拟内存地址,以及通过虚拟内存访问实际物理内存。而初始化高速缓存则是加速数据访问。

镜像文件结构

在上一节【点灯大师】点亮I.MX6ULL开发板的LED灯提到过,通过汇编生成的bin文件并不能直接使用,还需要添加额外的头文件信息。我们使用VSCODE(需要扩展hex-editor)打开生成的img文件,这个文件是上一节我们使用mkimage.sh生成的。我们可以先查看一下这个sh文件方便理解:
我们只截取通过sd卡启动的配置参数:

1
2
elif [ "$1" == "sd" ]; then
    ../bin/$IMG_BUILDER --combine base_addr=0x80000000 ivt_offset=0x400 app_offset=0x2000 dcd_file=dcd.bin app_file=sdk20-app.bin ofile=sdk20-app.img image_entry_point=0x80002000

可以看到,该脚本为我们默认设置的基址为0x80000000,也就是绝对的起始地址,在此基础上,偏移app_offset即为应用程序的起始地址。因此程序的起始地址(bin的起始地址)为0x80002000,ivt表则是偏移了1024字节,0x400。

接下来我们看img文件的内容:

浅析IMX镜像文件结构

创建时间:7月 14, 2025

最后更新:7月 28, 2025

字数统计:528字

预计阅读:1min

文章分类: -Linux -记录