Pure UEFI Boot Guide

Revision as of 21:01, November 18, 2014 by Oleg (Talk | contribs)

This tutorial will show you how to install Funtoo on a UEFI system. UEFI, also known as the Unified Extensible Firmware Interface, is a new firmware interface that is used on some newer computers as a replacement for the traditional PC BIOS. It has an integrated boot loader, so setting up booting is different. The recommended approach is to follow the. Many have reported that they are now unable to boot their system using the other, older method. This tutorial is meant to be an "overlay" over the Regular Funtoo Installation. Follow the normal installation and only follow steps in this tutorial when dealing with partitioning and configuring the boot loader (GRUB). All steps are otherwise identical to the regular installation process.

What Are We Doing?

This guide will show you how to set up your UEFI system with EFI-stub method.

First Steps

To install Funtoo Linux on a UEFI system, first you need to boot SysRescueCD in UEFI mode. To do this, enable UEFI in your BIOS, and if necessary disable legacy booting. After some fiddling, you should be able to boot SysRescueCD and get a black and white text menu instead of the traditional aqua/cyan-colored menu. The black and white menu indicates that you booted SysRescueCD in UEFI mode. Once you've accomplished this, you're ready to continue with your Funtoo Linux installation and partition your drive. See below for details.

Note

If the /sys/firmware/efi directory exists, then you have successfully booted in EFI mode and will be able to configure your Funtoo system to boot in EFI mode. If the directory doesn't exist, fix this first. It is a requirement for setting up EFI booting.

Partitioning

To set up your partitions for UEFI booting, you will create a ~500MB FAT32 partition on /dev/sda1, and set it to type EF00 using gdisk.

Command: n ↵
Partition Number: 1 ↵
First sector: 
Last sector: +500M ↵
Hex Code: EF00

This partition will serve as your Funtoo /boot filesystem as well as the partition that the UEFI firmware can read to load GRUB. Then you will set up swap on /dev/sda2 and your root filesystem on /dev/sda3. To create the FAT32 filesystem, type:

# mkfs.vfat -F 32 /dev/sda1

Your /etc/fstab entry for this filesystem will also differ, and will look like this:

/dev/sda1		/boot		vfat		noatime	1 2

Kernel

VFAT

Make sure you add VFAT support to your kernel if you are building it manually.

EFI Framebuffer

If you have the following option enabled in your kernel, then uvesafb and efifb will not be able to detect the framebuffer:

Under Bus options (PCI etc.):

[*] Mark VGA/VBE/EFI FB as generic system framebuffer (NEW)

If you have that option enabled, you must also enable:

Under Device Drivers-->Graphics support-->Frame buffer Devices:

[*]   Simple framebuffer support

This is the preferred method of using the EFI framebuffer, the efifb and uvesafb drivers will be used as a fallback if the above is not compatible.

Boot Loader

EFI Stub method

Instead of bothering with the installation of GRUB and the risk that your system will not boot, you should consider using the UEFI firmware of your computer to boot your kernel. not only does this method reduce boot times slightly, it also removes the hassel of dealing with and configuring a bootloader.

Kernel Configuration

To prepare your kernel to boot with EFI stub, make sure that the following options are built in to your kernel: Under Processor type and features:

[*] EFI runtime service support
[*]     EFI stub support
[ ]         EFI mixed-mode support

[*] Built-in kernel command line
(kernel options that you want to pass go here)

Note

Commands that you would normally pass, such as, video=uvesafb:1920x1080-32,mtrr:3,ywrap, should be put here. In other words, anything that you would normally add to /etc/boot.conf after params += should be added to the built-in kernel command line as well.

Important

You should specifiy the position of your rootfs here. For example: root=/dev/sdb1.

If your system requires an initramfs to boot, do not worry, you can build that in to the kernel. One thing that you should know, however, is that the kernel only takes plaintext and .cpio files for initramfs source files. Therefore, if you use an application to generate an initramfs for you, make sure that it does not use gzip compression. To build better-initramfs-bin without gzip compression, disable the gzip use flag for the package:

/etc/portage/package.use
sys-kernel/better-initramfs-bin -gzip

then emerge better-initramfs:

# emerge better-initramfs-bin

If you check in your /boot directory, you should see a file called initramfs.cpio. See below to include this file in your kernel. Under General setup:

[*] Initial RAM filesystem and RAM disk (initramfs/initrd) support
(/path/to/initramfs/file.cpio)
For better-initramfs-bin:
(/boot/initramfs.cpio)

Building and installing the kernel

After you have configured your kernel, build it, install it to /boot, and then create a copy of the image to store in the EFI boot directory:

# cd /usr/src/linux
# make -jn (replace 'n' with CPU core numbers)
# make -jn install modules_install
# mkdir -vp /boot/EFI/Boot
# cp -v /boot/vmlinuz-x.x.x /boot/EFI/Boot/bootx64.efi

You should be able to reboot and enjoy yor new Funtoo system!