6.5 KiB
OreBolt OS v1.4 -- Quickstart
The fastest path from a fresh Arch Linux host to a deployed H2. For deep dives: PREREQUISITES.md (host setup), HEADERS.md (kernel headers), LICENSE.md (AGPL). Total wall time: ~30 min if toolchain + kernel tree are pre-staged, ~75 min if building the toolchain from source.
0. What you need before you start
| Item | Where to get it | One-liner |
|---|---|---|
| Arch Linux host | any x86_64 Arch install | pacman -Syu |
mipsel-linux-musl toolchain |
Rockbox prebuilt tarball (recommended) | see step 2 |
| FiiO M3K GPL kernel tree | community mirror or FiiO's GPL download | see step 3 |
| MicroSD card (>= 2 GB) | any | -- |
Not on Arch? Stop. The build pipeline is validated against Arch only. Other distros will require porting effort. See PREREQUISITES.md §1.
1. Host deps (one shot, ~2 min)
sudo pacman -Syu --needed base-devel git make python3 rsync \
dosfstools e2fsprogs parted file
2. Cross toolchain (~5 min if prebuilt, ~45 min if from source)
# Option A (recommended): Rockbox prebuilt
sudo mkdir -p /opt/mipsel-linux-musl
sudo tar xzf rockbox-mips-toolchain-*.tar.gz \
-C /opt/mipsel-linux-musl --strip-components=1
# Option B: musl.cc fallback (less tuned, but works)
# wget https://musl.cc/mipsel-linux-musl-cross.tgz -O - | \
# sudo tar xz -C /opt/mipsel-linux-musl --strip-components=1
export PATH="/opt/mipsel-linux-musl/bin:$PATH"
echo 'export PATH="/opt/mipsel-linux-musl/bin:$PATH"' >> ~/.bashrc
# Verify
mipsel-linux-musl-gcc -dumpmachine # must print: mipsel-linux-musl
3. Kernel headers: FiiO M3K GPL tree (~3 min)
The FiiO M3K uses the same Ingenic X1000E SoC as the H2, so its GPL kernel tree is the canonical headers source -- no reverse-engineering from Rockbox needed.
sudo mkdir -p /opt/fiio-m3k-linux
# Either clone a community mirror, or extract FiiO's official GPL tarball:
sudo tar xzf fiio_m3k_kernel_*.tar.gz \
-C /opt/fiio-m3k-linux --strip-components=1
export KERNEL_HEADERS=/opt/fiio-m3k-linux
echo 'export KERNEL_HEADERS=/opt/fiio-m3k-linux' >> ~/.bashrc
# Verify
make headers-check
# Expected: [OK] kernel headers root: /opt/fiio-m3k-linux
Header missing from FiiO tree? Fall back to the Ingenic XBurst BSP. See HEADERS.md §3.
4. Clone + build (~10 min)
git clone <your-repo-url> h2-workspace
cd h2-workspace
./build.sh
What build.sh does, in one line each:
- Phase 0-1: verifies host deps + toolchain + kernel headers
- Phase 2: workspace integrity check (16 modules + headers + scripts)
- Phase 3-4: creates
overlay/tree, fixes permissions - Phase 5: clones LVGL v8.3.11, builds
liblvgl.so,h2_test, 16 modules - Phase 6: builds
liborebolt.a, regenerates 150-payload HID matrix - Phase 7: verifies all artifacts are MIPS LE ELF + bitchat AGPL marker
- Phase 8: (only with
--deploy) copies everything to SD card
5. Success looks like
[OK] OREBOLT OS v1.4 BUILD COMPLETE
With these artifacts on disk:
| Artifact | Path | What it is |
|---|---|---|
liblvgl.so |
overlay/usr/lib/ |
LVGL v8.3.11 shared lib (MIT) |
h2_test |
overlay/usr/bin/ |
Master launcher (registers 16 modules) |
emulator_input_mapper |
overlay/usr/bin/ |
Input mapper daemon |
17 *.mod files |
overlay/apps/ |
16 GPL modules + 1 AGPL bitchat |
liborebolt.a |
./ |
Hardware library static archive |
150 .dd payloads |
overlay/data/payloads/{linux,macos,windows}/ |
HID macro matrix |
Verify a binary is actually MIPS:
file overlay/usr/bin/h2_test
# Expected: ELF 32-bit LSB executable, MIPS, MIPS32 version 1 ...
6. Deploy to SD card (~3 min)
# Identify the SD card (be SURE -- /dev/sda is usually your system disk!)
lsblk -o NAME,SIZE,TYPE,MOUNTPOINT
# Format (single-partition FAT32, simplest layout)
sudo umount /dev/sdX1 2>/dev/null || true
sudo parted /dev/sdX --script mklabel msdos
sudo parted /dev/sdX --script mkpart primary fat32 1MiB 100%
sudo parted /dev/sdX --script set 1 boot on
sudo mkfs.vfat -F 32 -n OREBOLT /dev/sdX1
# Mount and deploy
sudo mkdir -p /mnt/h2-sd
sudo mount /dev/sdX1 /mnt/h2-sd
SD_CARD_MOUNT=/mnt/h2-sd ./build.sh --deploy
sync && sudo umount /mnt/h2-sd && sudo eject /dev/sdX
Pop the card into the H2, power on, and the LVGL UI should boot with
all 16 modules registered. Init order: S98emulator-input ->
S99broker (starts h2_test) -> bt_input_daemon.sh (BLE).
Common failure modes (one-line fixes)
| Symptom | Fix |
|---|---|
[-] Missing toolchain binaries: mipsel-linux-musl-gcc |
export PATH="/opt/mipsel-linux-musl/bin:$PATH" |
[-] CRITICAL: KERNEL_HEADERS not found at /opt/fiio-m3k-linux |
install the FiiO M3K GPL tree (step 3 above) |
[-] BAD: h2_test -- ELF 64-bit LSB executable, x86-64 |
./build.sh --clean && ./build.sh (host GCC leaked in) |
error: cannot find -lm (soft-float vs hard-float) |
switch from musl.cc to Rockbox toolchain (PREREQUISITES §2.1) |
fatal: unable to access 'https://github.com/lvgl/lvgl.git' |
pre-clone LVGL manually (PREREQUISITES §8) |
[-] bitchat.mod missing AGPL_BITCHAT marker |
should not happen via ./build.sh; if building manually, add -DAGPL_BITCHAT to CFLAGS |
Before you deploy bitchat (AGPL obligation)
If you ship a modified bitchat module that other operators will interact with over the mesh, AGPL v3 §13 requires you to make your modified source available. Two things to do before deploying:
# 1. Replace the placeholder URL with your real source repo / Written Offer
sed -i 's|https://example.invalid/orebolt-bitchat-src|https://your-domain/orebolt-os-bitchat-src|' \
src/modules/mod_bitchat_mesh.c
# 2. Replace the AGPL license stub with the full canonical text
curl -o licenses/AGPL-3.0.txt https://www.gnu.org/licenses/agpl-3.0.txt
# 3. Rebuild
./build.sh --clean && ./build.sh
See LICENSE.md §4 for the full compliance checklist.
What to read next
| When you want to... | Read |
|---|---|
| Understand the module layout and boot sequence | ARCHITECTURE.md |
| Diagnose a tricky toolchain or headers issue | PREREQUISITES.md §8 |
| Understand why bitchat is AGPL and the rest is GPL | LICENSE.md |
| See the full v1.3 -> v1.4 diff | CHANGELOG.md |
| Add a new module | master Makefile header comment, steps 1-5 |