Skip to content

Releases: archr-linux/Arch-R

ArchR Linux 2.1.1

Choose a tag to compare

@dgateles dgateles released this 09 Jul 01:55

ArchR Linux 2.1.1

Maintenance release. It is delivered as a new image because the 2.1
updater could not reach the package repository on its own (it looked
for a channel tag that does not exist and started from an empty package
database), so 2.1 users need to flash this once. From 2.1.1 on, updates
arrive normally through EmulationStation > Updates, kernel included.

Fixed

  • System updater: 2.1 reported "no updates available" even when
    updates existed. The channel is now validated (unknown values fall
    back to stable) and the package database is seeded on the first
    check, so the updater works.
  • Update no longer breaks input and WiFi: installing the kernel
    through the updater used to overwrite the module index with a version
    that predated the out-of-tree drivers, so after a reboot the gamepad
    and USB WiFi dongles stopped working while their files were still
    present. The module index is now rebuilt over the full driver set
    after every update, and the packages no longer carry the stale index.
  • Updater plumbing now ships through updates too: the update
    scripts and hooks themselves were image-only and could never be
    updated in place; they are now part of the package set.

Added

  • WiFi 6 dongles: the MediaTek MT7921U driver is enabled, and the
    Realtek RTL8852BU and RTL8852CU drivers are bundled, on top of the
    existing coverage.

Everything from 2.1

DDR at 666MHz, power LED control on every board, the RTL8188EUS dongle
fix, the R36S Clone speaker fix, Soysauce input and PMIC-interrupt
fixes, power-button light sleep, and kernel/device-tree delivery through
the updater. See the 2.1 notes for the full list.

Checksums

035b58c446e0ffc7f6e23d1c8ef574fd0970307af6c3a41817abe82239aaf577  ArchR-R36S.aarch64-20260709-original.img.gz
3ea0b970595e0086bd7478e0d17acf71adf1368499b45f1bba21ef6ab63660e2  ArchR-R36S.aarch64-20260709-clone.img.gz

Always verify the checksum after downloading and before flashing.

ArchR Linux 2.1

Choose a tag to compare

@dgateles dgateles released this 08 Jul 00:55

ArchR Linux 2.1

Performance, hardware compatibility and quality-of-life release for the R36S family (Original, Clone, R33S and Soysauce). Flashing the new image is the recommended path; from this release on, most fixes (including kernel and device trees) can also be delivered through the built-in updater (EmulationStation > Updates) thanks to the new boot-partition sync.

Performance

  • Memory clock doubled: the DDR now trains at 666MHz at boot (previous releases were locked at 333MHz). This was the single largest performance gap against BSP-based systems and translates directly into higher and more stable FPS across emulators.
  • Emulators now run with elevated CPU scheduling priority, and the default audio latency was tuned to eliminate audible crackling.

