Ukuu is a fantastic tool to install mainline versions of the Linux kernel. Older versions (of Ukuu) are available for free, while the newest version costs $12 USD (at the time of writing). When possible I am a fan of supporting Open Source authors if I use their work. If you are in a position to purchase Ukuu I recommend supporting the author, if not the free version works perfectly fine for this article.

I wanted an updated kernel for x570/3900x Ryzen improvements, I picked version 5.2.8.

After you select a kernel version to install from the Ukuu GUI you can click Install to begin the installation on your system. Once installation is completed you can close the terminal that was opened by Ukuu.

Pop!_OS 19.04 does not use grub and instead uses systemd-boot. We need to configure systemd-boot via an entry for the newly installed kernel. I installed the 5.2.8 kernel and will be using that version for examples, please update for your specific version.

Examples should be ran with elevated privileges using sudo or the root user where specified.

Copying the installed kernel to make it bootable

This method worked for me however I am not sure if it’s the “approved” method when using systemd-boot.

Ukuu installs kernels into /boot and should be relocated to make sure they can be booted using systemd-boot.

ls /boot
config-5.0.0-21-generic initrd.img-5.2.8-050208-generic
config-5.0.0-23-generic System.map-5.0.0-21-generic
config-5.0.0-25-generic System.map-5.0.0-23-generic
config-5.2.8-050208-generic System.map-5.0.0-25-generic
efi System.map-5.2.8-050208-generic
grub vmlinuz-5.0.0-21-generic
initrd.img-5.0.0-21-generic vmlinuz-5.0.0-23-generic
initrd.img-5.0.0-23-generic vmlinuz-5.0.0-25-generic
initrd.img-5.0.0-25-generic vmlinuz-5.2.8-050208-generic

The files that need to be copied are:

  • vmlinuz-5.2.8-050208-generic
  • initrd.img-5.2.8-050208-generic
  • System.map-5.2.8-050208-generic Not 100% this is required but I copied it anyway.

A directory will be created at /boot/efi/EFI named 5.2.8 and then the files will be copied.

sudo mkdir /boot/efi/EFI/5.2.8
sudo cp /boot/vmlinuz-5.2.8-050208-generic /boot/efi/EFI/5.2.8
sudo cp /boot/initrd.img-5.2.8-050208-generic /boot/efi/EFI/5.2.8
sudo cp /boot/System.map-5.2.8-050208-generic /boot/efi/EFI/5.2.8

Create an entry for the new kernel

sudo cp /boot/efi/loader/entries/Pop_OS-current.conf /boot/efi/loader/entries/Pop_OS-current-5.2.8.conf

Pop_OS-current-5.2.8 should be edited to point to the kernel we copied over in a previous step. The resulting file is displayed below, only the first three lines where modified.

title Pop!_OS_5.2.8
linux /EFI/5.2.8/vmlinuz-5.2.8-050208-generic
initrd /EFI/5.2.8/initrd.img-5.2.8-050208-generic
options root=UUID=f57eab8f-e037-4609-81bc-3d6fcbef710a ro quiet loglevel=0 systemd.show_status=false splash

Our final step is to tell systemd-boot to use Pop_OS-current-5.2.8 as the default entry. Edit /boot/efi/loader/loader.conf and change Pop_OS-current to Pop_OS-current-5.2.8 which is the name of our kernel entry file. I’ve included the entire file below.

default Pop_OS-current-5.2.8

If you reboot and your computer has trouble with the new kernel you can hold F7 during the boot process which will allow you to select your previous kernel.

Feel free to reach out on twitter and good luck with your new kernel!

Update: If you install a mainline kernel and wish to stop apt from updating your default unused kernel, check out my newest post!