Projects
> youterm
> 0xFFFF
> radare
> glh
> xml2doc
> bluewall
> pvc-repo
> cvs-repo
> git-repo
> mesure
> wistumbler2
> acr

Posts (81)
> List of posts

> Mini update
> Accelerated dreams
> Paranoia?
> Changelog
> Graphs and 077n pwnk
> HNY2k7
> Maemo mooo
> HC pwned
> Long time no post
> USB Pawah Injector i boot reveng

Categories
> all*
> TWD(7)
> blog(5)
> bluetooth(4)
> conf(1)
> desktop(1)
> devel(8)
> family(8)
> hpcva(9)
> hurd(2)
> life(20)
> n770(3)
> netbsd(2)
> pkgsrc(2)
> reality(5)
> tips(2)
> tothink(2)

Links
+ del.icio.us
+ asterx
+ bee.es.gnu.org

nopcode
+gallery
+www.nopcode.org
+cvs.nopcode.org
+news.nopcode.org
+blogs.nopcode.org

Other Blogs
+ sKUrZ0
+ TripleDES
+ gospel
+ blyx
+ MiKi
+ plue
+ xtraeme
+ esteve
+ jmmv
+ pof
+ syvic
+ Yosh
+ k0ro
+ ESN
+ Brainstorm
+ BlackShell
+ Hubertf
+ TooMany
+ viric
+ ziberpunk

doblog
+ Makefile
+ Source
+ Readme
+ TODO
+ Changelog









 
 >>Sun, 15 Oct 2006 23:06:36 +0200

 n770 : USB Pawah Injector i boot reveng


Per fi ja he acabat de soldar l'upi i lo més gracios es que funciona

He estat dos dies amb mon pare soldant una caixeta per poder injectar els 5v que necessita el n770 per poder treballar en mode host. Aqui teniu els esquemes de la placa i les afotos .



Esquemes...


Els esquemes son ben senzills, es basa en un 7805 que regula els 12v d'entrada a 5v i es posen dos condensadors per tal de netejar la sortida.



Aqui podeu veure com queda de cuca la caixeta de 3.5 x 5 x 1.5 cm. La idea es que l'alimentació va externa, tinc un transformador de 12v i aquesta setmana faré un portapiles...pero crec que no aguantaran gaire les piles pq el 7805 es fot a parir..te el cargol i dues barres metaliques per disipar..i aguanta la temperatura..pero





Canvis al software


