是bootloader 負責告訴kernel initrd/initramfs 在哪邊

bootloader 的功能就是把copy kernel image,copy initrd/initramfs 到記憶體,還有kernel 參數放到記憶體,然後執行kernel.可以這麼說.找出initrd/initramfs image  copy initrd/initramfs image 到記憶體的工作,都是bootloader 負責

所以當bootloader 完成以上的工作時.bootloader 就要把initrd/initramfs 所處的記憶體位置告訴kernel.

linux kernel 文件中對於這部份有一個專門文件,詳細指示開發bootloader的人類該怎麼做.這文件叫'boot protocol',你可以google://linux kernel boot protocol 來研讀這份官方文件.

有關中文的介紹部份,以下兩個連結值得參考
http://sakbk.pixnet.net/blog/post/30315621-initrd-and-initramfs
http://blog.csdn.net/cherryloo/article/details/2096682

為免以上兩個連結失效,我將研讀的心得寫下來:


---------------------------------------------------------------------
kernel code 中定義了一個setup_header 結構(arch/x86/include/asm/bootparam.h).這個結構中有兩個欄位專門紀錄initrd/initramfs 的記憶體位置.當kernel 編譯完成後,此結構的位置會固定在zImage(or bzImage)檔案的最開頭位置(可詳閱header.S 這個檔案).

首先,bootloader copy kernel image 到記憶體,接著bootloader再copy initrd/initramfs image 到記憶體中.然後bootloader就把記憶體位置寫到setup_header結構記憶體中的兩個欄位.

最後,bootloader 跳躍到kernel 開始,開始執行kernel.


就這樣




留言

這個網誌中的熱門文章

[C語言]宣告陣列的大小是0 ???

利用net-snmp 的mib2c,由一個MIB檔產出一個可執行的AgentX 程式

ubuntu 16.04開機遇到 flip_done timed out 的問題