1、下载grub2 2.00源码
2、不了不和系统原有的grub2 x86重合,单独指定目录:
mkdir ~/grub-efi
tar xvf grub-2.00.gz -C /tmp
cd /tmp/grub-2.00
mkdir build && cd build
../configure --with-platform=efi --prefix=$HOME/grub-efi ( 需要freetype2-devel 依赖)
make && make intall
生成grub.efi文件,后面模块尽量指定启动时需要的模块,比如目标磁盘是gpt,则part_gpt是必须的。否则启动后不识别磁盘分区也就找不到efi分区
bin/grub-mkimage -o grub.efi -O x86_64-efi -d lib/grub/x86_64-efi/ boot linux part_gpt part_msdos fat ext2 iso9660 ntfs normal configfile loadenv search chain font multiboot lvm exfat boot configfile minicmd
把生成的grub.efi放置在 efi分区 \efi\boot\bootx64.efi,默认值
默认根为启动的分区 例如 root=(hd0,gpt1)
默认前缀 prefix=\boot\grub
模块目录 \boot\grub\x86_64-efi
配置文件 \boot\grub\grub.cfg
如果要改变默认值可以生成grub.efi嵌入一个内置菜单文件来指定这些值。
内置菜单:
vim bootconfig.cfg
search -f -n --set=root /boot/x86_64-efi/grub.cfg
prefix=($root)/boot/x86_64-efi
configfile /boot/x86_64-efi/grub.cfg
cd ~/grub-efi
bin/grub-mkimage -o ~/grub.efi -O x86_64-efi -d lib/grub/x86_64-efi/ boot linux part_gpt part_msdos fat ext2 iso9660 udf ntfs normal configfile loadenv search chain font multiboot lvm exfat configfile minicmd -c bootconfig.cfg
当前目录下生成了grub.efi文件。
制作一个软盘做为非光盘非模拟文件
dd if=/dev/zero of=efi.img bs=512 count=2880
mkfs.msdos efi.img
mkdir -p ./mnt/fd0 && sudo mount -o loop efi.img ./mnt/fd0
sudo mkdir -p ./mnt/fd0/efi/boot
sudo mv grub.efi ./mnt/fd0/efi/boot/bootx64.efi
sudo sync && sudo umount /mnt/fd0
生成光盘镜像
mkdir -p /tmp/grub-iso/boot
cp -R lib/grub /tmp/grub-iso/boot
cp efi.img /tmp/grub-iso/boot
mkisofs -U -v -J -R -e boot/efi.img -no-emul-boot -o grub-efi.iso /tmp/grub-iso/ .
sudo mkisofs -U -A "Custom1404" -V "Custom1404" -volset "Custom1404" -J -joliet-long -r -v -T -o ../Custom1404.iso -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e boot/grub/efi.img -no-emul-boot .
如果要做efi和bios两启动的光盘:
注:mkisofs for win32的版本没有-e (efi引导) 参数,所以要用oscdimg制作。。
mkisofs -U -V "GRUB-efi-x86" -J -R -v -b boot/isocore.img -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e boot/efi.img -o grubcore.iso grub-iso/
oscdimg方法:
把grub.efi放置在\efi\boot\bootx64.efi,然后把这目录结构制作成标准软盘grub-efi.vfd
oscdimg -bgrub-efi.vfd grub-efi grub.iso