I.MX6 eMMC 中启动U-boot存放的首地址

简介: /************************************************************************************ * I.MX6 eMMC 中启动U-boot存放的首地址 * 声明: * 本文是解读《I.MX6 Manufacturing Tool V2 (MFGTool2) ucl2.xml hacking》之后对 * U-boot存放于eMMC 1K地址有疑惑,希望能找到确切的说法。
/************************************************************************************
 *                      I.MX6 eMMC 中启动U-boot存放的首地址
 * 声明:
 *     本文是解读《I.MX6 Manufacturing Tool V2 (MFGTool2) ucl2.xml hacking》之后对
 * U-boot存放于eMMC 1K地址有疑惑,希望能找到确切的说法。
 *
 *                                          2015-10-14 晴 深圳 南山平山村 曾剑锋
 ***********************************************************************************/

/**
 * 参考文档:
 *     1. i.MX 6Dual/6Quad Multimedia Applications Processor Reference Manual 
 *        Chapter 7 --> System Boot
 *            --> 7.6 Program Image
 *                --> 7.6.1 Image Vector Table and Boot Data
 */

The Image Vector Table (IVT) is the data structure that the ROM reads from the boot device supplying the program image containing the required data components to perform a successful boot.
Image向量表是一个存在芯片内部ROM固化的数据结构,用于读取启动设备中的程序,而这些程序包含一些让系统成功运行起来的数据组件(目前个人暂且认为是U-boot)

The IVT includes the program image entry point, a pointer to Device Configuration Data (DCD) and other pointers used by the ROM during the boot process.The ROM locates the IVT at a fixed address that is determined by the boot device connected to the Chip.  The IVT offset from the base address and initial load region size for each boot device type is defined in the table below. The location of the IVT is the only fixed requirement by the ROM. The remainder or the image memory map is flexible and is determined by the contents of the IVT.
IVT向量表包括程序image入口点、设备配置数据指针(DCD)、以及其他一些启动ROM程序运行过程中用到的指针。ROM程序根据不同的启动设备来决定其IVT表的加载地址。IVT偏移地址(相对首地址:0x00000000)和初始化加载程序大小是由启动设备决定,具体情况参照下面表格,IVT表示ROM程序固定的,其他的内存映射并不固定,由IVT表决定(这还不是由IVT表决定?最后一句没理解)。


       Table 7-24. Image Vector Table Offset and Initial Load Region Size
+----------------------+---------------------------+---------------------------+
| Boot Device Type     | Image Vector Table Offset | Initial Load Region Size  |
+----------------------+---------------------------+---------------------------+
| NOR                  | 4 Kbyte = 0x1000 bytes    | Entire Image Size         |
+----------------------+---------------------------+---------------------------+
| NAND                 | 1 Kbyte = 0x400 bytes     | 4 Kbyte                   |
+----------------------+---------------------------+---------------------------+
| OneNAND              | 256 bytes = 0x100 bytes   | 1 Kbyte                   |
+----------------------+---------------------------+---------------------------+
| SD/MMC/eSD/eMMC/SDXC | 1 Kbyte = 0x400 bytes     | 4 Kbyte                   |
+----------------------+---------------------------+---------------------------+
| I2C/SPI EEPROM       | 1 Kbyte = 0x400 bytes     | 4 Kbyte                   |
+----------------------+---------------------------+---------------------------+
| SATA                 | 1 Kbyte = 0x400 bytes     | 4 Kbyte                   |
+----------------------+---------------------------+---------------------------+


由上表,我们也就是到,当我们选择从eMMC启动的的时候,我们的要将U-boot.bin从1Kbyte的基地址开始读取,这《I.MX6 Manufacturing Tool V2 (MFGTool2) ucl2.xml hacking》中烧入U-boot.bin的位置吻合。

 

相关文章
I.MX6 查找占用UART进程
/**************************************************************************** * I.MX6 查找占用UART进程 * 说明: * 由于不明确哪个进程占用了指定的UART口,于是前面在UART驱动中加入了显示 * 波特率设定的代码,这次通过二分法注释init.rc、init.freescale.rc中的service * 来确定到底是那个进程占用了UART口。
570 0
linux驱动开发--字符设备:静态分配设备号
<strong><u>字符设备</u></strong>(char device)<br><p>        采用字节流方式访问的设备称为字符设备,通常智能采用顺序访问方式,也有极少数可以前后移动访问指针的设备(如:帧捕捉卡等设备)。系统标准字符设备,例如:字符中断、串口等设备。常见待开发设备驱动的字符设备,例如:触摸屏、键盘、视频捕捉设备、音频设备等。</p> <p><img src
1826 0
I.MX6 U-boot编译找不到用户目录
/**************************************************************************** * I.MX6 U-boot编译找不到用户目录 * 说明: * 获取了U-boot的源码,但是编译出了问题,没有找到对应的目录出错了。
738 0
bootm命令中地址参数,内核加载地址以及内核入口地址
bootm命令只能用来引导经过mkimage构建了镜像头的内核镜像文件以及根文件镜像,对于没有用mkimage对内核进行处理的话,那直接把内核下载到连接脚本中指定的加载地址0x30008000再运行就行,内核会自解压运行(不过内核运行需要一个tag来传递参数,而这个tag是由bootloader提供的,在u-boot下默认是由bootm命令建立的)。
1293 0
uboot 的内存命令使用 mw (修改) md (显示)
修改:mw [内存地址] [值] [长度]例如:mw 0x02000000 0 128 表示修改地址为0x02000000~0x02000000+128的内存值为0. 显示:md [内存地址] [长度]例如:md 0x02000000 128 表示显示0x02000000的内存数据,长度为128个32bit.
736 0
I.MX6 32G SD卡测试
/*********************************************************************** * I.MX6 32G SD卡测试 * 说明: * 这是刘涛测试32G卡的情况。
769 0
【Android 逆向】ELF 文件格式 ( ELF 程序头入口大小 | ELF 程序头入口个数 | ELF 文件节区头入口大小 | ELF 文件节区头入口个数 | 字符表序号 )(一)
【Android 逆向】ELF 文件格式 ( ELF 程序头入口大小 | ELF 程序头入口个数 | ELF 文件节区头入口大小 | ELF 文件节区头入口个数 | 字符表序号 )(一)
143 0
【Android 逆向】ELF 文件格式 ( ELF 程序头入口大小 | ELF 程序头入口个数 | ELF 文件节区头入口大小 | ELF 文件节区头入口个数 | 字符表序号 )(一)
【Android 逆向】ELF 文件格式 ( ELF 程序头入口大小 | ELF 程序头入口个数 | ELF 文件节区头入口大小 | ELF 文件节区头入口个数 | 字符表序号 )(二)
【Android 逆向】ELF 文件格式 ( ELF 程序头入口大小 | ELF 程序头入口个数 | ELF 文件节区头入口大小 | ELF 文件节区头入口个数 | 字符表序号 )(二)
141 0
【Android 逆向】ELF 文件格式 ( ELF 程序头入口大小 | ELF 程序头入口个数 | ELF 文件节区头入口大小 | ELF 文件节区头入口个数 | 字符表序号 )(二)
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等