The user's diagnostic log proved the macOS write and verify complete successfully and only the post-flash mount of the boot partition fails: the ArchR boot FAT is a below-spec-cluster-count FAT32 (the geometry the vendor U-Boots require), and the macOS msdos driver refuses to mount it, misreading it as FAT16. Stop mounting it at all. The panel overlay, variant marker and the soysauce extlinux switch are now written into the image itself before flashing, through a vendored fatfs whose FAT type detection trusts the BPB layout instead of the cluster-count heuristic (see vendor/fatfs/VENDORED.md); the Linux kernel and mtools make the same call. A raw .img supplied by the user is copied to temp first so the original file is never modified, and the verify pass now covers the configuration bytes too. The post-write mount path and its err:mount_boot failure mode are gone.
Arch R Flasher
Flash. Select panel. Play.
Cross-platform desktop app for flashing Arch R onto R36S Original, R36S Clone, and Soysauce gaming consoles. Handles image download, SD card writing, and per-motherboard panel configuration in one step.
Features
- Two tabs: Flash (full image write) and Overlay (change panel on existing SD)
- 3 console families, 43 panels: 15 R36S Original + 18 R36S Clone + 10 Soysauce, named after the exact motherboard revision (e.g.
R36S-V21_2024-12-18_2551.dtbo) - Custom panel from stock DTB: import a vendor
.dtbfile and the flasher auto-generates the matching MIPI overlay (pure Rust, no external tools) - Customizations: display rotation, analog stick inversion (left/right), headphone-detect polarity, joypad variant (auto/oga/ogs), forced simple-audio mode, skip-vendor-mode toggle
- Image download: fetches latest release from GitHub with SHA256 verification (compares against the
.sha256asset published with the release) and on-disk caching - Compression support:
.img,.img.gz, and.img.xz(streaming decompress, 4 MiB chunks) - Cross-platform: Windows, Linux, macOS with native privilege escalation
- In-app updates: automatic update checking and one-click install
- 5 languages: English, Portuguese (BR), Spanish, Chinese, Russian
- Retry logic: automatic retry on transient SD card I/O errors
System Requirements
| Platform | Minimum |
|---|---|
| Windows | Windows 10 (1809) or later, x86_64. WebView2 Runtime (pre-installed on Windows 11; on Windows 10 the installer pulls it via the Evergreen Bootstrapper) |
| Linux | glibc 2.31+, webkit2gtk-4.1, gtk-3, libayatana-appindicator3 |
| macOS | macOS 10.15+, Apple Silicon |
macOS says the app "is damaged and can't be opened". Releases from v1.3.5 on are signed and notarized with Apple, so this should not happen with a fresh download of the latest DMG. If you still hit it (older release, or a download that got a stale quarantine flag), clear the flag once:
xattr -cr "/Applications/Arch R Flasher.app"Then open it normally.
Windows 7 is not supported. Both the GUI runtime (Tauri 2 / Microsoft Edge WebView2) and the privileged flash script (PowerShell
Storagemodule —Clear-Disk,Get-Partition,Update-Disk) require Windows 8+. Even with the bundledbcryptprimitives.dllshim that fixes Rust'sProcessPrngimport, the WebView and the flash script still fail on Windows 7. Use Linux, macOS, or upgrade to Windows 10/11.
Download
Grab the latest release for your platform from Releases.
| Platform | File |
|---|---|
| Windows | Arch.R.Flasher_x64-setup.exe |
| Linux (deb) | arch-r-flasher_amd64.deb |
| Linux (AppImage) | arch-r-flasher_amd64.AppImage |
| macOS | Arch.R.Flasher_aarch64.dmg |
Usage
Flash Tab
- Console — pick R36S Original, R36S Clone, or Soysauce
- Image — download the latest from GitHub, or pick a local
.img/.img.xz/.img.gz - Panel — select your motherboard revision from the curated list, or import a stock vendor
.dtbto auto-generate a custom overlay - Customize (optional) — rotation, stick inversion, HP invert, joypad variant, simple audio, vendor mode skip
- SD Card — pick the target removable disk
- Flash
The app decompresses the image, writes it to the SD card with retries, then mounts the BOOT partition and injects the chosen DTBO as overlays/mipi-panel.dtbo.
Overlay Tab
Change the display panel on an already-flashed Arch R SD card without reflashing:
- Insert an Arch R SD card
- App auto-detects the BOOT partition and shows the current panel + settings
- Select a new panel and/or adjust customizations
- Apply
Custom panel from a stock DTB
If your motherboard revision isn't in the curated list, drop in any working stock r36s.dtb (extracted from the vendor's image or pulled from /sys/firmware/fdt):
- In the Panel step, choose Import DTB → generate overlay
- Pick the
.dtbfile - The flasher's pure-Rust DTB→overlay generator extracts the MIPI panel node and produces a minimal DTBO at
<cache>/com.archr.flasher/custom-overlay.dtbo - That overlay is applied like any built-in panel
No dtc, mtools, or device-tree-compiler needed at any step.
Building from Source
Requirements
- Rust (stable, edition 2024 — Rust 1.85+)
- Tauri CLI:
cargo install tauri-cli --version "^2"
Linux
sudo apt install -y libwebkit2gtk-4.1-dev libgtk-3-dev libayatana-appindicator3-dev
macOS
Xcode Command Line Tools.
Windows
WebView2 Runtime (pre-installed on Windows 11; the installer auto-pulls it on Windows 10). MSVC toolchain via Visual Studio Build Tools.
Build
# Development
cargo tauri dev
# Release (generates installer for current platform)
cargo tauri build
The Windows build also compiles src/win7_shim.c into a fallback bcryptprimitives.dll next to the .exe. This shim is harmless on Windows 8+ (forwards calls to the real system DLL) and would be required on Windows 7 — but the Tauri 2 WebView and the PS Storage module make Win7 unfeasible regardless. The shim ships only because the build pipeline keeps it for diagnostic builds.
Architecture
archr-flasher/
src-tauri/
src/
main.rs # Tauri entry point + IPC commands
panels.rs # Panel definitions (43 panels, data-driven)
disk.rs # Removable disk detection (Linux/macOS/Windows)
flash.rs # Image writing + privilege escalation + retry
github.rs # GitHub Releases API + image download + SHA256 verify
overlay.rs # SD card panel overlay read/write
panel_config.rs # DTBO read/customization (built-in FAT32 reader)
dtbo_builder.rs # FDT binary builder (no external tools)
dtb_to_overlay.rs # Stock DTB → MIPI overlay generator (pure Rust)
win7_shim.c # Win7 ProcessPrng fallback DLL (compiled by build.rs)
build.rs
Cargo.toml
tauri.conf.json
admin.manifest # Windows UAC elevation manifest
src/
index.html # UI (two tabs: Flash + Overlay)
style.css # Dark theme
main.js # Frontend logic (vanilla JS)
i18n/ # Translations (en, pt-BR, es, zh, ru)
.github/
workflows/ # CI/CD
How It Works
Flash flow:
- Download (with SHA256 verify) or select
.img.xz/.img.gz/.img - Stream-decompress to app cache directory (4 MiB chunks)
- Detect panel selection: built-in DTBO from the image's FAT32 BOOT partition, or a custom DTBO from disk (when the user imported a stock DTB)
- If customizations are set, build a modified DTBO with injected DT properties (preserving original hardware nodes: reset-gpios, pinctrl, power supply,
__fixups__) - Write image to SD card via platform-specific privileged script (with retries)
- Mount BOOT partition (with retry) and inject DTBO as
overlays/mipi-panel.dtbo
Overlay flow:
- Detect a mounted Arch R BOOT partition
- Read current
mipi-panel.dtbo— identify panel viapanel_descriptionhash - User picks a new panel (built-in or custom DTB) + customizations
- Build DTBO and write it back to
overlays/mipi-panel.dtbo
Privilege Escalation
| Platform | Method | Notes |
|---|---|---|
| Linux | pkexec |
No terminal window needed |
| macOS | osascript (AppleScript) |
Native admin prompt |
| Windows | Admin manifest at startup (Rufus-style) | App is launched elevated; no runtime UAC popup, no visible PowerShell console |
Panel DTBO System
The app ships a built-in FDT binary builder, a minimal FAT32 reader, and a DTB→overlay generator — no dtc, mtools, or device-tree-compiler dependency. Customizations (rotation, stick inversion, HP polarity, joypad variant, simple audio, skip vendor mode) are injected as DT properties into the panel overlay, preserving every original hardware node so the device boots identically to the vendor image.
Licenses
Copyright (C) 2026-present Arch R
Licensed under the terms of the GNU GPL Version 2.