uboot在引導linux之前要做的事

 

啓動armlinux,bootloader必須提供下面幾步:
 
1.  設置並初始化ram
2.  初始化一個串口
3.  檢測處理器類型
4.  設置內核標記列表
5.  調用內核映像
 
1.       設置並初始化ram
 
bootloader要找到並初始化系統中所有的ram,內核將這些ram用於可變數據的存儲。
 
2.       初始化一個串口
 
bootloader應該在目標板上初始化並使能一個串串口。這將允許內核串口驅動自動檢測它應該用哪個串口作爲內核控制檯。
 
另外,bootloader也可通過標記列表傳遞相關的”console=”選項到內核來指定串口以及串口格式(奇偶位,停止位等)
 
3.       檢測處理器類型
 
bootloader應該通過某種方法檢測它所運行的處理器的類型,它最終必須能夠向內核提供一個MACH_TYPE_xxx值。
 
4.設置內核標記列表
 
bootloader必須創建並初始化內核標記列表。一個有效的標記列表起始於ATAG_CORE而終止於ATAG_NONE。任何數量的標記都可以加入這個列表。bootloader至少要向內核傳送系統內存的大小和位置以及根文件系統的位置。
 
標記列表必須放在某個內存區域,這個區域既不能被內核解壓器重寫,也不能被initrd ‘boot0’ 程序重寫。推薦的位置是RAM開頭的16K。
 
5.  調用內核映像
 
有兩種調用kernel zImage的選擇。如果zImage存儲在flash中,並且被正確的連接從flash運行,那麼對於bootloader來說,直接從flash調用zImage是合法的。
 
zImage也可以放到系統RAM中任何位置並在那個位置調用。注意,內核使用這個映像下面的16K RAM存儲頁表。推薦將映像存放在RAM的32K位置處。
 
在任何情況下,下面的重要條件都必須滿足:
 
――屏蔽所有具有DMA功能的設備,以便內存不會被僞造的網絡包或磁盤數據誤導。這將大大節約你的調試時間
 
――cpu寄存器設置
r0 = 0,
r1 = 處理器類型號
r2 = 標記列表在系統內存中的物理地址
 
       uboot中調用內核時:
       theKernel (0, bd->bi_arch_number, bd->bi_boot_params);
這裏第1、2、3個參數就分別存儲在r0、r1、r2中。
 
――caches, MMUs
MMU必須關閉
指令cache可關閉或打開
數據cache必須關閉
 
――bootloader被指望通過直接跳轉到內核映像的第一條指令來調用內核映像

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章