@@ -182,9 +182,76 @@ it to perform firmware updates.
182182 ```
183183 </details>
184184
185+ === "FreeBSD"
186+
187+ !!! warning
188+ `fwupd` on FreeBSD is very much work in progress as of March 2026. The
189+ basic elements are there, but user experience may be far from perfect.
190+ In particular, not all functionality is available (e.g., `fwupd` won't
191+ reboot for you, update may be reported as "in progress" after it has
192+ been applied) or works reliably (may complain about missing ESP,
193+ although this error may be gone on second try or after restarting
194+ `fwupd`). In addition to that, FreeBSD loader and/or kernel has issues
195+ with ESRT which may prevent `uefi_capsule` plugin of `fwupd` from
196+ working.
197+
198+ `fwupd` is available in ports, but the version there lacks UEFI capsules.
199+ The necessary changes are being [upstreamed][D55590], until then a
200+ relatively complicated setup in necessary to have a chance of firmware
201+ updates working. The following instructions assume the system isn't
202+ configured much, make adjustments to not overwrite existing configuration if
203+ that's not the case.
204+
205+ Start by switching from "quaterly" to "latest" packages to have an already
206+ updated `bsdisks` (necessary to find ESP):
207+
208+ ```terminal
209+ # mkdir -p /usr/local/etc/pkg/repos
210+ # sed 's!/quarterly!/latest!' /etc/pkg/FreeBSD.conf > /usr/local/etc/pkg/repos/FreeBSD.conf
211+ ```
212+
213+ Then install `fwupd`, `bsdisks` and various build dependencies. A few ports
214+ will be reinstalled later, this step is just to reuse binary packages and
215+ not build everything from sources. Run the following command:
216+
217+ ```terminal
218+ # pkg install fwupd bsdisks meson help2man noto-sans py311-Jinja2 py311-pygobject py311-pangocffi gettext-tools pkgconf vala dbus cmake ninja git
219+ ```
220+
221+ Now get the version of ports with necessary fixes and reinstall the
222+ packages (cloning will take time, building can too; there will also be a few
223+ dialogs about port options, just agreeing should do but can choose to not
224+ build documentation):
225+
226+ ```terminal
227+ # git clone --branch=fwupd-2026 --depth=1 --filter=blob:none https://github.com/3mdeb/freebsd-ports /usr/ports
228+ # make -C /usr/ports/devel/efivar/ deinstall
229+ # make -C /usr/ports/devel/gnu-efi/ reinstall
230+ # make -C /usr/ports/sysutils/fwupd-efi/ reinstall
231+ # make -C /usr/ports/sysutils/fwupd/ reinstall
232+ ```
233+
234+ `fwupd` communicates with `bsdisks` over D-Bus, so it must be running
235+ (`fwupdmgr` also depends on D-Bus, otherwise using `fwupdtool` as root is
236+ the only option). It can be enabled permanently and then launched like
237+ this:
238+
239+ ```terminal
240+ # echo 'dbus_enable="YES"' >> /etc/rc.conf
241+ # service dbus start
242+ ```
243+
244+ This is how to start D-Bus temporarily:
245+
246+ ```terminal
247+ # service dbus onestart
248+ ```
249+
250+ [ D55590 ] : https://reviews.freebsd.org/D55590
251+
185252### Checking the current firmware version
186253
187- === "Ubuntu, Fedora"
254+ === "Ubuntu, Fedora, FreeBSD "
188255 To check the currently used firmware version, run the following command
189256
190257 ```bash
@@ -260,7 +327,7 @@ it to perform firmware updates.
260327
261328### Checking for updates
262329
263- === "Ubuntu, Fedora"
330+ === "Ubuntu, Fedora, FreeBSD "
264331 To check for available updates for your device, run the following commands
265332
266333 ```bash
@@ -402,6 +469,40 @@ are met.
402469 and the updates on LVFS may not be found using this tool. Refer to
403470 [troubleshooting](#no-updates-available-qubesos).
404471
472+ === "FreeBSD"
473+ To update your firmware, run the following commands:
474+
475+ ```terminal
476+ # fwupdmgr refresh
477+ # fwupdmgr update --no-reboot-check
478+ # reboot
479+ ```
480+
481+ <details><summary>Example of an update process:</summary>
482+ ```
483+ # fwupdmgr update --no-reboot-check
484+ Devices with no available firmware updates:
485+ • UEFI dbx
486+ • SSDPR-PX600-250-80
487+ ╔══════════════════════════════════════════════════════════════════════════════╗
488+ ║ Upgrade System Firmware from 1.0.0 to 1.0.1? ║
489+ ╠══════════════════════════════════════════════════════════════════════════════╣
490+ ║ New Dasharo firmware release for the NovaCustom Meteor Lake laptops ║
491+ ║ ║
492+ ║ with integrated graphics, featuring numerous bug fixes, performance ║
493+ ║ ║
494+ ║ improvements and stability fixes. ║
495+ ║ ║
496+ ║ V54x_6x_TU must remain plugged into a power source for the duration of the ║
497+ ║ update to avoid damage. ║
498+ ╚══════════════════════════════════════════════════════════════════════════════╝
499+ Perform operation? [Y|n]: y
500+ Waiting… [***************************************]
501+ Successfully installed firmware
502+ Do not turn off your computer or remove the AC adapter while the update is in progress.
503+ ```
504+ </details>
505+
405506!!! warning
406507 After the command finishes, a reboot is necessary to apply the update.
407508 The fwupd UEFI application that performs the update will be booted
@@ -438,6 +539,23 @@ source. We will use `novacustom_v54x_mtl_igpu_v1.0.1_btg_prod.cab` downloaded fr
438539 $ sudo fwupdmgr local-install novacustom_v54x_mtl_igpu_v1.0.1_btg_prod.cab
439540 ```
440541
542+ === "FreeBSD"
543+ To update your firmware using a locally available cabinet file, follow the
544+ steps:
545+
546+ 1. Allow updates from untrusted sources
547+ ```terminal
548+ # printf '[fwupd]\nOnlyTrusted=false\n' > /usr/local/etc/fwupd/fwupd.conf
549+ ```
550+ 2. Perform a local install
551+ ```terminal
552+ # fwupdmgr local-install --no-reboot-check novacustom_v54x_mtl_igpu_v1.0.1_btg_prod.cab
553+ ```
554+ 3. Reboot to apply the update
555+ ```terminal
556+ # reboot
557+ ```
558+
441559#### Update troubleshooting
442560
443561##### No output from fwupdmgr update
@@ -607,6 +725,17 @@ manually from fwupd.org.
607725 ` qubes-fwupdmgr ` doesn't currently support ` get-results ` command of
608726 ` fwupdmgr ` .
609727
728+ === "FreeBSD"
729+ The following command is supposed to report update results:
730+
731+ ```bash
732+ $ fwupdmgr get-results
733+ ```
734+
735+ However, this is likely to not produce any results because fwupd fails to
736+ finalize the update. `fwupdmgr get-devices` incorrectly states that "An
737+ update is in progress" along with displaying version that shows the update
738+ has already happened.
610739
611740For another way to verify an update has really happened refer to
612741[ Checking The Current Firmware Version] ( #checking-the-current-firmware-version ) .
0 commit comments