Dfu-util/fr

From Openmoko

(Difference between revisions)
Jump to: navigation, search
(New page: {{languages}} {{warning|Dfu-util ne fonctionne pas correctement sur les [http://en.wikipedia.org/wiki/Big_endian#Endianness_and_hardware architectures gros-boutistes (big-endian)]}} {{war...)
 
(Exécutables)
 
(6 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{languages}}
+
{{Languages|Dfu-util}}
  
 
{{warning|Dfu-util ne fonctionne pas correctement sur les [http://en.wikipedia.org/wiki/Big_endian#Endianness_and_hardware architectures gros-boutistes (big-endian)]}}
 
{{warning|Dfu-util ne fonctionne pas correctement sur les [http://en.wikipedia.org/wiki/Big_endian#Endianness_and_hardware architectures gros-boutistes (big-endian)]}}
Line 12: Line 12:
  
 
En utilisant dfu-util et votre smartphone, vous pouvez :
 
En utilisant dfu-util et votre smartphone, vous pouvez :
* transférer et mettre à jour des [[partitions]] de la mémoire flash interne [[NAND]].
+
* transférer et mettre à jour des [[Partitions|partitions]] de la mémoire flash interne [[NAND]].
 
* transférer n'importe quoi vers la mémoire RAM
 
* transférer n'importe quoi vers la mémoire RAM
 
** cela peut être utilisé dans le cadre de cycles de développement rapide de code bas niveau comme les noyaux sans mettre à jour la mémoire flash
 
** cela peut être utilisé dans le cadre de cycles de développement rapide de code bas niveau comme les noyaux sans mettre à jour la mémoire flash
* lire les [[partitions]] de la mémoire interne NAND  
+
* lire les [[Partitions|partitions]] de la mémoire interne NAND
 
** c'est un moyen facile et efficace d'effectuer des sauvegardes complètes de votre téléphone
 
** c'est un moyen facile et efficace d'effectuer des sauvegardes complètes de votre téléphone
  
 
== Code source ==
 
== Code source ==
 
En environnement Debian et Ubuntu, vous aurez besoin de libusb-dev :
 
En environnement Debian et Ubuntu, vous aurez besoin de libusb-dev :
sudo apt-get install libusb-dev autogen pkg-config autotools-dev autoconf automake
+
sudo apt-get install libusb-dev autogen pkg-config autotools-dev autoconf automake
  
 
En environnement Fedora vous aurez besoin de libusb-devel et libusb-static :
 
En environnement Fedora vous aurez besoin de libusb-devel et libusb-static :
yum install libusb-devel libusb-static
+
yum install libusb-devel libusb-static
  
 
En environnement Gentoo vous pouvez utiliser emerge avec openmoko-dfu-util une fois que vous l'aurez autorisé dans la liste de paquets :
 
En environnement Gentoo vous pouvez utiliser emerge avec openmoko-dfu-util une fois que vous l'aurez autorisé dans la liste de paquets :
echo "app-mobilephone/openmoko-dfu-util      **" >> /etc/portage/package.keywords
+
echo "app-mobilephone/openmoko-dfu-util      **" >> /etc/portage/package.keywords
emerge -va app-mobilephone/openmoko-dfu-util
+
emerge -va app-mobilephone/openmoko-dfu-util
  
 
Vous pouvez télécharger et construire la dernière version de dfu-util avec les commandes subversion suivantes :
 
Vous pouvez télécharger et construire la dernière version de dfu-util avec les commandes subversion suivantes :
svn co http://svn.openmoko.org/trunk/src/host/dfu-util/
+
svn co http://svn.openmoko.org/trunk/src/host/dfu-util/
cd dfu-util
+
cd dfu-util
./autogen.sh
+
./autogen.sh
./configure
+
./configure
make
+
make
  
 
L'exécutable généré est dfu-util/src/dfu-util.
 
L'exécutable généré est dfu-util/src/dfu-util.
Line 40: Line 40:
 
== Exécutables ==
 
== Exécutables ==
  
Binary packages will be [http://downloads.openmoko.org/releases/Om2008.8-update/dfu-util made available] as part of the regular Openmoko builds. Currently, there is a dfu-util for Linux/i386.
+
Des paquets binaires seront [http://downloads.openmoko.org/releases/Om2008.8-update/dfu-util mis à disposition] via la construction de la distribution Openmoko. Pour le moment, l'outil est disponible pour Linux/i386.
  
You need to make the downloaded file (dfu-util) executable with:
+
Il est nécessaire de rendre le fichier téléchargé (dfu-util) exécutable avec :
 
<pre>
 
<pre>
 
chmod +x dfu-util
 
chmod +x dfu-util
 
</pre>
 
</pre>
you can then run it with
+
vous pouvez alors l'exécuter avec
 
<pre>
 
<pre>
 
./dfu-util
 
./dfu-util
 
</pre>
 
</pre>
see below for full instructions.
+
voir ci-dessous pour des instructions plus complètes.
  
[http://packages.debian.org/dfu-util dfu-util is packaged] for Debian ''>= lenny'', so can be installed with: <tt>apt-get install dfu-util</tt>
+
[http://packages.debian.org/dfu-util dfu-util est disponible comme paquet] pour Debian ''>= lenny'', il peut être installé avec la commande suivante : <tt>apt-get install dfu-util</tt>
  
[http://sourceforge.net/projects/slackfr-packs/ dfu-util is packaged] for '''Slackware''' (12.1), so can be installed with: <tt>pkgtool</tt>
+
[http://downloads.sourceforge.net/slackfr-packs/dfu-util-svn4686-i686-1cfdev12.1.tgz dfu-util est disponible comme paquet] pour la distribution '''Slackware''' (12.1), il peut être installé avec : <tt>pkgtool</tt>
  
Currently, there is a largely untested binary for Win32 (see [[Dfu-util-windows]]). Windows users can refer to [[No_Linux]] for a more tested approach.
+
Il existe actuellement un exécutable expérimental pour les plateformes Win32 (voir [[Dfu-util-windows]]). Les utilisateurs de Windows peuvent consulter la page [[No_Linux]].
  
Compiling dfu-util on Mac:
+
Compiler dfu-util sur Mac:
 
* http://lists.openmoko.org/pipermail/community/2007-July/008438.html
 
* http://lists.openmoko.org/pipermail/community/2007-July/008438.html
 
* [[User:SNMoore]]
 
* [[User:SNMoore]]
Line 65: Line 65:
 
== Documentation de réference ==
 
== Documentation de réference ==
  
To run dfu-util, you need to have /proc/bus/usb mounted and workingThe terminal command "ls /proc/bus/usb" should return something similar to, "001  002  003  004  005  devices", it shouldn't be empty. If it is empty, use this command:
+
Pour exécuter dfu-util, il est nécessaire d'avoir monté la partition /proc/bus/usb.  La commande "ls /proc/bus/usb" doit renvoyer un résultat ressemblant à : "001  002  003  004  005  devices". Le résultat de la commande ne doit pas être vide, et si c'est quand même le cas cela signifie que le système de fichiers n'est pas monté et peut être monté avec la commande :
  
 
<pre>
 
<pre>
Line 71: Line 71:
 
</pre>
 
</pre>
  
You can permanently add it in your fstab so that it automatically mounts. You can use emacs to edit you fstab using the command "sudo emacs /etc/fstab -nw" in your terminal window. Add the below line to your fstab:
+
Vous pouvez rajouter la ligne suivante dans votre fichier /etc/fstab pour que le système de fichiers soit automatiquement monté :
  
 
<pre>
 
<pre>
Line 79: Line 79:
  
 
=== Avant d'utiliser dfu-util ===
 
=== Avant d'utiliser dfu-util ===
You'll need to boot your phone into the NAND Boot Menu:
+
Vous devrez démarrer votre téléphone avec le menu de démarrage NAND :
* Ensure your phone is connected directly to the host computer by USB (not the USB-charger! :)
+
* Vérifiez que votre téléphone est connecté à l'ordinateur via un câble USB (et pas à un chargeur USB !) :)
* Ensure that you execute all dfu-util commands as root
+
* Assurez-vous que vous déclenchez toutes les commandes dfu-util en tant que super-utilisateur
* Power off the phone
+
* Eteignez le téléphone
* Hold down AUX
+
* Maintenez le bouton AUX appuyé
* Press POWER until the Boot Menu appears
+
* Appuyez sur le bouton POWER jusqu'à ce que le menu de démarrage apparaisse
see also [[Booting the Neo FreeRunner]]
+
voir aussi [[Booting the Neo FreeRunner]]
  
 
=== Options en ligne de commande ===
 
=== Options en ligne de commande ===
Line 96: Line 96:
  
 
Usage: dfu-util [options] ...
 
Usage: dfu-util [options] ...
  -h --help                    Print this help message
+
-h --help                    Print this help message
  -V --version                  Print the version number
+
-V --version                  Print the version number
  -l --list                    List the currently attached DFU capable USB devices
+
-l --list                    List the currently attached DFU capable USB devices
  -d --device vendor:product    Specify Vendor/Product ID of DFU device
+
-d --device vendor:product    Specify Vendor/Product ID of DFU device
  -c --cfg config_nr            Specify the Configuration of DFU device
+
-c --cfg config_nr            Specify the Configuration of DFU device
  -i --intf intf_nr            Specify the DFU Interface number
+
-i --intf intf_nr            Specify the DFU Interface number
  -a --alt alt_nr              Specify the Altseting of the DFU Interface
+
-a --alt alt_nr              Specify the Altseting of the DFU Interface
  -t --transfer-size            Specify the number of bytes per USB Transfer
+
-t --transfer-size            Specify the number of bytes per USB Transfer
  -U --upload file              Read firmware from device into <file>
+
-U --upload file              Read firmware from device into <file>
  -D --download file            Write firmware from <file> into device
+
-D --download file            Write firmware from <file> into device
  -R --reset                    Issue USB Reset signalling once we're finished
+
-R --reset                    Issue USB Reset signalling once we're finished
 
</pre>
 
</pre>
  
 
==== --list ====
 
==== --list ====
  
Using the --list option, you can list the available DFU capable devices, their configuration, interface and altsettings.
+
En utilisant l'option --list, vous pouvez voir les périphériques compatibles DFU, leur configuration, l'interface et les paramétrages associés.
Below is an example for a current Neo1973 phone in u-boot '''Runtime Mode'''
+
Vous trouverez ci-dessous un exemple pour le téléphone Neo1973 en mode u-boot '''Runtime Mode'''
 
<pre>
 
<pre>
 
# ./dfu-util --list
 
# ./dfu-util --list
Line 121: Line 121:
 
</pre>
 
</pre>
  
Below is an example for a current Neo1973 phone in u-boot '''DFU Mode'''
+
Vous trouverez ci-dessous un exemple pour le téléphone Neo1973 en mode u-boot '''DFU Mode'''
 
<pre>
 
<pre>
 
# ./dfu-util --list
 
# ./dfu-util --list
Line 135: Line 135:
 
</pre>
 
</pre>
  
This shows you six interfaces, all in '''configuration 0''' and '''interface 0''', with altsetting 0...5, for RAM and each [[partition]].
+
Cela vous montre six interfaces, toutes avec '''configuration 0''' et '''interface 0''', avec altsetting 0...5, pour l'accès à la RAM et chacune des [[Partitions|partition]].
  
 
==== --device ====
 
==== --device ====
  
You can specify the USB Vendor and Product ID of the device you want to program:
+
Vous pouvez indiquer les numéros USB de produit et de vendeur du périphérique que vous voulez programmer :
  
dfu-util --device 0x1457:0x5119
+
dfu-util --device 0x1457:0x5119
  
If you only have one standards-compliant DFU device attached to your PC, this is optional. However, as soon as you have multiple DFU devices, dfu-util will detect this and abort, asking you to specify which device it shall use.
+
Si un seul périphérique DFU est connecté à votre ordinateur, il n'est pas nécessaire de préciser cela. Dès que plusieurs périphériques sont détectés, dfu-util le détectera et s'arrêtera en vous demandant lequel il doit utiliser.
  
 
==== --transfer-size ====
 
==== --transfer-size ====
  
Specifies the size of each individual USB transfer. If you don't use it, the maximum possible size for your combination of host operating system and USB device is chosen (for optimal performance).
+
Indique la taille de chaque transfert USB. Si vous ne précisez pas de valeur, la taille maximale compatible avec la combinaison de système d'exploitation et de périphérique USB est choisie (pour obtenir les meilleures performances).
  
 
==== --download ====
 
==== --download ====
  
download the given file into the device.
+
Télécharge le fichier demandé dans le périphérique.
  
 
==== --upload ====
 
==== --upload ====
  
upload from the DFU device into the given file[name].
+
enregistre le contenu du périphérique DFU dans le fichier dont le nom est indiqué.
  
{{note|Upload support is currently broken - [http://docs.openmoko.org/trac/ticket/676 #676]}}
+
{{note|L'enregistrement du contenu du périphérique est actuellement défectueux - [http://docs.openmoko.org/trac/ticket/676 #676]}}
  
 
== Commandes fréquemment utilisées ==
 
== Commandes fréquemment utilisées ==
Line 165: Line 165:
 
=== Mettre à jour le rootfs ===
 
=== Mettre à jour le rootfs ===
  
dfu-util -a rootfs -R -D /path/to/openmoko-devel-image.jffs2
+
dfu-util -a rootfs -R -D /path/to/openmoko-devel-image.jffs2
  
 
=== Mettre à jour le noyau ===
 
=== Mettre à jour le noyau ===
  
dfu-util -a kernel -R -D /path/to/uImage
+
dfu-util -a kernel -R -D /path/to/uImage
  
 
=== Mettre à jour le gestionnaire de démarrage ===
 
=== Mettre à jour le gestionnaire de démarrage ===
  
dfu-util -a u-boot -R -D /path/to/u-boot.bin
+
dfu-util -a u-boot -R -D /path/to/u-boot.bin
  
 
=== Mettre à jour l'image affichée au démarrage ===
 
=== Mettre à jour l'image affichée au démarrage ===
  
dfu-util -a u-splash -R -D /path/to/splash.gz
+
dfu-util -a u-splash -R -D /path/to/splash.gz
  
 
see also [[Configuring_the_boot_splash_screens]]
 
see also [[Configuring_the_boot_splash_screens]]
Line 183: Line 183:
 
=== Copier un noyau dans la RAM ===
 
=== Copier un noyau dans la RAM ===
  
dfu-util -a 0 -R -D /path/to/uImage
+
dfu-util -a 0 -R -D /path/to/uImage
  
Once this has finished, the kernel will be available at the default load address of 0x32000000 in Neo1973 RAM.  
+
Once this has finished, the kernel will be available at the default load address of 0x32000000 in Neo1973 RAM.
  
 
{{note|You cannot transfer more than 2MB of data into RAM using this method}}
 
{{note|You cannot transfer more than 2MB of data into RAM using this method}}
Line 191: Line 191:
 
== Notes de mise à jour ==
 
== Notes de mise à jour ==
  
If during flashing of an image using dfu-util you're consistently getting an error -110 message, check that the size of the destination NAND [[partition]] is big enough to hold the image.  For example the kernel partition is only 2 MB big by default and a kernel with debugging info compiled-in can often exceed this.  It's possible to change the partition layout to enlarge a given partition and shrink other partitions but you have to remember to reflash all partitions whose start offset has changed afterwards.  To adjust partitions layout use the ''mtdparts'' [[Bootloader|u-boot command]].
+
If during flashing of an image using dfu-util you're consistently getting an error -110 message, check that the size of the destination NAND [[Partitions|partition]] is big enough to hold the image.  For example the kernel partition is only 2 MB big by default and a kernel with debugging info compiled-in can often exceed this.  It's possible to change the partition layout to enlarge a given partition and shrink other partitions but you have to remember to reflash all partitions whose start offset has changed afterwards.  To adjust partitions layout use the ''mtdparts'' [[Bootloader|u-boot command]].
  
 
If in turn you're facing errors in seemingly random places during the flashing of images, most likely the USB hub or cable through which your Neo1973 is connected, is of too poor quality.  It is recommended that you always connect the phone directly to the host when using dfu-util.
 
If in turn you're facing errors in seemingly random places during the flashing of images, most likely the USB hub or cable through which your Neo1973 is connected, is of too poor quality.  It is recommended that you always connect the phone directly to the host when using dfu-util.

Latest revision as of 11:06, 3 November 2008


WARNING: Dfu-util ne fonctionne pas correctement sur les architectures gros-boutistes (big-endian)


WARNING: Ne mettez pas à jour U-Boot si vous n'êtes pas sûr d'en avoir besoin


NOTE: Il est nécessaire de connecter le neo directement sans utiliser de hub USB. Avec un hub des problèmes peuvent apparaître en particulier lors de la réinitialisation USB.


Contents

[edit] Objectif

dfu-util est un programme qui sert à mettre à jour les logiciels des périphériques USB à partir d'un ordinateur via le protocole USB DFU (Universal Serial Bus Device Firmware Upgrade).

Dans le cadre du projet Openmoko, on utilise ce programme pour communiquer avec notre gestionnaire de démarrage u-boot qui intègre la partie complémentaire du protocole DFU.

En utilisant dfu-util et votre smartphone, vous pouvez :

  • transférer et mettre à jour des partitions de la mémoire flash interne NAND.
  • transférer n'importe quoi vers la mémoire RAM
    • cela peut être utilisé dans le cadre de cycles de développement rapide de code bas niveau comme les noyaux sans mettre à jour la mémoire flash
  • lire les partitions de la mémoire interne NAND
    • c'est un moyen facile et efficace d'effectuer des sauvegardes complètes de votre téléphone

[edit] Code source

En environnement Debian et Ubuntu, vous aurez besoin de libusb-dev : sudo apt-get install libusb-dev autogen pkg-config autotools-dev autoconf automake

En environnement Fedora vous aurez besoin de libusb-devel et libusb-static : yum install libusb-devel libusb-static

En environnement Gentoo vous pouvez utiliser emerge avec openmoko-dfu-util une fois que vous l'aurez autorisé dans la liste de paquets : echo "app-mobilephone/openmoko-dfu-util **" >> /etc/portage/package.keywords emerge -va app-mobilephone/openmoko-dfu-util

Vous pouvez télécharger et construire la dernière version de dfu-util avec les commandes subversion suivantes : svn co http://svn.openmoko.org/trunk/src/host/dfu-util/ cd dfu-util ./autogen.sh ./configure make

L'exécutable généré est dfu-util/src/dfu-util.

[edit] Exécutables

Des paquets binaires seront mis à disposition via la construction de la distribution Openmoko. Pour le moment, l'outil est disponible pour Linux/i386.

Il est nécessaire de rendre le fichier téléchargé (dfu-util) exécutable avec :

chmod +x dfu-util

vous pouvez alors l'exécuter avec

./dfu-util

voir ci-dessous pour des instructions plus complètes.

dfu-util est disponible comme paquet pour Debian >= lenny, il peut être installé avec la commande suivante : apt-get install dfu-util

dfu-util est disponible comme paquet pour la distribution Slackware (12.1), il peut être installé avec : pkgtool

Il existe actuellement un exécutable expérimental pour les plateformes Win32 (voir Dfu-util-windows). Les utilisateurs de Windows peuvent consulter la page No_Linux.

Compiler dfu-util sur Mac:

[edit] Documentation de réference

Pour exécuter dfu-util, il est nécessaire d'avoir monté la partition /proc/bus/usb. La commande "ls /proc/bus/usb" doit renvoyer un résultat ressemblant à : "001 002 003 004 005 devices". Le résultat de la commande ne doit pas être vide, et si c'est quand même le cas cela signifie que le système de fichiers n'est pas monté et peut être monté avec la commande :

sudo mount -t usbfs usbfs /proc/bus/usb

Vous pouvez rajouter la ligne suivante dans votre fichier /etc/fstab pour que le système de fichiers soit automatiquement monté :

usbfs   /proc/bus/usb   usbfs   defaults


[edit] Avant d'utiliser dfu-util

Vous devrez démarrer votre téléphone avec le menu de démarrage NAND :

  • Vérifiez que votre téléphone est connecté à l'ordinateur via un câble USB (et pas à un chargeur USB !) :)
  • Assurez-vous que vous déclenchez toutes les commandes dfu-util en tant que super-utilisateur
  • Eteignez le téléphone
  • Maintenez le bouton AUX appuyé
  • Appuyez sur le bouton POWER jusqu'à ce que le menu de démarrage apparaisse

voir aussi Booting the Neo FreeRunner

[edit] Options en ligne de commande

[edit] --help

dfu-util - (C) 2007 by Openmoko Inc.
This program is Free Software and has ABSOLUTELY NO WARRANTY

Usage: dfu-util [options] ...
-h --help                     Print this help message
-V --version                  Print the version number
-l --list                     List the currently attached DFU capable USB devices
-d --device vendor:product    Specify Vendor/Product ID of DFU device
-c --cfg config_nr            Specify the Configuration of DFU device
-i --intf intf_nr             Specify the DFU Interface number
-a --alt alt_nr               Specify the Altseting of the DFU Interface
-t --transfer-size            Specify the number of bytes per USB Transfer
-U --upload file              Read firmware from device into <file>
-D --download file            Write firmware from <file> into device
-R --reset                    Issue USB Reset signalling once we're finished

[edit] --list

En utilisant l'option --list, vous pouvez voir les périphériques compatibles DFU, leur configuration, l'interface et les paramétrages associés. Vous trouverez ci-dessous un exemple pour le téléphone Neo1973 en mode u-boot Runtime Mode

# ./dfu-util --list
dfu-util - (C) 2007 by Openmoko Inc.
This program is Free Software and has ABSOLUTELY NO WARRANTY

Found DFU Runtime: [0x1457:0x5119] devnum=0, cfg=0, intf=2, alt=0, name="USB Device Firmware Upgrade"

Vous trouverez ci-dessous un exemple pour le téléphone Neo1973 en mode u-boot DFU Mode

# ./dfu-util --list
dfu-util - (C) 2007 by Openmoko Inc.
This program is Free Software and has ABSOLUTELY NO WARRANTY

Found DFU: [0x1457:0x5119] devnum=16, cfg=0, intf=0, alt=0, name="RAM 0x32000000"
Found DFU: [0x1457:0x5119] devnum=16, cfg=0, intf=0, alt=1, name="u-boot"
Found DFU: [0x1457:0x5119] devnum=16, cfg=0, intf=0, alt=2, name="u-boot_env"
Found DFU: [0x1457:0x5119] devnum=16, cfg=0, intf=0, alt=3, name="kernel"
Found DFU: [0x1457:0x5119] devnum=16, cfg=0, intf=0, alt=4, name="splash"
Found DFU: [0x1457:0x5119] devnum=16, cfg=0, intf=0, alt=5, name="rootfs"

Cela vous montre six interfaces, toutes avec configuration 0 et interface 0, avec altsetting 0...5, pour l'accès à la RAM et chacune des partition.

[edit] --device

Vous pouvez indiquer les numéros USB de produit et de vendeur du périphérique que vous voulez programmer :

dfu-util --device 0x1457:0x5119

Si un seul périphérique DFU est connecté à votre ordinateur, il n'est pas nécessaire de préciser cela. Dès que plusieurs périphériques sont détectés, dfu-util le détectera et s'arrêtera en vous demandant lequel il doit utiliser.

[edit] --transfer-size

Indique la taille de chaque transfert USB. Si vous ne précisez pas de valeur, la taille maximale compatible avec la combinaison de système d'exploitation et de périphérique USB est choisie (pour obtenir les meilleures performances).

[edit] --download

Télécharge le fichier demandé dans le périphérique.

[edit] --upload

enregistre le contenu du périphérique DFU dans le fichier dont le nom est indiqué.

NOTE: L'enregistrement du contenu du périphérique est actuellement défectueux - #676


[edit] Commandes fréquemment utilisées

Pour l'instant, il n'y a pas de manuel à proprement parler. Mais vous pouvez utiliser les quelques exemples suivants :

[edit] Mettre à jour le rootfs

dfu-util -a rootfs -R -D /path/to/openmoko-devel-image.jffs2

[edit] Mettre à jour le noyau

dfu-util -a kernel -R -D /path/to/uImage

[edit] Mettre à jour le gestionnaire de démarrage

dfu-util -a u-boot -R -D /path/to/u-boot.bin

[edit] Mettre à jour l'image affichée au démarrage

dfu-util -a u-splash -R -D /path/to/splash.gz

see also Configuring_the_boot_splash_screens

[edit] Copier un noyau dans la RAM

dfu-util -a 0 -R -D /path/to/uImage

Once this has finished, the kernel will be available at the default load address of 0x32000000 in Neo1973 RAM.

NOTE: You cannot transfer more than 2MB of data into RAM using this method


[edit] Notes de mise à jour

If during flashing of an image using dfu-util you're consistently getting an error -110 message, check that the size of the destination NAND partition is big enough to hold the image. For example the kernel partition is only 2 MB big by default and a kernel with debugging info compiled-in can often exceed this. It's possible to change the partition layout to enlarge a given partition and shrink other partitions but you have to remember to reflash all partitions whose start offset has changed afterwards. To adjust partitions layout use the mtdparts u-boot command.

If in turn you're facing errors in seemingly random places during the flashing of images, most likely the USB hub or cable through which your Neo1973 is connected, is of too poor quality. It is recommended that you always connect the phone directly to the host when using dfu-util.

If dfu-util reports a message like the following, before it starts flashing:
Resetting USB...
not at least 2 device changes found ?!?
Lost device after RESET?
retry the command - it should work on a second run.

If dfu-util complains about not being able to program the device while in runtime mode, do the following: while in the boot menu, remove the usb cable and insert it again. Depending on the version of uBoot it should display somewhere in the menu that it is now in DFU mode. Now dfu-util should be able to continue.

If dfu-util is too slow on Windows, that's a known bug. A suggestion is to run Linux on a virtual box. An full root image 97MB that is 776Mbit, the USB 1.1 on the Neo FreeRunner is capable of either 1.5 Mbit/s (Low-Speed) and 12 Mbit/s (Full-Speed). So flashing it should take less than 9 minutes with low speed and a bit more than a minute with full-speed. Plus transfer overhead, plus decompression on the Neo side.

[edit] Voir aussi

Personal tools


WARNING: Dfu-util ne fonctionne pas correctement sur les architectures gros-boutistes (big-endian)


WARNING: Ne mettez pas à jour U-Boot si vous n'êtes pas sûr d'en avoir besoin


NOTE: Il est nécessaire de connecter le neo directement sans utiliser de hub USB. Avec un hub des problèmes peuvent apparaître en particulier lors de la réinitialisation USB.


Objectif

dfu-util est un programme qui sert à mettre à jour les logiciels des périphériques USB à partir d'un ordinateur via le protocole USB DFU (Universal Serial Bus Device Firmware Upgrade).

Dans le cadre du projet Openmoko, on utilise ce programme pour communiquer avec notre gestionnaire de démarrage u-boot qui intègre la partie complémentaire du protocole DFU.

En utilisant dfu-util et votre smartphone, vous pouvez :

  • transférer et mettre à jour des partitions de la mémoire flash interne NAND.
  • transférer n'importe quoi vers la mémoire RAM
    • cela peut être utilisé dans le cadre de cycles de développement rapide de code bas niveau comme les noyaux sans mettre à jour la mémoire flash
  • lire les partitions de la mémoire interne NAND
    • c'est un moyen facile et efficace d'effectuer des sauvegardes complètes de votre téléphone

Code source

En environnement Debian et Ubuntu, vous aurez besoin de libusb-dev :

sudo apt-get install libusb-dev autogen pkg-config autotools-dev autoconf automake

En environnement Fedora vous aurez besoin de libusb-devel et libusb-static :

yum install libusb-devel libusb-static

En environnement Gentoo vous pouvez utiliser emerge avec openmoko-dfu-util une fois que vous l'aurez autorisé dans la liste de paquets :

echo "app-mobilephone/openmoko-dfu-util       **" >> /etc/portage/package.keywords
emerge -va app-mobilephone/openmoko-dfu-util

Vous pouvez télécharger et construire la dernière version de dfu-util avec les commandes subversion suivantes :

svn co http://svn.openmoko.org/trunk/src/host/dfu-util/
cd dfu-util
./autogen.sh
./configure
make

L'exécutable généré est dfu-util/src/dfu-util.

Exécutables

Binary packages will be made available as part of the regular Openmoko builds. Currently, there is a dfu-util for Linux/i386.

You need to make the downloaded file (dfu-util) executable with:

chmod +x dfu-util

you can then run it with

./dfu-util

see below for full instructions.

dfu-util is packaged for Debian >= lenny, so can be installed with: apt-get install dfu-util

dfu-util is packaged for Slackware (12.1), so can be installed with: pkgtool

Currently, there is a largely untested binary for Win32 (see Dfu-util-windows). Windows users can refer to No_Linux for a more tested approach.

Compiling dfu-util on Mac:

Documentation de réference

To run dfu-util, you need to have /proc/bus/usb mounted and working. The terminal command "ls /proc/bus/usb" should return something similar to, "001 002 003 004 005 devices", it shouldn't be empty. If it is empty, use this command:

sudo mount -t usbfs usbfs /proc/bus/usb

You can permanently add it in your fstab so that it automatically mounts. You can use emacs to edit you fstab using the command "sudo emacs /etc/fstab -nw" in your terminal window. Add the below line to your fstab:

usbfs   /proc/bus/usb   usbfs   defaults


Avant d'utiliser dfu-util

You'll need to boot your phone into the NAND Boot Menu:

  • Ensure your phone is connected directly to the host computer by USB (not the USB-charger! :)
  • Ensure that you execute all dfu-util commands as root
  • Power off the phone
  • Hold down AUX
  • Press POWER until the Boot Menu appears

see also Booting the Neo FreeRunner

Options en ligne de commande

--help

dfu-util - (C) 2007 by Openmoko Inc.
This program is Free Software and has ABSOLUTELY NO WARRANTY

Usage: dfu-util [options] ...
  -h --help                     Print this help message
  -V --version                  Print the version number
  -l --list                     List the currently attached DFU capable USB devices
  -d --device vendor:product    Specify Vendor/Product ID of DFU device
  -c --cfg config_nr            Specify the Configuration of DFU device
  -i --intf intf_nr             Specify the DFU Interface number
  -a --alt alt_nr               Specify the Altseting of the DFU Interface
  -t --transfer-size            Specify the number of bytes per USB Transfer
  -U --upload file              Read firmware from device into <file>
  -D --download file            Write firmware from <file> into device
  -R --reset                    Issue USB Reset signalling once we're finished

--list

Using the --list option, you can list the available DFU capable devices, their configuration, interface and altsettings. Below is an example for a current Neo1973 phone in u-boot Runtime Mode

# ./dfu-util --list
dfu-util - (C) 2007 by Openmoko Inc.
This program is Free Software and has ABSOLUTELY NO WARRANTY

Found DFU Runtime: [0x1457:0x5119] devnum=0, cfg=0, intf=2, alt=0, name="USB Device Firmware Upgrade"

Below is an example for a current Neo1973 phone in u-boot DFU Mode

# ./dfu-util --list
dfu-util - (C) 2007 by Openmoko Inc.
This program is Free Software and has ABSOLUTELY NO WARRANTY

Found DFU: [0x1457:0x5119] devnum=16, cfg=0, intf=0, alt=0, name="RAM 0x32000000"
Found DFU: [0x1457:0x5119] devnum=16, cfg=0, intf=0, alt=1, name="u-boot"
Found DFU: [0x1457:0x5119] devnum=16, cfg=0, intf=0, alt=2, name="u-boot_env"
Found DFU: [0x1457:0x5119] devnum=16, cfg=0, intf=0, alt=3, name="kernel"
Found DFU: [0x1457:0x5119] devnum=16, cfg=0, intf=0, alt=4, name="splash"
Found DFU: [0x1457:0x5119] devnum=16, cfg=0, intf=0, alt=5, name="rootfs"

This shows you six interfaces, all in configuration 0 and interface 0, with altsetting 0...5, for RAM and each partition.

--device

You can specify the USB Vendor and Product ID of the device you want to program:

dfu-util --device 0x1457:0x5119

If you only have one standards-compliant DFU device attached to your PC, this is optional. However, as soon as you have multiple DFU devices, dfu-util will detect this and abort, asking you to specify which device it shall use.

--transfer-size

Specifies the size of each individual USB transfer. If you don't use it, the maximum possible size for your combination of host operating system and USB device is chosen (for optimal performance).

--download

download the given file into the device.

--upload

upload from the DFU device into the given file[name].

NOTE: Upload support is currently broken - #676


Commandes fréquemment utilisées

Pour l'instant, il n'y a pas de manuel à proprement parler. Mais vous pouvez utiliser les quelques exemples suivants :

Mettre à jour le rootfs

dfu-util -a rootfs -R -D /path/to/openmoko-devel-image.jffs2

Mettre à jour le noyau

dfu-util -a kernel -R -D /path/to/uImage

Mettre à jour le gestionnaire de démarrage

dfu-util -a u-boot -R -D /path/to/u-boot.bin

Mettre à jour l'image affichée au démarrage

dfu-util -a u-splash -R -D /path/to/splash.gz

see also Configuring_the_boot_splash_screens

Copier un noyau dans la RAM

dfu-util -a 0 -R -D /path/to/uImage

Once this has finished, the kernel will be available at the default load address of 0x32000000 in Neo1973 RAM.

NOTE: You cannot transfer more than 2MB of data into RAM using this method


Notes de mise à jour

If during flashing of an image using dfu-util you're consistently getting an error -110 message, check that the size of the destination NAND partition is big enough to hold the image. For example the kernel partition is only 2 MB big by default and a kernel with debugging info compiled-in can often exceed this. It's possible to change the partition layout to enlarge a given partition and shrink other partitions but you have to remember to reflash all partitions whose start offset has changed afterwards. To adjust partitions layout use the mtdparts u-boot command.

If in turn you're facing errors in seemingly random places during the flashing of images, most likely the USB hub or cable through which your Neo1973 is connected, is of too poor quality. It is recommended that you always connect the phone directly to the host when using dfu-util.

If dfu-util reports a message like the following, before it starts flashing:
Resetting USB...
not at least 2 device changes found ?!?
Lost device after RESET?
retry the command - it should work on a second run.

If dfu-util complains about not being able to program the device while in runtime mode, do the following: while in the boot menu, remove the usb cable and insert it again. Depending on the version of uBoot it should display somewhere in the menu that it is now in DFU mode. Now dfu-util should be able to continue.

If dfu-util is too slow on Windows, that's a known bug. A suggestion is to run Linux on a virtual box. An full root image 97MB that is 776Mbit, the USB 1.1 on the Neo FreeRunner is capable of either 1.5 Mbit/s (Low-Speed) and 12 Mbit/s (Full-Speed). So flashing it should take less than 9 minutes with low speed and a bit more than a minute with full-speed. Plus transfer overhead, plus decompression on the Neo side.

Voir aussi