啟動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被指望通過直接跳轉到核心映像的第一條指令來調用核心映像