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中的兩條語句來啟動核心。