1.uboot中的資料結構
u-boot的主要功能是用於引導os的,但是本身也提供許多強大的功能,可以通過輸入命令列來完成許多操作。所以它本身也是一 個很完備的系統。u-boot的大部分操作都是圍繞它自身的資料結構,這些資料結構是通用的,但是不同的板子初始化這些資料就不一樣了。所以u-boot的通用**是依賴於這些重要的資料結構的。這裡說的資料結構其實就是一些全域性變數。
1)gd 全域性資料變數指標,它儲存了u-boot執行需要的全域性資料,型別定義:
typedef struct global_data gd_t;
2)bd,板子資料指標。板子很多重要的引數。 型別定義如下:
typedef struct bd_info bi_dram[config_nr_dram_banks];
} bd_t;
3)環境變數指標 env_t *env_ptr = (env_t *)(&environment[0]);(common/env_flash.c)
env_ptr指向環境引數區,系統啟動時預設的環境引數environment,定義在common/environment.c中。
引數解釋:
bootdelay 定義執行自動啟動的等候秒數
baudrate 定義串列埠控制台的波特率
netmask 定義乙太網介面的掩碼
ethaddr 定義乙太網介面的mac位址
bootargs 定義傳遞給linux核心的命令列引數
bootcmd 定義自動啟動時執行的幾條命令
serverip 定義tftp伺服器端的ip位址
ipaddr 定義本地的ip位址
stdin 定義標準輸入裝置,一般是串列埠
stdout 定義標準輸出裝置,一般是串列埠
stderr 定義標準出錯資訊輸出裝置,一般是串列埠
4)裝置相關:
標準io裝置陣列evice_t *stdio_devices = ;
裝置列表 list_t devlist = 0;
device_t的定義:includedevices.h中:
typedef struct device_t;
u-boot把可以用為控制台輸入輸出的裝置新增到裝置列表devlist,並把當前用作標準io的裝置指標加入stdio_devices陣列中。在呼叫標準io函式如printf()時將呼叫stdio_devices陣列對應裝置的io函式如putc()。
5)命令相關的資料結構。
6)與具體裝置有關的資料結構,
如flash_info_t flash_info[cfg_max_flash_banks];記錄nor flash的資訊。
nand_info_t nand_info[cfg_max_nand_device]; nand flash塊裝置資訊
2.uboot重定位後的記憶體分布
顯示緩衝區 (.bss_end~34000000)
uboot(bss,data,text) (33f00000~.bss_end)
heap(for malloc)
gd(global data)
bd(board data)
stack
nor flash (0~2m)
資料結構 記憶體分配中的堆和棧
棧後進先出。堆堆是一種經過排序的樹形資料結構,每個結點都有乙個值。通常我們所說的堆的資料結構,是指二叉堆。堆的特點是根結點的值最小 或最大 且根結點的兩個子樹也是乙個堆。由於堆的這個特性,常用來實現優先佇列,堆的訪問是隨意,直接取出我們想要的結點。記憶體中的棧區處於相對較高的位址以位址的增長方向為上...
資料結構 連續記憶體分配的實現
資料結構儲存 struct arr 資料結構操作 void init arr struct arr parr,int length 首先進行的是初始化陣列 int is empty struct arr parr 判斷陣列是否為空 return 0 1 int is full struct arr ...
uboot中gd t和bd t資料結構簡介
bd t和gd t是u boot中兩個重要的資料結構,在初始化操作很多都要靠這兩個資料結構來儲存或傳遞。分別定義在include asm arm u boot.h和 include asm arm global data.h 1 bd t board info資料結構定義,主要是用來儲存板子引數。t...