No more release_1.zip, release_1_fixed.zip, and release_1_actual.zip. The tool can automatically inject metadata—Git commit hashes, build dates, and semantic version numbers—directly into the package filename or a manifest file inside the archive.
mk-firmware-pack --fix-checksum -i broken_firmware.bin -o fixed_firmware.bin
# Example fastboot flash
fastboot flash boot bootloader/u-boot.img
fastboot flash kernel kernel/zImage
fastboot flash dtbo dtb/board.dtb
If you work in embedded systems, you know the drill. The code compiles, the tests pass, and the hardware lights up in the lab. You are ready to release.
Then comes the tedious part.
You find yourself manually copying the .bin file, renaming the .elf for debugging, grabbing the specific device tree blob, maybe a config file or two, compressing them into a folder, naming it firmware_v1.0.2_FINAL_FINAL.zip, and emailing it to the factory or uploading it to the server.
It works, but it is fragile. It relies on you remembering every single file every single time. mk-firmware-pack
It is time to automate the artifact generation. Enter mk-firmware-pack.
| Tool | Best for |
|-----------------------|----------------------------------------------------|
| binwalk | Detecting and extracting embedded filesystems. |
| firmware-mod-kit | Full interactive unpack/repack with script injection. |
| dd + unsquashfs | Manual low-level extraction. |
| trx (from OpenWrt) | Working with TRX format specifically. | No more release_1
Use mk-firmware-pack when you need header preservation + fast repacking without a full interactive environment.
mk-firmware-pack -i stock_firmware.bin
Example info output:
Image Type: TRX v1
Kernel Offset: 0x1C (28 bytes)
RootFS Offset: 0x144000
Total Size: 7.8 MB
Checksum: 0x8A3F2B1C (valid)
| Tool | Purpose |
|------|---------|
| fwunpack | Generic firmware extractor (binwalk) |
| Actions-Firmware-Modifier | GUI-based repacker for Windows |
| Rockbox Utility | Automated install for supported devices |
| mksquashfs | If the FS is standard SquashFS (rare on Actions) |
| Pitfall | Solution within MK-Firmware-Pack |
| :--- | :--- |
| "Device descriptor read failed" | The pack’s driver installer forces the correct USB driver. |
| Keymap is too big | The packing script includes rules.mk optimizers (e.g., LTO_ENABLE = yes) and CONSOLE_ENABLE = no to free space. |
| RGB matrix won't turn off | Use the pack's built-in rgb_report.h debugger to see if a layer is forcing a static color. |
| VIA doesn't detect keyboard | The pack includes pre-compiled .json VIA definition files for non-standard keyboards. Drag and drop them into VIA. | If you work in embedded systems, you know the drill