[RESPONDED] Arch BIOS Update Guide

Introduction

After not seeing a thread dedicated to updating the BIOS and repairing the bootloader on Arch Linux, I have decided to try to assist those who might be somewhat new to this topic by providing a short guide. I am creating this because it only took me about 10 minutes to fully complete (with distractions) but that's not considering the 1+ hour it took of jumping through hoops and trying to base my setup off of the provided Debian rescue guide Framework provided.


NOTE: I am using Arch Linux with the GRUB bootloader. Some steps might be slightly different based on how you setup your system and install. Feel free to ask questions where needed.

Firstly, you’ll need to download the BIOS file from the Framework site and follow the installation instructions they provide. That much is fairly simple, so I will simply link their page on that matter and move on. However, you will need a live-boot Arch Linux USB drive

ENSURE THAT YOU HAVE THE LIVE BOOT DRIVE BEFORE YOU INSTALL THE NEW BIOS UPDATE. Odds are, the update process will wipe your boot entry from the BIOS meaning you will not be able to boot back into your Linux install until we fix it. The data is not gone or removed, the BIOS just simply does not realize it exists.

After the BIOS update finishes, load into your BIOS (pressing F2) and ensure on the first page that your BIOS version is now 3.07.

If your computer boots into your usual Arch install then CONGRATS!! You don’t need to do anything further, but for those of us who get an error stating that there are no boot devices, continue below.

Readding the GRUB Bootloader

