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 首發