Fwupd 2.0 Open-Source Linux Firmware Updater Released with Major Changes
Highlights of fwupd 2.0 include a new configuration option to ignore firmware requirements for development, a device problem when the device needs a reboot, a new API to allow uploading reports in the GNOME Firmware app, HSI tests for Arrow and Meteor Lake CSME, and support for more modify-config options.
It also adds support for detecting BlueTooth devices by GATT service UUID, Darwin support to the build helper, support for the fwupdtool esp-list --json command, support for listening to the netlink udev socket instead of GUdev, and support for parsing EFI LZ77 compressed sections when required.
Linuxiac:
-
Fwupd 2.0: Major Changes and New Hardware Support
The update has streamlined the tool’s efficiency, significantly reducing runtime memory usage and CPU startup costs. In a move towards modernization, Fwupd 2.0 has dropped all legacy signing formats used for verifying metadata and firmware and removed outdated command-line interface tools.
The shift from libgusb and GUdev to libusb and sysfs in plugins is expected to enhance system compatibility and performance.
Additionally, the new version introduces a method to stream firmware binaries over a file descriptor rather than loading them entirely into memory, which should contribute to reduced system overhead during updates.
From the original:
-
Richard Hughes: fwupd 2.0.0 and new tricks
Today I tagged fwupd 2.0.0, which includes lots of new hardware support, a ton of bugfixes and more importantly a redesigned device prober and firmware loader that allows it to do some cool tricks. As this is a bigger-than-usual release I’ve written some more verbose releases notes below.
The first notable thing is that we’ve removed the requirement of GUsb in the daemon, and now use libusb directly. This allowed us to move the device emulation support from libgusb up into libfwupdplugin, which now means we can emulate devices created from sysfs too. This means that we can emulate end-to-end firmware updates on fake hidraw and nvme devices in CI just like we’ve been able to emulate using fake USB devices for some time. This increases the coverage of testing for every pull request, and makes sure that none of our “improvements” actually end up breaking firmware updates on some existing device.
The emulation code is actually pretty cool; every USB control request,
ioctl()
,read()
(and everything inbetween) is recorded from a target device and saved to a JSON file with a unique per-request key for each stage of the update process. This is saved to a zip archive and is usually uploaded to the LVFS mirror and used in the device-tests in fwupd. It’s much easier than having a desk full of hardware and because each emulation is just that, emulated, we don’t need to do the tens of thousands of 5ms sleeps in between device writes — which means most emulations take a few ms to load, decompress, write and verify. This means you can test [nearly] “every device we support” in just a few seconds of CI time.