Mit der Spike-1 Flipperarchitektur hat Stern einen grossen Schritt weg von der alten Architektur mit einem zentralen Controller und I/O-Board zu einem modularen System gemacht. Dabei wurde nicht nur die Hardware geändert, sondern auch die Software. Seit Spike-1 läuft nun ein Linux auf dem Flipper. Grund genug, da mal reinzuschauen. Da Stern die SD-Karten-Images bereitstellt, ist das nicht schwierig.
Das Image ist 4GB gross, auf der SD-Karte sind diverse Partitionen:
fdisk ghostbusters-1_17.iso Welcome to fdisk (util-linux 2.31.1). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): p Disk ghostbusters-1_17-modified.iso: 3.5 GiB, 3752852992 bytes, 7329791 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x00018e69 Device Boot Start End Sectors Size Id Type ghostbusters-1_17-modified.iso1 * 35 6999 6965 3.4M 1 FAT12 ghostbusters-1_17-modified.iso2 7000 13999 7000 3.4M da Non-FS data ghostbusters-1_17-modified.iso3 14000 262499 248500 121.3M 83 Linux ghostbusters-1_17-modified.iso4 264192 7329791 7065600 3.4G 5 Extended ghostbusters-1_17-modified.iso5 266240 397311 131072 64M 83 Linux ghostbusters-1_17-modified.iso6 399360 6690815 6291456 3G 83 Linux ghostbusters-1_17-modified.iso7 6692864 6823935 131072 64M 83 Linux
Als nächstes kann man mit den Loopback-Tools von Linux die einzelnen Partitions mounten:
sudo losetup -P /dev/loop99 ghostbusters-1_17-modified.iso mkdir iso1 iso3 iso5 iso6 is7 sudo mount /dev/loop99p1 iso1 sudo mount /dev/loop99p3 iso3 sudo mount /dev/loop99p5 iso5 sudo mount /dev/loop99p6 iso6 sudo mount /dev/loop99p7 iso7
Mal schauen, was man da so sieht.
Auf der FAT-Partition befindet sich nur der Bootloader:
ls iso1/ BOOT.BIN
Partition 3 enthält wohl das gesamte System:
ls iso3/ bin data dev dump etc games home lib lost+found media mnt proc sbin spk tmp usr var
Partition 5 ist der Ersatz fürs NV-Ram:
ls iso5 lost+found nv
Partition 6 scheint den eigentlichen Game-Code zu enthalten:
ls iso6 game ghostbusters_pro lost+found spk
Und auf Partition 7 wird geloggt:
ls iso7 log lost+found
Die Hardware ist ARMv7 basiert und es gibt auch ein Busybox auf dem System. Das bedeutet, es sollte möglich sein, auf dem Pinball einzuloggen.
file iso3/bin/busybox iso3/bin/busybox: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 2.6.16, stripped
Also mal ein Blick in auf die Spielesoftware werfen:
ls -l iso6/ghostbusters_pro total 1158340 -rw-rw-r-- 1 root root 21118 Feb 15 2015 accbridgenode-LPC1313-0_52_0.hex -rw-rw-r-- 1 root root 34115 Feb 15 2015 coil4node-LPC1112_101-0_52_0.hex -rw-rw-r-- 1 root root 34115 Feb 15 2015 coil4node-LPC1112_201-0_52_0.hex -rw-rw-r-- 1 root root 57118 Feb 15 2015 coil4node-LPC1313-0_52_0.hex -rwxrwxr-x 1 root root 7057423 Feb 15 2015 game -rw-r--r-- 1 root root 1177406356 Feb 15 2015 image.bin -rw-rw-r-- 1 root root 46842 Feb 15 2015 lcdnode-LPC1113_302-0_52_0.hex -rw-rw-r-- 1 root root 62780 Feb 15 2015 netbridge-LPC1313-0_52_0.hex -rw-rw-r-- 1 root root 26068 Feb 15 2015 node4-LPC1124_303-0_52_0.hex -rw-rw-r-- 1 root root 21613 Feb 15 2015 nodebusanalyzer-LPC1313-0_52_0.hex -rw-rw-r-- 1 root root 32712 Feb 15 2015 pinnode-LPC1112_101-0_52_0.hex -rw-rw-r-- 1 root root 32773 Feb 15 2015 pinnode-LPC1112_201-0_52_0.hex -rw-rw-r-- 1 root root 59982 Feb 15 2015 pinnode-LPC1313-0_52_0.hex -rw-rw-r-- 1 root root 34422 Feb 15 2015 ws2812node-LPC1313-0_52_0.hex
Hier findet man die Firmware der Node-Boards. Wie man sieht, laufen die mit einfachen LPC ARM-Prozessoren.
Die eigentliche Spielsoftware ist ein grosses statisch gelinktes Binary:
file iso6/ghostbusters_pro/game iso6/ghostbusters_pro/game: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, for GNU/Linux 2.6.16, not stripped
Heikler wird es bei den Daten:
file iso6/ghostbusters_pro/image.bin iso6/ghostbusters_pro/image.bin: data
Das ist eine grosse Datei ohne einfach erkennbare Struktur. Die Struktur ist wohl dem Autor des Pinball Browsers bekannt, aber nicht öffentlich dokumentiert.