Commit Graph

51682 Commits

Author SHA1 Message Date
Douglas Teles 2424c658de README: drop false HDMI claim and stale panel-overlay section
Bug report 5 called out hardware claims that are not true. The RK3326
boards have no HDMI or any video output, so remove "HDMI audio/video
output" from the feature list. Qualify Bluetooth (works via a USB
adapter, there is no internal radio). Rewrite the Display Panels section
and the overlays feature bullet: the 43 pre-generated overlays and the
config/archr-dts + mipi-generator tree they referenced were removed in
2.0 in favor of the online overlay generator, and report 3 shows users
still following the stale instructions.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-01 20:01:01 -03:00
Douglas Teles 45dd6ff144 wifi: robust dongle connects and visible feedback while connecting
Bug report 1: an Edimax USB dongle sees the network but the connect
fails with a generic error (works on dArkOS). Bug report 4: pressing B
after typing the passphrase looks like a freeze while the console is
silently trying to connect.

wifictl: scan until the target SSID actually shows up in iwd's results
(up to 12s) instead of a fixed 2s sleep; slow USB dongles were reaching
iwctl connect before the network existed in the scan cache, which fails
immediately. Extend the association wait from 15s to 30s and log the
real iwctl connect output plus the outcome to /var/log/wifictl.log so
failures (wrong passphrase, WPA1/TKIP networks that iwd does not
support, timeouts) stop being an indistinguishable "network error".

emulationstation: bump to 8a257e1fa, which wraps both WiFi connect call
sites in a GuiLoading busy spinner instead of blocking the UI thread.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-01 20:01:01 -03:00
Douglas Teles a738af646b RK3326: support the R36T Max internal SDIO WiFi (rk912/rk915)
Users reported the R36T Max clone does not even scan for networks on the
2.0 clone image while the stock OS and Aurknix work (bug report 2). The
R36T Max internal WiFi is an rk912/rk915 SDIO module, which the clone
image had no driver, no DTS wiring and no SDIO quirks for. Port the
working support from ROCKNIX/Aurknix:

- rk915 driver package (AveyondFly/rk915, WiFi/BT SDIO), added to
  ADDITIONAL_DRIVERS.
- 024-mainline-linux-hacks-for-rk915.patch: MMC_CAP2_WIFI_RK912 cap
  behind the supports-rk912 DT property; bypasses the SDIO CIS size
  check and power cycling that break this module's initialization.
- rk3326-aislpc-r36tmax.dts: dedicated device tree (sdio_pwrseq, sdio
  node with supports-rk912, correct joypad wiring including the analog
  stick inversion users hit on the generic clone DTB). Adapted to the
  archr-singleadc-joypad and archr,generic-dsi compatibles.
- Temperature sensor quirk for the "AISLPC R36TMax" model string.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-01 20:01:01 -03:00
Douglas Teles 9ff72420c6 repo: make local-overlay and meta packages deliver pacman updates
The pacman update channel silently dropped most local changes:

- gen-pacman-repo hardcoded pkgrel=1, ignoring PKG_REV. A package whose
  upstream PKG_VERSION is pinned (e.g. retroarch-joypads, where only the
  local gamepads/ overlay changes) could never produce a newer package,
  so `pacman -Syu` never saw the fix. Read PKG_REV and map it to the repo
  package release (default 1 when unset or dynamic).

- the archr meta package had PKG_VERSION="", so its install_pkg dir was
  "archr-" and the synthesized version was the constant "archr.". The
  main system-config package (system.cfg, runemu, wifictl, governors,
  networkservices) therefore never updated. Stamp it with the build
  timestamp so each rebuild ships a real, monotonically increasing
  version.

- bump retroarch-joypads PKG_REV to 2 so the corrected GO-Super Gamepad
  autoconfig ships as an update.

