uboot中的資料結構 記憶體分配

2021-09-25 14:04:20 字數 1681 閱讀 6127

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...