OMAP开发板的启动过程

OMAP的启动过程

参考文档:http://www.omappedia.org/wiki/Bootloader_Project#u-boot_overview

OMAP平台的启动初始化过程(bootloaders)分为了几个不同的阶段.下图指示了启动的顺序为:ROM代码,x-loader,u-boot, kernel,每一个阶段都完成足够的配置以加载和执行下一阶段。

这个引导程序项目特别包含了x-loader和u-boot:代码简介,怎样获取和编译这个代码。

为什么需要这两个bootloaders呢?x-loader是u-boot的一个精简版,被设计为可以在OMAP板子上的SRAM上运行,它初始化芯片外的主存和其它一些必要的设备驱动,然后加载较大的引导程序u-boot.

1.      OMAP 启动顺序

(1)    OMAP 启动的详细顺序请参考文档

http://www.ti.com/general/docs/wtbu/wtbudocumentcenter.tsp?templateId=6123&navigationId=12037

(2)    系统启动管脚

OMAP内部的ROM代码能够试图从很多不同的外围存储设备启动,包括但不限于:串口(UART3), SD卡,eMMC, NAND, 和USB。从这些设备中搜索一个有效的启动镜像(x-loader)的顺序是由SYSBOOT寄存器的配置决定的。在TRM中有一个表格列出了启动设备及其启动顺序的配置情况。

         SYSBOOT的值可以从物理地址:ox480022f0处读取,可以用JTAG或者用devmem2(后面这种是对于已经在板子上运行了linux系统的情况)

# devmem2 0x480022f0 b                          

/dev/mem opened.

Memory mapped at address 0x40020000.

Value at address 0x480022F0 (0x400202f0): 0x2F

2.      启动第一阶段

例如,SYSBOOT可以设置启动顺序为:1.串口(UART3),2.SD卡(MMC1),3.NAND闪存。

在这种情况下,ROM启动代码首先将从串口查找有效的x-loader,然后是SD卡,接着是NAND闪存,无论什么时间它找着了一个有效的x-loader则开始执行x-loader.

(1)串口启动

         对于串口启动来说,串口输出一个简单的ID,如果外部主机在一个较短的时间内正确的响应了该ID,那么ROM启动代码将从串口读取数据并将该数据传入内部的SARM中,如果没有发现错误的话,控制权将转移到SDRAM。另外ROM启动代码只会试图从UART3中搜索x-loader。

(2)SD卡启动

         如果MMC(Multi MediaCard)包含在启动设备列表中,则ROM启动代码会在第一个MMC控制器中查找SD卡,如果找到了一个SD卡,那么ROM启动代码会在分区别中查找第一个FAT32分区,如果找到了该分区则在其根目录下查一个名为“MLO”的文件(该文件是x-loader的可执行文件,它的头部包含了需要加载的文件的内存位置和文件的大小)。如果一些都顺利的话,该文件会被传到SRAM中,并且控制权也将转移。MMC1和MMC2都能够被用于启动。

(3)NAND/eMMC启动

         如果NAND 包含中启动列表中,则ROM启动代码会加载NAND的第一个分区,如果第一个分区是坏的或者空的,则ROM启动代码会试着搜索接下来的三个分区,一旦找着一个好的分区,则ROM启动代码会将其中的数据传入SRAM中,控制构也将转移过去(e/MMC的启动与NAND的一样)。

3.      启动的第二阶段

         x-loader的功能就是将第二阶段引导程序(u-boot)加载到主存中. 比较特别的是x-loader和u-boot来自同一个存储设备(比如SD卡)。当然这并不是必须的。

(1)    串口启动

         在u-boot也通过串口加载的情况下,x-loader等待主机初始化kermit连接以可靠的传输较在的文件到主存中,文件(指的就是u-boot)传输完成后,控制权也将转移。

(2)    SD卡启动

         在u-boot通过SD卡加载的情况下,x-loader查找第一个MMC控制器的FAT32分区,并在顶级目录下查找名为“u-boot.bin”的文件,然后将该文件传输到主存并将控制权转移过去。

(3)    NAND/eMMC启动

         当u-boot存在NAND的情况下,x-loader期望u-boot存放在第五扇区(偏移地址为0x00800000).然后传输该文件到主存中并转移控制权。如果是eMMC,则x-loader希望u-boot存放在偏移地址为0x200处

4.      x-loader概述

x-loader是从u-boot精简出来的很小的第一阶段的启动代码,它被OMAP ROM启动代码加载到内部的静态RAM中,由于内部静态RAM很小,x-loader只完成最基本的功能。它配置管脚的功能复用、时钟、DDR和串口终端,因此它能仿问并加载第二阶段的启动程序(u-boot)到DDR中,下面的图显示了x-loader代码的流程(在start.s文件中)

5.      u-boot概述

u-boot完成x-loader没有完成的CPU还有开发板子的初始化和配置。u-boot在主CPU(CPU ID 0)上运行,该CPU负责初始化和启动,同进,从CPU阻塞在“等待事件”状态,下图显示了u-boot的代码流程(在start.s文件中)

如果只想在OMAP开发板上移植一个linux核,可以参考:http://omappedia.org/wiki/OMAP_Ubuntu_Core

猜你喜欢

转载自blog.csdn.net/u011006622/article/details/89711236