天天看點

uboot分析之uboot啟動核心分析

1.__u_boot_cmd_start以及__u_boot_cmd_end兩個變量在代碼隻有一處出現,這兩個變量是通過連結腳本傳進來的。

2.使用nand read.jffs2中的.jffs2是因為使用這種格式不需要頁對齊,比較友善。

3.flash上存儲的核心:頭部+真正的核心

頭部中的兩個重要的參數:

ih_load:表示加載位址,即核心運作時應該放在哪裡

ih_ep:表示入口位址,運作核心時需要跳轉到的位址

注釋:因為頭部有這兩個參數,是以下載下傳核心到記憶體中的位置沒有關系,核心都會被移動到加載位址;加載的時候指的是真正的核心加載的位址,而不包括頭部;頭部大小為64位元組。

4.使用do_bootm_linux啟動系統:這時候uboot會幫助核心設定啟動參數(核心和uboot之間的互動方法:在某個位址按某種格式(TAG格式)存放一些資料);跳轉到入口位址去啟動核心。

注釋:跳到入口函數的過程:theKernel指派;調用theKernel函數。

5.互動的參數:

setup_start_tag:size、tag、flag、pagesize、rootdev

setup_memory_tags:size、flag、size、start(0x3000 0000)

setup_commandline_tag:size、tag

setup_end_tag:0、0

6.theKernel函數的三個參數解析:

第一個參數為0

第二個參數:bd->bi_arch_number是機器ID(2410和2440的機器ID不同)。

第三個參數:bd->bi_boot_parasm是uboot和核心互動資料的首位址。

7.直接輸入boot指令,實際上是調用bootcmd中的兩條語句來啟動核心。

繼續閱讀