簡單說說U-boot的修改(轉)

ba發表於2007-08-16
簡單說說U-boot的修改(轉)[@more@]uboot是一個通用的免費開放原始碼的boot程式,支援很多的處理器。
以下是現在網上下載一個u-boot-1.1.1版本,用於at91rm9200系統的修改的例子。最後在redhat8.0上,用gcc2.95編譯透過。
在網上下載了uboot-1.1.1版本。要用於自己的at91rm9200的系統,這個系統的情況是:
SDRAM: 32Mbytes NCS1
FLASH: 8Mbytes NCS0
涉及到的檔案有四個:
common.h
flash.c
flash.h
”./board/at91rm9200dk/config.mk”
以下簡單的說說。
一、首先讀讀uboot自帶的readme檔案,瞭解了一個大概。
二、看看common.h,這個檔案定義了一些基本的東西,幷包含了一些必要的標頭檔案。再看看flash.h,這個檔案裡面定義了flash_info_t為一個struct。包含了flash的一些屬性定義。並且定義了所有的flash的屬性,其中,AMD的有:AMD_ID_LV320B,定義為“#define AMD_ID_LV320B 0x22F922F9”。
三、對於“./borad/at91rm9200dk/flash.c”的修改,有以下的方面:
“void flash_identification(flash_info_t *info)”這個函式的目的是確認flash的型號。注意的是,這個函式里面有一些宏定義,直接讀寫了flash。並獲得ID號。
四、修改:”./board/at91rm9200dk/config.mk”為
TEXT_BASE=0x21f80000 為TEXT_BASE=0x21f00000 (當然,你應該根據自己的板子來修改,和一級boot的定義的一致即可)。
五、再修改”./include/configs/at91rm9200dk.h”為
修改flash和SDRAM的大小。
六、另外一個要修改的檔案是:
./borad/at91rm9200dk/flash.c。這個檔案修改的部分比較的多。
1. 首先是OrgDef的定義,加上目前的flash。
2. 接下來,修改”#define FLASH_BANK_SIZE 0x200000”為自己flash的容量
3. 在修改函式flash_identification(flash_info_t * info)裡面的列印資訊,這部分將在u-boot啟動的時候顯示。
4. 然後修改函式flash_init(void)裡面對一些變數的賦值。
5. 最後修改的是函式flash_print_info(flash_info_t * info)裡面實際列印的函式資訊。
6. 還有一個函式需要修改,就是:“flash_erase”,這個函式要檢測先前知道的flash型別是否匹配,否則,直接就返回了。把這裡給註釋掉。

七、接下來看看SDRAM的修改。
這個裡面對於“SIZE”的定義都是基於位元組計算的。
只要修改”./include/configs/at91rm9200dk.h”裡面的
“#define PHYS_SDRAM_SIZE 0X200000”就可以了。注意,SIZE是以位元組為單位的。
八、還有一個地方要注意
就是按照目前的設定,一級boot把u_boot載入到了SDRAM的空間為:21F00000 -> 21F16B10,這恰好是SDRAM的高階部分。另外,BSS為21F1AE34。

九、編譯後,可以寫入flash了。
1. 壓縮這個u-boot.bin
“gzip –c u-boot.bin > u-boot.gz”
壓縮後的檔案大小為:
43Kbytes
2. 接著把boot.bin和u-boot.gz燒到flash裡面去。
Boot.bin大約11kBytes,在flash的0x1000 0000 ~ 0x1000 3fff

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-960975/,如需轉載,請註明出處,否則將追究法律責任。

相關文章