32-Bit UEFI Boot Support
I recently purchased a Dell Venue 8 Pro. I have read online about what it needs in order to boot into Ubuntu or any other Linux distro. From what I have gathered, what really needs to happen is 32-bit UEFI support. I got information from several sites, but where it was really summed up was in this previous post:
http://ubuntuforums.org/showthread.php?t=2187204
"Ubuntu has no 32-Bit Uefi installer, ask them to add support, they may listen."
That thread was specifically about getting the Dell Venue 8/11 Pro to boot Linux. However, there are a slew of new tablets coming out running 32-bit UEFI, and I think this is a trend that is going to continue to grow:
mjg59.dreamwidth.org/26734.html
"UEFI on IA32 isn't going away. It will show up on more embedded systems as time goes on."
Others have tried this before with mixed success, but haven't gotten things to work quite right:
https://www.happyassassin.net/2013/11/24/the-fedlet-revived-or-fedora-linux-on-a-dell-venue-8-pro-bay-trail/
"It doesn’t really work. But it’s interestingly close."
I'm trying to start a thread dedicated thread on 32-Bit UEFI support, because that is the piece that is missing (from what I understand). I don't really know how to work with this stuff, but I'm hoping that some people who do will read this and either contact canonical or somehow patch Ubuntu (or any other distro, really) to work this way. Again, I don't really know how to do any of this...I'm just hoping someone can help!
Dell Venue 8, 11 Pro, Toshiba Encore, Acer w3, w4, Lenovo miix, and the asus transformer a100 are all tablets that will be affected by this...I think these are going to be incredibly popular tablets once their prices go down, and I think people are really going to get interested in putting linux on these. Any help is appreciated, and thank you all so much!
EDIT 4/1/14: Just booted into Ubuntu on my DV8Pro! All you have to do is follow the instructions here:
http://www.jfwhome.com/2014/03/07/perfect-ubuntu-or-other-linux-on-the-asus-transformer-book-t100/
To summarize, what you need to do is download the latest Ubuntu 14 daily build (AMD 64 is what worked for me) and put that on a USB drive via Rufus. 'For “Partition scheme and target system type”, choose “GPT partition scheme for UEFI computer.”' You can get the latest daily build here: http://cdimage.ubuntu.com/daily-live/current/
You will need to put the file found below into your EFI/Boot directory: https://github.com/jfwells/linux-asus-t100ta/raw/master/boot/bootia32.efi
Disable Secureboot and such--follow the original instructions link if you don't know how. Then set the USB to boot first in BIOS. This should get you to GRUB.
The rest I'll quote the original author, it's real straightforward:
In the GRUB menu, highlight “Try Ubuntu”, and press “e” to edit it. In the editing screen, scroll down to the command line options, where it says “quiet splash”. Delete “splash” and replace it with: video=VGA-1:1368x768e reboot=pci,force [EDIT: For those of us using the Dell Venue 8 Pro, you need to use this line instead: video=VGA-1:800x1280e reboot=pci,force That accounts for the different resolution of screen.]
Then press F10 to boot. You should get all the way to the Desktop.
There you have it! This got me to the Unity Desktop. Problems: Wifi is not working, but I used an Ethernet adapter and that seems to work.
I tried rotating the screen, but it throws your touch input off to one side, so I left it.
Make sure to read the tutorial mentioned earlier, it is more comprehensive, even though it is made for the ASUS T100. If nothing else, the instructions I have provided should be enough just to get you to the Unity Desktop, which for me was amazing! Hope you too can have the same success and keep building on it!
For what it's worth, someone else did this and posted a youtube video here: https://www.youtube.com/watch?v=1WrRngZ4giE#t=94
Ubuntu 15.10 supports 32-bit EFI. The 32-bit version will, in fact, automatically install a 32-bit EFI bootloader. Unfortunately, Canonical doesn't offer a bootable 32-bit ISO that has an EFI bootloader in the DVD image. So, we must create the install disk ourselves.
Other instructions try getting 64-bit Ubuntu to run and install. This probably comes from a misconception that EFI requires a 64-bit OS. This is false. In fact, the bitness of the EFI is meant to be tied to the bitness of the OS. Most PCs are designed for 64-bit OSes and therefore have 64-bit EFIs. However, cheap PCs designed for a 32-bit OS have 32-bit EFI.
Keep in mind, however, that Ubuntu (or rather, its Linux kernel) doesn't fully support the hardware in the systems which typically ship with 32-bit EFI BIOSes (cheap Intel Atom SoCs). WiFi, sound, and power management often do not work. Patched third-party kernels that fix some of the issues do exist, such as those made available here.
To prepare an Ubuntu 32-bit install drive with an EFI bootloader:
- Download both 32bit and 64bit Ubuntu ISOs. (Tested with Ubuntu 15.10)
Download a multi-arch Debian ISO. (Tested with Debian 8.2.0 netinst ISO)
-
Format your USB disk as FAT and mount it
- In Gnome Disks, select the USB drive in the left list, go to the "Hamburger Menu" in the upper-right corner, choose Format Disk, select MSR/DOS partitioning, and Format. Then click '+' and accept defaults which should create a FAT partition. Finally, click the "play" triangle to mount it.
- Extract installation files from the Ubuntu 32-bit ISO while copying the contents of the symlinks
- In Gnome Disks, open the Disks menu (up where File and Edit normally are), choose Attach Disk Image, select ubuntu-15.10-desktop-i386.iso, and mount the biggest partition.
- In Terminal,
rsync -rL --exclude=/ubuntu <path to Ubuntu 32-bit install disk>/ <path to usb disk>/
- Replace
<placeholders>
with the correct paths - Don't forget the slash at the end of the source path
- Replace
- Copy /boot and /EFI directories from an Ubuntu 64-bit ISO
- Mount the iso
rsync -r <path to Ubuntu 64-bit install disk>/boot/ <path to usb disk>/boot/
-
rsync -r <path to Ubuntu 64-bit install disk>/EFI/ <path to usb disk>/EFI/
- Again, the slashes at the end are significant
- Copy 32-bit GRUB from a Debian multi-arch ISO
- Mount the iso
cp <path to Debian multi-arch install disk>/efi/boot/bootia32.efi <path to usb disk>/EFI/BOOT/
-
rsync -r <path to Debian multi-arch install disk>/boot/grub/i386-efi <path to usb disk>/boot/grub/
- Watch those slashes (this time the source doesn't end in a slash)
- Rename vmlinuz to vmlinuz.efi
mv <path to usb disk>/casper/vmlinuz <path to usb disk>/casper/vmlinuz.efi
- Unmount everything
- Disable Secure Boot on target system and boot from the USB drive.
- Install Ubuntu! (I've tested with "Erase disk and encrypt it with LVM" option and the install works automatically--unless the kernel doesn't support the flash chips in the device.)
- System should be "ready." It will boot, but actually it may not be very functional due to lack of drivers (as of Ubuntu 16.04). Check out this Google+ group for more advice and latest patched kernels.
Broadly speaking, if you need to install Ubuntu (or any other Linux distribution) on a computer with a 32-bit EFI and no BIOS/CSM/legacy-mode boot support, the way to do it is:
- Use unetbootin or something similar to prepare an installation USB flash drive. (It's possible to get it to work with a CD-R, but this takes more work.)
- Choose an EFI-mode boot loader for Linux. I recommend ELILO, Fedora's patched GRUB Legacy, rEFInd, or gummiboot because they're relatively easy to set up manually. GRUB 2 is far too difficult to configure manually, and SYSLINUX is too new.
- Research your chosen boot loader's configuration file format and its needs in terms of kernel location.
- Check the original CD image to find its boot loader configuration. You need to know what options are being passed to the kernel by the boot loader.
- Add an
EFI/BOOT
directory to a FAT partition on the USB flash drive that now holds your Linux image. Ideally, this partition should be an ESP (that is, have a "boot flag" set inparted
or have a type code of EF00 ingdisk
if the disk uses GPT; or have a type code of 0xEF infdisk
if the disk uses MBR), but some ESPs can cope without that. If the disk doesn't have a FAT partition, you'll need to create one - Copy your chosen boot loader's binary file (with a name that ends in
.efi
) to theEFI/BOOT
directory on the USB flash drive, and rename it tobootia32.efi
-- that is, it should beEFI/BOOT/bootia32.efi
. Be sure to copy the 32-bit version of the boot loader! - Install any support files that the boot loader needs, such as drivers, images, modules, and configuration files. In some cases (such as ELILO and gummiboot), you'll need to copy your kernel and initrd file to the FAT partition that holds the boot loader.
- Edit the configuration file(s) for your boot loader so that it can launch the kernel with the options you identified earlier by examining the BIOS-mode boot loader's configuration.
- Reboot to test the boot loader.
With any luck it will work and you'll be able to install everything. I can't guarantee that Ubuntu will install a 32-bit EFI boot loader, though. If not, you'll need to boot an emergency system and set that up manually, too. You may also need to debug something, particularly if unetbootin (or whatever you use) doesn't set up the flash drive in the optimal way.
Of course, this description is fairly vague about the critical detail of configuring the boot loader. This is because I haven't done it recently (although I have in the past), and the details vary depending on what boot loader you choose.