Lade...
 

Firmware

Firmware - Analyse


von Agentdata http://www.mikrocontroller.net/topic/210759#2131646(external link)

So ich habe die Analyse der originalen Firmware soweit fertig.

Für Leute die wirklich entwickeln wollen und vor allem können sollten
damit die nötigen Grundlagen geschaffen sein und das vielerorts in
diesem Thread zu sehende Rätsel raten kann aufhören.

Die gesamte Firmware mit Erklärung sowie der Source für den Dumper
befindet sich im Anhang.
Ich habe Leider keine Ahnung von Linux-Images - sollte es aber jemand
geben der sich damit auskennt steh ich für Rückfragen gern zur
Verfügung.

PS: Vielleicht ist es nun an der Zeit einen Thread nur für Entwickler zu
eröffnen? Hier wird es langsam doch sehr unübersichtlich...



Pollin Box NAND layout
----------

NAND_PAGE_SIZE 512
NAND_NROF_PAGES 32

NAND_BLOCK_SIZE NAND_PAGE_SIZE * NAND_NROF_PAGES //0x4000 16k
NAND_NROF_BLOCKS 4096

NAND_OVERALL_SIZE NAND_BLOCK_SIZE * NAND_NROF_BLOCKS //0x4000000 64mb




0x00000000 ------ START BOOTLOADER

0x00000000 - 0x00004000 -> nboot.nb0
RAM:84010000 (automapped bei POWER ON)

- bootloader mit ECC

if DIP1 ON
- map WinCe0.nb0 ins ram (WCE0 section)
else
- map WinCe1.nb0 ins ram (WCE1 section)
- bei Lesefehlern werden diese per ECC korrigiert und es erscheint
folgende Meldung
"One or more errors detected and corrected. If you want to
continue booting switch the SW1-DIP1 to ON!"
- warten bis DIP1 auf ON
- dann Meldung
"Now set the DIP1 to OFF!"
- warten bis DIP1 auf OFF
- booten wird fortgesetzt
endif

0x00004000 ------ END BOOTLOADER





0x00004000 ------ START WCE0 SECTION

0x00004000 - 0x00004200 -> WCE0 InfoPage
----------------

- page0 als tag holder genutzt

byte4 tag_string1 "0ECW"
dword size_in_bytes 0x003F7988
byte4 tag_string2 "0ECW"
dword unknown_const 0x00100000


0x00004200 - 0x003FC000 -> WinCe0.nb0
RAM:80100000
-------------

- minimales WinCE image
(kann mit dumprom.exe extrahiert werden)

- enthält sämtliche Treiber / Registry und so weiter aber keinerlei Appz

- verantwortlich für Updates -> TGUpdater.exe wird nach booten
automatisch gestartet

- dieses Image ist es was wir sehen bzw am laufen haben wenn ein
Softwareupdate durchgeführt wird (DIP1 ON)

ACHTUNG: - dieses Image muss intakt bleiben sonst funktioniert das
Softwareupdate über USB NICHT mehr
- nach meinem derzeitigen Kenntnisstand enthält der bootloader
KEINE Update Funktionalität
- solange wir keine Möglichkeit haben das NAND über ejtag zu
flashen gibt es keinen Weg zurück falls dieses Image zerstört wird
-> HÄNDE WEG

0x003FC000 ------ END WCE0 SECTION



0x003FC000 ------ START WCE1 SECTION

0x003FC000 - 0x003FC200 -> WCE1 InfoPage
----------------

- page0 als tag holder genutzt

byte4 tag_string1 "1ECW"
dword size_in_bytes 0x01918CA0
byte4 tag_string2 "1ECW"
dword unknown_const 0x00100000


0x003FC200 - 0x01D18000 -> WinCe1.nb0
RAM:80100000
-------------

- das eigentliche WinCE image
(kann mit dumprom.exe extrahiert werden)

- enthält sämtliche Treiber Registry Anwendungen und so weiter

- dieses Image ist es was wir sehen bzw am laufen haben wenn die Box
normal gestartet wird (DIP1 OFF)

===> HIER GEHÖRT EIN EVENTUELLES LINUX IMAGE HIN (nicht meine Baustelle)
- das Softwareupdate flashed jedes file mit dem Namen WinCe1.nb0 in
diese section
- also auch jedes eventuelle Linux Image welches im RAM ab
0x80100000 laufen muss
- es gibt keinerlei Signature checks oder ähnliches
- die InfoPage und die Größe der Section wird automatisch auf die
Größe des WinCe1.nb0 Updates angepasst
- die phStbRootApp_256M_0_t.mi und phStbRootApp_256M_1_t.mi müssen
mit geflashed werden (im Zweifelsfall dummy files mit 4 bytes null
anlegen)

0x01D18000 ------ END WCE0 SECTION





0x01D18000 ------ START WCE2 SECTION

0x01D18000 - 0x01D18200 -> WCE2 InfoPage
----------------

- page0 als tag holder genutzt

byte4 tag_string1 "2ECW"
dword size_in_bytes 0x00A3D6D4
byte4 tag_string2 "2ECW"
dword unknown_const 0x00100000


0x01D18200 - 0x02758000 -> phStbRootApp_256M_0_t.mi
-------------------

- trimedia firmware ?

- wird beim start von desktop.exe geladen

0x02758000 ------ END WCE2 SECTION





0x02758000 ------ START WCE3 SECTION

0x02758000 - 0x02758200 -> WCE3 InfoPage
----------------

- page0 als tag holder genutzt

byte4 tag_string1 "3ECW"
dword size_in_bytes 0x0020BA6C
byte4 tag_string2 "3ECW"
dword unknown_const 0x00100000


0x02758200 - 0x02964000 -> phStbRootApp_256M_1_t.mi
-------------------

- trimedia firmware ?

- wird beim start von desktop.exe geladen

0x02964000 ------ END WCE3 SECTION





0x02964000 ------ START FREE SECTION

- 0x01698000 Byte frei (22,5 MB! )

0x03FFC000 ------ END FREE SECTION





0x03FFC000 ------ START INFO SECTION

0x03FFC000 - 0x03FFC200 -> INFO InfoPage
----------------

- page0 als tag holder genutzt

byte4 tag_string1 "OFNI"
byte4 section_string1 "1ECW"
dword start_of_section1 0x003FC200
byte4 section_string2 "2ECW"
dword start_of_section2 0x01D18200
byte4 section_string3 "3ECW"
dword start_of_section3 0x02758200

- restliche pages ungenutzt

0x04000000 ------- END INFO SECTION