FWUP(1)
π fwup(1) β like, the manual page, bestie β¨
okay so before we even get into it: this is fwup, it lives in the User Commands corner of the manual-verse, and it's genuinely one of those tools that ate and left no crumbs π
. Let's get into it fr fr.
πΈ NAME πΈ
fwup β the configurable embedded firmware update creator and runner. yes, both. she does it all π«Ά
β¨ SYNOPSIS β¨
fwup [OPTION]...
that's it. that's the whole vibe. options go in, firmware magic comes out π
π¦ DESCRIPTION π¦
so fwup is a self-contained utility for creating and applying firmware update files. and like β what even is a firmware update file? bestie, listen: .fw files are literally nothing more than zip archives containing metadata, a limited set of instructions, and data. no cap. that's the whole secret π€«
and where does it run? on an embedded device or on a host PC β either one, she's flexible like that π. fwup is used to write nonvolatile memory (eMMC, SDCards, etc.) in such a way as to upgrade the firmware on the device, or to completely initialize it. it's giving main character energy for your storage media, honestly π
π OPTIONS π
like yes there are a lot of them, but each one is iconic in her own way:
-a,--applyβ applies the firmware update. do the thing π₯-c,--createβ creates the firmware update. make the thing π-d<file>β the device file for the memory card-D,--detectβ lists attached SDCards or MMC devices, plus their sizes. a little headcount for your hardware π-E,--ejectβ ejects removable media after successfully writing firmware--no-ejectβ do not eject media after writing firmware--enable-trimβ enables use of the hardware TRIM command β¨--exit-handshakeβ sends a Ctrl+Z on exit and waits for stdin to close (Erlang)-f<fwup.conf>β specifies the firmware update configuration file-F,--framingβ applies framing on stdin/stdout-g,--gen-keysβ generates firmware signing keys (fwup-key.pubandfwup-key.priv, or specify with-o)-i<input.fw>β specifies the input firmware update file (use-for stdin)-l,--listβ lists the available tasks in a firmware update ποΈ--max-size<blocks>β max size of the destination in 512-byte blocks (usually automatic)-m,--metadataβ prints metadata in the firmware update--metadata-key<key>β only outputs the specified key's value when printing metadata--minimize-writesβ skips the write if contents match the destination. savings, queen πΈ--no-minimize-writesβ doesn't try to minimize writes when applying firmware updates (default)-nβ reports numeric progress-o<output.fw>β specifies the output file when creating an update (use-for stdout)-p,--public-key-file<keyfile>β a public key file for verifying firmware updates (can specify multiple times)--private-key<key>β a private key for signing firmware updates--progress-low<number>β when displaying progress, this is the lowest number (normally0for 0%)--progress-high<number>β when displaying progress, this is the highest number (normally100for 100%)--public-key<key>β a public key for verifying firmware updates (can specify multiple times)-q,--quietβ quiet π€--reboot-param-pathβ path to write reboot parameters (defaults to systemd and Nerves locations)-s,--private-key-file<keyfile>β a private key file for signing firmware updates-S,--signβ signs an existing firmware file (specify-iand-o)--sparse-check<path>β checks if the OS and file system support sparse files atpath--sparse-check-size<bytes>β hole size to check for--sparse-check-t,--task<task>β task to apply within the firmware update-u,--unmountβ unmounts all partitions on the device first-U,--no-unmountβ does not try to unmount partitions on the device--unsafeβ allows unsafe commands (consider applying only signed archives β οΈ)-v,--verboseβ verbose π£οΈ-V,--verifyβ verifies an existing firmware file (specify-i)--verify-writesβ verifies writes when applying firmware updates to detect corruption (default for writing to device files)--no-verify-writesβ does not verify writes when applying firmware updates (default for regular files)--versionβ prints out the version-yβ accepts automatically found memory card when applying a firmware update-zβ prints the memory card that would be automatically detected, then exits-1β fast compression (for create)-9β best compression (default)
lowkey important: --unsafe literally says allow unsafe commands in the description, and it comes with the parenthetical advice to consider applying only signed archives. read that twice, bestie π
π EXAMPLES π
initialize an attached SDCard using all of the default options:
$ fwup myfirmware.fw
create a firmware update archive:
$ fwup -c -f fwup.conf -o myfirmware.fw
apply the firmware to an attached SDCard
this would normally be run on the host, where it would auto-detect an SDCard and initialize it using the complete task:
$ fwup -a -i myfirmware.fw -t complete
apply the firmware update to /dev/sdc and specify the upgrade task:
$ fwup -a -d /dev/sdc -i myfirmware.fw -t upgrade
create an image file from a .fw file for use with dd(1):
$ fwup -a -d myimage.img -i myfirmware.fw -t complete
generate a public/private key pair:
$ fwup -g
store fwup-key.priv in a safe place π and fwup-key.pub on the target. to sign an existing archive, run:
$ fwup -S -s fwup-key.priv -i myfirmware.fw -o signedfirmware.fw
also see the unit tests that come with fwup source code for more examples π. obtain source code and report bugs at https://github.com/fwup-home/fwup.
π§ AUTHOR π§
Written by Frank Hunleth.
π REPORTING BUGS π
please report any bugs on the project page at <https://github.com/fwup-home/fwup> π«Ά
not the bug-report section being the shortest one π anyway
okay that's the whole page, you ate that ngl π β this was fwup version 1.15.0, dated March 2026, and that's the FWUP(1) manual page, periodt. πΈβ¨π
π¦ where this page comes from
- alpine 3.24: fwup-doc 1.15.0-r0 Β· Apache-2.0
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms