EFI boot blob and build scripts for devices using IA32 UEFI
I made this because, perhaps like you, I was trying to install Linux on an older x86_64-based tablet and found myself unable to boot and dropping into UEFI...
Pretty much anything using Intel Silvermont -based "Bay Trail" CPUs:
- Intel Atom® Processor E3800 and Z3700 Series
- Intel® Pentium® and Celeron® Processor N- and J-Series.
- Acer NP15A
- Multilaser M8W tablet
- Asus T100
- Lenovo Tab2
This How-To will walk you through installing Lubuntu. Why Lubuntu? I tested several Ubuntu distributions with these chips and found Lubuntu to be the most performant and lightweight with the Silvermont (see methodology below).
- Fetch the Lubuntu ISO from https://lubuntu.me/downloads/
- Get a copy of bootia32.efi either by downloading it from this repo or building it yourself.
- Back up any valuable files from your USB stick because they'll be deleted in the next step.
- Create a new GPT partition table on the USB stick with Gnome Disks, parted, Windows Disk Manager, or any other partition management utility that supports GPT.
- Create a new FAT32 partition and format it.
- Mount the ISO so you can access the files within it. Windows 10 and most Linux distributions can do this without additional software.
- Make "hidden" files visible on the ISO. Hidden files begin with a single '.' character and are also known as "dot files" for this reason. Windows Explorer and Gnome Files both have this capability in their view menus.
- Copy all files from the ISO onto your USB stick's FAT32 partition.
- Ignore any errors about unsupported symlinks. Those symlinks are not required for a successful installation.
- Copy the bootia32.efi file into /EFI/boot on your USB stick. You should see other .efi files in there already.
- Unmount the USB stick and boot from it.
I know this works with other Debian derivatives. I'm sure there's a way to use it with RedHat derivatives, but you'll have to figure that out on your own. The RedHat process is probably quite similar to the Ubuntu process used here.
I booted each in "live CD" mode, so none of the systems had access to swap. With Lubuntu I could simultaneously open all the default sponsored tabs in Firefox (Facebook, Reddit, other heavy sites), run LibreOffice Write and Calc, load a 4k image into GIMP, and have a YouTube video running full screen in just under 1.5GB RAM. The other Ubuntu distros OOM'd and died long before I could get to YouTube. I figure that's good enough for practical purposes.
If you don't trust boot blobs from random strangers on the internet (understandable) you might want to build from sources. In that case you have two choices with regard to this repo:
- Read the contents of bootstrap.sh and build.sh (in this repo) and run the same commands yourself; or
- Just run the included scripts. If you run the scripts, run
boostrap.sh
first to install dependencies, then runbuild.sh
to build the EFI file.
I relied on these sources to help me figure out this issue:
- https://wiki.debian.org/UEFI#Support_for_mixed-mode_systems:_64-bit_system_with_32-bit_UEFI
- https://sturmflut.github.io/linux/ubuntu/2015/02/04/installing-ubuntu-on-baytrail-tablets-version-2/
- https://github.com/hirotakaster/baytail-bootia32.efi
- In particular I used the build instructions from John Wells's repo: https://github.com/jfwells/linux-asus-t100ta
- https://unix.stackexchange.com/questions/257363/create-a-uefi-bootable-usb-stick-from-an-iso-image-with-gparted
- https://askubuntu.com/questions/395879/how-to-create-uefi-only-bootable-usb-live-media