Changes between Initial Version and Version 1 of setup_target/ardrone2


Ignore:
Timestamp:
Feb 15, 2019, 4:46:16 PM (22 months ago)
Author:
Sanahuja Guillaume
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • setup_target/ardrone2

    v1 v1  
     1[[PageOutline]]
     2
     3= Flashage des Ardrone2 =
     4
     5== Lexique ==
     6
     7* ardrone2 original : un drone non modifié par nous, neuf donc
     8* ardrone2 hds : un drone avec nos noyaux et rootfs
     9* 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)
     10* 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 )
     11* ardrone2-installer : machine (au sens poky) dans robomap3 ; permet de flasher complètement le système hds, c’est un ramfs
     12* 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 )
     13
     14== Organisation de la flash ardrone2 original ==
     15
     16* mtd0 : 0x000000000000-0x000000080000 : "Pbootloader" 512Ko
     17* mtd1 : 0x000000080000-0x000000880000 : "Pmain_boot" 8 Mo
     18* mtd2 : 0x000000880000-0x000001080000 : "Pfactory" 8Mo
     19* mtd3 : 0x000001080000-0x000003080000 : "Psystem" 32 Mo
     20* mtd4 : 0x000003080000-0x000008000000 : "Pupdate" 81408 Ko
     21
     22mtd1 : contient les noyaux, 2 partitions ubifs
     23* "main_boot" (4,1 Mo) noyau principal au format plf
     24* "alt_boot" (2,9 Mo) noyau alternatif au format plf
     25mtd2 : contient des infos produit (mac address, no série, etc), ubifs ("factory") monté dans /factory
     26
     27mtd3 : rootfs, ubifs ("system") monté dans /
     28
     29mtd4 : 2 partitions ubifs
     30* "update" (16.1 Mo) monté dans /update
     31* "data" (59,7 Mo) monté dans /data
     32
     33bootparams :
     34{{{
     35mtdparts=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
     36}}}
     37
     38== Organisation de la flash ardrone2 hds ==
     39
     40* mtd0 : 0x000000000000-0x000000080000 : "Pbootloader" 512Ko
     41* mtd1 : 0x000000080000-0x000000880000 : "Pmain_boot" 8 Mo
     42* mtd2 : 0x000000880000-0x000001080000 : "Pfactory" 8Mo
     43* mtd3 : 0x000001080000-0x000008000000 : "Psystem" 114176Ko
     44
     45mtd1 : contient les noyaux, 2 partitions ubifs
     46* "main_boot" (4,1 Mo) noyau production (ardrone2) au format plf
     47* "alt_boot" (2,9 Mo) noyau updater (ardrone2-updater) au format plf
     48mtd2 : contient le rootfs du ardrone2-updater
     49
     50mtd3 : 2 partitions ubifs
     51* "rootfs" (58 Mo) monté dans /
     52* "home" (45 Mo) monté dans /home/root
     53
     54bootparams :
     55{{{
     56mtdparts=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
     57}}}
     58
     59== Bootloader Parrot ==
     60
     61Programme 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.
     62
     63Par 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 :
     64ubiattach -p /dev/mtd1
     65ubirename /dev/ubix main_boot alt_boot alt_boot main_boot (x donné par ubittach)
     66ubidetach -p /dev/mtd1
     67Ce renommage se fait automatiquement dans le script launch_update.sh (voir Mettre à jour le rootfs sur adrones2 hds).
     68
     69Si le drone est branché en USB au PC, le bootloader peut charger un autre bootloader (voir Flasher ardrone2 original avec câble USB).
     70
     71== Prérequis ==
     72
     73un terminal série : cutecom, minicom, etc
     74
     75cross toolchain : https://devel.hds.utc.fr/software/flair/wiki/toolchain/install
     76
     77robomap3 : https://sourcesup.renater.fr/projects/robomap3-rt/
     78
     79inst_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
     80https://devel.hds.utc.fr/svn/uav_dev/trunk/bin/i686/unix/mykonos2_flash/bin/inst_usb_bootldr.bin
     81
     82ajouter une règle udev pour la connexion USB au drone (sinon faire les opérations USB en root):
     83{{{
     84SUBSYSTEM=="usb", ATTRS{idVendor}=="0451", ATTRS{idProduct}=="d00e", ACTION=="add", GROUP="gsanahuj", MODE="0664"
     85SUBSYSTEM=="usb", ATTRS{idVendor}=="19cf", ATTRS{idProduct}=="1111", ACTION=="add", GROUP="gsanahuj", MODE="0664"
     86}}}
     87
     88== Flasher ardrone2 original avec câble USB ==
     89
     90''bitbake core-image-minimal-mtdutils'' pour la machine ardrone2-installer (se lance en ram depuis l’usb)
     91''bitbake core-image-minimal-mtdutils'' pour la machine ardrone2-updater (se met en flash)
     92''bitbake core-image-flair-uav'' pour la machine ardrone2 (se met en flash)
     93
     94brancher le câble USB et le série (115200bps), envoyer le ardrone2-installer :
     95
     96{{{
     97$ source /opt/robomap3/1.7.3/armv7a-neon/environment-setup-armv7a-vfp-neon-poky-linux-gnueabi
     98$ ardrone2-usbloader inst_usb_bootldr.bin core-image-minimal-mtdutils-ardrone2-installer.plf
     99}}}
     100une fois le programme en attente, allumer le drone
     101
     102le drone fait une interface réseau par USB (ssh root@192.168.7.2)
     103
     104créer les partitions pour recevoir le système hds :
     105{{{
     106# create_partitions.sh
     107}}}
     108
     109copier 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
     110
     111flasher le updater :
     112{{{
     113# update_kernel.sh zImage.plf (doit afficher found an updater kernel)
     114# install_updater_rootfs.sh core-image-minimal-mtdutils-ardrone2-updater.tar.gz
     115}}}
     116
     117copier 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
     118
     119flasher le système :
     120{{{
     121# update_kernel.sh zImage.plf (doit afficher found a production kernel)
     122# flash_rootfs.sh core-image-flair-uav-ardrone2.tar.bz2 (choisir l’option 1 : production)
     123}}}
     124reboot !
     125
     126== Flasher ardrone2 original sans câble USB ==
     127
     128TODO : scripter un peu plus tout ça !
     129
     130se connecter en wifi au drone :
     131ssid ardrone2_011152 (les 6 derniers chiffres dépendent du numéro de série, voir sur l’étiquette du drone)
     132ip pc : 192.168.1.2 (donné par le dhcp du drone)
     133ip drone : 192.168.1.1
     134
     135On 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.
     136
     137Copier 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.
     138
     139Copier 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
     140{{{
     141# update_kernel.sh zImage.plf
     142# install_updater_rootfs.sh  core-image-minimal-mtdutils-ardrone2-updater.tar.gz
     143}}}
     144
     145rebooter sur le système ardrone2-updater
     146{{{
     147# ubiattach -p /dev/mtd1
     148# ubirename /dev/ubix main_boot alt_boot alt_boot main_boot (x donné par ubittach)
     149# ubidetach -p /dev/mtd1
     150# reboot
     151}}}
     152
     153une fois sur le ardrone2-updater : (en port série car procédure à automatiser)
     154{{{
     155# create_partitions.sh
     156# flash_rootfs core-image-flair-uav-ardrone.tar.bz2
     157# swap kernel ubi labels
     158# flash_kernel.sh zImage.plf
     159}}}
     160
     161== Mettre à jour le noyau sur adrones2 hds ==
     162{{{
     163# flash_kernel.sh zImage.plf
     164}}}
     165
     166== Mettre à jour le rootfs sur adrones2 hds ==
     167
     168== Tester un noyau sans le flasher (avec câble USB) ==
     169
     170Procédure identique au flash avec câble usb. On créé ici le plf avec noyau+rootfs à mettre en ram
     171
     172faire un fichier image.ini (adapter le chemin des 3 fichiers, le EntryPoint et le LoadAddr du zImage) :
     173{{{
     174[file]
     175Type=kernel
     176EntryPoint=0x81588004
     177HdrVersion=11
     178VersionMajor=5
     179VersionMinor=8
     180VersionBugfix=0x1b
     181TargetPlat=0x5
     182TargetAppl=0x59
     183HwCompatibility=0x1d400a4e
     184LanguageZone=0
     185
     186[zImage]
     187LoadAddr=0x81588004
     188File=/home/gsanahuj/HDS/igep/ardrone2_src/linux-ardrone2-2.6.32-9/arch/arm/boot/zImage
     189
     190[InitRD]
     191LoadAddr=0x81000000
     192File=/home/poky/poky-robomap3/build/tmp/deploy/images/ardrone2-installer/core-image-minimal-mtdutils-ardrone2-installer.cpio
     193
     194[BootParams]
     195LoadAddr=0x80700000
     196File=/home/gsanahuj/HDS/igep/ardrone2_src_svn/trunk/linux-ardrone2-2.6.32-9/bootparams.txt
     197}}}
     198créer un plf avec le noyau et le rootfs :
     199{{{
     200# /opt/robomap3/1.7.3/armv7a-neon/sysroots/x86_64-pokysdk-linux/usr/bin/plftool -b ./image.ini -o ./image.plf
     201}}}
     202brancher le câble USB et le série (115200bps), envoyer le ardrone2-installer :
     203
     204{{{
     205# source /opt/robomap3/1.7.3/armv7a-neon/environment-setup-armv7a-vfp-neon-poky-linux-gnueabi
     206# ardrone2-usbload inst_usb_bootldr.bin image.plf
     207}}}
     208une fois le programme en attente, allumer le drone
     209
     210== Flasher ardrone2 briqué (avec câble USB) ==
     211
     212suivre la procédure ardrone2 original avec câble USB.
     213Envoyer le ardrone2-installer par USB, puis flasher le nécessaire pour dé-briquer (normalement le noyau).
     214