Firmware
Firmware - Analyse
von Agentdata http://www.mikrocontroller.net/topic/210759#2131646
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
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
0x00004000
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
0x003FC000
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
0x01D18000
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
0x02758000
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
0x02964000
- 0x01698000 Byte frei (22,5 MB! )
0x03FFC000
0x03FFC000
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