使用grub2 製做支持BIOS&UEFI 雙啓動的ISO鏡像linux
首先就是準備grub2了。最新的Release版本能夠從這裏獲取: ftp://ftp.gnu.org/gnu/grub.ios
其餘信息參考 http://www.gnu.org/software/grub/vim
Compiler:工具
a. Download the newest released grub2 packageoop
b. Decompress the package to path $grub2ui
c. mkdir ~/grub2-bios ~/grub2-uefi, cd $grub2 mkdir build build-uefispa
d. cd build, ../configure --prefix=${HOME}/grub2-bios, make , make install #compiler bios versionorm
e: cd ../build-uefi ../configure --with-platform=efi --target=x86_64 --prefix=${HOME}/grub2-uefi,get
make, make installinput
Note: 正確的編譯grub2, 你須要安裝一些工具與lib,請參考grub INSTALL document。
Make bin:
Bios:
cd ~/grub2-bios
bin/grub-mkimage -p / -d ./lib/grub/i386-pc -O i386-pc core.img biosdisk udf iso9660 reboot halt linux #參數請參考幫助
cat ./lib/grub/i386-pc/cdboot.img ./core.img > ./grub2cd.bin
UEFI:
cd ~/grub2-uefi
bin/x86_64-grub-mkimage -d ./lib/grub/x86_64-efi -c preconfiguration.conf -p /efi/boot -O x86_64-efi \
-o bootx64.efi ext2 fat ntfs part_msdos part_gpt search search_fs_file search_fs_uuid linux \
acpi help reboot halt usb usbms boot chain efi_gop efi_uga gfxterm png tga echo udf ata pata
編譯並製做好用於引導系統的loader以後,就開始準備之中image鏡像文件了:
mkdir ~/image
cd image; mkdir -p efi/boot boot
# copy linux bzImage initrd.gz to boot directory
cp ~/grub2-bios/grub2cd.bin ./
vim grub.cfg #用於grub2cd.bin 使用的 配置文件,根據image的目錄結構配置cfg
dd if=/dev/zero of=efiboot.img bs=1M count=4
mkfs.vfat -F 32 efiboot.img
mount -o loop -t vfat efiboot.img /mnt/loop
mkdir -p /mnt/loop/efi/boot
cp ~/grub2-uefi/bootx64.efi /mnt/loop/efi/boot
umount /mnt/loop
vim efi/boot/grub.cfg #用於efi firmware使用的配置文件
genisoimage -A "Sample" -V "volume id" -J -joliet-long -r -v -input-charsetutf8 \
-T -udf -o image.iso -b grub2cd.bin -no-emul-boot -boot-load-size 4 \
-boot-info-table -eltorito-alt-boot -e efiboot.img -no-emul-boot .
到此咱們的dual boot cd就製做好了。
這裏必定要製做udf格式的文件系統,若是作成iso9660的系統,某些光驅會出現讀取扇區錯誤。估計是grub2使用的iso9660的文件系統驅動問題。