<feed xmlns='http://www.w3.org/2005/Atom'>
<title>firmware-utils, branch master</title>
<subtitle>OpenWrt firmware image utilities</subtitle>
<id>https://git.openwrt.org/project/firmware-utils/atom?h=master</id>
<link rel='self' href='https://git.openwrt.org/project/firmware-utils/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/firmware-utils/'/>
<updated>2026-10-20T22:56:17Z</updated>
<entry>
<title>mkbossimg: add tool for Bintec BOSS firmware images</title>
<updated>2026-10-20T22:56:17Z</updated>
<author>
<name>Simon Wunderlich</name>
</author>
<published>2026-09-17T13:17:27Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/firmware-utils/commit/?id=b2a93c6f77bac3a6525e93b383c987b073b4633b'/>
<id>urn:sha1:b2a93c6f77bac3a6525e93b383c987b073b4633b</id>
<content type='text'>
The bootmonitor of Bintec elmeg RS-series routers (RS123, RS230, RS353)
expects a 52-byte BOSS header in front of a gzip-compressed image: a
23-byte magic string identifying the board family, followed by
fw_version, image_type, image_version, image_length, a CRC32 over the
payload and two vendor fields, all big-endian.

No existing tool produces this. mkbrnimg, from which this is derived,
writes a 12-byte trailing footer plus a signature string instead.

The input is expected to carry a 52-byte placeholder header so the
payload stays aligned to the flash sector size; it is skipped, and length
and CRC are computed over the remainder. The CRC is the plain zlib CRC32.

Output was verified byte-for-byte against the original implementation
from armSeb/openwrt-RS353, and the header layout was cross-checked
against a genuine vendor firmware image.

Signed-off-by: Simon Wunderlich &lt;sw@simonwunderlich.de&gt;
Link: https://github.com/openwrt/firmware-utils/pull/78
Signed-off-by: Jonas Jelonek &lt;jonas@jonasjelonek.de&gt;
</content>
</entry>
<entry>
<title>mkhsfls: add tool for Herospeed camera firmware</title>
<updated>2026-10-12T09:46:10Z</updated>
<author>
<name>Daniel Golle</name>
</author>
<published>2026-10-09T13:35:23Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/firmware-utils/commit/?id=0179ab1e367f756ac108a485f26585661d4c528c'/>
<id>urn:sha1:0179ab1e367f756ac108a485f26585661d4c528c</id>
<content type='text'>
The web interface of Herospeed and Longse RV1126 IP cameras accepts a
.FLS container, which the firmware writes to the inactive A/B slot. It
has a 24 byte header with SoC and sensor name, the file size and the
entry count, followed by one 256 byte record per entry and the entry
data. Add a tool that packs boot, system and the other entry types the
firmware understands into such a container.

The output is identical to the container of a stock RV1126 firmware
rebuilt from its entries.

Signed-off-by: Daniel Golle &lt;daniel@makrotopia.org&gt;
</content>
</entry>
<entry>
<title>mkrkboot: add tool for Rockchip Android boot images</title>
<updated>2026-10-12T09:45:54Z</updated>
<author>
<name>Daniel Golle</name>
</author>
<published>2026-10-09T13:34:01Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/firmware-utils/commit/?id=16ef76b1f337719e5f78169907806149c4afd0c9'/>
<id>urn:sha1:16ef76b1f337719e5f78169907806149c4afd0c9</id>
<content type='text'>
Rockchip's U-Boot on the RV11xx camera SoCs boots an Android boot image
with a Rockchip resource image in the second stage slot, which carries
the device tree as rk-kernel.dtb. Add a tool that builds both from a
kernel image and a device tree, with optional extra resource entries.

The boot image header is the Android v0 header including the SHA-1 id,
and the resource image has the index table with a SHA-1 per entry. The
output is identical to the boot image of a stock RV1126 firmware.