The kernel/DTB stays out of pacman on purpose: it lives on the FAT boot
partition, which pacman does not manage, so kernel changes ship by image
flash.
v2.0
2026-06-30 16:47:29 -03:00
Douglas Teles ae837498a3 network: reconnect WiFi at boot when wifi.enabled is set
WiFi was refactored from connman to iwd (wifictl uses iwctl), but iwd is
dbus-activated and nothing re-associates it to the saved network at boot.
The result: a unit rebooted with WiFi on comes up with the ES toggle
showing active but no connection, and the user has to flip the toggle off
and on to reconnect.

The ES "Enable WiFi" toggle reconnects via `wifictl enable` (rfkill
unblock) + `wifictl connect` (scan + associate to the saved iwd profile,
ApiSystem::enableWifi). Mirror that in 099-networkservices, which already
owns the network domain at boot and runs after network.target. The
connect is backgrounded so the scan does not delay the UI, and wifictl
no-ops when there is no WiFi device.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 18:06:02 -03:00
Douglas Teles 1ba3d6ef92 perf: default CPU to 1.4 GHz, keep 1.5 GHz as an opt-in overclock
Commit e8fd3a6c43 shipped enable.turbo-mode=1 in the default system.cfg,
which makes 095-turbo-mode enable cpufreq/boost at boot, so every unit
runs the 1512 MHz turbo OPP out of the box. That turns the overclock into
the standard clock instead of an opt-in, with the thermal and battery
cost it implies.

Ship enable.turbo-mode=0 so the box defaults to the regular 1416 MHz
ceiling. The 1512 MHz OPP stays available as an overclock: the ES "Enable
CPU Overclock" switch (turbomode enable) flips cpufreq/boost on and pins
the higher OPP, and performance() honors that toggle during gameplay. The
performance governor on game launch is unchanged.

Also correct a stale runemu.sh comment that claimed performance()
unconditionally forces boost on; it follows the user's toggle now.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 17:57:26 -03:00
Douglas Teles 9d89a01d4c soysauce: wire speaker amp in DT and fix joypad controls
soysauce.dts: enable rockchip,use-ext-amplifier + spk-ctl-gpios on the
codec (drives patch 0060), set hp_det to pull-none so insertion is seen,
and bump the analog tuning 200 to 280. The Y3506 sticks only reach ~76%
of the declared range at full deflection, so partial pushes never crossed
the EmulationStation navigation threshold; the higher gain saturates the
axis and keeps menu scrolling responsive (R36S/eeclone pots reach full
range at 200, this is Y3506-specific).

Joypad userspace mapping (the analog/button wiring was never broken in
the kernel, the configs were):
- es_input.cfg: add a GO-Super Gamepad entry modelled on r36s_Gamepad,
  using leftanalog/rightanalog so both sticks navigate the menu. The old
  auto-generated entry mapped them as joystick1/joystick2, and
  joystick2up is hardcoded to volume in ViewController, so the right
  stick changed volume and the left stick did nothing.
- GO-Super Gamepad.cfg (RetroArch): the button indices were the RGB20S
  layout (select=12, start=13, dpad=8-11), which broke in-game Start,
  Select and the exit combo. Correct to the r36s layout (select=8,
  start=9, dpad=13-16, l3=11, r3=12, hotkey=8) and fix the vendor id.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 17:37:19 -03:00
Douglas Teles 36f99fec2b soysauce: speaker output via rk817 external amplifier
The R35S/Y3506 loudspeaker is not wired to the rk817 class-D SPKO; it
hangs off the analog headphone output through an external amp gated by
spk-ctl-gpios. The mainline codec routes "SPK" to the unused class-D, so
the speaker is silent. Add patch 0060 (use_ext_amplifier: route the
speaker mux through the headphone DACs and toggle spk-ctl via a DAPM
event) and the per-device audio playback paths (SPK/HP) so the speaker
plays and headphone switching works.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 17:37:19 -03:00
Douglas Teles 955434eade build: auto-sync overlay-generator base DTBs after each RK3326 build
The archr-website overlay generator bundles the three base DTBs
(r36s/eeclone/soysauce) it mirrors a user's stock DTB against. They have
to track the shipped image or every generated overlay anchors against
the wrong node structure (this had drifted: eeclone was off by 901 lines,
missing the emmc-disable + uart5 + tsadc changes).

