Hacking into NavFX

  • Hi Go4IT,


    mach unbedingt ein Fulldump, bevor du irgendwas machst! Wenn der Bootloader weg ist und du das Format nicht hast, dann ist das Ding platt! Wenn der Bootloader drauf ist und du weißt nicht, wie man den zum Reflash überredet, bringt auch die Möglichkeit nichts ;-) .


    Grüße

    Tycho

  • Also, folgendes habe ich bislang über den Boot-Prozess des OMAP herausfinden können (und vermutlich läuft das so bei allen OMAP-Varianten ab):


    1.) First stage bootloader (ROM)

    Nach dem Power-On-Reset (POR) bzw. dem Reset des Chips wird zunächst der "1st stage bootloader" ausgeführt. Dieser befindet sich, ab Werk hardcodiert und unveränderlich im ROM des OMAP-Prozessors. Er ist recht klein und hat folgende Aufgaben:

    1. Den Ausführungs-Stack einrichten
    2. Den "Watchdog Timer 1" auf 3 Minuten konfigurieren
    3. PLL- und System-Clocks konfigurieren
    4. Die möglichen Quellen für den nächsten Bootloader (SPL) prüfen
    5. Den nächsten Bootloader (Second stage bootloader) ins SRAM des Prozessors kopieren und starten

    Die Hauptaufgabe des ersten Bootloaders ist es also den Start des zweiten vorzubereiten. Hierzu werden ab Werk nur einige wenige Bootquellen unterstützt. Welche Quelle verwendet wird, entscheiden die SYSBOOT-Pins des Chips (16 Signalleitungen), welche vom ROM-Code eingelesen werden. Weiterhin wird über die SYSBOOT-Pins auch noch die Quarzgeschwindigkeit, Busbreite externer Speicher (USB, UART, SPIO, Flash, SDRAM, MMC, ...) angezeigt.


    Die besagten SYSBOOT-Pins konnte ich auf dem Board noch nicht finden. Die Pin-Angaben anderer OMAP-Chips helfen hierbei nicht, weil sie nicht stimmen und wie ja bekannt ist, gibt es kein Datenblatt vom OMAP5948. Jedoch wird der ermittelte Wert dieses IO-Leitungen vom ROM-Code in ein internes Register geladen und man kann das evtl. via JTAG auslesen. Hier muss ich mal testen.


    Wichtig zu wissen wäre natürlich auch, welche Bootquellen von Hause aus unterstützt werden. Dabei ist es nicht einfach nur "Flash", oder NAND, NOR, sondern hier gibt es ganz spezielle Typen, wie halt den Spansion S29GL (Mirror-Bit Flash, eine Art Hybrid aus NAND und NOR Flash). Was sicher auch geht ist booten von USB und UART (Serial), weil sowas für die Entwicklung gebraucht wird. Fände man eine Möglichkeit z.B. das booten von SD-Card zu ermöglichen, könnte man dem Radio somit einen eigenen Bootloader unterjubeln und darin machen was man will, z.B. ein Linux booten (nur so als Idee...)


    2.) Second stage bootloader (SPL)

    Dieser befindet sich auf einem externen Speichermedium und wird vom Boot-ROM in das interne SRAM des Prozessors geladen und zur Ausführung gebracht. Er dient als Vorbereitung zum laden eines Boot-Managers (wie z.b. Linux U-Boot) oder des Kernels vom Betriebssystem. Die Adresse an die dieser Bootloader, welcher wohl nur ca. 2kb groß sein kann, geladen wird, hängt wohl auch von der Bootquelle ab.


    Meine Vermutung ist das der gefundene, nicht überschreibbare erste Sektor im Flash, bzw. auf der Update-CD dieser besagte 2nd Stage Bootloader ist. Hier nochmal zur Erklärung die ersten 0x100 Bytes des Flash:


    Der Prozessor arbeitet im "Little Endian Mode", das heißt das man die Bytewerte verdrehen muss um sie zu lessen. Die ersten Bytes könnten dabei entweder Interruptvektoren sein, oder es ist gar ein Sprungbefehl an die eigentliche Stelle der Programmausführung im Block. In jedem Fall muss dies reiner ARM926ES Maschinencode sein der da ausgeführt wird.


    In dem 2KB Block des Bootloaders findet man auch interessante Textpassagen wie:

    Das klingt alles schon sehr nach einer Art Mapping-Tabelle für bestimmte Teile und Bibliotheken des Bootloaders.


    Besondere Aufmerksamkeit erweckt diese, lesbare Textpassage:

    Code
    1. 01110000001000001110

    Das sieht doch nach einem Binärcode aus. Vielleicht das Flash-Passwort oder der Zustand der SYSBOOT-Pins, hmm..



    Ganz am Ende findet man noch dies:

    Code
    1. DI_ARION_PSW_10.1V13

    Das ist die Version des Bootloaders.


    Nun würde ich mal versuchen zu ermitteln ob das in diesen 2kb irgendwie Disassemblierbar ist. Weiterhin würde ich testen ob ich mit JTAG den Bootloader schrittweise ausführen kann um zu sehen was dies für Nebeneffekte auf das System hat. 2kb in Assembler sind durchaus noch zu verstehen, auch wenn das schon einige Tage/Wochen in Anspruch nehmen kann.

  • Diese Infos sind zum disassemblieren wichtig:

    Der ARM-Core im OMAP5948 wird mittels JTAG als "ARM926EJ-S" identifiziert (ARM9E Familie). Damit entspricht seine Architektur der "ARMv5TEJ". Der ENDIAN-Mode der ARM-CPU ist "LITTLE ENDIAN" und vermutlich wird kein Thumb-Instructionset benutzt.


    Der OMAP5948 ist kein Prozessor der OMAP-5 Serie, sondern der OMAP-1 (siehe auch Wikipedia: https://en.wikipedia.org/wiki/OMAP). Vom ARM-Core her könnte es ein OMAP1710, OMAP1610, OMAP1620, OMAP5912 (was eine Verkaufsbezeichnung für den OMAP1621 war) sein. Auf der Suche nach Grundlagen wären das gute Kandidaten, da deren Datenblätter öffentlich verfügbar sind. Auf sie stützen sich auch meine Informationen hier.


    Für den OMAP5912 gibt es sogar ein recht weit verbreitetes Entwicklungsboard, das "OSK5912". Solche Prozessoren wurden auch in den früheren Handys häufig verbaut. Auch das sind gute Informationsquellen.

  • Ähhh.... Kapiervorgang abgebrochen....

    OH

    Die schnellste Verbindung zwischen zwei Punkten ist eine Gerade.
    Die von den meisten Fahrern am wenigsten beherrschte Strecke zwischen zwei Geraden ist eine Kurve.
    Was das heißt?


    Geradeaus sind wir alle schnell !!!


    Achtung! Beiträge können Ironie enthalten! Ironie unterliegt nicht der Kennzeichnungspflicht!


    Meine Beiträge in diesem Forum geben ausschließlich meine persönlichen Meinungen und Wissensstände wider.

  • Ok, das hier ist hart an der Grenze zum allgemeinen Verständnis, zugegeben. Ich denke ich werde damit auch besser in ein Technik-Forum abtauchen. Der ein oder andere mag dem sicher noch folgend können und meine Hoffnung ist ja auch, "schlafende Talente" zu wecken. vielleicht kommt mal jemand "vorbei" aufgrund einer Websuche oder so und kann was zum Thema beitragen. In der Tat konnte ich schon den ein oder anderen Kontakt knüpfen, auch wenn mich das bislang in Summe noch nicht wirklich weiter gebracht hat... aber ich hab ja dabei keinen Termindruck :-)

  • Auf der Suche nach der OS-Struktur kannst du mal nach QNX suchen. Ist sehr verbreitet im Automotive-Bereich. Hatte im Bereich Chrysler/Dodge mal an den Radios rumgespielt und BMW`s IDrive läuft auch auf dieser Basis.

  • Danke für den Tipp, ich bin mir aber recht sicher das es sich um ein Nucleus RTOS handelt. Dieses OS hat kein eigenes Filesystem, kann sich aber an allen herkömmlichen FS "bedienen". Momentan hänge ich aber noch am Bootstrap :-)