Signed-off-by: Daniel Golle &lt;daniel@makrotopia.org&gt;
</content>
</entry>
<entry>
<title>dlink-sge-image: initialize the signature length</title>
<updated>2026-09-30T18:15:08Z</updated>
<author>
<name>Paul Spooren</name>
</author>
<published>2026-09-30T09:14:39Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/firmware-utils/commit/?id=a1d9589f1ea1b96529ac10fef5d164ff3aa03dc7'/>
<id>urn:sha1:a1d9589f1ea1b96529ac10fef5d164ff3aa03dc7</id>
<content type='text'>
EVP_PKEY_sign() takes the size of the signature buffer in *siglen and
fails if it is too small. siglen is not initialized, so the result
depends on whatever the stack holds: with some builds both signatures
are written, with others signing fails and the image carries 1024 zero
bytes instead. The same firmware thus differs between build hosts.

Set siglen to the size of the buffer before each call. The signatures
are deterministic PKCS#1 v1.5 signatures, so they match the ones of
images built where signing happened to work.

Signed-off-by: Paul Spooren &lt;mail@aparcar.org&gt;
</content>
</entry>
<entry>
<title>zyimage: make output byte order explicit</title>
<updated>2026-09-23T21:53:02Z</updated>
<author>
<name>Aleksei Sviridkin</name>
</author>
<published>2026-08-22T20:41:04Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/firmware-utils/commit/?id=9cf0f6e00e393259f6ab5f0d06a004f00e161ce7'/>
<id>urn:sha1:9cf0f6e00e393259f6ab5f0d06a004f00e161ce7</id>
<content type='text'>
device_id and crc32 were written in native host byte order, with no
byte-swap calls at all, so the on-disk output was only correct on
little-endian build hosts. Make the existing little-endian behavior
explicit with htole32() and document the byte layout, so a porter
reading the vendor's CONFIG_TARGET_DEVICE_ID can map it to the
equivalent OpenWrt ZYIMAGE_ID.

Assisted-By: Claude &lt;noreply@anthropic.com&gt;
Signed-off-by: Aleksei Sviridkin &lt;f@lex.la&gt;
Link: https://github.com/openwrt/firmware-utils/pull/75
Signed-off-by: Jonas Jelonek &lt;jonas@jonasjelonek.de&gt;
</content>
</entry>
<entry>
<title>asusuimage: fix fs_offset extraction in show_info</title>
<updated>2026-09-23T21:30:04Z</updated>
<author>
<name>Mateusz Jończyk</name>
</author>
<published>2026-03-23T21:30:24Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/firmware-utils/commit/?id=71f8d9a9a22ae06a690d086126f99da6b0e36b02'/>
<id>urn:sha1:71f8d9a9a22ae06a690d086126f99da6b0e36b02</id>
<content type='text'>
This code was apparently intended to look for FS_OFFSET_PREFIX and then
read the big-endian 24-bit value just after it. Instead, it did always
read the value from a fixed offset.

This fixes using bogus (or zero) values of `fs_offset` when analysing
TRXv2 images for Asus RT-AX53U. Now the values agree with what the
`binwalk` tool prints.

This patch modifies the show_info() function, which is used only for
firmware analysis and not in an OpenWRT build.

Signed-off-by: Mateusz Jończyk &lt;mat.jonczyk@o2.pl&gt;
Link: https://github.com/openwrt/firmware-utils/pull/66
Signed-off-by: Jonas Jelonek &lt;jonas@jonasjelonek.de&gt;
</content>
</entry>
<entry>
<title>mksenaofw: warn instead of erroring on plain type-0 images</title>
<updated>2026-09-23T21:25:26Z</updated>
<author>
<name>Misha Hawthorn</name>
</author>
<published>2026-08-24T14:35:28Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/firmware-utils/commit/?id=ceaf0f9c1e222c42128885f8b4499338730ffeee'/>
<id>urn:sha1:ceaf0f9c1e222c42128885f8b4499338730ffeee</id>
<content type='text'>
firmware_type 0 ("combo") is currently a fatal error unless a capwap header is
supplied. Some rebranded Senao devices ship a plain type-0 header with no
capwap section -- notably the Netgear WAX214 and WAX218 (vendor_id 0x231),
whose stock web-UI updater accepts the bare 0x60 img_header + magic-XOR'd
payload.

