config BR2_TARGET_GRUB2 bool "grub2" depends on BR2_i386 || BR2_x86_64 help GNU GRUB is a Multiboot boot loader. It was derived from GRUB, the GRand Unified Bootloader, which was originally designed and implemented by Erich Stefan Boleyn. GRUB 2 has replaced what was formerly known as GRUB (i.e. version 0.9x), which has, in turn, become GRUB Legacy. Amongst others, GRUB2 offers EFI support, which GRUB Legacy doesn't provide. Notes on using Grub2 for BIOS-based platforms ============================================= 1. Create a disk image dd if=/dev/zero of=disk.img bs=1M count=32 2. Partition it (either legacy or GPT style partitions work) cfdisk disk.img - Create one partition, type Linux, for the root filesystem. The only constraint is to make sure there is enough free space *before* the first partition to store Grub2. Leaving 1 MB of free space is safe. 3. Setup loop device and loop partitions sudo losetup -f disk.img sudo partx -a /dev/loop0 4. Prepare the root partition sudo mkfs.ext3 -L root /dev/loop0p1 sudo mount /dev/loop0p1 /mnt sudo tar -C /mnt -xf output/images/rootfs.tar sudo umount /mnt 5. Install Grub2 sudo ./output/host/usr/sbin/grub-bios-setup \ -b ./output/host/usr/lib/grub/i386-pc/boot.img \ -c ./output/images/grub.img -d . /dev/loop0 6. Cleanup loop device sudo partx -d /dev/loop0 sudo losetup -d /dev/loop0 7. Your disk.img is ready! Using genimage -------------- If you use genimage to generate your complete image, installing Grub can be tricky. Here is how to achieve Grub's installation with genimage: partition boot { in-partition-table = "no" image = "path_to_boot.img" offset = 0 size = 512 } partition grub { in-partition-table = "no" image = "path_to_grub.img" offset = 512 } The result is not byte to byte identical to what grub-bios-setup does but it works anyway. To test your BIOS image in Qemu ------------------------------- qemu-system-{i386,x86-64} -hda disk.img Notes on using Grub2 for EFI-based platforms ============================================ 1. Create a disk image dd if=/dev/zero of=disk.img bs=1M count=32 2. Partition it with GPT partitions cgdisk disk.img - Create a first partition, type EF00, for the bootloader and kernel image - Create a second partition, type 8300, for the root filesystem. 3. Setup loop device and loop partitions sudo losetup -f disk.img sudo partx -a /dev/loop0 4. Prepare the boot partition sudo mkfs.vfat -n boot /dev/loop0p1 sudo mount /dev/loop0p1 /mnt sudo cp -a output/images/efi-part/* /mnt/ sudo cp output/images/bzImage /mnt/ sudo umount /mnt 5. Prepare the root partition sudo mkfs.ext3 -L root /dev/loop0p2 sudo mount /dev/loop0p2 /mnt sudo tar -C /mnt -xf output/images/rootfs.tar sudo umount /mnt 6 Cleanup loop device sudo partx -d /dev/loop0 sudo losetup -d /dev/loop0 7. Your disk.img is ready! To test your EFI image in Qemu ------------------------------ 1. Download the EFI BIOS for Qemu Version IA32 or X64 depending on the chosen Grub2 platform (i386-efi vs. x86-64-efi) http://sourceforge.net/projects/edk2/files/OVMF/ 2. Extract, and rename OVMF.fd to bios.bin and CirrusLogic5446.rom to vgabios-cirrus.bin. 3. qemu-system-{i386,x86-64} -L ovmf-dir/ -hda disk.img 4. Make sure to pass pci=nocrs to the kernel command line, to workaround a bug in the EFI BIOS regarding the EFI framebuffer. http://www.gnu.org/software/grub/ if BR2_TARGET_GRUB2 choice prompt "Platform" config BR2_TARGET_GRUB2_I386_PC bool "i386-pc" help Select this option if the platform you're targetting is a x86 or x86-64 legacy BIOS based platform. config BR2_TARGET_GRUB2_I386_EFI bool "i386-efi" help Select this option if the platform you're targetting has a 32 bits EFI BIOS. Note that some x86-64 platforms use a 32 bits EFI BIOS, and this option should be used in this case. config BR2_TARGET_GRUB2_X86_64_EFI bool "x86-64-efi" depends on BR2_ARCH_IS_64 help Select this option if the platform you're targetting has a 64 bits EFI BIOS. endchoice if BR2_TARGET_GRUB2_I386_PC config BR2_TARGET_GRUB2_BOOT_PARTITION string "boot partition" default "hd0,msdos1" help Specify the partition where the /boot/grub/grub.cfg file is located. Use 'hd0,msdos1' for the first partition of the first disk if using a legacy partition table, or 'hd0,gpt1' if using GPT partition table. endif # BR2_TARGET_GRUB2_I386_PC config BR2_TARGET_GRUB2_BUILTIN_MODULES string "builtin modules" default "boot linux ext2 fat part_msdos part_gpt normal biosdisk" if BR2_TARGET_GRUB2_I386_PC default "boot linux ext2 fat part_msdos part_gpt normal efi_gop" \ if BR2_TARGET_GRUB2_I386_EFI || BR2_TARGET_GRUB2_X86_64_EFI config BR2_TARGET_GRUB2_BUILTIN_CONFIG string "builtin config" help Path to a Grub 2 configuration file that will be embedded into the Grub image itself. This allows to set the root device and other configuration parameters, but however menu entries cannot be described in this embedded configuration. endif # BR2_TARGET_GRUB2