Add scripts/repo/sync-site-bases (host-side, idempotent, non-fatal) and
call it from the Makefile after a successful docker-RK3326 build. It only
copies the files into the sibling archr-website checkout; review, commit
and redeploy of the site stay manual.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-26 11:08:26 -03:00
Douglas Teles 89ce198105 es-menu: openSystemEmulatorSettings saves emulator/core to SystemConf
The save func wrote Settings ".emulator"/".core", but SystemData::getEmulator
/getCore read them from SystemConf on non-Windows builds (and
popSystemConfigurationGui saves to SystemConf), so on Linux/ArchR the choice
was written where nothing reads it and the game launched with the default.
Match the readers' WIN32/else split. (Item is gated off on ARCHR today, but
this is a genuine cross-platform bug, not platform dead code.)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 23:37:23 -03:00
Douglas Teles 5a8efc0e78 remove the dead analog-stick LED feature end to end
The "ANALOG STICKS LED COLOR" feature controlled RGB LEDs that no
ArchR-supported device has (only the unsupported R36S Ultra does), gated by
DEVICE_ANALOG_STICKS_LED_CONTROL which no device sets, backed by a dispatcher
that execs a per-device binary nothing ships -> a guaranteed no-op everywhere.

- ES (patches/0003): remove the menu entry, openAnalogSticksLedControls() +
  its declaration + include, the two CMakeLists refs, and the
  GuiAnalogSticksLedControls class.
- system-utils: drop the analog_sticks_ledcontrol dispatcher script + install.
- quirks 999-export: drop DEVICE_ANALOG_STICKS_LED_CONTROL.

If R36S Ultra support is ever added, this comes back with a real, hardware-
backed backend developed against the device.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 23:24:47 -03:00
Douglas Teles 4abec79f22 es-menu: drop dead VIDEO PREVIEWS / VRR toggles, warn on overlay-reset reboot
From the ES menu audit:
- SHOW VIDEO PREVIEWS (UI) toggled Settings "EnableVideoPreviews", consumed
  nowhere. Dead toggle removed.
- VARIABLE REFRESH RATE (Latency) toggled <config>.vrr_runloop_enable, read by
  no launch script and meaningless on the fixed RK3326 panel. Dead toggle
  removed.
- RESET OVERLAYS / FULLY RESET RETROARCH reboot the device (factoryreset
  overlays -> systemctl reboot) without warning; their confirmation text now
  says "THE DEVICE WILL REBOOT."

Second patch under this package's patches/. Pending validation: takes effect
after the ES package is rebuilt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 23:10:41 -03:00
Douglas Teles d65cb345bf emustation: speed up "Restart EmulationStation"
Reported as working but very slow (long black screen). Two OS-side
contributors cut, the rest (ES gamelist re-scan) is inherent:

- es_settings (ExecStartPre, runs on every ES start) unconditionally ran
  `systemctl restart tz-data.service` synchronously, blocking the relaunch.
  Only restart it when the timezone actually changed.
- emustation.service RestartSec was 2s of dead time before the relaunch.
  Drop to 1s; StartLimitIntervalSec/StartLimitBurst already guard crash-loops.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 23:06:48 -03:00
Douglas Teles 4c0e295db2 es-menu: wire up AUTO FRAME DELAY and ship wg-quick for WIREGUARD VPN
Two ES menu items that wrote settings nothing consumed / called a missing
binary, found in the menu audit:

- AUTO FRAME DELAY (Latency menu) persisted `<config>.video_frame_delay_auto`
  to system.cfg, but setsettings.sh never translated it into retroarch.cfg,
  so the toggle did nothing. Add set_frame_delay(): ON/OFF -> RetroArch
  `video_frame_delay_auto = true/false`, AUTO leaves the cfg default.

