wiki:setup_target/ardrone2

Version 1 (modified by Sanahuja Guillaume, 21 months ago) (diff)

--

Flashage des Ardrone2

Lexique

  • ardrone2 original : un drone non modifié par nous, neuf donc
  • ardrone2 hds : un drone avec nos noyaux et rootfs
  • plf : format propriétaire Parrot pour paqueter des données (rootfs, noyau, ligne de commande noyau, etc). Le format a été plus ou moins décodé. Des outils existent pour lire/écrire des plf (intégrés dans robomap3)
  • ardrone2-updater : machine (au sens poky) dans robomap3 ; permet de flasher le rootfs de production ; s’installe dans la flash (mtd2 pour le rootfs, mtd1 "alt_boot" pour le noyau )
  • ardrone2-installer : machine (au sens poky) dans robomap3 ; permet de flasher complètement le système hds, c’est un ramfs
  • ardrone2: machine (au sens poky) dans robomap3 ; le système de production sur lequel on vol, s’installe dans la flash (mtd3 pour le rootfs, mtd1 "main_boot" pour le noyau )

Organisation de la flash ardrone2 original

  • mtd0 : 0x000000000000-0x000000080000 : "Pbootloader" 512Ko
  • mtd1 : 0x000000080000-0x000000880000 : "Pmain_boot" 8 Mo
  • mtd2 : 0x000000880000-0x000001080000 : "Pfactory" 8Mo
  • mtd3 : 0x000001080000-0x000003080000 : "Psystem" 32 Mo
  • mtd4 : 0x000003080000-0x000008000000 : "Pupdate" 81408 Ko

mtd1 : contient les noyaux, 2 partitions ubifs

  • "main_boot" (4,1 Mo) noyau principal au format plf
  • "alt_boot" (2,9 Mo) noyau alternatif au format plf

mtd2 : contient des infos produit (mac address, no série, etc), ubifs ("factory") monté dans /factory

mtd3 : rootfs, ubifs ("system") monté dans /

mtd4 : 2 partitions ubifs

  • "update" (16.1 Mo) monté dans /update
  • "data" (59,7 Mo) monté dans /data

bootparams :

mtdparts=omap2-nand.0:512K(Pbootloader),8M(Pmain_boot),8M(Pfactory),32M(Psystem),81408K(Pupdate) console=ttyO3,115200 loglevel=4 ubi.mtd=Pfactory,2048 ubi.mtd=Psystem,2048 ubi.mtd=Pupdate,2048 root=ubi1:system rootfstype=ubifs parrot5.low_latency=1  androidboot.bootloader=ecos-bootloader-omap3630-start-65-g6a040b5

Organisation de la flash ardrone2 hds

  • mtd0 : 0x000000000000-0x000000080000 : "Pbootloader" 512Ko
  • mtd1 : 0x000000080000-0x000000880000 : "Pmain_boot" 8 Mo
  • mtd2 : 0x000000880000-0x000001080000 : "Pfactory" 8Mo
  • mtd3 : 0x000001080000-0x000008000000 : "Psystem" 114176Ko

mtd1 : contient les noyaux, 2 partitions ubifs

  • "main_boot" (4,1 Mo) noyau production (ardrone2) au format plf
  • "alt_boot" (2,9 Mo) noyau updater (ardrone2-updater) au format plf

mtd2 : contient le rootfs du ardrone2-updater

mtd3 : 2 partitions ubifs

  • "rootfs" (58 Mo) monté dans /
  • "home" (45 Mo) monté dans /home/root

bootparams :

mtdparts=omap2-nand.0:512K(Pbootloader),8M(Pmain_boot),8M(Pfactory),114176K(Psystem) console=ttyO3,115200 loglevel=8 earlyprintk=ttyO3,115200 ubi.mtd=Pfactory,2048 ubi.mtd=Psystem,2048 root=ubi1:rootfs rootfstype=ubifs parrot5.low_latency=1 mem=80M mpurate=1000

Bootloader Parrot

Programme propriétaire dont nous n’avons pas les sources. Pas d’alternative open source fonctionnelle pour l’instant. Devrait pouvoir se remplacer par xloader (TI) et u-boot.

Par défaut, le bootloader charge le noyau au format plf se trouvant dans la partition « main_boot » de mtd1. Pour booter sur un noyau alternatif (dans l’autre partition de mtd1, « alt_boot »), il faut au préalable échanger les étiquettes des deux partitions : ubiattach -p /dev/mtd1 ubirename /dev/ubix main_boot alt_boot alt_boot main_boot (x donné par ubittach) ubidetach -p /dev/mtd1 Ce renommage se fait automatiquement dans le script launch_update.sh (voir Mettre à jour le rootfs sur adrones2 hds).

Si le drone est branché en USB au PC, le bootloader peut charger un autre bootloader (voir Flasher ardrone2 original avec câble USB).

Prérequis

un terminal série : cutecom, minicom, etc

cross toolchain : https://devel.hds.utc.fr/software/flair/wiki/toolchain/install

robomap3 : https://sourcesup.renater.fr/projects/robomap3-rt/

inst_usb_bootldr.bin :bootloader propriétaire Parrot, se charge et se lance en USB. Permet ensuite de charger en USB un fichier PLF (kernel+bootcmd+ramfs) et de lancer le noyau du PLF https://devel.hds.utc.fr/svn/uav_dev/trunk/bin/i686/unix/mykonos2_flash/bin/inst_usb_bootldr.bin

ajouter une règle udev pour la connexion USB au drone (sinon faire les opérations USB en root):

SUBSYSTEM=="usb", ATTRS{idVendor}=="0451", ATTRS{idProduct}=="d00e", ACTION=="add", GROUP="gsanahuj", MODE="0664"
SUBSYSTEM=="usb", ATTRS{idVendor}=="19cf", ATTRS{idProduct}=="1111", ACTION=="add", GROUP="gsanahuj", MODE="0664"

