嵌入式Linux啟動過程包括四個部分。
1,Uboot執行,加載內核load kernel。
2,內核解壓。decompress kernel
3,內核啟動,加載驅動。 boot kernel
4,Init進程,文件系統掛載,系統配置,加載圖形界面。init & mount FS & etc configure & GUI init
Uboot就是bootloader,用來初始化內核區域,內核鏡像加載到RAM
下面是第1,2,3步內部匯編過程。
請看arch/arm/boot/compressed/Head.S 中的匯編代碼。(我研究的Head.S的內核路徑,你的可能不是,大同小異。例如Header_32.S)
初始化一個臨時內核棧
用0初始化內核數據,位於_edata 和_end位置之間。
arch/arm/boot/compressed/misc.c 中decompress_kernel來解壓內核鏡像。解壓縮的內核執行,打印出你熟悉的Uncompressing Linux...OK booting the kernel。
第4部沒啥說的。