Devirginator/it

From Openmoko

(Difference between revisions)
Jump to: navigation, search
(Stage 1)
m (-Guides)
 
(19 intermediate revisions by 6 users not shown)
Line 1: Line 1:
Il '''devirginator''' un è un programma utilizzato in combinazione con [[dfu-util]], [[OpenOCD]] e [[Debug Board]] per reporogrammare alle impostazioni di fabbrica il telefono from scratch.
+
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 ==
  
{{nota|Questa deriva da http://svn.openmoko.org/trunk/src/host/devirginator/README rev. 1215 e potrebbe essere obsoleta}}
+
{{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 fai le modifiche necessarie. In particulare, devi configurare SNAPSHOT.
+
e apportare le modifiche necessarie. In particolare, configurare SNAPSHOT.
 
Quindi
 
Quindi
 
  % make
 
  % make
Questo richiede Netpbm e transfig. Infine assicurati che openocd sia attivo,
+
Questo richiede Netpbm e transfig. Infine assicurarsi che openocd sia attivo, accendere il dispositivo, diventare root ed eseguire
accendi il dispositivo, diventa root, ed esegui
+
 
  # ./devirginate
 
  # ./devirginate
  
Line 27: Line 24:
 
Il dispositivo deve essere connesso con:
 
Il dispositivo deve essere connesso con:
  
* JTAG, con un'interfaccia supportatata da OpenOCD (necessaria per tutti gli stages)
+
* JTAG, con un'interfaccia supportata da OpenOCD (necessaria per tutti gli stages)
* USB, connesso alla su cui è in funzione "devirginate" (richiesto solo per lo stage 2 e successivi)
+
* USB, connesso al computer su cui è in funzione "devirginate" (richiesto solo per lo stage 2 e successivi)
  
Inoltre, se una serial console è connessa al dispositivo, la progressione
+
Inoltre, se una è connessa al dispositivo una console virtuale, l'avanzamento dell'installazione può essere monitorato.
dell'installazione può essere monitorata.
+
  
Sono bnecessari i seguenti programmi:
+
Sono necessari i seguenti programmi:
  
 
==== dfu-util ====
 
==== dfu-util ====
  
* dfu-util deve essere accessibile dalla macchina su chui è attivo "devirginate". Se dfu-util non è nel PATH, puoi selezionare un path specifico in "config".
+
* 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 fara il build di dfu-util, esegui:
+
 
  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 funzionarec. E' richiesto il seguente patch:
+
  
 
http://svn.openmoko.org/developers/werner/openocd-wait-patiently.patch
 
http://svn.openmoko.org/developers/werner/openocd-wait-patiently.patch
  
Per el istruzioni per il build, vedi http://svn.openmoko.org/developers/werner/notes/openocd
+
Per le istruzioni di generazione, consultare http://svn.openmoko.org/developers/werner/notes/openocd
  
   Se stai usando la build di OpenOCD fatta dalla OpenMoko
+
   Se si usa la build di OpenOCD creata da Openmoko (revisione SVN 1180 o successiva), la patch è già applicata.
  distribution (SVN revision 1180 o successiva), il patch è già
+
  applicato.
+
  
 
==== telnet ====
 
==== telnet ====
Line 66: Line 58:
 
==== netpbm, transfig, wget, perl ====
 
==== netpbm, transfig, wget, perl ====
  
"setup.sh" può essere eseguito da un'altra macchian che ha in share la stessa gerarchia del
+
"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 ===
  
Innazitutto devirginator necessita di essere configurato. Questo include
+
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 il setup deve essere fatto nella directory contente tutti i
+
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.
files riferiti a devirginator. I files generati durante il setup
+
sono posizionati nella directory tmp/. I files in tmp/ sono inoltre usati
+
durante l'uso di devirginator.
+
 
+
Per iniziare, copia config.example su "config" e applica le modifiche necessarie.
+
Quasi tutte le configurazioni necessarie sono di defaults, ma una cosa che potresti
+
voler fare è configurare SNAPSHOT con il date code dello the snapshot che desideri.
+
  
Poi esegui  ./setup.sh o semplicemente make .
+
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.
  
setup.sh ora scaricherà ogni file perduto ed eseguirà le varie
+
Quindi, eseguire ./setup.sh o semplicemente make .
conversioni. Se apapre qualche errore durante questo processo, ad esempio a causa della
+
mancanza di strumenti o di un errore di configurazione, setup.sh si fermerà con un errore.
+
Potrai quindi correggere l'errore e riprovare. I files già scaricati in tmp/ verranno
+
saltati quando riprovi (setup.sh lo farà lo stessose i files avranno subito dei
+
cambiamenti).
+
  
setup.sh inoltre controlla se gli esguibili sono disponibili durante l'uso di devirgination
+
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 segnalerà se manca qualcosa. In generale, si può eseguire setup.sh su una macchina diversa che "devirginate", in
+
questo caso questi avvisi saranno ignorati.
+
  
 +
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.
  
=== Files ===
 
  
 +
=== 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 configiurazione statici =====
+
===== File di configurazione statici =====
  
I file seguenti contengono script ed altra informazioni di configurazione
+
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
+
editare questi file per cambiare le funzioni del processo di setup.
+
  
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
  
Commands to execute by OpenOCD in phase 0. To perform variable
+
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.
expansion, each line of this file is processed by the shell with
+
eval "echo $line". Due to this, shell meta-characters should be
+
avoided.
+
  
If changing any addresses in openocd.in, you also need to update
+
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
  
Commands to execute in u-boot during stage 0. This file is converted
+
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".
to an image understood by u-boot, and then executed from memory with
+
u-boot's "autoscr" command.
+
  
 
* environment.in -> tmp/environment
 
* environment.in -> tmp/environment
  
Environment settings for the regular u-boot environment. Note that
+
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.
the changes in this file are made on top of the interim environment
+
produced in stage 0. In particular, the "mtdparts" variable is
+
retained from that stage.
+
  
Long lines can be split in environment.in by simply indenting the
+
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,
continuation. Note that the newline and the indentation are replaced
+
with one space. E.g.,
+
 
<pre>
 
<pre>
foo=some
+
foo=qualche
     thing
+
     cosa
 
</pre>
 
</pre>
would yield foo=some thing
+
rendi foo=qualche cosa
  
 
* smiley.fig -> tmp/smiley.gz
 
* smiley.fig -> tmp/smiley.gz
The stage 0 splash screen, a smiling face on a green background.
+
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
This is a copy of the OpenMoko logo, which then gets converted to a
+
Questa è una copia del logo Openmoko, che verrà convertito in
gzip-ed raw framebuffer image.
+
un'immagine gzip-ed raw framebuffer.
  
 
* tmp/openmoko-devel-image-*.rootfs.jffs2
 
* tmp/openmoko-devel-image-*.rootfs.jffs2
Line 174: Line 137:
 
* tmp/preboot_override.noscrub
 
* tmp/preboot_override.noscrub
 
* tmp/preboot_override.scrub
 
* tmp/preboot_override.scrub
 
  
 
==== Script ====
 
==== Script ====
Line 201: Line 163:
 
=== Stage ===
 
=== Stage ===
  
The setup process is divided into three stages (plus a special zero
+
Il processo di setup è diviso in tre stage (oltre ad uno speciale stage
stage, see below). Each stage leaves the device in a stable state.
+
zero, vedi più avnti). Ogni stage lascia il dispositivo in uno stato
An installation run can include all or only some stages. Each stage
+
stabile. Un processo di installazione può includere uttti o solo alcuni
requires successful completion of all previous ones.
+
degli stage. Ogni stage richiede il completamento di tutti i precedenti.
  
* Stage 1: erases all previous NAND content, installs u-boot, and makes the device ready to receive further updates by DFU.
+
* Stage 1: cancella tutti i precedenti contenuti NAND, installa u-boot, e rende il dispositivo pronto a ricevere ulteriori updates da DFU.
* Stage 2: installs Linux and the root file system.
+
* Stage 2: installa Linux ed il file sistem root.
* Stage 3: To be defined.
+
* Stage 3: Da definire.
  
Note that you most likely require privileges for some of the USB
+
Nota che probabilmente dovrai avere privilegi per alcune delle operazioni USB che
operations "devirginate" performs. Therefore, do all this as "root".
+
sono eseguite da "devirginate". Per questo motivo esegui tutto come "root".
  
To perform all stages, run
+
Per effettuare tutti gli stage, esegui
 
  # ./devirginate
 
  # ./devirginate
from the trunk/src/host/devirginator/ directory.
+
dalla directory trunk/src/host/devirginator/
  
To run only individual stages, specify the stage numbers, each prefixed
+
Per eseguire solo singoli stage, specifica il numero dello stage, con il prefisso "-",
by "-", e.g.,
+
ad esempio,
 
  # ./devirginate -1
 
  # ./devirginate -1
  
Line 233: Line 195:
 
==== Stage 1 ====
 
==== Stage 1 ====
  
Soubito dopo l'accensione, lo schermo si accende mostrado cose a caso.
+
Subito dopo l'accensione, lo schermo si accenderà mostrando cose a caso.
 
Questo indica che il processo di setup è iniziato. Nota che il contenuto
 
Questo indica che il processo di setup è iniziato. Nota che il contenuto
 
dello schermo può cambiare ("decay") durante il processo.
 
dello schermo può cambiare ("decay") durante il processo.
Line 260: Line 222:
 
==== Stage 2 ====
 
==== Stage 2 ====
  
To begin phase 2, activate the device. The stage 1 smiley will show.
+
Per iniziare lo stage 2, attiva il dispositivo. Vedrai lo smiley dello
 +
stage 1.
  
Phase 2 can take several minutes. Progress of the download procedure
+
La fase 2 può durare alcuni minuti. Il progresso della proedura di
is indicated by hash signs (#) printed on the terminal where
+
download è indicata dal simbolo hash (#) nel terminale dove è in
"devirginate" runs.
+
funzione "devirginate".
 
+
At the end of phase 2, the device resets, displays a partial OpenMoko
+
splash screen, then resets again, displays the correct splash screen
+
and finally boots Linux.
+
  
 +
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.
TBD.
+
 
{{Languages|Devirginator}}
 
{{Languages|Devirginator}}
  
[[Category:Developer software]]
+
[[Category:System Developers/it]]
[[Category:Guides]]
+

Latest revision as of 22: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.

Personal tools

Il devirginator un è un programma utilizzato in combinazione con dfu-util, OpenOCD e Debug Board per reporogrammare alle impostazioni di fabbrica il telefono from scratch.


Codice sorgente

Il codice sorgente di devirginator è disponibile qui http://svn.openmoko.org/trunk/src/host/devirginator/


Documentazione

Template:Nota

Iniziare

Per iniziare,

% cp config.example config

e fai le modifiche necessarie. In particulare, devi configurare SNAPSHOT. Quindi

% make

Questo richiede Netpbm e transfig. Infine assicurati che openocd sia attivo, accendi il dispositivo, diventa root, ed esegui

# ./devirginate


Prerequisiti

Il dispositivo deve essere connesso con:

  • JTAG, con un'interfaccia supportatata da OpenOCD (necessaria per tutti gli stages)
  • USB, connesso alla su cui è in funzione "devirginate" (richiesto solo per lo stage 2 e successivi)

Inoltre, se una serial console è connessa al dispositivo, la progressione dell'installazione può essere monitorata.

Sono bnecessari i seguenti programmi:

dfu-util

  • dfu-util deve essere accessibile dalla macchina su chui è attivo "devirginate". Se dfu-util non è nel PATH, puoi selezionare un path specifico in "config".


Per fara il build di dfu-util, esegui:

cd $OMDIR/openmoko/trunk/src/host/dfu-util
./autogen.sh
./configure
make

OpenOCD

OpenOCD SVN revision 130 con libftdi 0.8 funziona. Altre combinazioni possono anche funzionarec. E' richiesto il seguente patch:

http://svn.openmoko.org/developers/werner/openocd-wait-patiently.patch

Per el istruzioni per il build, vedi http://svn.openmoko.org/developers/werner/notes/openocd

 Se stai usando la build di OpenOCD fatta dalla OpenMoko
 distribution (SVN revision 1180 o successiva), il patch è già
 applicato.

telnet

Oltre a tutto ciò, "devirginate" necessita di telnet.


netpbm, transfig, wget, perl

"setup.sh" può essere eseguito da un'altra macchian che ha in share la stessa gerarchia del file system. Necessita di Netpbm, transfig, wget, e Perl.


Setup

Innazitutto devirginator necessita di essere configurato. Questo include

  • scaricare i binari per u-boot, kernel, etc.
  • generare/convertire diversi files usando il processo di setup

Per il momento il setup deve essere fatto nella directory contente tutti i files riferiti a devirginator. I files generati durante il setup sono posizionati nella directory tmp/. I files in tmp/ sono inoltre usati durante l'uso di devirginator.

Per iniziare, copia config.example su "config" e applica le modifiche necessarie. Quasi tutte le configurazioni necessarie sono di defaults, ma una cosa che potresti voler fare è configurare SNAPSHOT con il date code dello the snapshot che desideri.

Poi esegui ./setup.sh o semplicemente make .

setup.sh ora scaricherà ogni file perduto ed eseguirà le varie conversioni. Se apapre qualche errore durante questo processo, ad esempio a causa della mancanza di strumenti o di un errore di configurazione, setup.sh si fermerà con un errore. Potrai quindi correggere l'errore e riprovare. I files già scaricati in tmp/ verranno saltati quando riprovi (setup.sh lo farà lo stessose i files avranno subito dei cambiamenti).

setup.sh inoltre controlla se gli esguibili sono disponibili durante l'uso di devirgination e segnalerà se manca qualcosa. In generale, si può eseguire setup.sh su una macchina diversa che "devirginate", in questo caso questi avvisi saranno ignorati.


Files

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

Configurazione utente

File di configiurazione statici

I file seguenti contengono script ed altra informazioni di configurazione "statici" che sono usati nel processo di devirgination. Normalmente basta editare questi file per cambiare le funzioni del processo di setup.

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

Commands to execute by OpenOCD in phase 0. To perform variable expansion, each line of this file is processed by the shell with eval "echo $line". Due to this, shell meta-characters should be avoided.

If changing any addresses in openocd.in, you also need to update u-boot.in.

  • u-boot.in -> tmp/u-boot.out

Commands to execute in u-boot during stage 0. This file is converted to an image understood by u-boot, and then executed from memory with u-boot's "autoscr" command.

  • environment.in -> tmp/environment

Environment settings for the regular u-boot environment. Note that the changes in this file are made on top of the interim environment produced in stage 0. In particular, the "mtdparts" variable is retained from that stage.

Long lines can be split in environment.in by simply indenting the continuation. Note that the newline and the indentation are replaced with one space. E.g.,

foo=some
    thing

would yield foo=some thing

  • smiley.fig -> tmp/smiley.gz

The stage 0 splash screen, a smiling face on a green background.

Download cache

  • tmp/System_boot.png -> tmp/splash.gz

This is a copy of the OpenMoko logo, which then gets converted to a gzip-ed raw framebuffer image.

  • 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


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

Stage

The setup process is divided into three stages (plus a special zero stage, see below). Each stage leaves the device in a stable state. An installation run can include all or only some stages. Each stage requires successful completion of all previous ones.

  • Stage 1: erases all previous NAND content, installs u-boot, and makes the device ready to receive further updates by DFU.
  • Stage 2: installs Linux and the root file system.
  • Stage 3: To be defined.

Note that you most likely require privileges for some of the USB operations "devirginate" performs. Therefore, do all this as "root".

To perform all stages, run

# ./devirginate

from the trunk/src/host/devirginator/ directory.

To run only individual stages, specify the stage numbers, each prefixed by "-", e.g.,

# ./devirginate -1


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.

Stage 1

Soubito dopo l'accensione, lo schermo si accende mostrado 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

Stage 2

To begin phase 2, activate the device. The stage 1 smiley will show.

Phase 2 can take several minutes. Progress of the download procedure is indicated by hash signs (#) printed on the terminal where "devirginate" runs.

At the end of phase 2, the device resets, displays a partial OpenMoko splash screen, then resets again, displays the correct splash screen and finally boots Linux.


Stage 3

TBD.