Fixed

  • USB WiFi dongles (RTL8188EUS family): dongles could scan networks but never completed the WPA2 handshake. The driver hand-off rule was rewritten and now moves the adapter to the correct driver deterministically. Covers the common TP-Link, Edimax EW-7811Un and generic 8188EUS adapters (#19).
  • R36S Clone V20 speaker: no sound from the built-in speaker while headphones worked. The V20-era boards route the speaker through an external amplifier; the audio profile now configures it, and headphone plug/unplug switching was fixed along the way (#35).
  • Power LED: the POWER LED COLOR menu now actually drives the LED on every board (on/off/heartbeat), the DISABLE POWER LED switch is visible and applies immediately, and the menu default matches the real boot state. On the Soysauce the LED polarity was inverted; on the Original the bicolor LED (green/red) is now fully described.
  • Soysauce PMIC interrupt: the power button, headphone detection and charger events were dead on Soysauce boards because the PMIC interrupt line differs from the rest of the family. All of them work now.
  • Soysauce gamepad in ports and standalone emulators: SDL-based titles now recognize the built-in controller without manual mapping.
  • Internet Status in Network Settings no longer clips, and the network menu no longer freezes while checking connectivity.
  • Second SD card: booting with a card in TF2 no longer breaks boot (partitions are resolved by label) (#34).

Sleep

  • Pressing the power button now puts the console into a light sleep: screen and backlight fully off, audio muted, CPU at minimum, instant wake on the next press. Kernel deep suspend is disabled by default because the SoC cannot reliably wake from it on mainline kernels (it remains available for experimentation under SUSPEND MODE).

Updater

  • Kernel and device-tree updates now flow through the package updater: after an update transaction the boot partition is synchronized automatically, with per-file checksums and verified writes. User overlays and bootloader files are never touched. Only the low-level bootloader (TPL/U-Boot, e.g. the DDR frequency change in this release) still requires reflashing the image.

Overlay generator (website)

  • The DTBO generator extracts more board-specific data from your stock DTB: speaker amplifier wiring, headphone-detect wiring (including legacy layouts), battery/charge LED wiring on clones and the PMIC interrupt pin. If a variant board misbehaves on the generic image, regenerating your overlay on the website now fixes considerably more cases without reflashing.

Checksums

bad4def59fb8b6d9964b325e2b768029ff8014790d7d43a09084575211888d52  ArchR-R36S.aarch64-20260708-original.img.gz
05ef38790b2f7269575db22d78299ca543734912ae51b0c39d1aacfa937e9f92  ArchR-R36S.aarch64-20260708-clone.img.gz

Always verify the checksum after downloading and before flashing.

Arch R v2.0

Choose a tag to compare

@dgateles dgateles released this 30 Jun 18:51

ArchR Linux 2.0

ArchR Linux 2.0: Release Notes

Open-source Linux distribution for the R36S and RK3326-based clones.
Kernel 6.12 LTS, Mesa 26 Panfrost, CPU 1.4 GHz default (optional 1.5 GHz overclock), 43 supported panels.

Highlights

  • Pacman as a real update mechanism: future updates become pacman -Syu instead of reflashing the SD card, with signed repositories and the ArchR master key embedded in archr-keyring.
  • Audio fixed across all three families: R36S Original, R36S Clone (V20/V21/V22, GR36, G80C/D) and Y3506 Soysauce (V03/V04/V05).
  • WiFi finally reliable: passwords with special characters ($%#@&!*()-_=+ç etc.) connect; a new out-of-tree RTL8188EUS driver fixes the authentication failure on the TP-Link/RTL8188EUS chip. WiFi also reconnects to the saved network automatically at boot.
  • Two inserted SD cards no longer break boot: boot.ini uses LABEL= instead of /dev/mmcblk${devnum}p1, eliminating the mismatch between the U-Boot devnum and the kernel mmcblk enumeration.
  • Overlay generation moves out of the OS build and into the online generator: https://arch-r.io/overlay-generator/. The /flash/overlays/ folder now carries only a multilingual README.txt explaining how to generate the mipi-panel.dtbo on the site.
  • USB WiFi dongle works on the Soysauce and clones: the overlay generator now translates the vbus power supply of the OTG port from the stock DTB (the vcc_host+GPIO regulator in the R36S style, or the rk817 PMIC OTG_SWITCH on the Soysauce), tied as the vbus-supply of &usb20_otg. The 6.12 dwc2 enables the regulator on demand when entering host mode (USB set to "disabled"), with no coil whine.
  • PortMaster/CFW compatibility layer: the Debian 11/darkOS SONAMEs that ports expect (libjpeg.so.62, libcodec2.so.0.9, libx264.so.160, libx265.so.192, libtheoradec.so.1) now resolve, and sudo, vmstat and perf (with perf_event_paranoid=1) are present per the official guide.

By category

Pacman as a real update client

  • gen-pacman-repo fixed for the pacman 7 layout (signing only the db, not per package).
  • repo-stable and repo-dev repositories on GitHub Releases.
  • archr-keyring carries the ArchR production public master key.
  • pacman installed with /var/lib/pacman as a symlink (compatible with read-only squashfs + /storage overlay).
  • /usr/sbin/bash shebangs rewritten to /usr/bin/bash (issue #36).
  • GnuPG bumped to 2.4.8 with updated libksba/npth/pinentry.

Bootloader and partitioning

  • clone_boot.ini and original_boot.ini now use root=LABEL=@DISTRO_BOOTLABEL@ instead of /dev/mmcblk${devnum}p1. Inserting a second SD card in any order no longer breaks boot (issue #34).
  • The busybox init resolves LABEL=/UUID= via util-linux blkid scanning /proc/partitions (with a mknod fallback), because busybox volume_id does not read FAT32 labels (symptom: "Unable to find LABEL=ARCHR, powering off"). mount/umount/findfs are symlinked to busybox and PATH is exported at the top of init.
  • R36S Clone DTS (eeclone) aligned with the clean config of the other variants: &emmc disabled (the board has no eMMC chip; the controller kept recycling init for an absent card: "Timeout sending command" / "Failed to initialize a non-removable card") and &uart5 (console ttyS2) muxed with only uart5_xfer (the uart5_cts on gpio3 RK_PA3 conflicted and the kernel reverted the whole group).
  • The FAT partition keeps BOOT_SIZE=256, mkfs.vfat -s 32, fsck.fat -n. Cosmetic dosfsck warnings are deliberately ignored (they previously caused a boot loop when "fixed").

Base system, systemd and FHS

  • New tmpfiles.d/z_02_archr-fhs-bridges.conf creates /var → /storage bridges via systemd-tmpfiles, eliminating refs inherited from ROCKNIX/JELOS.
  • 001-functions and archr-automount revised: inherited refs pointing to Batocera/JELOS paths were corrected.
  • systemd units fixed: zero warnings in systemd-analyze.
  • Symlink renamed: rocknix-report-stats.timer now points to archr-report-stats.timer.

Network drivers

  • RTL8188EUS (aircrack-ng/rtl8188eus): new out-of-tree package at projects/ArchR/packages/linux-drivers/RTL8188EUS/ to fix the WiFi authentication failure on RTL8188EUS adapters when the upstream rtl8xxxu driver does not complete the handshake (issue #19).
  • wifictl gained:
    • encode_iwd_name(): encodes non-alphanumeric chars as =XX in the profile name, the standard iwd requires.
    • WPA-PSK validation (8-63 printable bytes or 64 hex).
    • umask 077 before writing profiles (no key leak to other users).
    • Cleanup of old profiles before creating a new one (no profile leak).
  • Auto-reconnect at boot: when WiFi is enabled, the saved network is reconnected automatically at boot. Previously a unit rebooted with WiFi on came back with the toggle showing active but no connection, until the user toggled it off and on.

Security

  • setrootpass: replaces the SHA-256 fingerprint file with sha512crypt salt comparison, reusing the existing entry in /storage/.cache/shadow. No new sensitive artifact on disk.
  • WiFi profile permissions with umask 077.

Audio

  • A new SDCLONE flag in the web generator forces the rk817-sound-amplified fallback when the clone DTB does not expose the amplifier GPIO. Fixes the "no soundcards" result in aplay -l on R36S Clone V20/V21/V22, GR36, G80C/D (issue #35).
  • Y3506 Soysauce (V03/V04/V05) loudspeaker is on the analog headphone output (HPOL/HPOR) behind an external amplifier gated by the rk817 codec's spk-ctl-gpios. A new kernel patch adds rk817 use_ext_amplifier support: it routes the speaker mux through the headphone DACs and toggles spk-ctl-gpios via a DAPM event. The web overlay generator now keeps the base rk817-sound card enabled for the Soysauce (the NAm flag means "keep the base card"). It no longer swaps to rk817-sound-spko-direct, which on the Soysauce base produced an empty card and a silent speaker (issue #29).

Controls / joypad (Soysauce / Y3506)

  • es_input.cfg now ships a GO-Super Gamepad entry so both analog sticks navigate the EmulationStation menu (mapped as leftanalog/rightanalog). This fixes the previous behavior where the right stick changed the volume and the left stick did nothing (the auto-generated entry mapped them as joystick1/joystick2, and joystick2 is hardcoded to volume in ES).
  • The RetroArch GO-Super Gamepad autoconfig button layout was corrected (select, start and D-pad indices were on the RGB20S layout; now on the R36S layout). This fixes in-game Start, Select and the exit-game hotkey combo.
  • Analog stick sensitivity tuned for the Y3506 potentiometers (the sticks only reached about 76 percent of range; the gain was raised so full deflection saturates the axis and menu navigation is responsive).

PortMaster / CFW: compatibility layer

  • Per-SONAME compat libs: ports built against Debian 11/darkOS expect SONAMEs that ArchR does not ship by default. New packages compat-codec2 (libcodec2.so.0.9), compat-x264 (libx264.so.160), compat-x265 (libx265.so.192) and compat-libjpeg62 (libjpeg.so.62, IJG v6b ABI via libjpeg-turbo with WITH_JPEG8=OFF) install into /usr/lib/compat.
  • archr-compat-libs.service: since ArchR has no ld.so.cache, the service symlinks the *.so* from /usr/lib/compat to the linker's default path at boot, resolving the missing libtheoradec.so.1 for LÖVE runtimes (46 SONAMEs linked, without shadowing libogg).
  • sudo shim: the guide lists sudo/doas as required; ArchR is single-user root, so the shim strips the sudo options and runs the command directly (the ROCKNIX/dArkOS pattern).
  • vmstat added to procps-ng, and perf enabled for profiling with kernel.perf_event_paranoid = 1 (userspace CPU sampling without full root context).
  • ltrace is the only nice-to-have item from the guide intentionally absent: the maintained fork fails autoreconf on the ArchR toolchain; ports use gdb or perf trace.

EmulationStation: System Information and quirks

  • The archr-info quirks chain fixed: the word-splitting bug on "Game Console R36S" (with spaces) broke for QDIR in ${QUIRK_DIRS}. Replaced with a bash array.
  • Temperature in System Information on Clone and Soysauce: the quirks loader matches the quirks/devices/<name> folder against the exact model string, and folders for "R36S Clone" and "Game Console R36S Soysauce" were missing, so DEVICE_TEMP_SENSOR was empty and only the Original showed temperature. Added folders with the thermal_zone0 (CPU) and thermal_zone1 (GPU) sensors. The DTBs/tsadc of the three variants are identical and worked: the gap was only per-device config in userspace.
  • Mesa version, Arch and full kernel string appear in System Information.
  • archr-config: Batocera paths replaced with the ArchR equivalents in the audio output selection command.
  • ES fork: getArchString() reads HW_DEVICE from the env, scripts are also searched in /run/emulationstation/scripts, locale .mo loaded from /usr/config/locale.

Performance and CPU

  • CPU default is 1.4 GHz; the 1.5 GHz turbo OPP is opt-in via the EmulationStation "Enable CPU Overclock" switch (off by default to favor thermals and battery; gameplay still uses the performance governor).
  • Inherited JELOS bugs in the boot path fixed.
  • Cleanups in Emulators and PortMaster scripts (broken links, divergent paths).

Strategy: overlay generator leaves the OS build

  • config/mipi-generator/ (generator.sh + archr-dtbo.py) and config/archr-dts/ (23 DTSes and ~120 vendor DTBs) removed from the tree. Net: -8,503 LOC + ~120 binaries.
  • u-boot/package.mk no longer calls generator.sh; no longer installs overlays_{original,clone,soysauce}/.
  • bootloader/mkimage simplified: the RK3326 branch dropped the per-SUBDEVICE copy.
  • The /flash/overlays/ folde...
Read more

Arch R v2.0 RC-4

Choose a tag to compare

@dgateles dgateles released this 27 May 21:25

Arch R v2.0 RC-4

Release candidate focused on panel overlay coverage, joypad compatibility, GPU driver robustness, Soysauce audio and boot time. Built as official image on 2026-05-26, follows the v2.0 RC-3 line.

MIPI panel overlay generator (major)

The internal archr-dtbo.py script that produces panel overlays from a stock vendor DTB was rewritten end to end. It now extracts every hardware knob we have seen vary across the 44 vendor DTBs we ship, not just panel timings:

  • Joypad wiring propagation: amux-a-gpios, amux-b-gpios, amux-en-gpios pin numbers (vendor wiring differs between original, clone and soysauce boards), per-button gpios for sw1..sw22, plus button-adc-deadzone, button-adc-fuzz, button-adc-flat when the vendor diverges from our defaults
  • rumble-gpio propagation for the clone batches that expose it explicitly (the R36S V20 2025-05-18 batch and the GR36). Without this the motor defaults to "on" on those boards and vibrates continuously through every boot
  • Panel LED GPIO handlers wired up (led-red-gpios, led-green-gpios, led-blue1-gpios, led-blue2-gpios) and whitelisted. No vendor DTB in the current ship set declares these yet, so the path is dormant for now but in place for the next board revision that needs them
  • Tier 3 auto-discovery walks any vendor property that is not on a known whitelist, propagates safely if it looks safe, logs a skip otherwise. The PMIC regulators are explicitly blacklisted so vendor settings cannot override our vdd_arm regulator-max raise (1.45 V) that the 1.5 GHz CPU OPP depends on
  • Original vs clone odroidgo3 detection: DTBO generation now picks the right joypad driver binding based on board topology, not a hardcoded compat string. Several clone vendor DTBs (G80CA V1.2 batches) ship with the rockchip,rk3326-odroidgo3-linux compat string from the BSP despite being clones; the audit logic now disambiguates by topology

The generator also ships as a free in-browser tool at https://arch-r.io/overlay-generator. Users with an unsupported clone can upload their stock DTB, the page extracts everything via Pyodide and gives back a mipi-panel.dtbo ready to drop into the SD card. Nothing leaves the browser.

Cross-distro panel and joypad compatibility

Two new kernel-side accept patches let an ArchR image consume overlays produced by ROCKNIX out of the box:

  • panel-generic-dsi.c accepts both archr,generic-dsi and rocknix,generic-dsi compatible strings. ROCKNIX-generated panel overlays bind on ArchR without modification, and vice-versa for any overlay declaring our compat
  • archr-joypad driver accepts rocknix,joypad via a small accept patch, so ROCKNIX joypad overlays enumerate the buttons through our driver

This is symmetric on purpose: overlays move freely between the two distros for the same hardware.

New hardware support

  • Y3506 V04 2528 (soysauce variant): full device tree (Y3506_V04_20250529 2528), panel overlay set (6 dtbos covering JPk36/JPmm and SRs combos) and verification on real silicon
  • Micro-gamepad compatibility added to the archr-joypad driver via linux/0002-accept-micro-gamepad-compatible.patch; handheld variants with the reduced micro-gamepad button layout now enumerate correctly
  • GamePark GP32: emulator added to EmulationStation. ROMs land in /storage/roms/gp32 (.smc, .zip, .7z); the libretro mame core handles the system

Soysauce audio: speaker now actually works

Reported by the community on the V05 batches but applies to every Y3506 board we ship (V03, V04, V05). The Y3506 family has no external speaker amplifier on the PCB: the rk817 SPKO line drives the mono speaker directly. The vendor BSP 4.4 hid this by hardcoding the DAPM widgets and routes inside rk817_codec.c, but mainline ASoC respects the DT strictly. Under previous releases the kernel saw a sound card declaring an amp aux-dev and no Speaker widget, so it kept the speaker muted no matter what userspace tried.

Three new sound card variants now live in rk3326-gameconsole-r36s.dts:

  • rk817-sound-amplified: external amp gated by an enable GPIO. R36S original, K36, and most clone batches.
  • rk817-sound-simple: external amp on a regulator without a GPIO gate. A handful of clone batches.
  • rk817-sound-spko-direct: speaker driven straight from rk817 SPKO with no external amp. Every Y3506 Soysauce board.

The overlay generator (archr-dtbo.py) was extended with:

  • A new NAm (No Amplifier) flag that forces rk817-sound-spko-direct. The build pipeline appends NAm to every overlay produced under the soysauce/ family, so the V03/V04/V05 boards Just Work without any user interaction.
  • Acceptance of simple-audio-card,hp-det-gpio as a fallback to the legacy BSP-style hp-det-gpio name. Without this the audio block was silently skipped on every V05 vendor DTB.
  • Defensive handling of vendor DTBs that omit /pinctrl/headphone/hp-det (a handful of soysauce batches bind the headphone detect line through the codec phandle instead).
  • The short-circuit path for boards with rockchip,rk3326-odroidgo3-linux compatible now still switches the active sound card to spko-direct when NAm is set, so the six Soysauce batches that go through that early return still get the fix.

All 264 panel overlays were regenerated against the new variant logic. Audit:

  • 18 clone boards: default amp routing kept (unchanged behaviour)
  • 15 original boards: default amp routing kept (unchanged behaviour)
  • 11 Soysauce boards: rk817-sound-spko-direct enabled (speaker now works)

Joypad and rumble fixes

  • Single-ADC driver for Y3506 soysauce boards: the multi-ADC code path was reading the wrong channels on these clones. The fix flips rk3326-gameconsole-soysauce.dts to the single-ADC binding that matches vendor wiring and adjusts the mipi-generator post-processing accordingly
  • Continuous rumble vibration fix: some R36S revisions leave the rumble enable GPIO (gpio0 PB7, shared with the pwm0 function) in a high-impedance state at gpiolib probe time, latching the motor on through boot. A rumble-en-hold-low gpio-hog was added to the R36S DTS to drive the pin LOW before any other consumer probes. Trade-off: a handful of boards that did have working rumble lose it via the hog (the alternative was every board vibrating non-stop). The right long-term fix is gating the hog with a per-board compat check, which a future RC will land
  • Rumble TOC ("rumble travado") on the clone batches with a dedicated rumble-gpio is resolved by the overlay generator change above (Tier 3 propagation)

GPU driver and graphics stack

  • Mesa bumped to 26.1.1 (up from 26.0.5 in RC-3). The seven drm-panfrost patches backported from mainline in RC-3 (SYSTEM_TIMESTAMP, cycle counter, BO labelling) carry through unchanged
  • mali_kbase repository moved to github.com/archr-linux/mali_kbase (the old github.com/archr/... was 404). The bifrost kernel module is pinned at commit 422e192b7e3aa3140f34de34765b798817c1f749
  • gpudriver runtime script hardened (~136 lines added):
    • Boot-loop sentinel at /storage/.config/gpudriver.attempting: if a previous boot kernel-panicked while loading the configured driver, the next boot silently forces libmali and rewrites the setting so the device boots into a working UI
    • Async modprobe panfrost with timeout so a stuck probe never blocks the boot path. The 8-step trace lands in /storage/.config/gpudriver.log for after-the-fact triage without a serial console
    • More robust bind check: presence of /sys/class/drm/cardN alone is not enough (rockchip-vop creates card0 even with no GPU driver). The new check verifies the driver-specific sysfs node (panfrost: /sys/bus/platform/drivers/panfrost/*.gpu; libmali: /dev/mali0) AND that at least one DRM connector reports connected
    • Clean reverse-binds when switching to the other driver: panfrost path now correctly undoes the /usr/lib/mali overlay, restores libGL.so on both archs and unmasks the panfrost Vulkan ICD
  • GPU Driver picker hidden in EmulationStation: the gpudriver binary now installs at /usr/lib/archr/gpudriver (was /usr/bin/gpudriver); ES surfaces the picker only when the /usr/bin/ path exists, so this hides the option while panfrost on RK3326 silicon is still unstable. The autostart hook (003-gpudriver) calls the binary by full path. This is documented inline in the package and is reversible by moving the file back

Boot and runtime

  • Two-phase autostart: critical-path quirks run first, optional ones (network bring-up, scrapers, telemetry) run in parallel after EmulationStation is interactive. Cold boot is noticeably faster on the same hardware
  • Service dependency graph cleaned up so quirks load in parallel where there is no ordering dependency
  • Internal storage automount logic adjusted: edge cases where the device booted before STORAGE was mounted no longer corrupt the gamelist cache
  • RTL8188EU firmware upload chunk fix backported from mainline (0050-wifi-rtl8xxxu-Fix-RTL8188EU-firmware-upload-block-size.patch). Some users were seeing intermittent WiFi-init failures on this radio because the firmware blob refused to upload in 128-byte chunks

Software updates

  • DuckStation standalone bumped to 0.1-10998 (libretro core kept on its prior stable tag)
  • Commander file manager updated to the ROCKNIX modern fork (github.com/ROCKNIX/commander, pinned at b3c008cac3bff9de54a3542cecc53cc271058744): dark theme by default, path fixes, build fix baked in
  • PortMaster compatibility libraries added as explicit dependencies; the GUI no longer fails on import lzma or on consoles that lack the older xz userspace tools
  • InputPlumber service hardened for HID device management (`inpu...
Read more

Arch R v2.0 RC-3

Choose a tag to compare

@dgateles dgateles released this 29 Apr 18:19

Arch R v2.0 RC-3

Major release focused on CPU performance, graphics stack maturity, and system reliability. Built as official image on 2026-04-29, validated on real R36S hardware (V21 board) across the full v2-v27 internal build series.

CPU Overclock toggle — 1.4 GHz → 1.5 GHz on demand

A new Enable CPU Overclock switch in the ES menu (System Settings → Performance) lifts the cap from 1416 MHz to 1512 MHz when you need it. Default is OFF — cooler, longer battery life. Flip it on for PSP / Dreamcast / box86 ports that want every Hz.

Behind the scenes:

  • DT OPP 1512 MHz validated stable at 1.4 V (BSP default 1.35 V was unreliable on some chips)
  • vdd_arm regulator-max raised 1.35 V → 1.45 V (RK817 DCDC_REG2 spec is 0.7-1.5 V) — without this the kernel rejects the OPP silently
  • set_cpu_max_freq highest reads scaling_available + scaling_boost frequencies — turbo OPPs hide in the second file even after cpufreq/boost=1
  • /usr/bin/turbomode rewritten — no longer forces governor=performance on every toggle

GPU stack

  • Mesa 26.0.5 with +speed +lto build flags
  • 7 drm-panfrost patches backported from mainline (SYSTEM_TIMESTAMP, cycle counter, BO labelling) — required by Mesa 26 for GL_TIMESTAMP and VK_KHR_calibrated_timestamps
  • GPU OPP 650 MHz turbo at 1.150 V (same voltage as 600 MHz — the BSP value of 1.175 V was triggering reboots on some chips)
  • mali_kbase PM patch (002-fix-unbalanced-regulator-clk-pm) — eliminates unbalanced disables for vdd_logic and Enabling unprepared clk_gpu warnings, fixes audio crackle in Mario 64
  • gpudriver --start auto-fallback — if Panfrost or libmali fails to bind, the script switches to the other driver so you always get a graphical system
  • MESA_GLTHREAD per-emulator whitelist — enabled on Flycast and PPSSPP standalone (GPU-bound + multi-threaded internally), kept off elsewhere to avoid regressing fence-heavy 2D libretro cores

Performance

  • zlib-ng 2.2.4 as drop-in for zlib (libz.so.1 ABI preserved) — NEON SIMD inflate/deflate, ~10-30 % faster ROM zip extraction on Cortex-A35
  • CMA raised 64 → 96 MBCmaFree was 8 MB at idle on 64 MB (87 % used), V4L2 and Mali surface allocations were tight; now ~30 MB free
  • KSM paused during gameplayrunemu.sh saves /sys/kernel/mm/ksm/run, sets to 0, restores on exit. Eliminates p99 frametime spikes from KSM scanning on Cortex-A35 in-order
  • CPU governor + boost restore on game exitquit() is defensive (falls back to ondemand if system.cpugovernor is empty); turbo state is persisted per the user's switch

Boot reliability

  • archr-autostart.service TimeoutStartSec=60s — if any quirk script hangs, emustation comes up anyway instead of blocking forever
  • drm_tool list with 10 s timeout in 055-hdmi-check — was a known cause of intermittent boot stalls on slow microSDs
  • Persistent boot trace at /storage/.boot_last_step and /storage/.boot_last_hang — if your device ever hangs at boot, after the next successful boot cat /storage/.boot_last_hang names the script that hung. Useful for bug reports.

Emulator tuning

  • GBA: gpsp default on RK3326 (was mGBA — too heavy for A35); mGBA stays as accuracy alternative
  • GameCube / Wii / Wiiware hidden from ES on RK3326 — Cortex-A35 doesn't run them at usable framerates, the menu now reflects that honestly
  • gptokeyb kill made defensive in 5 standalone start scripts (drastic, flycast, melonds, dolphin_gc, dolphin_wii) — no more spurious errors when pidof returns empty
  • PPSSPP, Flycast, DuckStation, Mupen64Plus defaults retuned per RK3326 — see docs.archr.io/configure for the full matrix

Network

  • VPN service auto-pause during gameplay — Tailscale, ZeroTier, WireGuard, simple-http-server all suspended on game launch, resumed on exit. No CPU contention, no WiFi airtime competition
  • ConditionPathExists= added to syncthing, tailscaled, zerotier-one, simple-http-server — opt-in services don't accidentally start without the toggle file
  • systemd-timesyncd poll preguiçosoPollIntervalMaxSec=86400 (24 h), daemon idles after first sync and gets paged out of RAM

PortMaster

  • Python3 + xz as explicit dependencies — PortMaster GUI (harbourmaster) needs import lzma; previously implicit and could fail
  • start_portmaster.sh made idempotentrm -rf + existence guards, no more "directory not empty" errors on second run
  • udev rule 91-uinput.rules/dev/uinput mode 0666, so gptokeyb works under the archr user without manual chmod per port

Bug fixes

  • fs-resize corruption — earlier RC3 internal builds tried to "modernize" the BOOT FAT (4 KB clusters, fsck.fat -a -w after fatlabel) and ended up triggering "Filesystem corruption has been detected!" on the device. Reverted to the v22 baseline that ships clean
  • gpudriver typo (DTB_OVERLAY=""DTB_OVERLAY_LOAD="") caused brick when the user picked Panfrost on devices without an overlay
  • runemu.sh exit governor — was leaving CPU pinned at performance after game exit when system.cpugovernor was unset
  • DT patch hunk count corrected — a wrong @@ header was making patch silently drop subsequent hunks (the dmc node was missing in v10 builds)

Documentation

  • Website (https://arch-r.io) reorganised: 17 docs across 5 sections, including new guides for ROMs, Controls, PortMaster, SSH, Samba, Netplay, RetroAchievements, Cloud Sync (Syncthing + rclone + NFS), VPN, Themes, Shaders, HDMI, CPU Overclock, GPU driver
  • Light theme added to the website (toggle in the nav bar)
  • SEO baseline — sitemap, robots.txt, OG images, JSON-LD (Organization + WebSite + SoftwareApplication)

Installation

Download the image for your R36S variant and flash it using Arch R Flasher v1.3.0 or any SD card imaging tool.

  • R36S Original: ArchR-R36S.aarch64-20260429-RC3-original.img.gz
  • R36S Clone (K36, EE Clone, Powkiddy RGB10/RGB10X/RGB20S, MagicX XU-Mini-M, BatLexp G350): ArchR-R36S.aarch64-20260429-RC3-clone.img.gz
  • R36S Soysauce (Y3506-based hardware): use the original image; the Flasher selects the correct soysauce panel overlay automatically

Checksums (SHA-256)

  ArchR-R36S.aarch64-20260429-RC3-original.img.gz
  ArchR-R36S.aarch64-20260429-RC3-clone.img.gz

Report issues at https://github.com/archr-linux/Arch-R/issues

Arch R v2.0 RC-2

Choose a tag to compare

@dgateles dgateles released this 02 Apr 22:29

Arch R v2.0 RC-2

Major update with battery fixes, performance optimizations, R36S Soysauce support improvements, and PortMaster compatibility. Built as official image on 2026-04-02.

Battery

  • Fixed battery percentage dropping rapidly to 0%: Backported two upstream kernel patches (from Linux 6.13) for the RK817 charger driver. The coulomb counter calibration was being corrupted by invalid voltage readings during suspend/resume, causing the SOC to plummet. The driver now validates voltage readings (2.7V-4.45V range) before any calibration, cancels the monitoring thread during suspend, and removes the problematic automatic FCC recalibration.
  • Battery full charge capacity (CHARGE_FULL) is now writable from userspace for degraded battery support.

CPU and GPU Frequency

  • Restored full CPU frequency table: 408 / 816 / 1008 / 1416 / 1512 MHz. The previous build only had 1008 / 1296 / 1416 / 1512 MHz, which prevented the CPU from entering low-power states and increased battery drain during idle.
  • 408 MHz suspend OPP: New lowest frequency point at 950mV for deep sleep, replacing the previous 600 MHz.
  • GPU OPP voltage correction: Fixed GPU 600 MHz operating point from 1175mV to 1150mV. The previous value exceeded the vdd_logic regulator maximum (1150mV) per the RK3326 datasheet.
  • All voltages verified against the RK3326 datasheet (CPU_VDD: 0.95V-1.35V range).

R36S Soysauce Variant

  • Fixed volume buttons: Mapped to correct GPIOs (GPIO3_PC5 for volume down, GPIO3_PC6 for volume up). Previously inherited wrong GPIOs from the original R36S device tree.
  • Automatic extlinux switching: Flasher now correctly switches extlinux.conf to the soysauce variant (explicit FDT pointing to rk3326-gameconsole-soysauce.dtb).

PortMaster Compatibility

  • Python3 lzma module enabled: PortMaster GUI (harbourmaster) requires import lzma. Previously disabled in the build.
  • dos2unix added: Required by ~37 PortMaster ports.
  • xdelta3 added: Required by ~30+ PortMaster ports for binary delta patching.
  • innoextract added: For extracting GOG Inno Setup installers (3 ports).
  • squashfs-tools on target: mksquashfs and unsquashfs now installed on the device (previously host-only). Required by PortMaster for runtime squashfs mounting.
  • loop.max_loop=16: Added to kernel cmdline. PortMaster ports can mount multiple squashfs runtimes simultaneously.
  • R36S device detection: Added R36S entries to PortMaster control.txt (param_device=oga, ANALOG_STICKS=2).
  • /etc/os-release: Added standard NAME and ID fields for PortMaster CFW detection.

Emulator Performance Optimizations

Focused on extracting maximum performance from the RK3326 (Cortex-A35 + Mali-G31).

Global (all emulators):

  • PAN_MESA_DEBUG=forcepack enabled globally for Mali-G31: reduces draw call overhead by packing vertex attributes
  • MESA_NO_ERROR=1 enabled globally: skips GL error checking (~5-10% gain)

RetroArch:

  • Video driver changed from glcore to gl (less overhead on GLES2)
  • Swapchain images reduced from 3 to 2 (less VRAM pressure on 1GB RAM)
  • Auto frame delay enabled (reduces input lag)
  • Menu driver changed from XMB to Ozone (lighter on GPU)

PPSSPP (PSP):

  • Anisotropy disabled (Mali-G31 has no hardware AF)
  • High quality depth disabled, bloom hack removed
  • Duplicate frame rendering disabled
  • Inflight frames reduced from 3 to 2
  • Audio latency increased to prevent stuttering

DuckStation (PSX):

  • Renderer changed from Software to OpenGL: Major performance improvement, offloads rendering to GPU
  • CD read/seek speedup enabled (faster loading)
  • Readahead sectors doubled

Flycast (Dreamcast):

  • Resolution set to 480p (matches R36S screen)
  • Threaded rendering and dynamic recompiler enabled
  • Auto frame skip enabled
  • Idle skip enabled

Mupen64Plus (N64):

  • GLideN64 defaults optimized for performance (legacy blending, inaccurate texcoords, LOD disabled)
  • Rice fast texture loading enabled
  • Audio buffers tuned to reduce latency while preventing drops

Installation

Download the image for your R36S variant and flash it using Arch R Flasher v1.2.0 or any SD card imaging tool.

  • R36S Original: ArchR-R36S.aarch64-20260402-original.img.gz
  • R36S Clone: ArchR-R36S.aarch64-20260402-clone.img.gz
  • R36S Soysauce: Use the original image and select "Soysauce" in the Flasher. The flasher will configure the correct device tree and panel overlay.

Checksums (SHA-256)

84434e1762886ebbb90332d80ae914a9aa5054901d37b8d875059647f2320b73  ArchR-R36S.aarch64-20260402-original.img.gz
a39b8e0ee8b9f5056abc3e02e8851826dc7c74f9605932424d8a25d3ca1d2b9e  ArchR-R36S.aarch64-20260402-clone.img.gz

Report issues at https://github.com/archr-linux/Arch-R/issues

Arch R v2.0 RC-1

Choose a tag to compare

@dgateles dgateles released this 20 Mar 15:20

Arch R v2.0 RC-1

Complete architectural rewrite. Arch R is now built on the ROCKNIX/LibreELEC embedded Linux build system instead of custom shell scripts. Every layer of the stack has been rebuilt, from the toolchain to the boot flow.

This is a release candidate. Core functionality (boot, display, controls, emulation, WiFi) has been tested on real R36S original and clone hardware. Report issues at https://github.com/archr-linux/Arch-R/issues.


Architecture Change

The entire build system has been replaced. v1.0 used a collection of shell scripts (build-all.sh, build-kernel.sh, build-rootfs.sh, etc.) that sequentially compiled each component and assembled the image. v2.0 uses the ROCKNIX/LibreELEC package build system, where every component is a declarative package with automatic dependency resolution, incremental builds, and full Docker containerization.

v1.0 Beta 2 v2.0 RC-1
Build system Shell scripts (build-all.sh) ROCKNIX/LibreELEC package system
Total packages ~15 major components 669 packages
Libretro cores 18+ (manually built) 78 (individually packaged)
Docker builds Not supported make docker-RK3326
Build environment Native cross-compile + QEMU chroot Arch Linux Docker container
Incremental builds Timestamp stamps Deep hash stamps

The practical difference: adding a new package, patching an emulator, or updating the kernel is now a single .mk file change instead of editing build scripts. Reproducible builds work out of the box with Docker.

Kernel

Still Linux mainline LTS (6.12 series), but now compiled through the package system instead of a standalone script. Device tree sources are managed as kernel patches with automatic Makefile registration. The initramfs is generated by the build system from BusyBox with mdev, blkid, and findfs built in.

U-Boot

Original R36S boards still use BSP U-Boot 2017.09 (required by the Rockchip boot ROM), but the build now patches board.c and hwrev.c at compile time to load DTBs from the dtbs/ directory and support FAT32 long filenames (CONFIG_SUPPORT_VFAT=y).

Clone boards use mainline U-Boot v2025.10.

Root Filesystem

Changed from SquashFS (read-only compressed, loopback mounted) to ext4 (read-write). The old SYSTEM image loopback mount has been removed. The init script now mounts the root partition directly as ext4.

Partition layout:

Partition Filesystem Label Size
1 FAT32 ARCHR 256 MB
2 ext4 ARCHR_ROOT 4.6 GB
3 ext4 STORAGE Expands to fill card

systemd

Fully integrated. v1.0 ran systemd in a minimal configuration with most services disabled. v2.0 has proper service ordering, dependency chains, and RequiresMountsFor directives on all services that access /storage. Key services:

  • machine-id.service (generates on first boot, before dbus)
  • systemd-timesyncd (NTP sync)
  • systemd-resolved (DNS resolution with fallback servers)
  • connman.service (network management with iwd WiFi backend)
  • archr-autostart.service (quirks, governors, audio setup)
  • save-sysconfig.service (settings persistence)

dbus reliability issues from v1.0 (machine-id symlink to unmounted /storage) have been resolved.

Network and WiFi

Replaced NetworkManager with Connman + iwd. iwd handles WiFi management (scanning, connecting, DHCP) while Connman provides the network abstraction layer.

New WiFi drivers included:

  • AIC8800: WiFi + Bluetooth USB dongle (with firmware and udev modeswitch)
  • RTL8831: WiFi 6 USB dongle
  • Kernel built-in: RTW88 USB variants, RTL8192DU, RTL8XXXU

WiFi passwords with special characters ($, #, !) now work correctly. The ES WiFi menu uses single-quoted passphrase handling to prevent shell expansion.

EmulationStation

Updated to a patched fork with:

  • Security hardening: shell argument escaping on all 26 executeScript() calls
  • Memory improvements: smart pointers for font textures, single-pass VRAM cleanup, weak_ptr race condition fix, SVG malloc replaced with std::vector
  • Performance: 70+ copy-by-value loops converted to const references across SystemData, FileData, and GuiComponent
  • Locale support: glibc built-in gettext detection fixed (was silently disabled in v1.0)
  • Branding: all ROCKNIX references replaced

Mesa / GPU

Mesa 26.0.3 Panfrost, compiled as a package with proper sysroot handling. GLES 3.1 on the Mali-G31. No proprietary blobs.

Display Panels

Expanded from 20 to 24 panels:

  • 12 original R36S panels (added Panel 6, R35S Rumble, R36S Plus, RGB20S)
  • 12 clone panels (unchanged)

Panel overlays are pre-generated and included in both images. Panel selection is done via the Arch R Flasher or by manually copying the correct .dtbo to overlays/mipi-panel.dtbo.

Joypad Driver

The archr-joypad driver now uses archr-singleadc-joypad as its compatible string (matching the device tree). This was a silent breakage in v1.0 Beta 2 that caused controls to not work on some clone boards.

ZRAM

Enabled by default at 512 MB. Provides swap space without wearing the SD card.

Emulators

78 libretro cores pre-installed, covering:

NES, SNES, Game Boy, GBA, Genesis/Mega Drive, Master System, Game Gear, TurboGrafx-16, Neo Geo, Neo Geo Pocket, Atari (2600/5200/7800/Lynx/Jaguar), ColecoVision, Intellivision, MSX, Amstrad CPC, ZX Spectrum, Commodore 64, Amiga, DOS (DOSBox), ScummVM, PlayStation, N64, Dreamcast (Flycast), PSP (PPSSPP), Nintendo DS, Saturn (Yabause), Arcade (MAME, FBNeo), Wonderswan, Virtual Boy, PC Engine, and more.

32-bit ARM compatibility layer included for cores that require it (pcsx_rearmed, box86).

What Changed from v1.0 Beta 2

For users coming from v1.0 Beta 2:

  • Clean flash required. The partition layout, root filesystem type, and boot flow have all changed. There is no upgrade path from v1.0.
  • Panel selection is the same. Copy your panel DTBO to overlays/mipi-panel.dtbo on the BOOT partition, or use the Flasher app.
  • ROMs and saves from v1.0 can be copied to the STORAGE partition after flashing.
  • WiFi now uses iwd instead of NetworkManager. Saved networks will need to be re-entered.

Known Issues

  • Storage partition auto-expansion runs on first boot (may take a few seconds depending on SD card size).
  • Some WiFi dongles may require re-plugging after first boot.

Downloads

File Description
ArchR-R36S.aarch64-20260320-original.img.gz For genuine R36S, OGA, OGS, RG351V/M, Chi, R33S, XU10
ArchR-R36S.aarch64-20260320-clone.img.gz For K36 clones, RGB10/RGB10X/RGB20S, XU-Mini-M, R36Max, EE clone, G350

Flash with the Arch R Flasher (v1.1.0) or manually:

gunzip ArchR-R36S-*-original.img.gz
sudo dd if=ArchR-R36S-*-original.img of=/dev/sdX bs=4M status=progress
sync

Credits

Built on ROCKNIX, which is built on JELOS, CoreELEC, and LibreELEC. Thanks to Hardkernel, Rockchip, Mesa, RetroArch, Libretro, and EmulationStation.

Arch R v1.0 Beta 2

Choose a tag to compare

@dgateles dgateles released this 05 Mar 02:53

Arch R v1.0 Beta 2

The biggest Arch R update yet. Kernel fully migrated to mainline, new board + overlay architecture, and the entire build pipeline rewritten from scratch.

Mainline Kernel 6.12.61 LTS

Moved from BSP kernel 6.6 (proprietary fork) to Linux 6.12.61 mainline LTS. Cross-compiles directly from x86 host — no more ARM chroot needed to build the kernel.

  • 8 device patches (panel, input, wifi, USB, DTS)
  • 7 Panfrost patches (performance counters, BO labelling)
  • ntsync patch (future Wine/Proton support)
  • panel-generic-dsi driver built-in with archr,generic-dsi compatible

Board + Overlay Architecture

Fundamental change in how hardware is detected:

  • Board DTB = hardware profile (GPIOs, PMIC, joypad, audio). 16 boards supported. Auto-selected by U-Boot via ADC reading (SARADC ch0).
  • Panel Overlay = display init sequence. 20 panels supported. Applied at boot via fdt apply in boot.ini.
  • Two images: Original (R36S, OGA, OGS, RG351V/M, Chi, R33S, XU10) and Clone (K36, RGB20S, RGB10X, XU-Mini-M, R36Max, EE clone, G350).
  • Same image works on all boards of a variant — only the panel overlay needs to match your display.

Initramfs Boot Splash

SVG splash rendered directly to framebuffer at ~0.7s after power-on, before systemd starts. Static aarch64 binary embedded in the kernel initramfs.

System Scripts

  • Hotkeys: volume and brightness via gamepad (FN + D-pad)
  • Automount: SD/USB auto-detection via udev
  • Bluetooth agent: pairing without terminal
  • Memory manager: OOM prevention
  • Sleep/Suspend: deep sleep and freeze modes
  • USB gadget: file transfer mode
  • Save-config: settings persistence
  • gptokeyb: gamepad-to-keyboard mapper via uinput

ES Tools (WIP)

Interactive scripts in EmulationStation's OPTIONS menu: System Info, WiFi, Bluetooth, Performance Mode, Sleep Mode, USB Mode, Factory Reset. Uses fbcon + gptokeyb for gamepad navigation. Still being tested.

Build Pipeline

Full build rewritten with cross-compilation:

build-all.sh
  ├── build-initramfs.sh         # Boot splash SVG
  ├── build-kernel.sh            # Kernel 6.12.61 cross-compile (~10 min)
  ├── build-rootfs.sh            # Arch Linux ARM chroot (~45 min)
  ├── build-mesa.sh              # Mesa 26 Panfrost
  ├── build-emulationstation.sh  # ES-fcamod
  ├── build-retroarch.sh         # RetroArch + cores
  ├── generate-panel-dtbos.sh    # 20 panel overlays
  ├── build-uboot.sh             # BSP U-Boot (original)
  ├── build-uboot-clone.sh       # Mainline U-Boot (clone)
  └── build-image.sh             # SD card image (×2 variants)

Panel Selection

Use the Arch R Flasher (v1.0.0) to flash and select your panel automatically. Or manually:

# Mount BOOT partition
sudo mount /dev/sdX1 /mnt

# Copy your panel overlay (example: Panel 4 V22, the most common)
sudo cp /mnt/overlays/panel4-v22.dtbo /mnt/overlays/mipi-panel.dtbo

sudo umount /mnt && sync

Supported Boards

Board DTB Image
R36S (original) rk3326-gameconsole-r36s Original
Odroid Go Advance rk3326-odroid-go2 Original
Odroid Go Advance v1.1 rk3326-odroid-go2-v11 Original
Odroid Go Super rk3326-odroid-go3 Original
Anbernic RG351V rk3326-anbernic-rg351v Original
Anbernic RG351M rk3326-anbernic-rg351m Original
GameForce Chi rk3326-gameforce-chi Original
R33S rk3326-gameconsole-r33s Original
MagicX XU10 rk3326-magicx-xu10 Original
K36 / R36S clone rk3326-gameconsole-r36max Clone
EE clone rk3326-gameconsole-eeclone Clone
Powkiddy RGB10 rk3326-powkiddy-rgb10 Clone
Powkiddy RGB10X rk3326-powkiddy-rgb10x Clone
Powkiddy RGB20S rk3326-powkiddy-rgb20s Clone
MagicX XU-Mini-M rk3326-magicx-xu-mini-m Clone
BatLexp G350 rk3326-batlexp-g350 Clone

Full changelog: v1.0-beta1.3...v1.0-beta2

Arch R v1.0-beta1.2

Choose a tag to compare

@dgateles dgateles released this 02 Mar 05:22

Arch R v1.0-beta1.2

What's new since beta1.1

  • Arch R Flasher — Desktop app (Linux/macOS/Windows) for flashing SD cards. Select your console type and panel, and the Flasher does the rest. Available at archr-linux/archr-flasher.
  • Pre-merged panel DTBs — Eliminates U-Boot fdt apply corruption. Each panel gets its own complete kernel DTB, loaded directly at boot.
  • Accumulated small fixes from continued testing.

Download

Image Console Description
ArchR-R36S-20260302.img.xz R36S Original 6 panel variants pre-merged
ArchR-R36S-clone-20260302.img.xz R36S Clone 12 panel variants pre-merged
ArchR-R36S-no-panel-20260302.img.xz Universal All panels, for use with Arch R Flasher

Flashing

With Arch R Flasher (recommended):
Download from archr-flasher releases, select your console + panel, flash.

Manual:

xz -d ArchR-R36S-20260302.img.xz
sudo dd if=ArchR-R36S-20260302.img of=/dev/sdX bs=4M status=progress
sync

Panel selection

On first boot, if your screen is garbled or blank, hold X during the panel wizard to cycle through panels. The selected panel persists across reboots.

Default user: archr / password: archr

Arch R v1.0-beta1.1 — Pre-merged Panel DTBs

Choose a tag to compare

@dgateles dgateles released this 28 Feb 03:22

What's new in beta1.1

Fix: Non-default panel selection now uses pre-merged DTBs

Users reported that selecting a non-default panel (via the panel wizard) resulted in broken display, audio, or controls. The root cause was BSP U-Boot's fdt apply command corrupting the DTB when replacing properties with different-sized data.

How it's fixed

Panel overlays are now applied at build time using fdtoverlay (verified working on host), instead of at boot time via U-Boot's buggy fdt apply. Each panel gets its own pre-merged kernel-*.dtb. The boot script simply loads the correct DTB by name — no overlay application at boot.

What to test

If your R36S has a non-default panel (not Panel 4-V22 for original, not Clone 8 ST7703 for clone):

  1. Flash this image
  2. Run through the panel wizard (beeps + A/B buttons)
  3. Select your panel → press A → press RESET
  4. Verify: display, audio, and controls all work correctly

Default panel users: No change — boots exactly as before.

Downloads

Image SHA256
ArchR-R36S-20260227.img.xz (Original) d1af7b12...14497fd
ArchR-R36S-clone-20260227.img.xz (Clone) 8e16c2cb...56f1c7bb

Full checksums

d1af7b1206e666986e307a323afa51882679090e3f4c897f58618751e14497fd  ArchR-R36S-20260227.img.xz
8e16c2cb380b0d4b04e0f9615a54a011bbae0a7a93b92aea056f1c7bb91d4aac  ArchR-R36S-clone-20260227.img.xz

Flash with: xzcat ArchR-R36S-20260227.img.xz | sudo dd of=/dev/sdX bs=4M status=progress

Report issues at: https://github.com/dgateles/Arch-R/issues