前回,
今回はUEFIがGPT形式のHDDからOSを起動する手順についてより具体的に説明し,
ESPとブートローダ
前回,
たとえば,
UEFIは接続されたHDD上にESPがあるかを調べ,
PE
UEFIの仕様では,
さて,
$ find /boot/efi/EFI/ -name "*efi" -a -exec file {} \; /boot/efi/EFI/Boot/bootx64.efi: PE32+ executable (DLL) (EFI application) x86-64, for MS Windows /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi: PE32+ executable (DLL) (EFI application) x86-64, for MS Windows /boot/efi/EFI/Microsoft/Boot/bootmgr.efi: PE32+ executable x86-64, for MS Windows /boot/efi/EFI/Microsoft/Boot/memtest.efi: PE32+ executable x86-64, for MS Windows /boot/efi/EFI/grub/grubx64.efi: PE32+ executable (EFI application) x86-64 (stripped to external PDB), for MS Windows
ESPの\EFIディレクトリ以下には.efiの拡張子を持つファイルが5つあり,
EFI applicationと認識されないbootmgr.
これらのブートローダを読み込んだASUS B85M-EのUEFIは起動デバイスの選択肢として,
一方,
Linux用UEFIブートローダ
前節では説明の都合上grubx64.
前節で紹介したように,
- マザーボードのファームウェアがUEFIに対応していること
が必要です。加えて,
- HDDがGPT形式になっていること
- HDD上にFAT32形式でフォーマットされたESPが存在し,
- ESPの\EFI\BOOT\以下に.EFIという拡張子を持ったPE形式のブートローダがあること
が必要になります。
インストーラとしては,
ざっと調べたところ,
ftp.
grubでUEFI対応版を作るためには--with-platform=efiというオプションを指定する必要があります。
$ ./configure --prefix=/usr --with-platform=efi checking build system type... x86_64-unknown-linux-gnu checking host system type... x86_64-unknown-linux-gnu checking target system type... x86_64-unknown-linux-gnu ... ******************************************************* GRUB2 will be compiled with following components: Platform: x86_64-efi With devmapper support: Yes With memory debugging: No ...
このオプション指定でビルドして,
$ make ; make install DESTDIR=`pwd`/work .... $ ls ./work/usr/lib/grub/x86_64-efi/ acpi.mod gcry_whirlpool.mod part_plan.mod acpi.module* gcry_whirlpool.module* part_plan.module* adler32.mod gdb_grub* part_sun.mod ...
--with-platform=efiオプションを付けない場合,
$ file ./work/usr/lib/grub/x86_64-efi/acpi.mod work/usr/lib/grub/x86_64-efi/acpi.mod: ELF 64-bit LSB relocatable, x86-64, version 1 (SYSV), not stripped
あれれ,
$ grub-mkimage --help 使い方: grub-mkimage [OPTION...] [OPTION]... [MODULES] Make a bootable image of GRUB. -c, --config=FILE embed FILE as an early config -C, --compression=(xz|none|auto) choose the compression to use for core image ... -o, --output=FILE output a generated image to FILE [default=stdout] -O, --format=FORMAT generate an image in FORMAT available formats: i386-coreboot, i386-multiboot, i386-pc, i386-pc-pxe, i386-pc-eltorito, i386-efi, i386-ieee1275, i386-qemu, x86_64-efi, i386-xen, x86_64-xen, mipsel-yeeloong-flash, ...
確かにgrubはさまざまなOSを起動するMultiboot specificationの考え方で開発され,