天天看點

linux0.11核心fork實作分析(不看不知道,一看很簡單)

        pcDuino3下支援mmc啟動,官方的Uboot是采用SPL架構實作的,因為内部的SRAM空間達到32K,我們完全可以在這32K空間内編寫一個完整可用小巧的bootloader來完成引導Linux kernel的目的。

    我們首先介紹下SPL架構,可以先看下和,NAND_SPL也算是SPL架構下的一種模式。

    當使用Nand flash或者MMC作為引導方式時,我們需要使用晶片内的ROM或者其它機制加載固件到SRAM中。

     這種時候就需要SPL,因為SPL短小精悍,适用于4K甚至更小的SRAM的環境。這時候的引導過程就變成,SPL引導Uboot,而由Uboot引導系統核心。

    其實作為pcDuino3的SPL,它是可以完成直接引導kernel功能的,如果不需要使用uboot提供的額外的強大功能的話。

    這裡介紹下寫bootloader的思路:

linux0.11核心fork實作分析(不看不知道,一看很簡單)

使用mmc的read驅動函數将指定位置的kernel鏡像讀取到記憶體中,然後按照Linux的要求完成參數清單的傳遞,MMU和cache的配置等,就可以完成跳轉動作了。

最後一個步驟的代碼如下:

這個函數就完成了核心文檔Documentation/arm/booting對booting ARM Linux的描述。

這樣,一個僅僅有18K大小的bootloader就可以完成對kernel的引導了。