<feed xmlns='http://www.w3.org/2005/Atom'>
<title>staging/stintel/include, branch master</title>
<subtitle>Staging tree of Stijn Tintel</subtitle>
<id>https://git-03.infra.openwrt.org/openwrt/staging/stintel/atom?h=master</id>
<link rel='self' href='https://git-03.infra.openwrt.org/openwrt/staging/stintel/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git-03.infra.openwrt.org/openwrt/staging/stintel/'/>
<updated>2026-10-06T20:05:20Z</updated>
<entry>
<title>kernel: map the toolchain directory out of the debug information</title>
<updated>2026-10-06T20:05:20Z</updated>
<author>
<name>Paul Spooren</name>
</author>
<published>2026-10-03T20:40:35Z</published>
<link rel='alternate' type='text/html' href='https://git-03.infra.openwrt.org/openwrt/staging/stintel/commit/?id=5888bd8c576e50fcd2bc9c91a15aba0801195f8d'/>
<id>urn:sha1:5888bd8c576e50fcd2bc9c91a15aba0801195f8d</id>
<content type='text'>
The compressed LoongArch kernel (vmlinuz.efi) differs between builds in
different directories. The code and data of vmlinux are identical, but
its GNU build ID is not: the debug information of vmlinux holds a
single absolute path, the include directory of the compiler, e.g.

  /builder/shared-workdir/build/staging_dir/toolchain-loongarch64_generic_gcc-14.4.0_musl/lib/gcc/loongarch64-openwrt-linux-musl/14.4.0/include

asm/loongarch.h includes the compiler's larchintrin.h, so core files
like arch/loongarch/kernel/cpu-probe.c refer to it. The prefix maps of
the kernel cover the build and the staging directory, but not the
toolchain directory. The build ID hashes all of vmlinux, so it depends
on the build directory, and with it the compressed kernel.

Map the toolchain directory as well, like the staging directory.

On loongarch64/generic, vmlinux built without the map holds this one
absolute path, like the published one; built with it, no absolute path
is left, while .text, .rodata and .data stay byte-identical.

Link: https://github.com/openwrt/openwrt/pull/25648
Signed-off-by: Paul Spooren &lt;mail@aparcar.org&gt;
</content>
</entry>
<entry>
<title>build: drop implicit gzip of ext4 images</title>
<updated>2026-10-06T09:32:34Z</updated>
<author>
<name>Paul Spooren</name>
</author>
<published>2026-10-03T20:16:44Z</published>
<link rel='alternate' type='text/html' href='https://git-03.infra.openwrt.org/openwrt/staging/stintel/commit/?id=3760244fae605a37ad3e6769a438109a714e89eb'/>
<id>urn:sha1:3760244fae605a37ad3e6769a438109a714e89eb</id>
<content type='text'>
With CONFIG_TARGET_IMAGES_GZIP enabled, which is the default, ext4
images are gzipped when they are copied to $(BIN_DIR), unless their
name ends with .gz or .dtb. This causes several problems:

- The JSON info contains the uncompressed name and hash, so
  profiles.json lists images which don't exist on the download server:

    profiles.json: openwrt-at91-sam9x-atmel_at91sam9263ek-ext4-root.ubi
    sha256sums:    openwrt-at91-sam9x-atmel_at91sam9263ek-ext4-root.ubi.gz

- The image is gzipped as a whole, including the metadata and signature
  added by append-metadata. fwtool looks for them at the end of the
  file, so sysupgrade rejects these images. Explicitly gzipped images
  run append-metadata after gzip instead.

- A rule for the gzipped name is defined for every image, which clashes
  with images that are built both plain and gzipped, as it was the case
  for malta.

The previous commits removed the ext4 images which can't be used and
gzip the remaining ones explicitly, so drop the implicit gzip. The file
name in $(BIN_DIR) is now always the one from IMAGES. Targets wanting
gzipped images define them explicitly, e.g. sdcard.img.gz, or select
them via CONFIG_TARGET_IMAGES_GZIP like x86, armsr, loongarch64 and
malta. Limit the option to these targets.

