Updating your firmware
Keeping your firmware up to date helps your system stay secure, stable, and compatible with new hardware and software.
This guide shows how to update firmware safely using LVFS (Linux Vendor Firmware Service).
Important notes
- Please use LVFS for firmware updates.
- Using other methods (like flashrom or mtd) is not recommended and is done at your own risk.
- If you are using Qubes OS, follow their documentation: https://www.qubes-os.org/doc/how-to-update/
Before you start
- Plug your laptop into AC power and keep it connected during the update.
- Avoid suspend/hibernation during flashing (keep the lid open if your system sleeps when closed).
- Make sure you have a stable internet connection.
- Don’t force power-off while an update is in progress.
1) Check your current firmware versions
Open a terminal (for example, Ctrl + Alt + T), then run:
BIOS version
cat /sys/class/dmi/id/bios_version
EC version
cat /sys/class/dmi/id/ec_firmware_release
(Optional) Confirm fwupd can see your devices:
fwupdmgr get-devices
2) Install the required tools
To update via LVFS, you need fwupd.
Ubuntu / Linux Mint / elementary OS / Zorin OS (and other Ubuntu derivatives)
sudo add-apt-repository ppa:starlabs/main
sudo add-apt-repository universe
sudo apt update
sudo apt install fwupd libflashrom1
Fedora (GNOME/KDE)
sudo dnf install fwupd
Arch / Manjaro
sudo pacman -S fwupd
openSUSE
sudo zypper install fwupd
If you hit errors, jump to Troubleshooting.
3) Install firmware updates
Option A: Terminal
Refresh metadata
fwupdmgr refresh
Check what updates are available
fwupdmgr get-updates
Install updates
fwupdmgr update
If fwupdmgr asks to reboot (or schedules an offline update), reboot when prompted.
Confirm versions (after updating)
Re-run the version checks from Step 1, or use:
fwupdmgr get-history
Option B: Desktop apps
Below are the most common desktop update paths. Pick the one that matches your distro.
elementary OS
Distro(s): elementary OS (v6+)
From version 6 onward, firmware updates appear in System Settings → System → Firmware.
elementarySystem
You can view the current firmware information and install updates by clicking on each component.
elementaryDetails
GNOME Software
Distro(s): Ubuntu (GNOME), Fedora Workstation (GNOME), Zorin OS, openSUSE (GNOME), Arch (GNOME), Manjaro GNOME, Debian
(GNOME)
Firmware updates appear alongside your normal software updates in the GNOME Software app.
KDE Discover
Distro(s): Kubuntu, KDE Neon, Fedora KDE, Manjaro KDE
Firmware updates appear in Discover, just like normal app updates.
KDEDiscover
GNOME Firmware
Distro(s): most distros (useful when firmware updates aren’t integrated into your software center)
If your distro doesn’t integrate firmware updates into a software center, you can use the standalone GNOME Firmware app
(available via most package managers, even on non-GNOME systems).
You can check for updates via the menu → Check for Updates.
If none of the above options are available, you can still manage firmware updates from the terminal.
4) Testing branch (optional)
If you want to help test firmware updates before their official release, you can enable the LVFS testing remote:
Enable
fwupdmgr enable-remote lvfs-testing
Disable
fwupdmgr disable-remote lvfs-testing
Downgrade back to stable
fwupdmgr downgrade
Please note: ensure you have a recovery option before enabling the testing remote.
Troubleshooting
No updates showing
Try forcing a refresh and listing updates again:
fwupdmgr refresh --force
fwupdmgr get-updates
You can also check enabled remotes:
fwupdmgr get-remotes
IO access errors
Do I need iomem=relaxed?
You only need this if fwupdmgr fails with an IO/memory access error. Common messages include:
- /dev/mem mmap failed: Operation not permitted
- Message recipient disconnected from message bus without replying (sometimes paired with the error above)
If your firmware update works, you don’t need to change anything.
How to confirm it’s enabled
iomem=relaxed is a kernel boot parameter (set via your bootloader/GRUB), not something you change inside fwupd.
After you’ve applied the change and rebooted, you can confirm the running kernel received it by checking the active boot
parameters:
cat /proc/cmdline
If you see iomem=relaxed in the output, it’s enabled.
If it’s needed
If you see the errors above, add the iomem=relaxed kernel parameter:
Debian-based distros
sudo sed -i 's/quiet/quiet iomem=relaxed/g' /etc/default/grub
sudo update-grub
Fedora
sudo sed -i 's/quiet/quiet iomem=relaxed/g' /etc/default/grub
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
Arch (GRUB)
sudo sed -i 's/quiet/quiet iomem=relaxed/g' /etc/default/grub
sudo grub-mkconfig -o /boot/grub/grub.cfg
Reboot after making the change.
Version number mismatch
If you see a message that version numbers don’t match:
fwupdmgr update --force
Failed to connect to daemon
If you see a timeout activating org.freedesktop.fwupd, delete the pending DB:
sudo rm /var/lib/fwupd/pending.db
Other errors
Run the updater script:
bash <(curl -s https://raw.githubusercontent.com/StarLabsLtd/firmware/main/updater.sh)
If this doesn’t work on your distribution, you can use a Live USB with Ubuntu to update.