====== 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]]))