Flasher ardrone2 original avec câble USB

bitbake core-image-minimal-mtdutils pour la machine ardrone2-installer (se lance en ram depuis l’usb) bitbake core-image-minimal-mtdutils pour la machine ardrone2-updater (se met en flash) bitbake core-image-flair-uav pour la machine ardrone2 (se met en flash)

brancher le câble USB et le série (115200bps), envoyer le ardrone2-installer :

$ source /opt/robomap3/1.7.3/armv7a-neon/environment-setup-armv7a-vfp-neon-poky-linux-gnueabi
$ ardrone2-usbloader inst_usb_bootldr.bin core-image-minimal-mtdutils-ardrone2-installer.plf

une fois le programme en attente, allumer le drone

le drone fait une interface réseau par USB (ssh root@192.168.7.2)

créer les partitions pour recevoir le système hds :

# create_partitions.sh

copier les éléments de ardrone2-updater (tmp/deploy/images/ardrone2-updater/zImage.plf et tmp/deploy/images/ardrone2-updater/core-image-minimal-mtdutils-ardrone2-updater.tar.gz) sur le drone

flasher le updater :

# update_kernel.sh zImage.plf (doit afficher found an updater kernel)
# install_updater_rootfs.sh core-image-minimal-mtdutils-ardrone2-updater.tar.gz

copier les éléments de ardrone2 (tmp/deploy/images/ardrone2/zImage.plf et tmp/deploy/images/ardrone2/core-image-flair-uav-ardrone2.tar.bz2) sur le drone

flasher le système :

# update_kernel.sh zImage.plf (doit afficher found a production kernel)
# flash_rootfs.sh core-image-flair-uav-ardrone2.tar.bz2 (choisir l’option 1 : production)

reboot !

Flasher ardrone2 original sans câble USB

TODO : scripter un peu plus tout ça !

se connecter en wifi au drone : ssid ardrone2_011152 (les 6 derniers chiffres dépendent du numéro de série, voir sur l’étiquette du drone) ip pc : 192.168.1.2 (donné par le dhcp du drone) ip drone : 192.168.1.1

On ne peut pas flasher d’un coup le système final hds. On commence par mettre le ardrone-updater ; puis on bootera sur celui la pour installer le reste.

Copier par ftp les scripts de flashage (dans robomap3-rt/meta-poky/recipes-hds/ardrone-tools/ardrone2-flash-scripts) et les outils mtd/ubi (ubiattach, ubidetach, etc). Sur le drone, les fichiers envoyés en ftp sont dans /data/video par défaut. Mettre tout ca dans /usr/bin.

Copier les éléments de ardrone2-updater (tmp/deploy/images/ardrone2-updater/zImage.plf et tmp/deploy/images/ardrone2-updater/core-image-minimal-mtdutils-ardrone2-updater.tar.gz) sur le drone par ftp. Flasher le noyau et le rootfs de ardrone2-updater

# update_kernel.sh zImage.plf
# install_updater_rootfs.sh  core-image-minimal-mtdutils-ardrone2-updater.tar.gz

rebooter sur le système ardrone2-updater

# ubiattach -p /dev/mtd1
# ubirename /dev/ubix main_boot alt_boot alt_boot main_boot (x donné par ubittach)
# ubidetach -p /dev/mtd1
# reboot

une fois sur le ardrone2-updater : (en port série car procédure à automatiser)

# create_partitions.sh
# flash_rootfs core-image-flair-uav-ardrone.tar.bz2
# swap kernel ubi labels
# flash_kernel.sh zImage.plf

Mettre à jour le noyau sur adrones2 hds

# flash_kernel.sh zImage.plf

Mettre à jour le rootfs sur adrones2 hds

Tester un noyau sans le flasher (avec câble USB)

Procédure identique au flash avec câble usb. On créé ici le plf avec noyau+rootfs à mettre en ram

faire un fichier image.ini (adapter le chemin des 3 fichiers, le EntryPoint? et le LoadAddr? du zImage) :

[file]
Type=kernel
EntryPoint=0x81588004
HdrVersion=11
VersionMajor=5
VersionMinor=8
VersionBugfix=0x1b
TargetPlat=0x5
TargetAppl=0x59
HwCompatibility=0x1d400a4e
LanguageZone=0

[zImage]
LoadAddr=0x81588004
File=/home/gsanahuj/HDS/igep/ardrone2_src/linux-ardrone2-2.6.32-9/arch/arm/boot/zImage

[InitRD]
LoadAddr=0x81000000
File=/home/poky/poky-robomap3/build/tmp/deploy/images/ardrone2-installer/core-image-minimal-mtdutils-ardrone2-installer.cpio

[BootParams]
LoadAddr=0x80700000
File=/home/gsanahuj/HDS/igep/ardrone2_src_svn/trunk/linux-ardrone2-2.6.32-9/bootparams.txt

créer un plf avec le noyau et le rootfs :

# /opt/robomap3/1.7.3/armv7a-neon/sysroots/x86_64-pokysdk-linux/usr/bin/plftool -b ./image.ini -o ./image.plf

brancher le câble USB et le série (115200bps), envoyer le ardrone2-installer :

# source /opt/robomap3/1.7.3/armv7a-neon/environment-setup-armv7a-vfp-neon-poky-linux-gnueabi
# ardrone2-usbload inst_usb_bootldr.bin image.plf

une fois le programme en attente, allumer le drone

Flasher ardrone2 briqué (avec câble USB)

suivre la procédure ardrone2 original avec câble USB. Envoyer le ardrone2-installer par USB, puis flasher le nécessaire pour dé-briquer (normalement le noyau).