ARCH R

Build a partir do código-fonte

Build reproduzível em Docker das duas variantes de imagem

O sistema de build do ArchR é totalmente reproduzível: make docker-RK3326 gera as duas variantes de imagem a partir de um checkout limpo, idêntico ao release do GitHub. Sem passos escondidos, sem artefatos de código fechado.


Requisitos

  • Docker (recomendado) ou um ambiente de build Linux nativo
  • ~40 GB de espaço em disco livre (fonte em cache + árvores de build)
  • ~8 GB de RAM recomendado (o build do kernel é o pico)
  • Um host x86_64 (a cross-toolchain tem como alvo aarch64)

Um build nativo leva ~2 h num x86 de 12 núcleos; o Docker adiciona ~5 % de overhead.


Build rápido

git clone https://github.com/archr-linux/Arch-R.git
cd Arch-R

# Apenas na primeira vez: build do ambiente de build Docker
make docker-image-build

# Build das duas variantes de imagem para o R36S
make docker-RK3326

Saída em target/:

ArchR-R36S.aarch64-YYYYMMDD-original.img.gz
ArchR-R36S.aarch64-YYYYMMDD-clone.img.gz
*.sha256                                    # checksums para o flasher
ArchR-R36S.aarch64-YYYYMMDD.tar             # apenas o rootfs (para re-imagem)

Todos os comandos

ComandoO que faz
make docker-RK3326Build completo em Docker, as duas variantes
make RK3326Build nativo (toolchain no host)
make docker-image-build(Re)build do container de build Docker
make cleanrm -rf build.* target
make distcleanclean + apaga os caches de código-fonte

Para outros dispositivos: make docker-RK3588, make docker-S922X, etc. Veja as opções por dispositivo em projects/ArchR/devices/.


Rebuilds incrementais

O sistema de build usa stamps em build.ArchR-RK3326.aarch64/.stamps/<package> para pular pacotes já compilados. Para forçar o rebuild de um pacote específico:

rm -rf build.ArchR-RK3326.aarch64/.stamps/<pkg>
make docker-RK3326

Os mais comuns:

linux             kernel + DTS + módulos
mali-bifrost      módulo kernel libmali
mesa              Mesa Panfrost
retroarch         frontend RetroArch + frame libretro
ppsspp-sa         PPSSPP standalone
flycast-sa        Flycast standalone
archr             scripts / configs / runemu.sh
emulators         geração do es_systems.cfg

Após remover um stamp, make docker-RK3326 reconstrói apenas aquele pacote e regera a imagem.


Layout do projeto

Arch-R/
├── packages/                       receitas de pacote estilo LibreELEC upstream
│   ├── compress/zlib/              (ArchR usa zlib-ng compat, veja PKG_NAME)
│   ├── graphics/mesa/
│   ├── linux/
│   └── ...
├── projects/ArchR/
│   ├── devices/RK3326/             patches, DTS, config de kernel específicos do RK3326
│   │   ├── linux/                  config de kernel + overrides de DTS
│   │   ├── patches/linux/          patches de kernel por versão
│   │   └── options                 vars no nível do device (BOOT_SIZE, ROOT_SIZE...)
│   ├── packages/                   pacotes específicos do ArchR sobre o upstream
│   │   ├── archr/                  scripts/runemu.sh, profile.d/, autostart/
│   │   ├── linux-drivers/mali-bifrost/   patch de kernel do libmali
│   │   ├── graphics/gpudriver/     chave panfrost ↔ libmali
│   │   ├── apps/portmaster/        PortMaster + scripts/start_portmaster.sh
│   │   ├── emulators/standalone/   cfg por dispositivo de PPSSPP/Flycast/melonDS/DraStic
│   │   └── ui/emulationstation/    patches do ES
│   └── options                     vars no nível do projeto
├── distributions/ArchR/
│   ├── options                     vars no nível da distro (BOOT_SIZE=272, ROOT_SIZE=4608...)
│   └── config/
├── config/
│   ├── archr-dts/                  43 revisões de placa × {original/clone/soysauce}
│   └── mipi-generator/             generator.sh + archr-dtbo.py (DTS → DTBO)
├── scripts/
│   ├── build                       driver de build por pacote
│   ├── extract                     extração de tarball
│   ├── image                       wrapper do mkimage
│   └── mkimage                     layout de partição, FAT32 BOOT, ext4 ROOT, ext4 STORAGE
├── tools/
│   ├── bench.sh                    benchmark no dispositivo (PSI, freq, temp)
│   ├── audit-build.sh              auditoria de build no dispositivo
│   └── ...
└── docs/                           docs internos de design / decision logs

Edições comuns

Ajustar uma opção do kernel:

projects/ArchR/devices/RK3326/linux/linux.aarch64.conf

Depois rm -rf build.ArchR-RK3326.aarch64/.stamps/linux && make docker-RK3326.

Ajustar OPP / regulator da CPU:

projects/ArchR/devices/RK3326/patches/linux/000-rk3326-dts.patch
projects/ArchR/devices/RK3326/linux/dts/rockchip/rk3326-gameconsole-r3xs.dtsi

Adicionar um emulador padrão:

projects/ArchR/packages/virtual/emulators/package.mk
projects/ArchR/packages/emulators/standalone/<emu-sa>/scripts/start_<emu>.sh

Editar o caminho de trace do autostart:

projects/ArchR/packages/sysutils/autostart/sources/autostart

Validando um build

tools/audit-build.sh roda no dispositivo e verifica:

bash /flash/audit-build.sh

...que nenhuma flag de debug do kernel passou, que todos os cores libretro estão stripados, que nenhum símbolo de sanitizer vazou pros binários. Use no CI.

tools/bench.sh coleta PSI / freq / temp / vmstat / dmesg numa janela de 60 s:

bash /flash/bench.sh psp 60
# inicie um jogo de PSP em um terminal / TTY separado
# os resultados ficam em /storage/bench-results/<timestamp>-psp/

On this page