1 Commits

Author SHA1 Message Date
Douglas Teles 2d0a76b94a ArchR v2.0-rc3 — first official release-candidate
Kernel 6.12 LTS · Mesa 26.0.5 Panfrost · CMA 96 MB · zlib-ng 2.2.4
CPU turbo 1.5 GHz (vdd_arm 1.45 V) · GPU 650 MHz @ 1.150 V · mali_kbase PM patch
43 motherboard revisions covered · two image variants with hardware auto-detect
PortMaster pre-installed · MESA_GLTHREAD whitelist · RetroAchievements
Tailscale / WireGuard / ZeroTier · Syncthing + rclone · Samba

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-29 14:36:32 -03:00
754 changed files with 16911 additions and 9792 deletions
+1 -5
View File
@@ -93,7 +93,6 @@ projects/ArchR/devices/SM8550/
projects/ArchR/devices/SM8650/
# Non-R36S device documentation
bench-results/*
documentation/PER_DEVICE_DOCUMENTATION/H700/
documentation/PER_DEVICE_DOCUMENTATION/RK3399/
documentation/PER_DEVICE_DOCUMENTATION/RK3566/
@@ -173,7 +172,4 @@ packages/sysutils/open-vm-tools/
#other
docs/*
!docs/improvements.md
!docs/release-policy.md
!docs/fhs-mapping.md
bench-results/config/mipi-generator/__pycache__/
bench-results/
-18
View File
@@ -1,12 +1,5 @@
-include $(HOME)/.archr/options
# Normalise OFFICIAL once, before any recipe runs. `override` makes
# this assignment win against MAKEFLAGS cmdline propagation, so
# recursive make invocations (build_distro -> make image) see the
# canonical "yes" value instead of the raw "y" / "Y" / "1" the user
# passed on the outer command line. `export` then forwards it to
# every shell, including scripts/image which tests `= "yes"` exact.
override OFFICIAL := $(if $(filter y yes Y YES 1,$(OFFICIAL)),yes,)
export OFFICIAL
all: world
@@ -113,17 +106,6 @@ docker-image-pull:
$(DOCKER_CMD) pull $(DOCKER_IMAGE)
# Wire up docker to call equivalent make files using % to match and $* to pass the value matched by %
# After a successful RK3326 build, refresh the overlay-generator website's
# bundled base DTBs (/archr-bases) so they never drift from the shipped image.
# Runs host-side on purpose: the website repo is not mounted into the build
# container. The sync script is itself non-fatal, and the guard keeps it off
# non-build docker targets (docker-shell, docker-update, ...).
# Before any docker build, fail fast if the three shipped input-config
# artifacts drifted from the per-pad definitions (see projects/ArchR/inputs).
# Verification only: the build never rewrites the artifacts by itself.
docker-%:
@./projects/ArchR/inputs/gen-input-configs verify >/dev/null || \
{ ./projects/ArchR/inputs/gen-input-configs verify; exit 1; }
./scripts/get_env > .env
BUILD_DIR="$(DOCKER_WORK_DIR)" $(DOCKER_CMD) run $(PODMAN_ARGS) $(INTERACTIVE) --init --env-file .env --rm --user $(UID):$(GID) $(GLOBAL_SETTINGS) $(LOCAL_SSH_KEYS_FILE) $(EMULATIONSTATION_SRC) -v "$(PWD)":"$(DOCKER_WORK_DIR)" -v /tmp:/tmp -w "$(DOCKER_WORK_DIR)" $(DOCKER_EXTRA_OPTS) $(DOCKER_IMAGE) $(COMMAND)
@if [ "$*" = "RK3326" ]; then ./scripts/repo/sync-site-bases; fi
+35 -46
View File
@@ -3,7 +3,7 @@
</p>
<p align="center">
<strong>Arch Linux gaming distribution for handheld devices.</strong>
<strong>Arch Linux-based gaming distribution for handheld devices.</strong>
</p>
<p align="center">
@@ -14,27 +14,22 @@
---
Arch R is an **Arch Linux** distribution for the **R36S** handheld gaming console and its many variants. In the same spirit as SteamOS, it pairs a genuine Arch userland (pacman, systemd, up-to-date packages) with a curated console experience: flash it, turn the device on, play. System updates are delivered through the built-in updater, kernel included; reflashing is only needed for a fresh install or recovery.
The image build pipeline descends from the LibreELEC family of embedded build systems (through JELOS and ROCKNIX), but the operating system it assembles is Arch Linux ARM, not a JELOS derivative.
Arch R is a custom Linux distribution for the **R36S** handheld gaming console and all its variants, built on top of [ROCKNIX](https://github.com/ROCKNIX/distribution) with an **Arch Linux-based** build environment. It supports **16 board profiles** and **20 display panels** across original and clone hardware.
## Features
- Genuine Arch Linux ARM base with pacman and signed package repositories (stable, next and dev channels).
- Built-in system updater in EmulationStation; kernel and device trees update through it too, with checksum-verified writes to the boot partition.
- Mainline kernel 6.12 LTS with board auto-detection via SARADC.
- Memory clock trained at 666MHz from boot (twice the BSP-era default) and tuned Mali-G31 graphics.
- EmulationStation frontend with RetroArch and 18+ cores pre-installed, plus PortMaster.
- Full audio support with speaker/headphone auto-switch across board revisions.
- Power button light sleep: screen and backlight fully off, instant wake.
- Power LED control (on, off, heartbeat) on every supported family.
- USB WiFi dongle support, including the common RTL8188EUS family (TP-Link, Edimax).
- MIPI panel overlays for every known motherboard revision, generated on demand by the online overlay generator at https://arch-r.io/overlay-generator/ (or during flashing by the Arch R Flasher). The generator also extracts board-specific wiring (audio amplifier, jack detect, LEDs, PMIC interrupt) from your stock DTB.
- Arch Linux-based build system with Docker support.
- Kernel 6.12 LTS with board auto-detection via SARADC.
- Mesa Panfrost open-source GPU driver (GLES 3.1, no proprietary blobs).
- EmulationStation frontend with RetroArch and 18+ cores pre-installed.
- Full audio support with speaker/headphone auto-switch.
- Battery monitoring with capacity reporting and LED warning.
- 43 pre-generated MIPI panel overlays (15 original + 18 clone + 10 soysauce variants), one per motherboard revision.
- Separate images for original and clone boards, both with hardware auto-detection.
- Integrated cross-device local and remote network play.
- Fine-grained control for battery life and performance.
- Bluetooth audio and controller support (via USB Bluetooth adapter; the boards have no internal radio).
- USB audio devices (DACs, headsets, controllers with audio).
- Bluetooth audio and controller support.
- HDMI audio/video output, USB audio.
- Device sync with Syncthing and rclone.
- VPN support with WireGuard, Tailscale, and ZeroTier.
- Built-in scraping and RetroAchievements.
@@ -45,16 +40,17 @@ The image build pipeline descends from the LibreELEC family of embedded build sy
| Board | Image |
|-------|-------|
| R36S (original), R33S, R36S Soysauce | Original |
| R36S (original), R33S | Original |
| Odroid Go Advance / v1.1 / Super | Original |
| Anbernic RG351V / RG351M | Original |
| GameForce Chi, MagicX XU10, Powkiddy RGB10 | Original |
| K36 / R36S V20 clones / EE Clone | Clone |
| Powkiddy RGB10X, MagicX XU-Mini-M | Clone |
| GameForce Chi, MagicX XU10 | Original |
| K36 / R36S clones / EE Clone | Clone |
| Powkiddy RGB10 / RGB10X / RGB20S | Clone |
| MagicX XU-Mini-M, BatLexp G350 | Clone |
### Display Panels
Panel overlays are not baked into the images. Generate the overlay for your exact motherboard revision at the online generator, https://arch-r.io/overlay-generator/ (pick your board, or upload the stock `dtb` from the SD card that shipped with the device), then copy the resulting file to `overlays/mipi-panel.dtbo` on the boot partition. The Arch R Flasher can also generate and install the overlay during flashing. The `/flash/overlays/` folder on a fresh install contains a `README.txt` with the same instructions.
Arch R ships 43 pre-generated MIPI panel overlays covering all known R36S display variants, named after the exact motherboard revision (e.g. `R36S-V21_2024-12-18_2551.dtbo`, `G80CA-MB_V1.3-20251212_Panel_8.dtbo`). Panel selection is done by copying the correct `.dtbo` file to `overlays/mipi-panel.dtbo` on the boot partition. Sources live under `config/archr-dts/{original,clone,soysauce}/<MB-revision>/`; the build extracts the panel description from each revision's `rk3326-r36s-linux.dtb` via `config/mipi-generator/generator.sh`.
## Quick Start
@@ -63,22 +59,15 @@ Download the latest images from [Releases](https://github.com/archr-linux/Arch-R
- **Original image** -- for genuine R36S and compatible boards.
- **Clone image** -- for K36 clones and compatible boards.
The easiest path is the [Arch R Flasher](https://github.com/archr-linux/archr-flasher), which downloads, verifies, flashes and installs your panel overlay in one go. Manual flashing works too:
Flash to a MicroSD card:
```bash
gzip -d ArchR-R36S-*.img.gz
xz -d ArchR-R36S-*.img.xz
sudo dd if=ArchR-R36S-*.img of=/dev/sdX bs=4M status=progress
sync
```
Always verify the download against the published `SHA256SUMS` before flashing. Insert the SD card and power on; the correct board DTB is selected automatically.
## Updates
- **In place (default after install)**: EmulationStation > Updates, or `archr-update` over SSH. Updates come from the signed pacman repository; after each transaction the boot partition is synchronized automatically, so kernel and device-tree fixes arrive without reflashing. User overlays and configuration are never touched.
- **Reflash**: for fresh installs, recovery, or the rare low-level bootloader change (TPL/U-Boot, e.g. a DDR frequency change), which lives outside the filesystem.
Release channel is configurable (stable, next, dev) under updates settings.
Insert the SD card and power on. The correct board DTB is selected automatically.
## Building from Source
@@ -101,7 +90,7 @@ make docker-image-build
make docker-RK3326
```
Output images are generated in `target/`. Add `OFFICIAL=yes` for release-stamped images.
Output images are generated in `target/`.
### Build Commands
@@ -116,23 +105,23 @@ Output images are generated in `target/`. Add `OFFICIAL=yes` for release-stamped
Arch R separates **board configuration** from **panel configuration**:
- **Board DTB** = hardware profile (GPIOs, PMIC, joypad, audio codec). Selected automatically by U-Boot via SARADC. One generic DTB per hardware family; board-revision differences are carried by the overlay.
- **Panel overlay** = display init sequence, timings and board-specific wiring extracted from the stock DTB. Applied on top of the board DTB at boot time.
- **Board DTB** = hardware profile (GPIOs, PMIC, joypad, audio codec). Selected automatically by U-Boot via SARADC.
- **Panel overlay** = display init sequence and timings. Applied on top of the board DTB at boot time.
This means the same image works on all boards of a variant. Only the overlay needs to match the specific device.
This means the same image works on all boards of a variant. Only the panel overlay needs to match the specific display.
### Boot Flow
```
Power On
U-Boot (mainline, legacy BSP loader for clone boards)
boot script: read SARADC hwrev, select board DTB
U-Boot (BSP or mainline)
boot.scr: read SARADC hwrev, select board DTB
sysboot: load kernel + DTB + overlay from extlinux.conf
Kernel 6.12 + initramfs
mount root (ext4) + storage, resolved by partition label
mount root (ext4) + storage
switch_root to systemd
systemd
archr-autostart (quirks by device-tree model, governors, audio)
archr-autostart (quirks, governors, audio)
EmulationStation
```
@@ -141,7 +130,7 @@ Power On
| Partition | Filesystem | Label | Purpose |
|-----------|-----------|-------|---------|
| 1 | FAT32 | ARCHR | Boot (kernel, DTBs, overlays, boot.scr) |
| 2 | ext4 | ARCHR_ROOT | Root filesystem (Arch Linux ARM) |
| 2 | ext4 | ARCHR_ROOT | Root filesystem |
| 3 | ext4 | STORAGE | User data, ROMs, configs |
## Community
@@ -150,7 +139,7 @@ Contributions are welcome. Please open issues or pull requests on [GitHub](https
## Licenses
The Arch R operating system is Arch Linux ARM plus original Arch R software. The image build tooling in this repository descends from [ROCKNIX](https://github.com/ROCKNIX/distribution) and [JELOS](https://github.com/JustEnoughLinuxOS/distribution/); the licenses of that inherited tooling continue to apply to the portions derived from it.
**Arch R** is a fork of [ROCKNIX](https://github.com/ROCKNIX/distribution), which is a fork of [JELOS](https://github.com/JustEnoughLinuxOS/distribution/). All upstream licenses apply.
You are free to:
@@ -179,12 +168,12 @@ Like any Linux distribution, this project is not the work of one person. It is t
Special thanks to:
- **[Arch Linux](https://archlinux.org/)** and **[Arch Linux ARM](https://archlinuxarm.org/)** -- the operating system Arch R is built on.
- **[ROCKNIX](https://github.com/ROCKNIX/distribution)** and **[JELOS](https://github.com/JustEnoughLinuxOS/distribution/)** -- the projects whose build tooling and RK3326 device knowledge Arch R inherited and still learns from.
- **[CoreELEC](https://coreelec.org/)** and **[LibreELEC](https://libreelec.tv/)** -- the embedded Linux distributions whose build system forms the backbone of the image pipeline.
- **[ROCKNIX](https://github.com/ROCKNIX/distribution)** -- the upstream distribution that Arch R is forked from. ROCKNIX provided the complete build system, device support, EmulationStation integration, and the foundation for handheld gaming on Linux.
- **[JELOS](https://github.com/JustEnoughLinuxOS/distribution/)** -- the project that ROCKNIX was originally forked from.
- **[CoreELEC](https://coreelec.org/)** and **[LibreELEC](https://libreelec.tv/)** -- the embedded Linux distributions whose build system forms the backbone of this project.
- **[Hardkernel](https://www.hardkernel.com/)** -- for the Odroid Go Advance BSP U-Boot and kernel device trees.
- **[Rockchip](https://www.rock-chips.com/)** -- for the RK3326 SoC, rkbin firmware and the libmali GPU driver.
- **[Mesa](https://mesa3d.org/)** -- for the open-source graphics stack.
- **[Rockchip](https://www.rock-chips.com/)** -- for the RK3326 SoC and rkbin firmware.
- **[Mesa](https://mesa3d.org/)** -- for the Panfrost open-source GPU driver.
- **[RetroArch](https://www.retroarch.com/)** and **[Libretro](https://www.libretro.com/)** -- for the emulation framework and cores.
- **[EmulationStation](https://emulationstation.org/)** -- for the frontend.
- All developers and contributors across the open-source community who made this possible.

Some files were not shown because too many files have changed in this diff Show More