Aquest hack no serveix de res si no fiquem la pda en mode host, per fer aixo ho podem fer de dues formes. La primera i estatica es canviant les flags de boot per dirli que es posi el usb en mode host dps de fer el boot (pq si ho fem abans la liem i adeu PDA, ja que no podrem reflashejar mai més.

  console:

$ ./flasher-2.0 --enable-usb-host-mode
flasher v0.8.1 (May 30 2006)

USB device found found at bus 004, device address 009
Found device SU-18, hardware revision 1802
NOLO version 0.9.11
Version of 'sw-release': <no version>
The device is now in USB peripheral mode


Per desactivar el mode host i tornar a deixar-ho com estava ens caldra reiniciar i fotreli el --disable-usb-host-mode.

Em sembla cutre que quan canvies el host mode no llegeixi el sw-release version. Potser pq les flags les canvia en el xloader i no li cal arribar fins a la secció initfs del firmware..pero ves a saber ^^.

L'altre forma de fer-ho es amb un:

  console:

Nokia770-26:~# echo host > /sys/devices/platform/tahvo-usb/otg_mode


El tema es que desde les bootflags ja especifica l'arranc de certa forma i fa que encara que canviis aixo, el daemon s'enteri de quan enxufes algo al usb, desmunta la mmc i la exporta amb el modul g_usb_storage.ko (del /mnt/initfs/lib/modules/...) com si fos un hd extern.

ATM No he conseguit trobar qui es el que fa aixo, pero estic mirant-m'ho per tal de fer dos .desktop per canviar de mode 'host' a mode 'peripheral' i poder usar el usb-ethernet, teclat extern, pendrives, etc.

Si a algu se li acodeix alguna forma de com poder fer aixo...s'agrairà

Wanna BSD?



El fet es que molesta una mica tenir parts del sistema de codi tancat..i precissament la mes important del dispositiu...el boot.

Aixi que aquest es el principal problema que cal superar per portar NetBSD al n770.

Vaig estar jugant una mica amb els bootloaders, desensamblant-los per tal d'entendre com funcionaven... i definitivament veig bastant complicat poder fer un replacement lliure del bootloader de nokia (aka NOLO), que consisteix en 3 parts de les 6 del firmware (xloader, 2nd i secondary), es molta feina i molt critica, ja que em pot deixar sense pda durant una temporada indefinida.

Remenant i donant-li voltes sem va acodir que potser podria usar kexec() per botar un kernel ELF desde linux cap a netbsd i ...si..efectivament es possible . El problema es que el kernel que porta el n770 no implementa kexec(), he trobat un parche de la gent de openzaurus que han portat el kexec() a arm9 i teoricament hauria de funcionar, pero el patch encara no es oficial i dubto que surti a la proxima release ni del kernel ni del maemo.

Aqui teniu la web amb el patch de openzaurus:

>> kexec arm patch

I la info de com botar netbsd amb kexec():

>> kexec + netbsd

Speed up per la mmc


He trobat un hack força interessant sobre un problema que vam estar discutint amb el brainstorm quan vam comprar la MMC de 2GB.

Doncs bé, sembla que la velocitat de transferencia a la mmc esta limitada al kernel, ja que el divisor del clock de transferencia surt d'un bucle on incrementa en un de forma descontrolada i el divisor resultant suportat es 2 enlloc de 1. Per tant el n770 per defecte usa la mmc a meitat de la velocitat que podria fer servir..feo feo. El tema es que va bé per segons quines memories i el format de mmc4 que es el que fa kingston de 2GB suporta el clock a 48Mhz amb divisor 1, Aixo dona una friolera de 5MB/s. Amb altres memories xungues potser no va bé..pero aqui esta el tema.

Aqui hi ha el link al thread:

>> speeding up mmc (with success) - maemo-developers mailing list

Aqui el link al patch:

>> mmcv4-diff

Segurament sortira a la 'sardine' i a la proxima release.


Reversing del boot


Si, se que no esta gaire ben vist aixo que estic fent per segons quines lleis absurdes. Pero no penso deixar que la curiositat em menji per culpa d'absurdes normes.

He estat bassant la feina de reversing en dos camps. El bootloader i el revflash. Anem per parts:

El RevFlash es algo que se m'ha acodit (potser te un altre nom) per tal de poder fer un flasheig invers del firmware del n770. La idea es fer que el trasto escupeixi cada una de les seccions del que te en memoria per xarxa i poder comparar comodament els canvis que hi han.

El flasher de nokia ...obviament no permet fer aixo, potser el NOLO ho implementa, pero encara no he arribat a desensamblar tant :P

El que vull treure d'aixo es saber quines parts del bootloader es canvien quan es canvien les flags de boot. Aixo m'ajudara a poder desensamblar millor el codi dels 3 bootloaders. De moment estic treballant, ja publicaré el doc complert quan tingui els resultats dels bindiffs i algunes tools de reversing que tinc en ment fer.

L'altre part a reversar, es la dels bootloaders.

El document el teniu aqui:

>> REN770 - reverse engineering nokia 770 doc.

Pero explicaré una mica els pasos que he fet per si algú s'anima a col.laborar amb la feineta de fer un bootloader lliure pel nokia 770

Reveng dels bootloaders


El cas de que el NOLO (aka Nokia Loader) es un bootloader generic privatiu desenvolupat per nokia..i que curiosament te bastantes coses que em fan sospitar que el fan servir per altres plaques OMAP en diferents mobils ..com per exemple el nokia 6600 per botar el symbian.

Es per aquest motiu que no el volen alliberar, encara que no ho diguin. I aquest es el motiu pel qual està partit en 3 parts: la primera part es '2nd', que salta al 'secondary' i dps al 'xloader'. El xloader es l'encarregat de botar el nucli del sistema, es a dir carregar el kernel i utilitzar la part initfs definida en el firmware.

En els altres dos troços hi ha un petit init del hardware i en l'altre tota la part 'servidor' del flasher.

Aquesta es la part que ens permet conectar la pda amb el pc a l'arranc i enviar comandes per reflashejar, botar kernels, canviar les flags de boot.

Si ens carreguem aquesta part..ja ens podem despedir de la PDA. De fet son parts bastant petites i es bastant xungo q se t'acabi la bateria en un reflasheig de ~ 100KB

  console:

Image '2nd', size 8704 bytes
Image 'secondary', size 87040 bytes
Image 'xloader', size 13824 bytes


Bé, anem per pams...

Reveng step by step



Primer hem de extreure les parts de la imatge:

  console:

$ ./flasher-2.0 -u -F SU-18_2006SE_1.2006.26-8_PR_F5_MR0_ARM.bin
flasher v0.8.1 (may 30 2006)

SW version in image: SU-18_2006SE_1.2006.26-8_PR_MR0
Image '2nd', size 8704 bytes
Image 'secondary', size 87040 bytes
Image 'xloader', size 13824 bytes
Image 'initfs', size 1890304 bytes
Image 'kernel', size 1266560 bytes
Image 'rootfs', size 60030976 bytes
Unpacking 2nd image to file '2nd.bin.2'...
Unpacking secondary image to file 'secondary.bin.2'...
Unpacking xloader image to file 'xloader.bin.2'...
Unpacking initfs image to file 'initfs.jffs2.2'...
Unpacking kernel image to file 'zImage.2'...
Unpacking rootfs image to file 'rootfs.jffs2.2'...


Un cop tinguem aixo ens fixarem principalment amb el xloader.bin. El 2nd i secondary son mes baix nivell i no interesen ara mateix per entendre com fa botar un kernel.

Podem veure el header del xloader, com tenim un signature i que curiosament es el mateix que ens trobem si remenem el /dev/mtdblock0 el trobarem per alla:

  console:

Nokia770-26:~# radare -x -b 64 /dev/mtdblock0
open '/dev/mtdblock0'
File size: 131072
offset 0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF
----------------+----------------------------------------+-----------------
0000000000000000 0006 0000 5426 0000 0000 0000 0000 0000 |....T&..........|
0000000000000010 0000 0000 582D 4C4F 4144 4552 0000 0000 |....X-LOADER....|
0000000000000020 0030 0000 0106 0000 0000 0000 0000 0000 |.0..............|
0000000000000030 0000 0000 4B45 5953 0000 0000 0000 0000 |....KEYS........|
Nokia770-26:~#


Aixi que entrarem a l'scratchbox i desensamblarem la imatge:

  console:

$ /scratchbox/login
$ arm-linux-objdump --target=binary --architechture=arm -D xloader.bin


Ara el que toca es anar buscant amb una mica de vista les parts de codi i les parts de data...els paddings i els offsets de les strings i les referencies dins del codi.

Si..no tenim mes remei que ferho a mà, ja que l'IDA val un ou i mig, es per w32 i es privatiu...es una llastima que no hi hagin coses aixi lliures ...so...temps al temps .

Vaig implementar una funcionalitats nova al radare per tal d'extreure strings d'un fitxer binari..algo aixi com el 'strings', pero amb suport de strings unicode i amb el offset de la posició. Cosa que ens ajudara a trobar les referencies desde el codi desensamblat.

  console:

$ radare -S 5 secondary.bin
0x00000004 NOLOScnd
0x00004ef8 NOLO img
0x00005148 NOLO img
0x0000529c NOLO
0x000052a8 Scndt
0x000081d0 NOLOPartL
(...)
0x00012100 Nokia OMAP Loader v%s (%s) running on %s %s
0x0001212c 0.9.11
0x00012134 Jun 20 2006
0x00012140 Reset reason: %s
0x00012154 Flash init failed
0x00012168 Partition init failed
0x00012180 Configuration init failed


El '5' del -S es per dir la longitut minima de l'string valida.

A partir d'aqui...em toca fer algunes eines de reversing lliures per treballar més comode ...i la veritat es que venint el soft privatiu que cada cop s'apropa més a GNU/Linux... cal estar preparat per divertir-se x)

Ja aniré informant de com avança la feina

>> REN770 - reverse engineering nokia 770 doc.

[add comment] (0 comments)