TAPs erstellen/JailBreak
aus TopfWiki, der freien Wissensdatenbank
JailBreak für TAP TMS
In der Firmware des TMS befindet sich eine Liste mit verbotenen Linux-Systembefehlen. Verwendet ein TAP einen dieser Befehle, unterbindet der TMS den Start des TAPs. Diese Prüfung wird mit dem JailBreak ausgehebelt.
Achtung: Im Normalfall reichen die Befehle der API aus. Es sollte also dringend der Readme.txt in dem ausgepackten JailBreak Ordner gelesen werden.
Die JailBreak.zip (http://www.topfield.cc/files/Firebird/JailBreak.zip) wird heruntergeladen und im Ordner c:/Topfield gespeichert und mit „Entpacken nach Hier\“ ausgepackt.
JailBreak installieren
JailBreak.exe modifiziert ein kompiliertes TAP so, dass es trotz eingebauter Linux-Systembefehle vom Betriebssystem des TMS gestartet wird. Die im Paket mitgelieferte ausführbare Datei läuft unter DOS und der cygwin bash. Da der Source-Code beiliegt, lässt sich JailBreak auf jedem System übersetzen. Um ein TAP zu patchen, genügt es, Jailbreak mit dem Namen des TAPs aufzurufen, z.B.:
JailBreak FireClock.tap
Da dies zu mühsam ist, lässt sich der JailBreak auch automatisieren. Eine theoretische Möglichkeit ist das Einbinden in die im nächsten Punkt beschriebene "build_TMS.bat". Da diese Batch-Datei den TAP-Namen aber nicht kennt, muss man jede "build_TMS.bat" selbst anpassen. Daher ist es ratsam, den JailBreak direkt in den make-Prozess einzubinden.
Dazu sind 3 Schritte notwendig:
- JailBreak.exe nach "C:\Work\cygwin\opt\crosstool\bin" kopieren.
- Bei C:\Work\API\TMS\include\tool.mk wird mit einem Unix-fähigen Editor wie MetaPad hinter der AWK-Zeile die JB-Zeile angefügt, so dass der Bereich der Datei so aussieht:
TOUCH = touch AWK = awk JB = JailBreak.exe # Option for quiet builds
- Bei jedem Projekt muss die Datei "Makefile" geändert werden. Hier wird diese Datei wieder mit einen Unix-fähigen Editor geöffnet, nach dem Text "Linking" gesucht und die markierte Zeile aus diesen Block eingefügt. Die 3. Zeile ist hier gekürzt dargestellt.
$(TAP_APP): ${TAP_OBJS} @echo "[Linking... $@]" $(Q_)$(LD) -shared --no-undefined --allow-shlib-undefined -o $@ … $(Q_)$(JB) $(TAP_APP)