Devirginator/it
From Openmoko
(→Scripts) |
m (-Guides) |
||
(23 intermediate revisions by 7 users not shown) | |||
Line 1: | Line 1: | ||
− | Il '''devirginator''' un è un programma utilizzato in combinazione con [[dfu-util]], [[OpenOCD]] e [[Debug Board]] per | + | Il '''devirginator''' un è un programma utilizzato in combinazione con [[dfu-util]], [[OpenOCD]] e [[Debug Board]] per ri-programmare da zero il telefono alle impostazioni di fabbrica. |
− | + | ||
== Codice sorgente == | == Codice sorgente == | ||
− | Il codice sorgente di devirginator è disponibile qui http://svn.openmoko.org/trunk/src/host/devirginator/ | + | Il codice sorgente di devirginator è disponibile qui: http://svn.openmoko.org/trunk/src/host/devirginator/ |
− | + | ||
== Documentazione == | == Documentazione == | ||
− | {{ | + | {{note|Questa deriva da http://svn.openmoko.org/trunk/src/host/devirginator/README rev. 1215 e potrebbe essere obsoleta}} |
=== Iniziare === | === Iniziare === | ||
Line 15: | Line 13: | ||
Per iniziare, | Per iniziare, | ||
% cp config.example config | % cp config.example config | ||
− | e | + | e apportare le modifiche necessarie. In particolare, configurare SNAPSHOT. |
Quindi | Quindi | ||
% make | % make | ||
− | Questo richiede Netpbm e transfig. Infine | + | Questo richiede Netpbm e transfig. Infine assicurarsi che openocd sia attivo, accendere il dispositivo, diventare root ed eseguire |
− | + | ||
# ./devirginate | # ./devirginate | ||
Line 27: | Line 24: | ||
Il dispositivo deve essere connesso con: | Il dispositivo deve essere connesso con: | ||
− | * JTAG, con un'interfaccia | + | * JTAG, con un'interfaccia supportata da OpenOCD (necessaria per tutti gli stages) |
− | * USB, connesso | + | * USB, connesso al computer su cui è in funzione "devirginate" (richiesto solo per lo stage 2 e successivi) |
− | Inoltre, se una | + | Inoltre, se una è connessa al dispositivo una console virtuale, l'avanzamento dell'installazione può essere monitorato. |
− | dell'installazione può essere | + | |
− | Sono | + | Sono necessari i seguenti programmi: |
==== dfu-util ==== | ==== dfu-util ==== | ||
− | * dfu-util deve essere accessibile dalla macchina su | + | * dfu-util deve essere accessibile dalla macchina su cui è attivo "devirginate". Se dfu-util non è nel PATH, selezionare un path specifico in "config". |
− | + | Per generare dfu-util, eseguire: | |
− | Per | + | |
cd $OMDIR/openmoko/trunk/src/host/dfu-util | cd $OMDIR/openmoko/trunk/src/host/dfu-util | ||
./autogen.sh | ./autogen.sh | ||
Line 48: | Line 43: | ||
==== OpenOCD ==== | ==== OpenOCD ==== | ||
− | OpenOCD SVN revision 130 con libftdi 0.8 funziona. Altre | + | OpenOCD SVN revision 130 con libftdi 0.8 funziona. Altre combinazioni possono anche funzionare. È richiesta la seguente patch: |
− | combinazioni possono anche | + | |
http://svn.openmoko.org/developers/werner/openocd-wait-patiently.patch | http://svn.openmoko.org/developers/werner/openocd-wait-patiently.patch | ||
− | Per | + | Per le istruzioni di generazione, consultare http://svn.openmoko.org/developers/werner/notes/openocd |
− | Se | + | Se si usa la build di OpenOCD creata da Openmoko (revisione SVN 1180 o successiva), la patch è già applicata. |
− | + | ||
− | + | ||
==== telnet ==== | ==== telnet ==== | ||
Line 66: | Line 58: | ||
==== netpbm, transfig, wget, perl ==== | ==== netpbm, transfig, wget, perl ==== | ||
− | "setup.sh" può essere eseguito da un'altra | + | "setup.sh" può essere eseguito da un'altra macchina con in condivisione la stessa gerarchia del file system. Necessita di Netpbm, transfig, wget, e Perl. |
− | file system. Necessita di Netpbm, transfig, wget, e Perl. | + | |
− | + | ||
=== Setup === | === Setup === | ||
− | + | Innanzitutto devirginator deve essere configurato. Questo comprende: | |
* scaricare i binari per u-boot, kernel, etc. | * scaricare i binari per u-boot, kernel, etc. | ||
* generare/convertire diversi files usando il processo di setup | * generare/convertire diversi files usando il processo di setup | ||
− | Per il momento | + | Per il momento la configurazione deve essere fatta all'interno della directory contente tutti i file di devirginator. I file generati durante la configurazione sono posizionati nella directory tmp/. I file in tmp/ sono utilizzati anche durante l'uso di devirginator. |
− | + | ||
− | sono posizionati nella directory tmp/. I | + | |
− | durante l'uso di devirginator | + | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | Per iniziare, copiare config.example in "config" e applicare le modifiche necessarie. Quasi tutte le configurazioni necessarie sono già applicate, ma potrebbe essere utile configurare SNAPSHOT con il codice data dello snapshot desiderato. | |
− | + | Quindi, eseguire ./setup.sh o semplicemente make . | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | setup.sh | + | setup.sh ora scaricherà i file mancanti ed eseguirà le varie conversioni. Se appare qualche errore durante questo processo, per esempio a causa della mancanza di strumenti o di un errore di configurazione, setup.sh si fermerà con un errore. È possibile quindi correggere l'errore e riprovare. I file già scaricati in tmp/ verranno saltati durante il nuvo tentativo (setup.sh lo farà lo stesso se i file avranno subito dei cambiamenti). |
− | e | + | |
− | + | ||
+ | setup.sh inoltre controlla se gli eseguibili sono disponibili durante l'uso di devirginator e segnalerà se manca qualcosa. In generale, è possibile eseguire setup.sh su una macchina diversa rispetto "devirginate", in questo caso questi avvisi saranno ignorati. | ||
− | |||
+ | === File === | ||
==== Script ==== | ==== Script ==== | ||
− | * crc32.pl -Permette la funzione crc32 che comanda la IEEE CRC-32. Questo script è usato da altri script Perl, con "do". | + | * crc32.pl - Permette la funzione crc32 che comanda la IEEE CRC-32. Questo script è usato da altri script Perl, con "do". |
* envedit.pl | * envedit.pl | ||
Line 113: | Line 90: | ||
==== Configurazione utente ==== | ==== Configurazione utente ==== | ||
− | ===== File di | + | ===== File di configurazione statici ===== |
− | I file seguenti contengono script | + | I file seguenti contengono script e altre informazioni di configurazione "statici" che sono usati nel processo di devirgination. Normalmente basta modificare questi file per cambiare le funzioni del processo di configurazione. |
− | "statici" che sono usati nel processo di devirgination. Normalmente basta | + | |
− | + | ||
− | Ognuno di questi file è convertito in qualche maniera da setup.sh. | + | Ognuno di questi file è convertito in qualche maniera da setup.sh. Qui sotto dopo la freccia sono indicati i rispettivi file risultanti. |
− | Qui sotto dopo la freccia sono indicati i rispettivi file risultanti. | + | |
* openocd.in -> tmp/script.ocd | * openocd.in -> tmp/script.ocd | ||
− | + | Comandi da eseguire da OpenOCD durante lo stage 0. Per eseguire l'espansione di una variabile, ogni riga di questo file è processata dalla shell con "echo $line". A causa di questo deve essere evitato l'uso di metacaratteri nella shell. | |
− | + | ||
− | + | ||
− | + | ||
− | + | Cambiando qualche indirizzo in openocd.in, è necessario effettuare l'aggiornamento di u-boot.in. | |
− | u-boot.in. | + | |
* u-boot.in -> tmp/u-boot.out | * u-boot.in -> tmp/u-boot.out | ||
− | + | Comandi da eseguire in u-boot durante lo stage 0. Questo file è convertito in un'immagine interpretabile da u-boot e quindi eseguita dalla memoria con il comando di u-boot "autoscr". | |
− | + | ||
− | u-boot | + | |
* environment.in -> tmp/environment | * environment.in -> tmp/environment | ||
− | + | Configurazioni per l'ambiente u-boot. Notare che i cambiamenti in questo file sono fatti al di sopra dell'ambiente interim prodotto nello stage 0. In particolare, la variabile "mtdparts" è mantenuta da questo stage. | |
− | + | ||
− | + | ||
− | + | ||
− | + | Le righe lunghe possono essere divise nell'ambiente semplicemente tramite rientro della continuazione. Notare che la nuova riga e il rientro sono sostituiti da uno spazio. Esempio, | |
− | + | ||
− | + | ||
<pre> | <pre> | ||
− | foo= | + | foo=qualche |
− | + | cosa | |
</pre> | </pre> | ||
− | + | rendi foo=qualche cosa | |
* smiley.fig -> tmp/smiley.gz | * smiley.fig -> tmp/smiley.gz | ||
− | + | Lo splash screen dello stage 0, un faccia sorridente su sfondo verde. | |
==== Download cache ==== | ==== Download cache ==== | ||
Line 161: | Line 124: | ||
* tmp/System_boot.png -> tmp/splash.gz | * tmp/System_boot.png -> tmp/splash.gz | ||
− | + | Questa è una copia del logo Openmoko, che verrà convertito in | |
− | gzip-ed raw framebuffer | + | un'immagine gzip-ed raw framebuffer. |
* tmp/openmoko-devel-image-*.rootfs.jffs2 | * tmp/openmoko-devel-image-*.rootfs.jffs2 | ||
Line 175: | Line 138: | ||
* tmp/preboot_override.scrub | * tmp/preboot_override.scrub | ||
− | + | ==== Script ==== | |
− | ==== | + | |
I primi messaggi saranno qualcosa di simile a questo: | I primi messaggi saranno qualcosa di simile a questo: | ||
Line 199: | Line 161: | ||
* apri openocd | * apri openocd | ||
− | === | + | === Stage === |
− | + | Il processo di setup è diviso in tre stage (oltre ad uno speciale stage | |
− | stage, | + | zero, vedi più avnti). Ogni stage lascia il dispositivo in uno stato |
− | + | stabile. Un processo di installazione può includere uttti o solo alcuni | |
− | + | degli stage. Ogni stage richiede il completamento di tutti i precedenti. | |
− | * Stage 1: | + | * Stage 1: cancella tutti i precedenti contenuti NAND, installa u-boot, e rende il dispositivo pronto a ricevere ulteriori updates da DFU. |
− | * Stage 2: | + | * Stage 2: installa Linux ed il file sistem root. |
− | * Stage 3: | + | * Stage 3: Da definire. |
− | + | Nota che probabilmente dovrai avere privilegi per alcune delle operazioni USB che | |
− | + | sono eseguite da "devirginate". Per questo motivo esegui tutto come "root". | |
− | + | Per effettuare tutti gli stage, esegui | |
# ./devirginate | # ./devirginate | ||
− | + | dalla directory trunk/src/host/devirginator/ | |
− | + | Per eseguire solo singoli stage, specifica il numero dello stage, con il prefisso "-", | |
− | + | ad esempio, | |
# ./devirginate -1 | # ./devirginate -1 | ||
Line 233: | Line 195: | ||
==== Stage 1 ==== | ==== Stage 1 ==== | ||
− | + | Subito dopo l'accensione, lo schermo si accenderà mostrando cose a caso. | |
− | + | Questo indica che il processo di setup è iniziato. Nota che il contenuto | |
− | + | dello schermo può cambiare ("decay") durante il processo. | |
+ | Ma questo è normale. | ||
− | + | Dopo 10-30 secondi, lo schermo diventerà nero. Questo indica che ora | |
− | + | u-boot sta venendo eseguito nel dispositivo. | |
− | + | Dopo 60-90 secondi, lo schermo si accenderà di nuovo e mostrerà una | |
− | + | faccia sorridente su uno sfondo verde. Questo indica che il primo stage | |
− | + | è stato completato. La faccia sorridente apparirà ogni volta che | |
− | + | attiverai il dispositivo. | |
− | + | Il dispositivo ora contiene: | |
− | * | + | * una bad block table (BBT) |
− | * u-boot, | + | * u-boot, con capacità DFU |
− | * | + | * un set base di variabili d'ambiente u-boot |
− | * | + | * lo splash screen interim |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
+ | Ciò che ancora manca è: | ||
+ | * il kernel Linux | ||
+ | * il file system root | ||
+ | * l'ambiente finale | ||
+ | * lo splash screen finale | ||
==== Stage 2 ==== | ==== Stage 2 ==== | ||
− | + | Per iniziare lo stage 2, attiva il dispositivo. Vedrai lo smiley dello | |
+ | stage 1. | ||
− | + | La fase 2 può durare alcuni minuti. Il progresso della proedura di | |
− | + | download è indicata dal simbolo hash (#) nel terminale dove è in | |
− | "devirginate" | + | funzione "devirginate". |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
+ | Alla fine della fase 2, il dispositivo farà un reset, mostrando un | ||
+ | parziale splash screen OpeMoko, quindi farà reset di nuovo, mostrando | ||
+ | il corretto splash screen ed infine ci sarà il boot di Linux. | ||
==== Stage 3 ==== | ==== Stage 3 ==== | ||
+ | Da definirsi. | ||
+ | {{Languages|Devirginator}} | ||
− | + | [[Category:System Developers/it]] | |
− | + | ||
− | [[Category: | + | |
− | + |
Latest revision as of 23:57, 12 September 2008
Il devirginator un è un programma utilizzato in combinazione con dfu-util, OpenOCD e Debug Board per ri-programmare da zero il telefono alle impostazioni di fabbrica.
Contents |
[edit] Codice sorgente
Il codice sorgente di devirginator è disponibile qui: http://svn.openmoko.org/trunk/src/host/devirginator/
[edit] Documentazione
NOTE: Questa deriva da http://svn.openmoko.org/trunk/src/host/devirginator/README rev. 1215 e potrebbe essere obsoleta |
[edit] Iniziare
Per iniziare,
% cp config.example config
e apportare le modifiche necessarie. In particolare, configurare SNAPSHOT. Quindi
% make
Questo richiede Netpbm e transfig. Infine assicurarsi che openocd sia attivo, accendere il dispositivo, diventare root ed eseguire
# ./devirginate
[edit] Prerequisiti
Il dispositivo deve essere connesso con:
- JTAG, con un'interfaccia supportata da OpenOCD (necessaria per tutti gli stages)
- USB, connesso al computer su cui è in funzione "devirginate" (richiesto solo per lo stage 2 e successivi)
Inoltre, se una è connessa al dispositivo una console virtuale, l'avanzamento dell'installazione può essere monitorato.
Sono necessari i seguenti programmi:
[edit] dfu-util
- dfu-util deve essere accessibile dalla macchina su cui è attivo "devirginate". Se dfu-util non è nel PATH, selezionare un path specifico in "config".
Per generare dfu-util, eseguire:
cd $OMDIR/openmoko/trunk/src/host/dfu-util ./autogen.sh ./configure make
[edit] OpenOCD
OpenOCD SVN revision 130 con libftdi 0.8 funziona. Altre combinazioni possono anche funzionare. È richiesta la seguente patch:
http://svn.openmoko.org/developers/werner/openocd-wait-patiently.patch
Per le istruzioni di generazione, consultare http://svn.openmoko.org/developers/werner/notes/openocd
Se si usa la build di OpenOCD creata da Openmoko (revisione SVN 1180 o successiva), la patch è già applicata.
[edit] telnet
Oltre a tutto ciò, "devirginate" necessita di telnet.
[edit] netpbm, transfig, wget, perl
"setup.sh" può essere eseguito da un'altra macchina con in condivisione la stessa gerarchia del file system. Necessita di Netpbm, transfig, wget, e Perl.
[edit] Setup
Innanzitutto devirginator deve essere configurato. Questo comprende:
- scaricare i binari per u-boot, kernel, etc.
- generare/convertire diversi files usando il processo di setup
Per il momento la configurazione deve essere fatta all'interno della directory contente tutti i file di devirginator. I file generati durante la configurazione sono posizionati nella directory tmp/. I file in tmp/ sono utilizzati anche durante l'uso di devirginator.
Per iniziare, copiare config.example in "config" e applicare le modifiche necessarie. Quasi tutte le configurazioni necessarie sono già applicate, ma potrebbe essere utile configurare SNAPSHOT con il codice data dello snapshot desiderato.
Quindi, eseguire ./setup.sh o semplicemente make .
setup.sh ora scaricherà i file mancanti ed eseguirà le varie conversioni. Se appare qualche errore durante questo processo, per esempio a causa della mancanza di strumenti o di un errore di configurazione, setup.sh si fermerà con un errore. È possibile quindi correggere l'errore e riprovare. I file già scaricati in tmp/ verranno saltati durante il nuvo tentativo (setup.sh lo farà lo stesso se i file avranno subito dei cambiamenti).
setup.sh inoltre controlla se gli eseguibili sono disponibili durante l'uso di devirginator e segnalerà se manca qualcosa. In generale, è possibile eseguire setup.sh su una macchina diversa rispetto "devirginate", in questo caso questi avvisi saranno ignorati.
[edit] File
[edit] Script
- crc32.pl - Permette la funzione crc32 che comanda la IEEE CRC-32. Questo script è usato da altri script Perl, con "do".
- envedit.pl
- openocdcmd.pl
- scriptify.pl
- setup.sh
[edit] Configurazione utente
[edit] File di configurazione statici
I file seguenti contengono script e altre informazioni di configurazione "statici" che sono usati nel processo di devirgination. Normalmente basta modificare questi file per cambiare le funzioni del processo di configurazione.
Ognuno di questi file è convertito in qualche maniera da setup.sh. Qui sotto dopo la freccia sono indicati i rispettivi file risultanti.
- openocd.in -> tmp/script.ocd
Comandi da eseguire da OpenOCD durante lo stage 0. Per eseguire l'espansione di una variabile, ogni riga di questo file è processata dalla shell con "echo $line". A causa di questo deve essere evitato l'uso di metacaratteri nella shell.
Cambiando qualche indirizzo in openocd.in, è necessario effettuare l'aggiornamento di u-boot.in.
- u-boot.in -> tmp/u-boot.out
Comandi da eseguire in u-boot durante lo stage 0. Questo file è convertito in un'immagine interpretabile da u-boot e quindi eseguita dalla memoria con il comando di u-boot "autoscr".
- environment.in -> tmp/environment
Configurazioni per l'ambiente u-boot. Notare che i cambiamenti in questo file sono fatti al di sopra dell'ambiente interim prodotto nello stage 0. In particolare, la variabile "mtdparts" è mantenuta da questo stage.
Le righe lunghe possono essere divise nell'ambiente semplicemente tramite rientro della continuazione. Notare che la nuova riga e il rientro sono sostituiti da uno spazio. Esempio,
foo=qualche cosa
rendi foo=qualche cosa
- smiley.fig -> tmp/smiley.gz
Lo splash screen dello stage 0, un faccia sorridente su sfondo verde.
[edit] Download cache
- tmp/System_boot.png -> tmp/splash.gz
Questa è una copia del logo Openmoko, che verrà convertito in un'immagine gzip-ed raw framebuffer.
- tmp/openmoko-devel-image-*.rootfs.jffs2
- tmp/lowlevel_foo-*.bin
- tmp/u-boot-*.bin
- tmp/uImage-*.bin
- tmp/env.old
- tmp/env.new
- tmp/preboot_override
- tmp/preboot_override.noscrub
- tmp/preboot_override.scrub
[edit] Script
I primi messaggi saranno qualcosa di simile a questo:
Open On-Chip Debugger > script /home/moko/om/trunk/src/host/devirginator/tmp/script.ocd reset halt wait_halt waiting for target halted... Target 0 halted target halted in ARM state due to debug request, current mode: Supervisor cpsr: 0x400000d3 pc: 0x00000000 [...]
E' importante "pc: 0x00000000". Se il numero è differente, ad esempio qualcosa del tipo "pc: 0xffffffed", il dispositivo probabilmente non è acceso. In questo caso puoi provare a farlo ripartire, o se openocd è bloccato,
- chiudi openocd
- togli e reinserisci il connettore USB nel JTAGkey o nel debug v2 board
- apri openocd
[edit] Stage
Il processo di setup è diviso in tre stage (oltre ad uno speciale stage zero, vedi più avnti). Ogni stage lascia il dispositivo in uno stato stabile. Un processo di installazione può includere uttti o solo alcuni degli stage. Ogni stage richiede il completamento di tutti i precedenti.
- Stage 1: cancella tutti i precedenti contenuti NAND, installa u-boot, e rende il dispositivo pronto a ricevere ulteriori updates da DFU.
- Stage 2: installa Linux ed il file sistem root.
- Stage 3: Da definire.
Nota che probabilmente dovrai avere privilegi per alcune delle operazioni USB che sono eseguite da "devirginate". Per questo motivo esegui tutto come "root".
Per effettuare tutti gli stage, esegui
# ./devirginate
dalla directory trunk/src/host/devirginator/
Per eseguire solo singoli stage, specifica il numero dello stage, con il prefisso "-", ad esempio,
# ./devirginate -1
[edit] Stage 0
Se la tabella dei bad block NAND è invalida, può essere cancellata all'inzio dello stage 1. Questo è chiamato "stage 0".
Non è un'opzione ideale, perchè se l'ultimo blocco NAND è corrotto, queste informazioni andranno perse. Di default, lo stage 0 non viene eseguito.
[edit] Stage 1
Subito dopo l'accensione, lo schermo si accenderà mostrando cose a caso. Questo indica che il processo di setup è iniziato. Nota che il contenuto dello schermo può cambiare ("decay") durante il processo. Ma questo è normale.
Dopo 10-30 secondi, lo schermo diventerà nero. Questo indica che ora u-boot sta venendo eseguito nel dispositivo.
Dopo 60-90 secondi, lo schermo si accenderà di nuovo e mostrerà una faccia sorridente su uno sfondo verde. Questo indica che il primo stage è stato completato. La faccia sorridente apparirà ogni volta che attiverai il dispositivo.
Il dispositivo ora contiene:
- una bad block table (BBT)
- u-boot, con capacità DFU
- un set base di variabili d'ambiente u-boot
- lo splash screen interim
Ciò che ancora manca è:
- il kernel Linux
- il file system root
- l'ambiente finale
- lo splash screen finale
[edit] Stage 2
Per iniziare lo stage 2, attiva il dispositivo. Vedrai lo smiley dello stage 1.
La fase 2 può durare alcuni minuti. Il progresso della proedura di download è indicata dal simbolo hash (#) nel terminale dove è in funzione "devirginate".
Alla fine della fase 2, il dispositivo farà un reset, mostrando un parziale splash screen OpeMoko, quindi farà reset di nuovo, mostrando il corretto splash screen ed infine ci sarà il boot di Linux.
[edit] Stage 3
Da definirsi.
![]() |
Languages: |
English • العربية • Български • Česky • Dansk • Deutsch • Esperanto • Eesti • Español • فارسی • Suomi • Français • עברית • Magyar • Italiano • 한국어 • Nederlands • Norsk (bokmål) • Polski • Português • Română • Русский • Svenska • Slovenčina • Українська • 中文(中国大陆) • 中文(台灣) • Euskara • Català |