關於u boot中gd變數

2021-07-03 11:55:04 字數 653 閱讀 4540

在/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 自動啟動核心等待延時 ...