發表文章

目前顯示的是 9月, 2011的文章

是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. 就這樣