OMAP Bootloader

OMAP Boot Sequence

 http://www.omapedia.org/wiki/Bootloader_Project

两段式boot方式

First Stage Boot

OMAP Bootloader_第1张图片

两段式boot process,第一段由ROM代码load到内部static RAM(比较小,64K)

 

内部的ROM代码会尝试从不同外设启动,包括Serial(UART3),SD Card(MMC1,MMC2),Nand和USB。

启动顺序由一组GPIO配置,SYS_BOOT

配置可以从物理地址0x480022f0,透过JTAG或者如果运行linux,使用devmem2读取。

# devmem2 0x480022f0 b                          

/dev/mem opened.

Memory mapped at address 0x40020000.

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

 

Zoom2的启动配置顺序是:The default SYS_BOOT configuration for the Zoom2 appears to be: USB, Serial(UART3), SD Card(MM1), and NAND flash

Serial Boot

ROM代码往serial port写一个ID,如果host在一定时间内正确回应,那ROM代码可是从serial port读取数据,传输到内部sram里;如果没有错误,控制权随即转到sram。只有UART3才能用于uart启动。(这个simple ID是啥呢?)

SD Card Boot

 

查看第一个MMC控制器,找到Card后,扫描第一个分区,找到MLO『x-loader的二进制文件,加上头部信息――包含加载memory地址(指定文件将要加载的位置),以及文件的大小』,如果一切正常,MLO加载到内部sram,控制权随机转到sram,继续执行。MMC1和MMC2都可以用于booting。

 

Nand Boot

加载Nand的第一个sector,如果这个sector是bad或者corrupt或者blank,ROM代码继续尝试下一个sector(在退出前,会一直尝试4个sector)。找到好的sector,把内容传输到sram,转移控制权到sram,继续执行。

 

Second Stage Boot

For example, you could flash the serial x-loader into the nand. The rom will load from nand and transfer control to the x-loader which will wait for the 2nd stage to be downloaded from the serial port.

Serial Boot

OMAP Bootloader_第2张图片

使用Kermit协议传输大型文件到main memory。一旦传输完成,控制权转移

SD Card Boot

 OMAP Bootloader_第3张图片

寻找第一个MMC上的第一个分区里的u-boot.bin

把u-boot.bin传输到main memory,然后把控制权转移到u-boot

NAND Boot

 OMAP Bootloader_第4张图片

Nand x-loader会期望在第5sector(offset 0x00800000)找到u-boot.然后把u-boot传输到main memory,控制权转移过去。

 

Bootloader Overview

Uboot和xloader的build、flash过程

为什么要两个bootloader?

X-loader是简化版的u-boot,运行在on-chip的sram:它初始化系统的off-chip的内存以及其他必须的设备驱动,然后为linux加载较大型的bootloader,u-boot。

 

使用git,获取source code

CodeSourcery ARM Compiler

 

获取Uboot源代码

  • Clone Uboot

# mkdir bootloader

# cd bootloader

# git clone git://git.omapzoom.org/repo/u-boot.git

构建Uboot

# cd <path_to_u-boot>
# make distclean
# make CROSS_COMPILE=arm-none-linux-gnueabi- omap3430zoom2_config
# make CROSS_COMPILE=arm-none-linux-gnueabi-
各种配置文件

 U-boot config files

Board

config file

4430SDP

omap4430sdp_config

3430SDP

omap3430sdp_config

3630SDP

omap3630sdp_config

3430LDP

omap3430labrador_config

Zoom2

omap3430zoom2_config

Zoom3

omap3630zoom3_config

2430sdp

omap2430sdp_config

2420h4

omap2420h4_config

 

获取X-loader源代码

  • Clone X-loader

# cd bootloader

# git clone  git://git.omapzoom.org/repo/x-loader.git

构建Xloader

Warning:必须在x-loader之前build u-boot

# cd <path_to_x-boot>
# make distclean
# make CROSS_COMPILE=arm-none-linux-gnueabi- omap3430zoom2_config
# make CROSS_COMPILE=arm-none-linux-gnueabi- ift

 

X-loader config files

Board

config file

4430SDP

omap4430sdp_config

3430SDP

omap3430sdp_config

3630SDP

omap3630sdp_config

3630SDP 1GB

omap3630sdp_1G_config

3430LDP

omap3430labrador_config

Zoom2

omap3430zoom2_config

Zoom3

omap3630zoom3_config

2430sdp

omap2430sdp_config

2420h4

omap2420h4_config

用build 透过serial boot的x-loader:

To build X-loader to boot over a serial connection, use "omap3430labradordownload_config"

 

BTW:该codebase是u-boot 1.1.4,在omapedia wiki网站有另一个项目u-boot upstreaming,在最新的u-boot mainline中加入omap支持

你可能感兴趣的:(linux,git,Flash,Build,Path,compiler)