142 lines
5.4 KiB
Markdown
142 lines
5.4 KiB
Markdown
# Applications and Services
|
|
|
|
## Game Entry Points
|
|
|
|
Top-level symlinks:
|
|
|
|
| Path | Target |
|
|
| --- | --- |
|
|
| `/games/game` | `pokemon_pro/game` |
|
|
| `/games/conagent` | `pokemon_pro/conagent` |
|
|
| `/games/data` | `pokemon_pro/data` |
|
|
| `/games/spike3` | `pokemon_pro/spike3` |
|
|
|
|
Main executables:
|
|
|
|
| Path | Type | Size |
|
|
| --- | --- | ---: |
|
|
| `/games/pokemon_pro/game` | Stripped AArch64 PIE, dynamically linked | 52,829,400 |
|
|
| `/games/pokemon_pro/conagent` | Stripped AArch64 PIE, dynamically linked | 272,432 |
|
|
| `/games/pokemon_pro/spike3/bin/dprint` | Stripped AArch64 PIE, dynamically linked | see artifact index |
|
|
| `/games/pokemon_pro/spike3/bin/boot_display` | Stripped AArch64 PIE, dynamically linked | see artifact index |
|
|
| `/games/pokemon_pro/spike3/bin/bttest` | Stripped AArch64 PIE, dynamically linked | see artifact index |
|
|
| `/games/pokemon_pro/spike3/spike_menu/game` | Stripped AArch64 PIE, dynamically linked | 4,645,784 |
|
|
| `/games/pokemon_pro/spike3/netbridge/netbridge.elf` | 32-bit ARM statically linked ELF with debug info, not stripped | see artifact index |
|
|
|
|
Large payloads:
|
|
|
|
- `/games/pokemon_pro/image.bin`: 1,154,884,359 bytes.
|
|
- `/games/pokemon_pro/assets/godot/main.pck`: 256,326,416 bytes.
|
|
- `/games/pokemon_pro/spike3/spike_menu/image.bin`: 14,959,521 bytes.
|
|
|
|
Asset extraction status:
|
|
|
|
- `/games/pokemon_pro/assets/godot/main.pck` has been statically extracted into workspace-local `assets/`; see `godot-and-radium-assets.md`.
|
|
- `/games/pokemon_pro/image.bin` did not expose standard media signatures in first-pass static scans and remains a Radium/runtime image reverse-engineering target.
|
|
|
|
## Game Data
|
|
|
|
Release-note files:
|
|
|
|
- `/games/pokemon_pro/data/pro_release_notes.txt`
|
|
- `/games/pokemon_pro/data/premium_release_notes.txt`
|
|
|
|
Version hints:
|
|
|
|
- `/games/spk/index/pokemon_pro.sidx -> pokemon_pro-0_83_0.sidx`
|
|
- `/games/pokemon_pro/data/*_release_notes.txt` match the Pokemon Pro/Premium title.
|
|
|
|
Bundled node firmware images:
|
|
|
|
- `coil4node-LPC1112_101-1_33_0.hex`
|
|
- `pinnode-LPC1112_101-1_33_0.hex`
|
|
- `hdmi_ws2812node-LPC1313-1_33_0.hex`
|
|
- `tmc5041node-LPC1313-1_33_0.hex`
|
|
- `pinnode-LPC1313-1_33_0.hex`
|
|
- `lcdnode-LPC1113_302-1_33_0.hex`
|
|
- `coil4_lednode-LPC1313-1_33_0.hex`
|
|
- `coil4node-LPC1313-1_33_0.hex`
|
|
- `magsensornode-LPC812-1_33_0.hex`
|
|
- `hdminode-LPC1313-1_33_0.hex`
|
|
- `ws2812pinnode-LPC1313-1_33_0.hex`
|
|
- `node4-LPC1124_303-1_33_0.hex`
|
|
- `node4-LPC812-1_33_0.hex`
|
|
- `ws2812node-LPC1313-1_33_0.hex`
|
|
- `pinnode-LPC1112_201-1_33_0.hex`
|
|
- `coil4node-LPC1112_201-1_33_0.hex`
|
|
- `tmc2590node-LPC1313-1_33_0.hex`
|
|
|
|
These are likely firmware payloads for distributed SPIKE node boards.
|
|
|
|
## Monitors
|
|
|
|
`/etc/init.d/S95game` starts these in the background when `/games/game` exists:
|
|
|
|
- `/etc/init.d/reboot_monitor`
|
|
- `/etc/init.d/conagent_monitor`
|
|
- `/etc/init.d/game_monitor`
|
|
- `/etc/init.d/update`
|
|
|
|
`game_monitor`:
|
|
|
|
- Starts `/games/game`.
|
|
- Interprets game exit codes:
|
|
- `0`: restart requested.
|
|
- `1`: reboot requested.
|
|
- `2`: exit requested, development-only control-C path.
|
|
- `3`: power loss.
|
|
- `4`: fatal error.
|
|
- `5`: dispatch timeout.
|
|
- `6`: deep sleep.
|
|
- `>=128`: uncaught signal, encoded as `exit_reason - 128`.
|
|
- On power loss or deep sleep, syncs filesystems, remounts `/data` and `/connectivity` read-only, and hangs waiting for power removal.
|
|
- On reboot request, syncs, remounts persistent filesystems read-only, calls `/sbin/reboot -f`, and hangs.
|
|
- On repeated fatal/non-normal exits, tracks restart sentinels under `/tmp/game_restarts`.
|
|
- After more than 4 restart sentinels, clears selected `/connectivity` caches. If cache was already cleared and restart pressure continues, it reboots.
|
|
|
|
`conagent_monitor`:
|
|
|
|
- Loops forever.
|
|
- Starts `/games/conagent`.
|
|
- Sleeps one second and restarts it whenever it exits.
|
|
|
|
`reboot_monitor`:
|
|
|
|
- Tracks machine reboots under `/connectivity/machine_reboots`.
|
|
- If more than 9 reboot markers exist before the system reaches 5 minutes uptime, it clears selected `/connectivity` caches.
|
|
- Creates a reboot marker, sleeps 300 seconds, then clears reboot markers.
|
|
|
|
## Display Utilities
|
|
|
|
`/etc/init.d/shared` resolves:
|
|
|
|
- `BOOT_DISPLAY=/games/spike3/bin/boot_display`, fallback `/usr/local/spike/boot_display`.
|
|
- `DPRINT=/games/spike3/bin/dprint`, fallback `/usr/local/spike/dprint`.
|
|
|
|
`boot_display` is launched early by `S12lvds_panel`; `dprint` is used by startup/update scripts to print messages to the boot display.
|
|
|
|
## Bluetooth Support Scripts
|
|
|
|
Bundled scripts under `/games/pokemon_pro/spike3/scripts`:
|
|
|
|
- `find_trusted_devices.sh`: walks `/var/lib/bluetooth` and prints device directories whose `info` contains `Trusted=true`.
|
|
- `find_untrusted_devices.sh`: walks `/var/lib/bluetooth` and prints devices missing that trusted marker.
|
|
- `copy_newest_corefile_to_usb.sh`: archives the newest core file from `/connectivity/dump/cores` into an encrypted 7z file and copies it to `/media` after mounting `/dev/sda1` or `/dev/sda`.
|
|
|
|
Sensitive note: `copy_newest_corefile_to_usb.sh` reads a passphrase from `/games/spike3/scripts/corefile_passphrase.txt`; the value is not copied into this wiki.
|
|
|
|
## Netbridge / Debug Hardware
|
|
|
|
`/games/pokemon_pro/spike3/netbridge` contains:
|
|
|
|
- `netbridge.elf`: 32-bit ARM static executable with debug info, not stripped.
|
|
- `rp2040.cfg`: OpenOCD RP2040 target config.
|
|
- `spike3-swd.cfg`: OpenOCD config using `bcm2835gpio`.
|
|
|
|
`spike3-swd.cfg` maps:
|
|
|
|
- SWCLK to GPIO 11.
|
|
- SWDIO to GPIO 10.
|
|
|
|
This is a strong next target for understanding how the Pi interfaces with an RP2040 or other debug bridge in the machine.
|