| 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 | |
| 22 | mtd1 : 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 |
| 25 | mtd2 : contient des infos produit (mac address, no série, etc), ubifs ("factory") monté dans /factory |
| 26 | |
| 27 | mtd3 : rootfs, ubifs ("system") monté dans / |
| 28 | |
| 29 | mtd4 : 2 partitions ubifs |
| 30 | * "update" (16.1 Mo) monté dans /update |
| 31 | * "data" (59,7 Mo) monté dans /data |
| 32 | |
| 33 | bootparams : |
| 34 | {{{ |
| 35 | 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 |
| 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 | |
| 45 | mtd1 : 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 |
| 48 | mtd2 : contient le rootfs du ardrone2-updater |
| 49 | |
| 50 | mtd3 : 2 partitions ubifs |
| 51 | * "rootfs" (58 Mo) monté dans / |
| 52 | * "home" (45 Mo) monté dans /home/root |
| 53 | |
| 54 | bootparams : |
| 55 | {{{ |
| 56 | 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 |
| 57 | }}} |
| 58 | |
| 59 | == Bootloader Parrot == |
| 60 | |
| 61 | 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. |
| 62 | |
| 63 | 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 : |
| 64 | ubiattach -p /dev/mtd1 |
| 65 | ubirename /dev/ubix main_boot alt_boot alt_boot main_boot (x donné par ubittach) |
| 66 | ubidetach -p /dev/mtd1 |
| 67 | Ce renommage se fait automatiquement dans le script launch_update.sh (voir Mettre à jour le rootfs sur adrones2 hds). |
| 68 | |
| 69 | Si 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 | |
| 73 | un terminal série : cutecom, minicom, etc |
| 74 | |
| 75 | cross toolchain : https://devel.hds.utc.fr/software/flair/wiki/toolchain/install |
| 76 | |
| 77 | robomap3 : https://sourcesup.renater.fr/projects/robomap3-rt/ |
| 78 | |
| 79 | 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 |
| 80 | https://devel.hds.utc.fr/svn/uav_dev/trunk/bin/i686/unix/mykonos2_flash/bin/inst_usb_bootldr.bin |
| 81 | |
| 82 | ajouter une règle udev pour la connexion USB au drone (sinon faire les opérations USB en root): |
| 83 | {{{ |
| 84 | SUBSYSTEM=="usb", ATTRS{idVendor}=="0451", ATTRS{idProduct}=="d00e", ACTION=="add", GROUP="gsanahuj", MODE="0664" |
| 85 | SUBSYSTEM=="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 | |
| 94 | brancher 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 | }}} |
| 100 | une fois le programme en attente, allumer le drone |
| 101 | |
| 102 | le drone fait une interface réseau par USB (ssh root@192.168.7.2) |
| 103 | |
| 104 | créer les partitions pour recevoir le système hds : |
| 105 | {{{ |
| 106 | # create_partitions.sh |
| 107 | }}} |
| 108 | |
| 109 | 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 |
| 110 | |
| 111 | flasher 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 | |
| 117 | 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 |
| 118 | |
| 119 | flasher 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 | }}} |
| 124 | reboot ! |
| 125 | |
| 126 | == Flasher ardrone2 original sans câble USB == |
| 127 | |
| 128 | TODO : scripter un peu plus tout ça ! |
| 129 | |
| 130 | se connecter en wifi au drone : |
| 131 | ssid ardrone2_011152 (les 6 derniers chiffres dépendent du numéro de série, voir sur l’étiquette du drone) |
| 132 | ip pc : 192.168.1.2 (donné par le dhcp du drone) |
| 133 | ip drone : 192.168.1.1 |
| 134 | |
| 135 | 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. |
| 136 | |
| 137 | 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. |
| 138 | |
| 139 | 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 |
| 140 | {{{ |
| 141 | # update_kernel.sh zImage.plf |
| 142 | # install_updater_rootfs.sh core-image-minimal-mtdutils-ardrone2-updater.tar.gz |
| 143 | }}} |
| 144 | |
| 145 | rebooter 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 | |
| 153 | une 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 | |
| 170 | Procédure identique au flash avec câble usb. On créé ici le plf avec noyau+rootfs à mettre en ram |
| 171 | |
| 172 | faire un fichier image.ini (adapter le chemin des 3 fichiers, le EntryPoint et le LoadAddr du zImage) : |
| 173 | {{{ |
| 174 | [file] |
| 175 | Type=kernel |
| 176 | EntryPoint=0x81588004 |
| 177 | HdrVersion=11 |
| 178 | VersionMajor=5 |
| 179 | VersionMinor=8 |
| 180 | VersionBugfix=0x1b |
| 181 | TargetPlat=0x5 |
| 182 | TargetAppl=0x59 |
| 183 | HwCompatibility=0x1d400a4e |
| 184 | LanguageZone=0 |
| 185 | |
| 186 | [zImage] |
| 187 | LoadAddr=0x81588004 |
| 188 | File=/home/gsanahuj/HDS/igep/ardrone2_src/linux-ardrone2-2.6.32-9/arch/arm/boot/zImage |
| 189 | |
| 190 | [InitRD] |
| 191 | LoadAddr=0x81000000 |
| 192 | File=/home/poky/poky-robomap3/build/tmp/deploy/images/ardrone2-installer/core-image-minimal-mtdutils-ardrone2-installer.cpio |
| 193 | |
| 194 | [BootParams] |
| 195 | LoadAddr=0x80700000 |
| 196 | File=/home/gsanahuj/HDS/igep/ardrone2_src_svn/trunk/linux-ardrone2-2.6.32-9/bootparams.txt |
| 197 | }}} |
| 198 | cré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 | }}} |
| 202 | brancher 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 | }}} |
| 208 | une fois le programme en attente, allumer le drone |
| 209 | |
| 210 | == Flasher ardrone2 briqué (avec câble USB) == |
| 211 | |
| 212 | suivre la procédure ardrone2 original avec câble USB. |
| 213 | Envoyer le ardrone2-installer par USB, puis flasher le nécessaire pour dé-briquer (normalement le noyau). |
| 214 | |