
!!! 11/11/2010 PROCEDURA OBSOLETA, SEGUIRE LA GUIDA CHE TROVATE NELL’ULTIMO COMMENTO !!!
Mi accingo a scrivere questa guida dato che in rete ne ho trovate diverse ma TUTTE incomplete, forvianti e imprecise (e pensare che il link dal quale hanno preso spunto e’ la guida ufficiale :/). Il wiki della procedura è ovviamente in inglese, quindi io per facilitarvi la vita (dato che ieri me la sono complicata abbastanza :P) farò una traduzione e metterò in evidenza i punti sui quali ieri ho imprecato!
Premessa: Il porting è tutt’ora in fase di sviluppo, quindi non tutte le periferiche interne sono riconosciute ed alcune delle funzionanti sono parzialmente tali (vedi qui ). Beh direte voi, chi me lo fa fare di scancherare un telefono funzionante con una mezza roba? Beh se come me vi vedete piovere dal “cielo” un iPhone 3Gs nuovo di trinca, perchè non farlo? Aggiungo che il mio 2G era/è in condizioni ridicole (no vibrazione, schermo crepato ma funzionante) e da buon smanettone mi sono avventurato in questa nuova prova.
Prima di iniziare, assicurarsi di avere i seguenti requisiti:
* Un iPhone di prima generazione (firmware tra 2.0 e 3.1.2, jailbroken con Redsn0w, Blacksn0w o PwnageTool). Se hai già aggiornato il dispositivo a 3.1.3 o una versione beta 4.0, è necessario utilizzare PwnageTool per crearne uno jailbroken alla 3.1.2.
* Un PC Linux (ho utilizzato Ubuntu 10.04 dal Live CD). Non utilizzate macchine virtuali. Se possibile, utilizzare una versione a 32 bit di Linux, altrimenti più avanti vi riporterò la procedura per OS x64.
* Ovviamente salvatevi i dati (sincronizzate con iTunes). Nel caso di disastro potrete sempre ripristinare il telefono.
* Spazio libero su iPhone. AndroidOS occupa circa a 350 MB di spazio.
* Per la procedura occorrono i seguenti pacchetti installati libusb, libusb-dev lib32readline5 libreadline libusb-1.0.0. Installateli da Synaptics prima di procedere.
Ora scaricate l’immagine contenente Android OS (Versione 0.2 – Basata su Android 1.6). L’immagine non contiene per clausole legate al copyright i firmware proprietari per l’utilizzo del touchscreen e del wifi, quindi dovrete manualmente provvedere al loro reperimento:
1. Andate all’indirizzo http://www.marvell.com/support.html
2. Nella sezione DRIVER, selezionate Linux 2.6 – Fedora.
3. Cliccate sul pulsante Search.
4. Scaricate ed estraete il file. Vi troverete 2 archivi. Decomprimente quello con .tar (dentro ha una directory FwImage)
5. Rinominate il file helper_sd.bin in sd8686_helper.bin
6. Tenete a portata di mano i files sd8686.bin e sd8686_helper.bin, vi serviranno dopo.
Adesso dobbiamo estrarre il firmware per il multitouch da dentro l’iphone. Io avendo il 3.1.3 ho utilizzato la seguente procedura:
Bisogna collegare il telefono via SSH (installatelo da Cydia, OpenSSH e abilitatelo con l’utility SbSettings, sempre installabile da Cydia). Potete utilizzare FileZilla per accedere al telefono. Assicuratevi di avere il wifi attivo (iphone) e che sia ovviamente sulla stessa vostra rete:

Loggatevi con l’utente root (la password dovreste conoscerla ;) ).Posizionatevi nella directory private/var/stash/share/firmware/multitouch/ e copiatevi sul vostro pc il file iPhone.mtprops.
Scaricate questo e copiatelo nella stessa directory del file iPhone.mtproprs. Ora compilate il sorgente in C con questo comando. Verranno estratti i files che ci servono (zephyr_main.bin and zephyr_aspeed.bin):
gcc -o firmware-extractor firmware-extractor.c && ./firmware-extractor
Ora decomprimete l’immagine di Android e copiate dentro la directory prebuild sia i files della scheda di rete (sd8686.bin e sd8686_helper.bin) sia gli ultimi estratti (zephyr_main.bin and zephyr_aspeed.bin). Dovrete copiarli dentro le immagini da uppare più avanti nel vostro telefono. Per far questo usando il Terminale di Ubuntu:
gunzip android.img.gz
sudo mkdir -p /mnt/android
sudo mount -o loop android.img /mnt/android
sudo cp zephyr_aspeed.bin zephyr_main.bin sd8686_helper.bin sd8686.bin /mnt/android/lib/firmware/
sudo umount /mnt/android
gzip android.img
e successivamente:
sudo mkdir -p /mnt/android
sudo mount -o loop system.img /mnt/android
sudo cp zephyr_aspeed.bin zephyr_main.bin sd8686_helper.bin sd8686.bin /mnt/android/etc/firmware/
sudo umount /mnt/android
Ora che avete le immagini pronte, dovrete upparle nell’iPhone. N.B.: I permessi sono importantissimi (ho dovuto ripetere la procedura più volte prima di trovare il problema, sempre grazie alla guide ridicole che compaiono ai primi posti di Google!!).
Posizionatevi dentro la directory di idroid (sempre da terminale) e date il seguente comando:
scp -C /prebuild/* root@192.168.x.x:/private/var
Ci vorrà qualche minuto, quindi portate pazienza. Una volta terminata la copia, sempre da terminale ubuntu collegatevi in SSH al vostro iPhone nella cartella /private/var e date il seguente comando:
chmod 755 ramdisk.img system.img userdata.img cache.img android.img.gz zImage
Ci siamo, ora passiamo all’installazione vera e propria di Android. Mettete il telefono in Recovery Mode (no DFU):
1) Spegnete l’iphone e scollegatelo dall’eventuale porta USB.
2) Mentre tenete il tasto home pigiato, collegate l’iphone alla porta USB tenendo sempre premuto il tasto HOME fino all’arrivo dell’immagine del cavetto

Dentro la directory utils dentro la cartella idroid trovate 2 file da copiare nella home di Ubuntu assieme al file openiboot.img3 che trovate dentro la directory prebuild
Digitate il seguente comando:
sudo ./loadibec openiboot.img3
Vi comparirà il BootLoader Openiboot sul display del telefono

Cliccate il testo di accensione o il selettore del voume basso per selezionare OpeeniBoot console e comincerà la procedura. Per visualizzare su schermo e cominciare l’installazione vera e proprio, lanciate da terminale:
sudo ./oibc
A questo punto digitate: install
Fatelo lavorare fino a quando compare questa scritta: refreshed image list poi digitate reboot
Come per l’installazione all’avvio di openiboot selezionate la console openiboot ma tenete premuto per qualche secondo il tasto home del telefonino. Lasciate caricare il kernel e dopo qualche istante di attesa:
Buon divertimento!