發表文章

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

(x86)有關bootloader 過渡到kernel之間的一些資料紀錄

原來 bzImage 是由setup.bin 跟 vmlinux.bin 綁起來製作而成的 可以使用以下關鍵字查詢更詳細的資料 google://"bzImage" "vmlinux.bin" "setup.bin" vmlinux.bin 就是整個linux kernel 的壓縮實體.setup.bin 則是負責在配置一些在執行vmlinux.bin之間該要做的硬體環境設定.沒錯,setup.bin的角色很像u-boot的一部分功能 Grub or Lilo 這類bootloader ,都會聰明的把setup.bin 跟vmlinux 分開,setup.bin 放在0x90000處,vmlinux.bin放在0x100000位置.詳細的分開知識,可以查詢 google://"grub" "0x90000" "0x100000" setup.bin 的實際工作內容,可以查詢 google://"header.S" "setup.ld" 對於要開發bootloader 的地球人來說,以上都是必備知識

(ARM) bootloader 怎麼把kernel參數傳送給kernel.

首先,該看一下以下網址 http://www.simtec.co.uk/products/SWLINUX/files/booting_article.html 或者是Kernel 內附的文件 Documentation/arm/Booting ---------------------------------------------------------- 以下是個人心得 Arm 版本不是使用setup_header結構,而是一個所謂ATAG 的結構佇列,bootloader需要自行在記憶體中建立一個ATAG佇列.這個佇列的的開始位址,在bootloader 開始執行kernel的start code 前,放在Arm CPU 的R2暫存器內.(R1暫存器放機器型別代號) 每一個ATAG結構塊,都會有一個旗標顯示這個結構塊是屬於哪一種類型的ATAG ,像有ATAG_CORE壓,ATAG_MEM壓,ATAG_INITRD2等.一看名字就知道要幹嘛. 當我要把initrd/initramfs 的位置告訴kernel時,就可以利用ATAG_INITRD2這類型的ATAG.當我要把kernel command line 告訴kernel時,就可以利用ATAG_CMDLINE

(x86)bootloader 怎麼把kernel參數傳送給kernel.

一樣的,在setup_header 中,有一個欄位是cmd_line_ptr.這個欄位即是儲存了kernel 參數的C型態字串(就是0結尾拉),當然,在x86 old BIOS中,bootloader只能存取1M以下(真實模式嘛),所以cmd_line_ptr紀錄的也是真實模式的位址 好了,一樣可以參考Documentation / x86 / boot.txt