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-RK3326Saí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
| Comando | O que faz |
|---|---|
make docker-RK3326 | Build completo em Docker, as duas variantes |
make RK3326 | Build nativo (toolchain no host) |
make docker-image-build | (Re)build do container de build Docker |
make clean | rm -rf build.* target |
make distclean | clean + 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-RK3326Os 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.cfgApó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 logsEdições comuns
Ajustar uma opção do kernel:
projects/ArchR/devices/RK3326/linux/linux.aarch64.confDepois 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.dtsiAdicionar um emulador padrão:
projects/ArchR/packages/virtual/emulators/package.mk
projects/ArchR/packages/emulators/standalone/<emu-sa>/scripts/start_<emu>.shEditar o caminho de trace do autostart:
projects/ArchR/packages/sysutils/autostart/sources/autostartValidando 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/