sudo apt-get install git openssl libssl-dev libudev-dev libasound2-dev libxkbcommon-dev libinput-dev libgbm-dev
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
git clone https://github.com/jwest/woodaudiosudo apt-get install plymouth plymouth-themes
sudo nano /boot/firmware/cmdline.txt
append to file: quiet splash plymouth.ignore-serial-consoles logo.nologotce-load -wi libxkbcommon.tcz tce-load -wi udev257-lib.tcz tce-load -wi libinput.tcz tce-load -wi libdrm.tcz tce-load -wi expat2.tcz
wpa_supplicant.conf
/boot/firmware/config.txt:
dtoverlay=vc4-kms-v3d,noaudio
dtoverlay=vc4-kms-dsi-waveshare-panel,4_0_inch,rotation=90
dtoverlay=hifiberry-digi-pro
hifiberry configuration: https://www.hifiberry.com/docs/software/configuring-linux-3-18-x/
waveshare 4inch lcd https://www.waveshare.com/wiki/4inch_DSI_LCD
sudo apt install sysfsutils
sudo nano /etc/sysfs.confdevices/system/cpu/cpu0/cpufreq/scaling_governor = powersave
devices/system/cpu/cpu1/cpufreq/scaling_governor = powersave
devices/system/cpu/cpu2/cpufreq/scaling_governor = powersave
devices/system/cpu/cpu3/cpufreq/scaling_governor = powersave
sudo systemctl restart sysfsutilsBudowanie natywne na Raspberry Pi jest możliwe, ale bardzo wolne. Zamiast tego można skompilować woodaudio na macOS przy użyciu Dockera — kontener ARM64 działa natywnie na Apple Silicon (M1–M4) bez emulacji x86, co daje szybką kompilację i brak problemów z cross-kompilacją C-zależności.
- Docker Desktop dla macOS (Apple Silicon)
- Ok. 3 GB wolnego miejsca na dysku
# Kompilacja (automatycznie buduje obraz Docker, jeśli brak)
./build.sh build
# Binary: target/release/woodaudio-player| Komenda | Opis |
|---|---|
./build.sh build |
Kompilacja dla aarch64 (auto-build obrazu jeśli brak) |
./build.sh dist |
Kompilacja + pakowanie dist/ z bibliotekami .so (dla piCore) |
./build.sh image |
Budowa/przebudowa obrazu Docker |
./build.sh deploy-rpios |
Kompilacja + scp binary + instalacja zależności na Raspberry Pi OS |
./build.sh deploy-picore |
Kompilacja + dist + scp dist/ na piCore |
./build.sh clean |
Usunięcie target/ i dist/ |
./build.sh help |
Pomoc |
# Użyj niestandardowych feature'ów
./build.sh build --features "gui"
# Przebuduj obraz Dockera (gdy zmienisz zależności)
./build.sh build --rebuild
# Kopiuj binarkę po zbudowaniu
./build.sh build --copy-dest /tmp/woodaudio
# Użyj innego obrazu
./build.sh build --image my-custom-image:latestWszystkie zmienne konfiguracyjne znajdują się na początku build.sh. Można je zmienić bezpośrednio w pliku lub ustawić jako zmienne środowiskowe:
| Zmienna | Domyślna wartość | Opis |
|---|---|---|
IMAGE_NAME |
woodaudio-builder:arm64 |
Nazwa obrazu Docker |
DOCKERFILE |
Dockerfile.arm64 |
Plik Dockerfile |
FEATURES |
gui,gpio |
Feature flags dla cargo |
TARGET |
aarch64-unknown-linux-gnu |
Target kompilacji |
BINARY_NAME |
woodaudio-player |
Nazwa pliku wynikowego |
PI_HOST |
192.168.1.100 |
Adres IP Raspberry Pi |
PI_USER |
pi |
Użytkownik SSH na Pi |
PI_DEST_RPIOS |
/home/pi |
Ścieżka docelowa na Raspberry Pi OS |
PI_DEST_PICORE |
/opt/woodaudio |
Ścieżka docelowa na piCore |
Przykład — deploy na Pi z innym adresem:
PI_HOST=192.168.1.42 ./build.sh deploy-rpios# Krok 1: Skonfiguruj PI_HOST w build.sh (lub zmienna środowiskowa)
# Krok 2: Zbuduj i wdróż jednym poleceniem
./build.sh deploy-rpios
# Skrypt automatycznie:
# 1. Kompiluje binary
# 2. Kopiuje go na Pi przez scp
# 3. Instaluje zależności runtime przez aptBinary wymaga tych bibliotek runtime na Pi:
sudo apt-get install libdrm2 libgbm1 libinput10 libudev1 \
libasound2 libxkbcommon0 libssl3Są domyślnie dostępne w Raspberry Pi OS Bookworm (64-bit).
piCore to minimalistyczna dystrybucja bez menedżera pakietów apt. Zamiast instalować brakujące biblioteki pojedynczo, dostarczamy wszystkie .so razem z binarką.
# Krok 1: Skonfiguruj PI_HOST w build.sh
# Krok 2: Zbuduj, spakuj i wdróż jednym poleceniem
./build.sh deploy-picore
# Skrypt automatycznie:
# 1. Kompiluje binary
# 2. Zbiera wszystkie wymagane .so do dist/libs/
# 3. Tworzy skrypty uruchomieniowe (run.sh, start-woodaudio.sh)
# 4. Kopiuje całość na Pi przez scpKatalog dist/ (generowany przez ./build.sh dist):
dist/
├── woodaudio-player # Binary
├── libs/ # Biblioteki współdzielone .so
│ ├── libgbm.so.1
│ ├── libdrm.so.2
│ ├── libinput.so.10
│ ├── ...
├── run.sh # Uruchomienie (LD_LIBRARY_PATH + własny linker)
└── start-woodaudio.sh # Skrypt startowy do autostartu
Uruchomienie na piCore:
/opt/woodaudio/run.shAutostart — dodaj do /opt/bootlocal.sh lub .profile:
/opt/woodaudio/start-woodaudio.sh &Dockerfile.arm64 bazuje na arm64v8/ubuntu:22.04 — obrazie natywnym dla architektury ARM64. Docker Desktop na Apple Silicon uruchamia maszynę wirtualną ARM64 Linux, więc kontener działa natywnie. Rust kompiluje kod dla aarch64-unknown-linux-gnu, który jest tożsamy z architekturą kontenera.
| Plik | Opis |
|---|---|
build.sh |
Główny skrypt — kompilacja, pakowanie, deploy (all-in-one) |
Dockerfile.arm64 |
Obraz Docker z toolchainem (Ubuntu ARM64) |
Dockerfile.aarch64 |
(Opcjonalny) obraz dla cross-rs na hoście x86_64 Linux |
Cross.toml |
Konfiguracja dla narzędzia cross |
.cargo/config.toml |
Ustawienia linkera dla targetu aarch64 |
dist/ |
Katalog z gotowym do wdrożenia zestawem (generowany przez build.sh dist) |
dist/run.sh |
Wrapper uruchamiający z własnym LD_LIBRARY_PATH |
dist/start-woodaudio.sh |
Skrypt startowy do autostartu |