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

來源:互聯網
上載者:User

標籤:style   blog   class   c   code   tar   

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

    我們首先介紹下SPL架構,可以先看下《GNU ARM彙編--(十八)u-boot-採用nand_spl方式的啟動方法》和《GNU ARM彙編--(十九)u-boot-nand-spl啟動過程分析》,NAND_SPL也算是SPL架構下的一種模式。

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

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

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

    這裡介紹下寫bootloader的思路:



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

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

void boot_linux(void){uart_printf("boot linux\n");void (*kernel_entry)(int zero, int arch, uint params);unsigned long r2;unsigned long machid;setup_linux_param(0x40000000 + 0x100);cleanup_before_linux();kernel_entry = (void (*)(int, int, uint))0x48000000;machid = 4283;r2= 0x40000100;kernel_entry(0, machid, r2);}
這個函數就完成了核心文檔Documentation/arm/booting對booting ARM Linux的描述。

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



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.