由於bootloader的實現依賴於CPU的體系結構,因此大多數的bootloader都分爲stage1和stage2兩大部分:依賴於CPU體系架構的代碼同城攜程短小精悍的彙編代碼,放在stage1中,爲了實現更復雜功能的代碼都使用C語言,方便移植和讀,一般放在stage2中。具體的啓動過程如下:
1、stage1中的動作:
硬件設備初始化;
爲加載stage2準備RAM空間;
複製stage2到RAM中;
初始化堆棧;
跳轉到stage2的c入口。
實現的功能:硬件初始化:屏蔽了bootloader啓動過程中的所有中端,設置cpu的速率和時鐘,完成RAM初始化,關閉CPU內部指令和數據緩存。
複製stage2到RAM,設置堆棧指針sp,跳轉到c入口 。
2、stage2中的動作:
初始化本階段需要使用的硬件;
檢測系統內存映射;
複製內核和根文件系統到RAM中;
設置內核啓動參數;
調用內核。
實現的功能:硬件初始化:初始化串口;
加載內核鏡像;
設置內核啓動參數;
調用內核:CPU寄存器設置:R0=0;R1=機器類型ID;R2=啓動參數標記列表在RAM的起始地址;
CPU模式設置:禁止中斷(IRQ和FIQ),是CPU處於SVC模式;
MMU和緩存的設置:必須關閉MMU和數據緩存,指令緩存可以自主選擇。