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 squash4 part_msdos part_gpt normal biosdisk" if BR2_TARGET_GRUB2_I386_PC
	default "boot linux ext2 fat squash4 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
