Bootstrap简介
Bootstrap用于加载一段程序到SDRAM运行,它主要用于加载u-boot。它可以称作一级boot,实际上芯片内部还有个BOOTROM,也就是SAM-BA的启动程序。关于芯片内部BOOTROM程序的运行流程和详细描述,请参考数据手册的相关章节(Boot Program)。
Bootstrap的代码由芯片上的BOOTROM根据一定的规则(0×14处的数据由特殊含义,这也是烧写一级boot时需要选择send boot file的原因)加载到内部SRAM运行。因SAM926x内部SRAM的限制,Bootstrap的代码很短。其主要就是初始化SDRAM和相关存储器(Data Flash, NAND),然后加载u-boot到SDRAM指定位置并开始运行u-boot。
Bootstrap源代码由共用的硬件驱动,比如SDRAM,NAND,DATA Flash等,库文件,头文件等组成。重点关注的地方是board文件夹,也就是不同板子的项目所在。根据板子的启动配置不同,同一个板子的文件夹下有不同的目标配置,比如dataflash与nandflash。进入不同的目标配置文件就可以看到该目标配置的配置文件(*.h)及Makefile。
新的Bootstrap代码中包含了一个PDF格式的说明文件,包含在doc文件夹下。
开发环境
> Linux环境: untu 10.4。
>Windows环境:Windows XP SP3。
>Bootstrap版本:v1.15。
>交叉编译工具:Winarm。
下载Bootstrap代码
Bootstrap-v1.15下载地址:
ftp://www.at91.com/p /at91bootstrap/AT91Bootstrap1.15.zip
编辑Bootstrap代码
1. 修改U-boot加载地址
修改文件 /Bootstrap-v1.15/board/at91sam9g20ek/nandflash/at91sam9g20ek.h
/* ******************************************************************* */
/* BootStrap Settings */
/* */
/* ******************************************************************* */
#define IMG_ADDRESS 0x20000 /* Image Address in NandFlash */
#define IMG_SIZE 0x40000 /* Image Size in NandFlash */
2. 配置Bootstrap的DEBUG信息显示与否
修改文件 /Bootstrap-v1.15/board/at91sam9g20ek/nandflash/at91sam9g20ek.h
/* ******************************************************************* */
/* Application Settings */
/* ******************************************************************* */
#define CFG_DEBUG /* 打印DEBUG信息 */
或
/* ******************************************************************* */
/* Application Settings */
/* ******************************************************************* */
#undef CFG_DEBUG /* 不打印DEBUG信息 */
3. 增加自定义的NANDFLASH信息定义
修改文件 /Bootstrap-v1.15/incl? /nand_ids.h
static str t SNandInitInfo NandFlash_InitInfo[] = {
{0xecf1, 0x400, 0x20000, 0x800, 0x40, 0x0, "K9F1G08 /0"},
{0xecda, 0x800, 0x20000, 0x800, 0x40, 0x0, "K9F2G08M/0"},
{0xecaa, 0x800, 0x20000, 0x800, 0x40, 0x0, "K9F2G08R0A/0"},
{0x2cca, 0x800, 0x20000, 0x800, 0x40, 0x1, "MT29F2G16AAB/0"},
{0x2cda, 0x800, 0x20000, 0x800, 0x40, 0x0, "MT29F2G08AAC/0"},
{0x20aa, 0x800, 0x20000, 0x800, 0x40, 0x0, "STMNAND02GR3B/0"},
{0x2caa, 0x800, 0x20000, 0x800, 0x40, 0x0, "MT29F2G08ABD/0"},
{0,}
};
下载安装配置WinARM
WinARM下载地址:http://www.siwawi.ar i.uni-kl.de/avr_projects/arm_projects/WinARM-20060606.zip
安装WinARM编译工具
> 解压缩winarm.rar
> 将解压后的winarm目录拷贝到C盘设定环境变量
> path变量添加说明:
> 右击:我的电脑->属性->高级
> 编辑“环境变量”->系统变量
> 双击path变量,在变量值的前面入:C:/WinARM/bin ;C:/WinARM/utils/bin;如图1所示:
此时,winarm的编译器已经配置好了,现在就可以进入DOS命令行窗口里运行arm-elf-gcc相关命令,对at91sam9260的bootstrap程序进行编译了。
编译Bootstrap代码
由于芯片内部资源的原因,9260的Bootstrap BIN文件必须要小于4K(9G20无此要求)。有两种方法可以实现:
1. 用arm-linux-gcc 4.3.2编译,修改Bootstrap的源码。
> 增加优化等级
CCFLAGS=-g –O2 -Wall -D$(TARGET) -I$(INCL)
ASFLAGS=-g -c –O2 -Wall -D$(TARGET) -I$(INCL) -DTOP_OF_MEM=$(TOP_OF_MEMORY)
> 屏蔽不用的NANDFLASH信息定义
static str t SNandInitInfo NandFlash_InitInfo[] = {
{0xecf1, 0x400, 0x20000, 0x800, 0x40, 0x0, "K9F1G08 /0"},
//{0xecda, 0x800, 0x20000, 0x800, 0x40, 0x0, "K9F2G08M/0"},
//{0xecaa, 0x800, 0x20000, 0x800, 0x40, 0x0, "K9F2G08R0A/0"},
//{0x2cca, 0x800, 0x20000, 0x800, 0x40, 0x1, "MT29F2G16AAB/0"},
//{0x2cda, 0x800, 0x20000, 0x800, 0x40, 0x0, "MT29F2G08AAC/0"},
//{0x20aa, 0x800, 0x20000, 0x800, 0x40, 0x0, "STMNAND02GR3B/0"},
//{0x2caa, 0x800, 0x20000, 0x800, 0x40, 0x0, "MT29F2G08ABD/0"},
{0,}
};
2. 用Winarm编译。
> 将下载的bootstrap压缩包解压至一个没有中文名的路径下。例如放至E:/。
> 点击开始->运行->输入cmd,进入DOS命令行窗口。
> 进入E:/Bootstrap-v1.15/board/at91sam9g20ek/nandflash目录,如图2所示:
> 在提示符后输入:
/opt/Bootstrap-v1.15/board/at91sam9g20ek/nandflash# make clean
清除以前留下中间文件和BIN文件。如图3所示:
> 在提示符后输入:
/opt/Bootstrap-v1.15/board/at91sam9g20ek/nandflash#make all
生成新的BIN文件。如图4所示:
下载Bootstrap到目标板
1. 首先得安装SAME-BA。安装详细请自己GOOGLE,在此不累述。
2. 将目标板J8的跳线帽拨掉,重新上电或者按RESET按键。此时任务栏右下角将会出现热插拨硬件的标志。如图5所示:
3. 双击 图标,选择芯片类型。如图6所示:
4. 初始化NANDFLASH。如图7所示:
5. 通过SAM-BA烧写Bootstrap到目标板。如图8所示:
文件历史记录
版本 编制 日期 更改内容
-----------------------------------------------------------------------------------
V1.0 抵岸科技 2010-6-27 首发