Downgrade that case to a non-fatal warning. Capwap encodes always set a
datecode (-c), so this only affects a type-0 encode with no capwap arguments;
encode_image() already omits the capwap section and computes the checksum over
the 0x60 header alone when no capwap header is supplied, so a plain image is
produced correctly.

Signed-off-by: Misha Hawthorn &lt;inbox@heymisha.com&gt;
Link: https://github.com/openwrt/firmware-utils/pull/76
Signed-off-by: Jonas Jelonek &lt;jonas@jonasjelonek.de&gt;
</content>
</entry>
<entry>
<title>mkzynfw: align RTL_OTTO_BOARD definitions</title>
<updated>2026-09-23T21:22:31Z</updated>
<author>
<name>Jonas Jelonek</name>
</author>
<published>2026-09-23T21:15:05Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/firmware-utils/commit/?id=a0177f9b3bba9e390ca02f6e914af4286496f661'/>
<id>urn:sha1:a0177f9b3bba9e390ca02f6e914af4286496f661</id>
<content type='text'>
Align the RTL_OTTO_BOARD definitions internally, adding spaces to the
different parameters to have a cleaner and easier to read table.

Link: https://github.com/openwrt/firmware-utils/pull/77
Signed-off-by: Jonas Jelonek &lt;jonas@jonasjelonek.de&gt;
</content>
</entry>
<entry>
<title>mkzynfw: add board profiles for Zyxel XGS2220 series</title>
<updated>2026-09-23T21:22:31Z</updated>
<author>
<name>Jonas Jelonek</name>
</author>
<published>2026-09-16T11:06:56Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/firmware-utils/commit/?id=fac587ee67d545ebe08747e63885d8b46b38bcde'/>
<id>urn:sha1:fac587ee67d545ebe08747e63885d8b46b38bcde</id>
<content type='text'>
Add board profiles for Zyxel XGS2220 switches, a series of 6 switches
based on RTL931x platform. The profiles have been extracted from stock
firmware.

Link: https://github.com/openwrt/firmware-utils/pull/77
Signed-off-by: Jonas Jelonek &lt;jonas@jonasjelonek.de&gt;
</content>
</entry>
<entry>
<title>uimage_padhdr: add options to insert data into padding area</title>
<updated>2026-07-30T06:53:14Z</updated>
<author>
<name>Luiz Angelo Daros de Luca</name>
</author>
<published>2026-07-18T04:55:10Z</published>
<link rel='alternate' type='text/html' href='https://git.openwrt.org/project/firmware-utils/commit/?id=c9da48613b5d7b892d5a3871dc6332487360de4a'/>
<id>urn:sha1:c9da48613b5d7b892d5a3871dc6332487360de4a</id>
<content type='text'>
Add two new command-line options, both repeatable, to write arbitrary
data at specific byte offsets within the zero-filled padding area that
is appended after the uImage header:

  -x offset:hexstring  Insert raw bytes specified as a hex string
  -s offset:string     Insert an ASCII string (without NUL terminator,
                       since the padding is already zero-filled)

Offsets are relative to the start of the padding area and accept both
decimal and hexadecimal (0x-prefixed) notation. Validate that every patch
fits within the configured padding before modifying the image, preventing
silent data corruption.

Patches are applied to the buffer before the header CRC is recalculated,
so the checksum correctly covers the inserted content.

Signed-off-by: Luiz Angelo Daros de Luca &lt;luizluca@gmail.com&gt;
Link: https://github.com/openwrt/firmware-utils/pull/71
Signed-off-by: Jonas Jelonek &lt;jelonek.jonas@gmail.com&gt;
</content>
</entry>
</feed>
