The below describes how to build GRUB natively and install in on a removable media containing at least an EFI system partition and a Linux rootfs. (The --removable flag simply prevents efibootmgr from being called, and changes the generated GRUB image name to have the UEFI standardised name and path within the EFI system partition.)

These instructions assume execution from within a filesystem image generated with linaro-media-create. For any other system, adjust paths and device names as required.

Note: Following procedures should be run on the target board (ARM Versatile Express A9). If you use serial cable to connect to the board, then by default you will gain the root permission:


$ sudo apt-get update
$ sudo apt-get install autoconf autogen automake bison flex libfreetype6 libfreetype6-dev
$ bzr branch lp:~leif-lindholm/linaro-grub/arm-uefi
$ cd arm-uefi
$ ./
$ ./configure --with-platform=efi --prefix=/usr/local
$ make
$ sudo make install
$ sudo mkdir /boot/efi
$ sudo mount /dev/mmcblk0p1 /boot/efi
$ sudo grub-install --removable --target=arm-efi --boot-directory=/boot --efi-directory=/boot/efi
$ sudo umount /boot/efi

[a] Boot Manager
[b] Shell
[c] Reboot
[d] Shutdown
Start: b


If this message shows on screen after choose [b] from boot menu, do nothing and just let it pass automatically:

Press ESC in 4 seconds to skip startup.nsh or any other key to continue.
2.0 Shell> 

Then run command as following shows:

2.0 Shell> \efi\boot\bootarm.efi

Finally you will enter the Grub screen like this:

                             GNU GRUB  version 2.00

   Minimal BASH-like line editing is supported. For the first word, TAB 
   lists possible command completions. Anywhere else TAB lists possible 
   device or file completions.  


Note: The latest UEFI binary can be fetched from here:

LEG/ServerArchitecture/GRUBonUEFI (last modified 2017-08-17 12:12:55)