uboo啟動的雜記 uboot的命令的實現

2021-09-25 08:49:57 字數 1654 閱讀 5249

uboot/common/cmd_***.c中,其中的若干個.c檔案和命令有著直接的聯絡。每乙個命令的背後都對應著乙個函式來實現具體的命令功能。而很多的命令還需要引數的傳遞,這靠argc和ar**來實現。

在uboot的第二階段bl2初始化完成之後,進入死迴圈,執行main_loop 函式,函式中再次呼叫乙個重要的run_command()函式,實現命令的接收、解析:

for (;;) 

(1)首先通過控制台獲取命令;

(2)命令的解析:使用parse_line函式將命令與其引數進行解析;

/* extract arguments */

if ((argc = parse_line (finaltoken, ar**)) == 0)

將命令與引數進行分離,分別存入ar**[ ]陣列內。

(3)在命令集中對輸入的命令進行查詢:

/* look up command in command table */

if ((cmdtp = find_cmd(ar**[0])) == null)

find_cmd()函式,從當前uboot的命令集中查詢是否有某個命令。如果找到則返回這個命令結構體的指標,如果未找到返回null;

(4)呼叫對應的函式指標執行具體的命令功能。

(1)每乙個命令的命令的呼叫函式的基本套路為:

static void do_function1(cmd_tbl_t *cmdtp,int argc,char **ar**,int ***)

}

(2)cmd_tbl_t結構體原型:

typedef struct cmd_tbl_s	cmd_tbl_t;
struct cmd_tbl_s ;
引數的解釋:name:命令的名字;

maxargs:命令最多可以接收的引數個數;

cmd:函式指標,命令對應的函式的函式指標,將來執行命令時使用這個函式指標來呼叫,也就是命令的實體函式;

usage:命令的短幫助資訊。對命令的簡單描述;

help:命令的長幫助資訊。細節的幫助資訊;

complete:函式指標,指向這個命令的自動補全的函式;

(3)uboot使用這樣的結構體來管理每乙個命令,在新增命令是需要對命令的這個結構體進行例項化;

1、填充結構體變數例項化命令;

2、給命令結構體例項附加特定段屬性(使用者自定義段),鏈結時將帶有該段屬性的內容鏈結在一起排列(挨著的,不會夾雜其他東西,也不會丟掉乙個帶有這種段屬性的,但是順序是亂序的);

3、uboot重定位時將該段整體載入到ddr中,載入到ddr中的uboot映象中帶有特定段屬性的這一段其實就是命令結構體的集合,有點像乙個命令結構體陣列;

4、命令列集合也有著起始位址和結束位址,分別對應著段起始位址和結束位址(鏈結位址、定義在u-boot.lds中);

end。。。。。。。

uboot的啟動要點整理

對於ppc e500mc而言,從上電的一開始,cpu有預設配置的tlb位址空間,cpu執行的第一條指令一定在這個空間內,這樣虛擬位址才能轉換為實體地址,然後還有啟動的law local access window 預設配置 從實體地址到器件 比如cpu的片選cs0會選擇norflash,然後預設的l...

u boot的啟動流程分析(一)

這週翻了翻u boot xilinx的原始碼,結合著網上看的對cortexa8 a9的u boot的原始碼分析,再結合自己在xilinx上下的u boot原始碼,試著對u boot的啟動流程進行一下分析,也給自己理一下思路。u boot原始碼的目錄結構 第一階段 1 start.s arch arm...

分析uboot是如何啟動核心的

1.uboot啟動核心的 縮減如下 s getenv bootcmd debug main loop bootcmd s n s s if bootdelay 0 s abortboot bootdelay 2.假設bootcmd nand read.jffs2 0x30007fc0 kernel ...