在/lib_arm/board.c中
start_armboot函式中,有乙個gd變數
gd = (gd_t*)(_armboot_start - cfg_malloc_len - sizeof(gd_t));
gd在由該檔案中的declare_global_data_ptr申明
declare_global_data_ptr在/include/asm/global_data.h中定義。
#define declare_global_data_ptr register volatile gd_t *gd asm ("r8")
宣告乙個暫存器變數gd占用r8,因此gd不佔記憶體。同時避免編譯器把r8分配給其它的變數。所以gd就是r8,用r8來儲存記憶體位址,達到全域性使用目的。
gd_t是該檔案中定義的乙個global_data型別的結構體。結構中使用了bd_t結構
gd_t和bd_t是u-boot中兩個重要的資料結構,在初始化操作很多都要靠這兩個資料結構來儲存或傳遞。
gd_t: global data資料結構定義,位於檔案 include/asm/global_data.h。其成員主要是一些全域性的系統初始化引數。
bd_t : board info資料結構定義,位於檔案 include/asm/u-boot.h。儲存板子引數。
uboot中gd的定義和使用
最近在做uboot中nand啟動相關的工作,遇到乙個問題一直糾結著。現在終於明白了這個問題,想想還有好多兄弟在某個黑暗的角落裡或者某台電腦前糾結著呢,所以趕緊寫下來以供查閱。uboot version 2014.4 architecture specific global data struct a...
Uboot中的環境變數
環境變數其實在uboot中就是一些全域性變數,用來修改uboot執行時的一些特徵,其外在表現為乙個個字串。環境變數的作用 能夠在不用重新編譯的前提下改變uboot執行時所表現出來的特徵,這樣當要調整uboot執行時特性就不用重新修改 編譯 執行uboot了。正常情況下環境變數應該同uboot ker...
關於U boot中命令相關的程式設計
main loop 這個函式裡有太多編譯選項,對於smdk2410,去掉所有選項後等效下面的程式 複製內容到剪貼簿 void main loop int len int rc 1 int flag char s int bootdelay s getenv bootdelay 自動啟動核心等待延時 ...