- WIREGUARD VPN toggle runs `wg-quick up/down`, but the wireguard-tools
  package only installed `wg`, so every toggle silently failed. wg-quick is
  the upstream bash helper (src/wg-quick/linux.bash); install it. Runtime
  deps (bash, ip, wg, iptables) are all present.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 23:06:48 -03:00
Douglas Teles f152192961 emulationstation: navigation sounds toggle takes effect without reboot
A user reported (and it reproduces on hardware) that turning "ENABLE
NAVIGATION SOUNDS" on in Sound Settings does nothing until the device is
rebooted.

Root cause: Sound::init() loaded the WAV sample only when EnableSounds was
already true:

    if (!Settings::getInstance()->getBool("EnableSounds"))
        return;
    mSampleData = Mix_LoadWAV(...);

So when the frontend starts with sounds disabled, every Sound keeps a null
sample; flipping the menu switch only writes the setting and never reloads
the samples, so play() bails on the null sample. Only the next boot re-runs
init() with the setting true and finally loads them.

Sound::play() already checks the live EnableSounds value, so the init-time
gate is redundant for correctness and harmful for runtime toggling. Drop it
(new patch, first under this package's patches/) so samples always load and
the toggle works immediately, both directions, no reboot. Memory cost is a
handful of small navigation WAVs.

Pending validation: takes effect after the ES package is rebuilt.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 22:47:54 -03:00
Douglas Teles 3d1ad6e278 fix four minor gaps: rtl8188eus udev rule, bfq scope, hostname, tsadc
Found during the live multi-device SSH sweep; none break a single device but
each is a real defect:

- linux-drivers/RTL8188EUS 99-rtl8188eus.rules: the RUN line used single `$`
  for its shell vars, which udev parses as its own specifier ("invalid
  substitution type") and rejects the whole rule, so the rtl8xxxu->8188eu
  rebind never ran (the dongle stayed on the better driver only by probe-order
  luck). Double them to `$$`.

- linux 10-bfq-sched.rules: `KERNEL=="mmcblk[0-9]*"` matched partitions too,
  whose queue/* knobs do not exist, spamming the boot log with ~15 ENOENT
  write failures. Gate on SUBSYSTEM=="block", DEVTYPE=="disk".

- hostname: system.cfg shipped `system.hostname=@DEVICENAME@` -> "RK3326" (the
  SoC name, identical on every unit), so two ArchR consoles on one LAN collide
  on NetBIOS/mDNS registration (nmbd "Failed to register my name"). Set the
  base name to "archr" and append a short per-device machine-id suffix in
  network-base-setup so each device is unique.

- tsadc: r3xs.dtsi and eeclone.dts enabled tsadc without
  rockchip,hw-tshut-mode/-polarity, so the driver logged "Missing tshut ...
  using default" on every boot. Spell out the defaults (CRU reset, active-low);
  behaviour unchanged. DTS compiles clean (eeclone + soysauce).

The "GO-Super Gamepad" joypad name on the Soysauce was investigated and is
intentional (soysauce.dts sets joypad-name with a matching retroarch config),
so it is left as-is.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 22:10:57 -03:00
Douglas Teles 3d18661bf8 pacman: seed the installed (local) db so pacman -Syu upgrades the base
The image rootfs is a squashfs, not a pacman install, so /var/lib/pacman
(-> /storage/.pacman/db) ships empty: on every device `pacman -Q` returns 0
and `pacman -Qu` finds nothing, so archr-update / `pacman -Syu` reports "No
updates available" even when the repo carries newer base packages. The
headline 2.0 update path therefore only ever installed user addons, never
upgraded the base system (confirmed live: local/ holds only ALPM_DB_VERSION).

Fix in two self-contained parts (no image-build wiring, so the seed always
matches the build that produced it):

- gen-pacman-repo: after building the sync db, register every just-built
  package as installed (`pacman -U --dbonly`, files already in the squashfs)
  and publish the resulting local/ tree as <repo>-localdb.tar.gz alongside
  the packages.
- autostart/004-seed-pacmandb: on first boot, if the local db is still empty
  (only ALPM_DB_VERSION) and the network is up, pull <repo>-localdb.tar.gz
  from the configured release channel and extract it into
  /storage/.pacman/db. Idempotent and skipped once the db is populated, so a
  user's own pacman activity is never clobbered.

PENDING VALIDATION: needs a full build + repo publish to confirm the seed is
produced and that `pacman -Syu` then sees base upgrades. Best-effort on the
generator side (logs a warning rather than failing the repo build).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 22:04:29 -03:00
Douglas Teles 6a5781e4a4 RK3326: fix eeclone boot noise (phantom eMMC + uart5 CTS conflict)
The R36S Clone's standalone DTB diverged from the shared r3xs.dtsi the
Original/Soysauce use, producing two real boot-time errors (confirmed by a
dmesg diff against the Original, which boots clean):

- &emmc was status=okay + non-removable, but the Clone board has no eMMC
  chip. The controller retried an absent card forever ("Timeout sending
  command", "Failed to initialize a non-removable card"), wasting boot time.
  Disable it; the OS boots from &sdmmc.
- &uart5 (console, ttyS2) inherited the px30 default pinctrl with uart5_cts
  on gpio3 RK_PA3, already claimed on this board, so the kernel reverted the
  whole pin group ("Error applying setting, reverse things back") and could
  leave even TX/RX unapplied. Mux xfer-only (a console needs no hardware flow
  control), matching how the Original wires uart2.

DTS compiles clean (cpp + dtc).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 21:22:10 -03:00
Douglas Teles 99a5ecb48a quirks: add temp-sensor configs for R36S Clone and Soysauce
The quirks loader matches /usr/lib/autostart/quirks/devices/<dir> against the
exact /proc/device-tree/model string. The Clone (model "R36S Clone") and the
Soysauce (model "Game Console R36S Soysauce") had no matching folder, so no
device_config was sourced and DEVICE_TEMP_SENSOR stayed unset: System
Information showed no CPU/GPU temperature, while the Original
("Game Console R36S") did. The DTBs and tsadc are identical and fine on all
three (thermal_zone0/1 read live), so this was purely a missing per-device
quirk, not a devicetree gap.

Add minimal device_config folders wiring thermal_zone0 (CPU) and
thermal_zone1 (GPU). Audio/LED are left on the working defaults. The orphaned
"Generic EE clone" folder (no DTS uses that model) is left as-is rather than
renamed onto "R36S Clone", since its dormant 002-generate_dtbo quirk would
re-introduce in-image DTBO generation that was intentionally moved to the
website generator.

Validated on a live Soysauce: archr-info now reports CPU/GPU temperature.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-25 21:10:40 -03:00
Douglas Teles e57e72e5fb debug: document ltrace build-test failure on the maintained fork
Verifying the last PortMaster_CFW.md nice-to-have: build-tested the
maintained ltrace fork (gitlab.com/cespedes/ltrace HEAD) on the ArchR
aarch64 toolchain. It fails at autoreconf (configure.ac points at a
config/m4 macro dir that isn't in the checkout, aclocal aborts),
re-confirming the pre-existing exclusion rationale. ltrace stays out;
gdb and perf trace cover symbol-level tracing. This is the only guide
nice-to-have intentionally absent.
2026-06-24 20:47:35 -03:00
Douglas Teles b92d67b9dd Close PortMaster_CFW.md guide gaps: sudo, vmstat, libjpeg.so.62, perf
Verification of the running R36S against docs/PortMaster_CFW.md flagged
a few required/recommended/nice-to-have items missing. Closes four:

sudo (REQUIRED, section 2): ArchR runs everything as root so PortMaster
sets ESUDO="" and "$ESUDO" ports work, but the guide lists sudo/doas as
required and the live port log printed "No sudo present." Ships a
/usr/bin/sudo shim (archr package, ROCKNIX/dArkOS pattern) that strips
sudo's own options and execs the command as the already-root user.

libjpeg.so.62 (commonly expected, section 4): the base libjpeg-turbo is
built WITH_JPEG8=ON (SONAME libjpeg.so.8); ports compiled against
standard libjpeg-turbo expect libjpeg.so.62. New compat-libjpeg62
package builds the same 3.0.1 source WITH_JPEG8=OFF into /usr/lib/compat
and is pulled in via portmaster-compat-libs; archr-compat-symlinks then
exposes it in the default path.

vmstat (nice-to-have, section 10): procps-ng shipped only free/top/ps;
add src/vmstat to the build + install so memory-pressure monitoring is
available.

perf_event_paranoid (nice-to-have, section 10): ship
sysctl.d/90-archr-perf.conf setting kernel.perf_event_paranoid=1 so perf
can sample userspace CPU events (default 2 blocks non-root profiling).

(ltrace, the remaining nice-to-have, is being build-tested separately;
virtual/debug already documents why upstream 0.7.3 was excluded.)
2026-06-24 20:45:28 -03:00
Douglas Teles 1175e2b5a9 archr: symlink PortMaster compat libs into the default linker path
PortMaster runtimes failed to launch: love_11.5's love.aarch64 died with
"error while loading shared libraries: libtheoradec.so.1: cannot open
shared object file" (caught live over SSH while a port was launched).

Root cause: ArchR keeps the ~50 PortMaster compat libraries (older
Debian-11-era SONAMEs: libtheoradec.so.1, libavcodec.so.58,
libwebp.so.6, libx264.so.160, etc.) under /usr/lib/compat to stay out of
the base system, and the image ships NO ld.so.cache. glibc's dynamic
linker therefore only searches the hardcoded /usr/lib + /lib plus
LD_LIBRARY_PATH, so /usr/lib/compat is invisible to anything that does
not explicitly prepend it. control.txt does set
LD_LIBRARY_PATH=/usr/lib/compat, but the per-runtime invocation
overwrites it, dropping compat for binaries like love.aarch64.

docs/PortMaster_CFW.md is explicit on the fix: "add these older .so
symlinks alongside [the newer versions]" and "Keep [libtheoradec] at
standard versions." So we expose the compat SONAMEs in the default path.

New archr-compat-symlinks script + archr-compat-libs.service oneshot
(ordered Before=archr-autostart so it runs before any port launches):
walks /usr/lib/compat (and /usr/lib32/compat) and symlinks each SONAME
into /usr/lib, but ONLY when the base system does not already provide
that exact name, so real libraries (libogg.so.0, libvorbis.so.0, ...)
are never shadowed. Idempotent via the `[ -e ]` guard; the writable
ext4 rootfs keeps the links so later boots are no-ops.

Verified live on the R36S: 46 compat-only SONAMEs linked into /usr/lib,
libtheoradec.so.1 now resolvable, libogg.so.0 left untouched (still the
real /usr/lib/libogg.so.0.8.6).
2026-06-24 20:28:04 -03:00
Douglas Teles a3d131f0d5 init: resolve LABEL=/UUID= via util-linux blkid over /proc/partitions
Root cause of the persistent "Unable to find LABEL=ARCHR, powering
off" after the issue #34 boot.ini LABEL= migration: busybox's built-in
volume_id CANNOT read FAT32 labels. Proven under qemu-aarch64 against
the real image partitions:

  util-linux blkid  FAT32 -> LABEL="ARCHR"      ext4 -> "ARCHR_ROOT"
  busybox  blkid    FAT32 -> TYPE="vfat" only   ext4 -> "ARCHR_ROOT"

So `busybox mount LABEL=` and `busybox findfs LABEL=` both fail for the
FAT /flash partition (mounted first), while the ext4 root would have
resolved. The previous fallback used util-linux blkid but only scanned
a hardcoded /dev/mmcblk0p[1-3] /dev/mmcblk1p[1-3] list, so it broke
whenever the boot SD enumerated outside mmcblk0/1 or the partition
nodes weren't created yet.

mount_common's LABEL=/UUID= branch now:
  - resolves exclusively through util-linux /usr/sbin/blkid (reads both
    FAT32 and ext4 labels),
  - walks every entry in /proc/partitions instead of a fixed device
    list, so it is independent of the mmcblkN enumeration order
    (exactly what issue #34's 2-SD reordering needs),
  - mknod's the /dev node from the /proc/partitions major:minor when
    mdev hasn't created it yet, removing the dependency on mdev timing
    and on udev (absent in the initramfs),
  - keeps busybox findfs (works for ext*) and /dev/disk/by-label as
    last-resort fallbacks.

Verified: syntax (sh -n) clean, the parse+blkid logic resolves
mmcblk1p1 in a simulated /proc/partitions run, and the rebuilt image's
embedded initramfs carries the new resolver.
2026-06-24 19:36:06 -03:00
Douglas Teles f376a9f9b5 init: fix LABEL=ARCHR boot failure + bump RTL8188EUS to current HEAD
The "Unable to find LABEL=ARCHR, powering off" wall on the freshly
flashed image traced back to a latent bug in the initramfs busybox
packaging that the boot.ini LABEL= migration (issue #34) made
deterministic.

busybox/package.mk
  The mount, umount and findfs applets are compiled into the init
  busybox (CONFIG_MOUNT/UMOUNT/FINDFS in config/busybox-init.conf),
  but no symlinks were ever installed for them. mount_common() in the
  init script calls `mount LABEL=... /flash` and
  `findfs LABEL=...` by bare name; without symlinks the shell can't
  find either command and the 15 retry loops silently exhaust to the
  power-off message. This bug also affected the previous
  /dev/mmcblk${devnum}p1 path: the string was never reaching the
  syscall through busybox.

  Adds:
    ln -sf /usr/bin/busybox ${INSTALL}/usr/bin/mount
    ln -sf /usr/bin/busybox ${INSTALL}/usr/bin/umount
    ln -sf /usr/bin/busybox ${INSTALL}/usr/sbin/findfs

  /usr/sbin/blkid is already shipped by util-linux as a real binary,
  no symlink needed for it.

busybox/scripts/init
  Exports PATH=/usr/sbin:/usr/bin:/sbin:/bin at the top so the bare
  blkid/findfs/mount calls in mount_common() resolve against
  /usr/sbin/blkid (util-linux real binary) and the new busybox
  symlinks. Without this, the busybox sh default PATH on aarch64
  built images is too narrow to find /usr/sbin tools.

RTL8188EUS/package.mk
  PKG_VERSION bumped from ec90af2b... (no longer on the remote) to
  af3bf004458f76b7aec33e9ba552cd382ed1f5c3, the current HEAD of the
  default v5.3.9 branch on aircrack-ng/rtl8188eus. The previous SHA
  failed at `get` time: `fatal: remote error: upload-pack: not our
  ref ec90af2b...`, blocking the whole image build.
2026-06-24 17:47:58 -03:00
Douglas Teles 33014076b4 Stop building panel overlays at image-build time
Strategic continuation of the flasher refactor: the SO no longer
generates or ships pre-built panel DTBOs. Users generate their own
mipi-panel.dtbo at https://arch-r.io/overlay-generator/ and drop it
into /flash/overlays/.

- config/overlays/README.txt rewritten with the same instruction in
  6 languages (pt-BR, en, fr, es, zh, ru), one per line.
- u-boot/package.mk: removed the mipi-generator invocation and the
  per-SUBDEVICE overlays_{original,clone,soysauce} install blocks.
  Only the generic overlays/ dir (README) is shipped under
  /usr/share/bootloader/.
- bootloader/mkimage: removed the RK3326-specific overlays_${SUBDEVICE}
  and overlays_soysauce branches; the generic overlays/ copy at the
  end of mkimage_dtb now covers RK3326 too.
- Deleted config/mipi-generator/ (generator.sh + archr-dtbo.py) and
  config/archr-dts/ (vendor DTBs that were only consumed by the
  generator).

Net: -8503 LOC + ~120 binary DTBs removed from the tree.
2026-06-24 12:57:02 -03:00