Insert your Arch USB drive and boot to that. You might need to change boot orders on the second to last page of the BIOS,, but mine booted into the drive automatically (remember, there won't be an option for your normal install, so the USB will be the only boot device.


Boot into the Arch USB. Once it loads, use something like -
sudo fdisk -l
to list all of the available drives and find the drive that you originally installed Arch on. For me, I have something like /dev/nvme0n1p1/ and /dev/nvme0n1p2, which is my nvme drive with two partitions, the EDI partition and the actual filesystem.

Mount each partitions to your /mnt directory of the USB drive using something like -
mount /dev/nvme0n1p2 /mnt
which will soft link the entire filesystem to the /mnt directory of your live boot USB drive. Within that file system (use cd or ls to traverse or read directories respectively) find where you originally mounted your EFI partition during the Arch install. Assuming you probably followed the Arch Wiki Installation Guide the directory will probably be under /mnt/mnt/efi directory, or at least it was for me. (I have two /mnt's because I’m mounting the filesystem to the USB /mnt directory, even though on my actual system it looks normal.)

Once both of these partitions are mounted, you’ll need to chroot into the filesystem -
arch-chroot /mnt
and then follow the GRUB instructions for installing an OS as if it was the first install.
My install command looked something like -
grub-install --target=x86_64-efi --efi-directory=/mnt/efi --bootloader-id=GRUB
after this completes (assuming there are no errors) you’ll need to reconstruct the config. Any changes you’ve made to your previous GRUB config will be kept as we’re not changing or modifying any files, it will simply use those old settings again.
grub-mkconfig -o /boot/grub/grub.cfg

For me, this was all that was needed. I shut down the system, removed my USB drive, then started the system and it booted into my OS problem free. Remember to set your battery level somewhere in your BIOS if you feel the desire. Happy hacking!!

13 Likes

Thank you. I had surmised most of your post contents - but this makes it easy.

I suggests users confirm all this information before doing to update;
fdisk -l
easily confirmed my EFI partition, which was /dev/nvme0n1p1 for me @ /boot…

Thanks you!
Yes, I do recommend everyone who tries this to confirm what their drives and partitions are called before beginning. I did try to mention to use fdisk -l to check the drives and find the drive/partition you needed before getting too far.

2 Likes

You were right; I’m a dingle and didn’t realize that info would be available since the drive is… there. Anyway, I was successful but DO want to post what my system ‘needed’. I have a UEFI setup, with / on one partition, /boot on another and a LUKS encrypted partition at /home. Here is what my live-Arch session looked like:

fdisk -l

Disk /dev/nvme0n1: 931.51 GiB, 1000204886016 bytes, 1953525168 sectors
Disk model: Samsung SSD 980 PRO 1TB                 
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 86D4E883-5C96-4EA3-A5B6-9D40B71C82B5

Device             Start        End    Sectors   Size Type
/dev/nvme0n1p1      2048    2099199    2097152     1G EFI System
/dev/nvme0n1p2   2099200   68978687   66879488  31.9G Linux swap
/dev/nvme0n1p3  68978688  698124287  629145600   300G Linux filesystem
/dev/nvme0n1p4 698124288 1953525134 1255400847 598.6G Linux filesystem

mount /dev/nvme0n1p3 /mnt
mount /dev/nvme0n1p1 /mnt/boot
cryptsetup luksOpen /dev/nvme0np4 home
[enter password]
mount /dev/mapper/home /mnt/home
arch-chroot
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader=grub
grub-mkconfig -o /boot/grub/grub.cfg
exit
umount /mnt/home
umount /mnt/boot
umount /mnt
cryptsetup luksClose home

Dunno if I had to mount my LUKS device, but I just rebuilt the filesystem to exactly what it is normally before running the grub commands. Thanks - I’m always scared of grub a bit… but only cause I haven’t worked with it much. I’ll feel stronger next time. Last suggestion for rookie folks doing this; boot to a live-arch USB FIRST and mount your filesystem exactly as your current fdisk -l output looks…

Appreciate the OP.

pAULIE42o
. . . . . . . . .
/s

1 Like

I found this post as I am trying to boot the arch live usb and it does not want to seam to load with BIOS 3.07 (got my laptop new this week)

Has anyone else seen this?

Don’t forget to disable secure boot. If you just updated your BIOS you might have to redo it.

3 Likes

Actually finding myself coming back to this post I made months ago considering BIOS 3.10 is out and I need to remember how I did this.
Also worth mentioning - I still have not received and email notifying me of these BIOS updates, which would be very nice. I also could not easily find the link to the page, but instead found it buried in a couple of other threads. Here is the link for others looking.

I successfully installed the BIOS 3.10 update on my Arch Framework. I did not have to reset the GRUB boot device, it remained and booted into Arch automatically when the BIOS update was done. I was honestly shocked - either I got “lucky” (correct configuration, accidentally) or the developers fixed the BIOS updater. Either way, I’m pleased.

3 Likes

Updated to 3.10 and now it fails to mount /boot/efi, falling into emergency mode.

Will update here if I can figure it out.

It was a bad linux kernel from updating at the same time I did the bios update via fwpdmgr.
Was able to roll-back via btrfs, clean pacman cache, then redownload linux and linux-headers.

All good now (fingers crossed).

Did any steps appear to fail? I updated to 3.10 and did not lose my boot config, but I could have gotten lucky. Where does the issue appear to lie?

It was a bad kernel from updating the firmware and system at the same time. I mention the solution in the original post.

Dropped by this thread BEFORE starting update to the 3.10 BIOS. I am running a fairly vanilla Manjaro system. Never updated to 3.07, so I was jumping from BIOS 3.02 to 3.10. My system also started right back up with no trouble after the update. :smile:

1 Like

I’m about to upgrade to 3.10 - I wasn’t aware of the new BIOS… I just had my Arch system GRUB fail as theres a current issue w/ upgrading an Arch system - so if GRUB fails to boot afterwards I guess I already know my setup and how to rescue… here I gooooo!

Hey mate, glad you’re still around here! I’m honestly glad how many people this last-minute thread has seemed to have helped!!

:stuck_out_tongue: So I just finished and am now on 3.10 - I went the USB drive route, since I’d of been affected by the VRAM(?) wipe and didn’t wanna redo GRUB if not necessary; the update went without a hitch whatsoever. Simple pimple.
Arch Linux, Frame.work 11th gen @ BIOS 3.10

In the instructions above it says; “Firstly, you’ll need to download the BIOS file from the Framework site and follow the installation instructions they provide. That much is fairly simple, so I will simply link their page on that matter and move on.”

The problem for me is “Step 1” which says:

  1. Extract contents of zip folder to a fat32 formatted usb drive.

Can someone provide a little more detail on how to properly partition and format fat32 and then copy the contents of the zip to the usb drive.

Hi @Wink_Saville , welcome to the framework community :slight_smile:

formatting usb drive to FAT32 will depend on the spare OS at hand.

Here is for Windows

Here’s for OSX

Hey hey guys,

Just wanted to add a few things that I had to learn the hard way; maybe save other people some time.

  1. My /root /home and /swap directories were all encrypted. So the commands were slightly different. Once I got to the CLI from the Arch ISO:
# I opened my LUKS partition with all my encrypted directories first
cryptsetup luksOpen /dev/nvme0np2 crypt
[enter password]

# From here my encrypted directories were prepended with @ (@, @home,,
# @swap). To mount the root dir "@" I needed to use an extra flag:

mount -o subvol=@ /dev/mapper/crypt /mnt 

# Then I mounted the boot partition:
mount /dev/nvme0np1 /mnt/boot

# After that everything was basically the same:
arch-chroot /mnt 
grub-install --target=x86_64-efi --efi-directory=/boot --bootloader-id=GRUB
grub-mkconfig -o /boot/grub/grub.cfg
exit
umount /mnt/boot
umount /mnt
cryptsetup luksClose crypt
poweroff
  1. I tried to update my BIOS 3.06 → 3.19 and it failed. Following this thread I learned that you can’t skip those intermediary BIOS updates.

So my upgrade path was:
3.06 → 3.10 → 3.17 → 3.19

I had to run the commands from #1 every single time. Or, I guess, I could’ve created 3 USB sticks for each update beforehand. Hindsight.

Finally, this command shows the correct BIOS version:

sudo dmidecode -s bios-version

Hopefully, I saved other people a headache!

2 Likes