The ext4 kernel.bin and factory.bin of ixp4xx, which only contain the
kernel, and the optional ext4 VM images of x86 and armsr are now stored
uncompressed, like their squashfs counterparts.

Link: https://github.com/openwrt/openwrt/pull/25658
Signed-off-by: Paul Spooren &lt;mail@aparcar.org&gt;
</content>
</entry>
<entry>
<title>build: remove unused legacy gzip helpers</title>
<updated>2026-10-06T09:32:34Z</updated>
<author>
<name>Paul Spooren</name>
</author>
<published>2026-10-03T20:15:52Z</published>
<link rel='alternate' type='text/html' href='https://git-03.infra.openwrt.org/openwrt/staging/stintel/commit/?id=6a0fc5d8be330c6977a636457fb2c28fb44aa716'/>
<id>urn:sha1:6a0fc5d8be330c6977a636457fb2c28fb44aa716</id>
<content type='text'>
Image/Gzip lost its last user with commit df9ffedb75 ("archs38: drop
target") and Image/gzip-ext4-padded-squashfs with commit 8dfa38b82c
("malta: convert to Device macro image building"). The latter also
calls Image/Build/gzip, which isn't defined anywhere.

Remove both, along with Image/pad-root-squashfs, which was only used by
Image/gzip-ext4-padded-squashfs.

Link: https://github.com/openwrt/openwrt/pull/25658
Signed-off-by: Paul Spooren &lt;mail@aparcar.org&gt;
</content>
</entry>
<entry>
<title>build: allow building an image for only some filesystems</title>
<updated>2026-10-06T09:32:33Z</updated>
<author>
<name>Paul Spooren</name>
</author>
<published>2026-10-03T20:12:39Z</published>
<link rel='alternate' type='text/html' href='https://git-03.infra.openwrt.org/openwrt/staging/stintel/commit/?id=33cd213698e3ae5a3482381a3061661fb28d4c38'/>
<id>urn:sha1:33cd213698e3ae5a3482381a3061661fb28d4c38</id>
<content type='text'>
Every image is built for all filesystems in FILESYSTEMS. A device that
needs an image only for some of them, e.g. a flash image for squashfs
and a disk image for ext4, can only restrict FILESYSTEMS for the whole
device, which drops its other images as well.

Add FILESYSTEMS/&lt;image&gt; to build an image only for some filesystems of
the device, similar to IMAGE/&lt;image&gt;/&lt;fs&gt; for per filesystem recipes.
Like the recipes, it is not reset between devices, so it should be set
next to the recipe of the image.

Link: https://github.com/openwrt/openwrt/pull/25658
Signed-off-by: Paul Spooren &lt;mail@aparcar.org&gt;
</content>
</entry>
<entry>
<title>build: add -mcpu for cortex-a72 and cortex-a76</title>
<updated>2026-10-05T20:15:17Z</updated>
<author>
<name>Hauke Mehrtens</name>
</author>
<published>2026-10-04T23:46:35Z</published>
<link rel='alternate' type='text/html' href='https://git-03.infra.openwrt.org/openwrt/staging/stintel/commit/?id=1d7dacee9a0d0fd0c70c0fd31fd1921f221a14c1'/>
<id>urn:sha1:1d7dacee9a0d0fd0c70c0fd31fd1921f221a14c1</id>
<content type='text'>
The aarch64 toolchain is built without --with-cpu, so the
CPU_CFLAGS_&lt;type&gt; entry in target.mk is the only place a -mcpu option
comes from. The cortex-a72 (bcm27xx/bcm2711, mvebu/cortexa72) and
cortex-a76 (bcm27xx/bcm2712) CPU types have no entry, so userspace for
these subtargets is built with plain "-Os -pipe", which produces
generic armv8-a code. The "doesn't correspond to a known type" warning
is not visible because the target scan discards stderr.

Add the missing entries. For cortex-a76 this also enables the ARMv8.2
features such as LSE atomics, which replace the out of line atomic
helper calls.

Fixes: 2534141322b0 ("mvebu: add support for MACCHIATObin (cortex-a72)")
Fixes: 5e928acf22cd ("brcm2708: add bcm2711 subtarget (RPi 4B aarch64)")
Fixes: 8b63d9ac4ae9 ("bcm27xx: add new bcm2712 subtarget")
Assisted-by: Claude:claude-opus-5-5
Signed-off-by: Hauke Mehrtens &lt;hauke@hauke-m.de&gt;
Link: https://github.com/openwrt/openwrt/pull/25627
Signed-off-by: Robert Marko &lt;robimarko@gmail.com&gt;
</content>
</entry>
<entry>
<title>build: fix image headers silently truncated with uutils coreutils</title>
<updated>2026-10-04T14:34:06Z</updated>
<author>
<name>Grische</name>
</author>
<published>2026-09-26T10:24:48Z</published>
<link rel='alternate' type='text/html' href='https://git-03.infra.openwrt.org/openwrt/staging/stintel/commit/?id=195c2ce324930740fa6b4aa898c999e5889d2c11'/>
<id>urn:sha1:195c2ce324930740fa6b4aa898c999e5889d2c11</id>
<content type='text'>
Build/elx-header and Build/znet-header convert a hex string into \xHH
escape sequences using `fold -s2`. This relies on the obsolete -WIDTH
option syntax of GNU fold, which parses "-s2" as "-s -2". uutils
coreutils does not support this syntax and fails with:

  error: unexpected argument '-2' found

    tip: to pass '-2' as a value, use '-- -2'

Since fold writes nothing to stdout in this case, the command
substitution expands to an empty string. The following
`dd bs=N count=1 conv=sync` then writes zero bytes, because conv=sync
only pads partial input blocks and never pads empty input. The header
field is dropped entirely, and all subsequent fields move to lower
offsets.

The build still succeeds, because the failure happens inside the
subshell which is then handed to echo.
The malformed images are only rejected when a device tries to
boot them.

For example, on the Zyxel WSM20, the missing payload size field in the
znet-header moves the 0x12345678 magic and the payload to unexpected
offsets. The bootloader then rejects the image, even though sysupgrade
accepted it.

This affects all builds on Ubuntu 25.10 and later, because these
releases use uutils coreutils by default.

Replace `fold -s2` with `fold -w2`, which is the documented way to set
the line width and produces identical output with GNU fold.

Affected devices:
- Build/znet-header is used in all images of the Zyxel WSM20 and the
  ELECOM WRC-X1800GS
- Build/elx-header is used in the factory images of the ELECOM
  WAB-I1750-PS, WAB-S1167-PS, WAB-S600-PS, WRC-2533GHBK-I and
  WRC-2533GHBK2-T, the I-O DATA WN-AC1167GR, WN-AC733GR3 and WNPR2600G,
  the Edimax RA21S and RG21S, and the D-Link DAP-X1860 A1

Signed-off-by: Grische &lt;github@grische.xyz&gt;
Assisted-by: Claude:claude-opus-5
Link: https://github.com/openwrt/openwrt/pull/25410
Signed-off-by: Hauke Mehrtens &lt;hauke@hauke-m.de&gt;
</content>
</entry>
<entry>
<title>tools/mtd-utils: make mkfs.ubifs images reproducible</title>
<updated>2026-10-03T20:45:10Z</updated>
<author>
<name>Paul Spooren</name>
</author>
<published>2026-09-23T12:52:24Z</published>
<link rel='alternate' type='text/html' href='https://git-03.infra.openwrt.org/openwrt/staging/stintel/commit/?id=1eaea67aef65b8d7306df8986ac0ba0cd75c2803'/>
<id>urn:sha1:1eaea67aef65b8d7306df8986ac0ba0cd75c2803</id>
<content type='text'>
UBIFS root file systems differ between builds, e.g. the one of the
Microchip SAMA7G5-EK: the superblock gets a random UUID, the inodes get
the ctime of the build host, which can't be reset with touch, and the
entries of each directory are added in readdir() order, which depends on
the host file system and decides inode numbers and layout.

Add a patch that, when SOURCE_DATE_EPOCH is set, uses a time-based
(version 1) UUID with that time and clamps all inode times to it. The
node ID of the UUID is taken from the new --uuid-node option, which the
image build sets from IMG_PART_DISKGUID, itself derived from
SOURCE_DATE_EPOCH and the kernel vermagic.
Directory entries are added sorted by name. Two trees with the same
contents but different ctimes and readdir() order now give identical
images; without SOURCE_DATE_EPOCH the UUID stays random.

Link: https://github.com/openwrt/openwrt/pull/25430
Signed-off-by: Paul Spooren &lt;mail@aparcar.org&gt;
</content>
</entry>
<entry>
<title>image: make kernel UBIFS images reproducible</title>
<updated>2026-10-03T09:53:09Z</updated>
<author>
<name>Robert Marko</name>
</author>
<published>2026-10-02T12:16:57Z</published>
<link rel='alternate' type='text/html' href='https://git-03.infra.openwrt.org/openwrt/staging/stintel/commit/?id=fcc5cb880e042b275b2d4f9d9a7287079126f414'/>
<id>urn:sha1:fcc5cb880e042b275b2d4f9d9a7287079126f414</id>
<content type='text'>
The temporary directory used to create a kernel UBIFS image and its
kernel file receive wall-clock mtimes. mkfs.ubifs preserves these
times, making images differ between builds.

Set their timestamps to SOURCE_DATE_EPOCH before invoking mkfs.ubifs.

Signed-off-by: Robert Marko &lt;robimarko@gmail.com&gt;
</content>
</entry>
<entry>
<title>kernel: configure the kernel again after an initramfs build</title>
<updated>2026-10-03T08:07:19Z</updated>
<author>
<name>John Crispin</name>
</author>
<published>2026-10-03T08:06:15Z</published>
<link rel='alternate' type='text/html' href='https://git-03.infra.openwrt.org/openwrt/staging/stintel/commit/?id=5d5ade6d162d219828900e8fa4faa274a19808f4'/>
<id>urn:sha1:5d5ade6d162d219828900e8fa4faa274a19808f4</id>
<content type='text'>
Kernel/SetInitramfs writes the initramfs configuration into the kernel
tree and deletes .config.prev, so that the next configure stage puts the
regular configuration back. The check that decides if the configure stage
must run ignored this signal. The next build then compiled the regular
kernel with the initramfs configuration, and the squashfs images got a
kernel with an embedded root filesystem.

Run the configure stage if .config.prev is missing.

Fixes: e97e3f36bd ("kernel: configure the kernel only when an input changed")
Signed-off-by: John Crispin &lt;john@phrozen.org&gt;
</content>
</entry>
<entry>
<title>build: remove the AUDIO_SUPPORT and DISPLAY_SUPPORT symbols</title>
<updated>2026-09-29T14:29:43Z</updated>
<author>
<name>Daniel Golle</name>
</author>
<published>2026-09-26T20:41:59Z</published>
<link rel='alternate' type='text/html' href='https://git-03.infra.openwrt.org/openwrt/staging/stintel/commit/?id=da6323e54c9cb75479eb5be5c83d43a15d5c3c34'/>
<id>urn:sha1:da6323e54c9cb75479eb5be5c83d43a15d5c3c34</id>
<content type='text'>
Nothing tests either symbol any more. AUDIO_SUPPORT was also selected by
PCI_SUPPORT and USB_SUPPORT, which stood for "a sound card could be
plugged in here": audio hardware sits behind MMC, SPI, a Bluetooth UART
or an SoC PCM block just as often, so the inference never held. The
display feature was derived from a literal CONFIG_VGA_CONSOLE or CONFIG_FB
in a kernel fragment, which misses every target whose fbdev came from DRM
emulation.

Delete both symbols, the two selects, the feature translations and the
derivation.

Signed-off-by: Daniel Golle &lt;daniel@makrotopia.org&gt;
</content>
</entry>
</feed>
