====== Installation et utilisation de Buildroot pour carte microzed ====== {{:wiki:linux_pour_zynq_de_xilinx:mz-org_buildroot.png?nolink |}}Buildroot est un outil permettant la création d'un système d'exploitation Linux complet adapté pour l'embarqué, incluant le "boot-loader", le noyau, le "devicetree" et le système de fichiers "rootfs".\\ Pour cette page, nous allons nous inspirer du [[http://www.wiki.xilinx.com/Build+Linux+for+Zynq-7000+AP+SoC+using+Buildroot | tutoriel proposé par Xilinx]]. ===== Pré-installations ===== ==== Nécessaires ==== Outils de récupération de sources : * wget * git ATTENTION : pour ces deux outils, il ne faut pas oublier de configurer les paramètres de proxy, si nécessaire. Outils de compilation : * sed * make (version 3.81 ou ultérieure) * binutils * build-essential (pour les distributions à base de Debian) * gcc (version 2.95 ou ultérieure) * g++ (version 2.95 ou ultérieure) * bash * patch * gzip * bzip2 * perl (version 5.8.7 ou ultérieure) * tar * cpio * python (version 2.6 ou 2.7) * unzip * rsync * DTC $ git clone https://git.kernel.org/pub/scm/utils/dtc/dtc.git $ cd dtc/ $ make $ export PATH=/dtc:$PATH \\ Ou, vous pouvez ajouter ce chemin vers le binaire //dtc// dans le fichier //~/.profile// afin de le retrouver au prochain démarrage de votre session (pas besoin de la commande //export//). * libncurses5 et libncurses5-dev pour utiliser l'outil de configuration //menuconfig//. ====== Installation ====== * Installation dans votre système : télécharger l'archive de //buildroot// décompresser l'archive dans le répertoire de travail. Ici, nous utiliserons la version //2016.05//. Par exemple, on peut faire ainsi dans un terminal : $ cd Xilinx $ wget https://buildroot.org/downloads/buildroot-2016.05.tar.gz $ tar xzvf buildroot-2016.05.tar.gz * Installation dans une machine virtuelle pré-configurée avec Vagrant : [[wiki:linux_pour_zynq_de_xilinx:installation_buildroot_vagrant|voir ce sujet]] ====== Utilisation ====== $ cd buildroot-2016-05 - Appliquer la configuration par défaut pour les cartes //microzed// qui dans le fichier //zynq_microzed_defconfig// dans le répertoire //configs//. Éventuellement, si comme moi, les clonages avec //git// ne fonctionnent pas avec une adresse en //git://, changer la ligne ou le dépôt git est indiqué BR2_LINUX_KERNEL_CUSTOM_REPO_URL="git://github.com/Xilinx/linux-xlnx.git" en : BR2_LINUX_KERNEL_CUSTOM_REPO_URL="https://github.com/Xilinx/linux-xlnx.git" Puis continuez ainsi : $ make zynq_microzed_defconfig ... # # configuration written to /.../Xilinx/buildroot-2016.05/.config # - À partir de là, il est possible de changer les configurations par défaut avec //menuconfig//. Pur l'instant, nous ne changerons pas ces configurations, et nous allons juste les appliquer telles quelles : $ make menuconfig Il faut choisir //Exit// pour rester avec la configuration par défaut. $ make busybox-menuconfig Il faut choisir //Exit// pour rester avec la configuration par défaut, et accepter de sauvegarder la configuration. $ make linux-menuconfig Il faut choisir //Exit// pour rester avec la configuration par défaut. - Maintenant, chargez et construisez les outils qui ont été configurés à l'étape précédente : $ make ... ... table='/.../Xilinx/buildroot-2016.05/output/build/_device_table.txt' /usr/bin/install -m 0644 support/misc/target-dir-warning.txt /.../Xilinx/buildroot-2016.05/output/target/THIS_IS_NOT_YOUR_ROOT_FILESYSTEM Cela prend du temps. S'il y a des erreurs **vérifiez** que les **paquets** mentionnés plus haut sont installés sur votre machine, que le chemin de la **variable $PATH** inclus l'accès au binaire du programme //dtc// et que les **configurations //proxy//** sont correctes en particulier pour //wget// et //git//.\\ Toutes les éléments générés se trouvent dans le répertoire //output//. Pour modifier cela, ce qui peut être utile pour générer des images avec plusieurs configurations possibles, on peut utiliser l'option //O=//. Par exemple : $ make O=../output_microzed_default/ zynq_microzed_defconfig Cela créera l'arborescence des différentes sorties de compilation ainsi que le fichier de configuration //.config// dans le répertoire //output_microzed_default// qui se trouvera au niveau inférieur du répertoire général de //buildroot//. ====== Installation sur la carte SD ====== **REMARQUE** : à partir de ce point nous allons travailler avec la version de //buildroot// installée dans une machine virtuelle pré-configurée avec //Vagrant//, [[wiki:linux_pour_zynq_de_xilinx:installation_buildroot_vagrant|comme indiqué dans ce sujet]]. __Il peut y avoir alors quelques différences avec une version installée sur votre système__. ---- Une fois le processus de construction par défaut complété, les images se trouvent dans le répertoire ///output/images//, ou celui définit par l'option //O=//: $ cd buildroot-2016.08/output/images/ $ ls boot.bin rootfs.cpio.gz rootfs.tar uImage rootfs.cpio rootfs.cpio.uboot u-boot.img zynq-zed.dtb Le fichier //readme.txt// dans le répertoire //buildroot-2016.08/board/zynq// donne les informations suivantes :\\ //Créer une partition FAT32 au début de votre carte SD et copier les fichiers// * //boot.bin// * //u-boot.img// * //uImage// * //uramdisk.image.gz (rootfs.cpio.uboot renommé)// * //devicetree.dtb (zynq-***.dtb renommé)// //sur votre carte SD.// C'est tout. Une fois la carte installée sur la //microzedzed//, vous pouvez démarrer la carte. ====== Modifications ====== Lorsque qu'une modification est apportée quelque part dans les fichiers générés lors de la construction du système, il est nécessaire de recompiler la partie concernée. ==== Modifications dans l'arborescence de linux - influences de rootfs ==== $ touch .config $ make Cela reconstruira les fichiers //rootfs.cpio ; rootfs.cpio.gz ; rootfs.cpio.uboot ; rootfs.tar. // ==== Modifications dans l'arborescence de linux ou de "device tree" ==== $ make linux-rebuild Cela reconstruira les fichiers //uImage ; zynq-zed.dtb.// ==== Modifications dans l'arborescence de u-boot ==== $ make uboot-rebuild Cela reconstruira les fichiers //boot.bin ; u-boot.img.// ====== Utilisation un peu plus avancée ====== ===== Architecture du système de démarrage ===== Sur la carte SD, on trouve : {{ :wiki:linux_pour_zynq_de_xilinx:sd_boot.png?nolink&200|}} * boot.bin : \\ ce fichier contient plusieurs éléments. * le //FSBL// (fisrt stage boot loader) : il est responsable de l'initialisation du processeur, optionnellement charge le //bitstream// dans la partie logique du FPGA, et donne la main au //boot loader// de second niveau. * Optionnellement, le //Bitfile// : il contient le //bitstream// pour configurer la partie logique du FPGA. * //U-boot// : c'est le //boot laoder// de second niveau qui va permettre d'effectuer éventuellement quelques taches bas niveau puis de charger le noyau en lui passant des variables d'environnement et le //device tree//. * uImage : c'est noyau Linux * un fichier //dtb// : il contient des informations sur la configuration matérielle. Ce fichier est utilisée par le noyau * Le système de fichiers. (([[http://repositorio.upct.es/bitstream/handle/10317/4592/tfg339.pdf|Implementing an Embedded Linux System in Xilinx Zynq, page 32]]))(([[http://blog.fakultaet-technik.de/development-with-zynq-part-3-build-boot-files/|Development with Zynq – Part 3 – Build boot files]]))