Outils pour utilisateurs

Outils du site


wiki:linux_pour_zynq_de_xilinx:projet_dels_petalinux

Projet Linux_LEDs, Linux avec PetaLinux pour allumer des DELs

Tout d'abord, si ce n'est déjà fait, il est nécessaire de “sourcer” les la chaine d'outils Vivado et PetaLinux

$ source /chemin_d_accès_Vivado/2015.2/settings64.sh
$ source /chemin_d_accès_petalinux-v2015.2.1-final/settings.sh

Creation d'un projet PetaLinux

Aller dans le répertoire où l'on veut créer un projet PetaLinux correspondant à la partie matérielle créée avec Vivado. Exemple :

$ cd ~/projets_zync/Linux_LEDs

Créatoin du répertoire du projet contenant un canevas par défaut, avec la commade petalinux-create.

$ petalinux-create --type project --template zynq --name Petalinux_LEDs

INFO: Create project: Petalinux_LEDs
INFO: New project successfully created in /home/deneb/projets_zync/Linux_LEDs/Petalinux_LEDs

Les paramètres suivants servent à :

  • –template zynq : crée un canevas spécifique au processeur type Zynq ;
  • –name Petalinux_LEDs met le canvas dans un répertoire appelé Petalinux_LEDs.

Importation de la configuration matérielle

Cette étape permettra par la suite de construire un système Linux adapté à la configuration matérielle spécifique du projet Vivado voulu.
Aller dans le répertoire où l'on a créé le projet PetaLinux. Exemple :

$ cd ~/projets_zync/Linux_LEDs/Petalinux_LEDs

Importer le fichier de description du matériel (fichier .hdf) avec la commande petalinux-config en iduquant le répertoire où il se trouve. Par exemple :

$ petalinux-config --get-hw-description=~/projets_zync/Linux_LEDs/Linux_LEDs.sdk
INFO: Checking component...
INFO: Getting hardware description...
INFO: Rename proc_et_LEDs_wrapper.hdf to system.hdf

****** hsi v (64-bit)
  **** SW Build --- on ---
    ** Copyright 1986-2015 Xilinx, Inc. All Rights Reserved.

source /home/utilisateur/projets_zync/Linux_LEDs/Petalinux_LEDs/build/linux/hw-description/hw-description.tcl -notrace
INFO: [Common 17-206] Exiting hsi at ---
INFO: Config linux
[INFO ] config linux

Quand petalinux-config –get-hw-description est exécuté pour la première fois pour le projet, le menu de configuration apparait.
Il est alors possible de personnaliser la configuration pour la contruction du noyau, de u-boot et des drivers. Laissons pour l'instant les valeurs par défaut. Acec les flèches du clavier, aller sur <Exit>. A la question Do you wish to save your new configuration?, répondre <Yes>.

configuration written to /home/utilisateur/projets_zync/Linux_LEDs/Petalinux_LEDs/subsystems/linux/config

*** End of the configuration.
*** Execute 'make' to start the build or try 'make help'.

[INFO ] generate DTS to /home/deneb/projets_zync/Linux_LEDs/Petalinux_LEDs/subsy

...
INFO: Config linux/kernel
[INFO ] oldconfig linux/kernel
INFO: Config linux/rootfs
[INFO ] oldconfig linux/rootfs

Construction des images

Afin de construire les images du noyau, de u-boot et du système de fichiers lié au noyau, utiliser la commande :

$ petalinux-build

INFO: Checking component...
INFO: Generating make files and build linux
INFO: Generating make files for the subcomponents of linux

...

[INFO ] zImage linux/kernel
[INFO ] install linux/kernel
[INFO ] Package HDF bitstream

Les images seront sockées dans le répertoire PetaLinux du projet images/linux

$ ls images/linux/

image.elf                 system.dtb        u-boot-s.elf     zImage
image.ub                  System.map.linux  u-boot.srec      zynq_fsbl.elf
proc_et_LEDs_wrapper.bit  u-boot.bin        u-boot-s.srec
rootfs.cpio               u-boot.elf        urootfs.cpio.gz
rootfs.cpio.gz            u-boot-s.bin      vmlinux

Par défaut, petalinux-build génére une image FIT et une image RAM disk. L'image FIT (Flattened Image Tree) encapsule plusieurs images1).

Génération de l'image BOOT.BIN

L'image BOOT.BIN peut être mise dans la mémoire Flash ou une carte SD. Elle servira au démarrage lors de la mise sous tension de la carte. Elle contient généralement l'image du chargeur de premier niveau, le contenu du FPGA et u-boot.

$ petalinux-package --boot --fsbl images/linux/zynq_fsbl.elf --fpga /home/utilisateur/projets_zync/Linux_LEDs/Linux_LEDs.runs/impl_1/proc_et_LEDs_wrapper.bit

INFO: Generating zynq binary package BOOT.BIN...
INFO: Binary is ready.

$ ls

BOOT.BIN  build  components  config.project  hw-description  images  subsystems

m( Si on recrée une une image BOOT.BIN sur un projet existant, il faudra rajouter –force en option à la commande petalinux-package.

Empaquettage d'une image pré-construite

Cette étape n'est utilisée que pour démarrer avec JTAG/QEMU

$ petalinux-package --prebuilt --fpga /home/utilisateur/projets_zync/Linux_LEDs/Linux_LEDs.runs/impl_1/proc_et_LEDs_wrapper.bit

INFO: Pre-built directory is updated.

$ ls
BOOT.BIN  build  components  config.project  hw-description  images  pre-built  subsystems
$ ls pre-built/
linux
$ ls pre-built/linux/
etc  images  implementation
$ ls pre-built/linux/images/
BOOT.BIN   image.ub    System.map.linux  u-boot-s.bin  zynq_fsbl.elf
image.elf  system.dtb  u-boot.elf        zImage
$ ls pre-built/linux/implementation/
proc_et_LEDs_wrapper.bit

Les différentes images logicieles sont rassemblées dans le répertoire pre-built/linux/images/ et le fichier de programmation du FPGA est placé dans pre-built/linux/implementation/.

m( Si on recrée un empaquetage sur un projet existant, il faudra rajouter –force en option à la commande petalinux-package.

Démarrer à partir de la commande petalinux-boot

Pour démarrer l'exécution des images pré-construites, soit émulée par QEMU, soit téléchargée par JTAG, on utilise la commande petalinux-boot. Plusieurs niveaux sont possibles :

  1. télécharge la configuration de FPGA et le logiciel de chargement de premier niveau (FSBL - First Stage Boot Loader) ;
  2. télécharge la configuration de FPGA, le logiciel de chargement de premier niveau et démarre u-boot ;
  3. télécharge la configuration de FPGA, le logiciel de chargement de premier niveau, démarre u-boot et lance l'exécution du noyau pré-construit sur la cible.

Avant toutes choses, il va falloir renommer le fichier de programmation du FPGA en download.bit pour que le chargement puisse se faire 2)

$ cp pre-built/linux/implementation/proc_et_LEDs_wrapper.bit pre-built/linux/implementation/download.bit

Ici, au lieu de le renommer directement, on en fait une copie avec le nom download.bit. Ceci permet de le garder tel-quel, en cas de besoin.
Ensuite on peut charger les images sur la carte ZedBoard.

1) Télécharge la configuration de FPGA et le logiciel de chargement de premier niveau (FSBL - First Stage Boot Loader)

$ petalinux-boot --jtag --prebuilt 1
INFO: Launching XSDB for file download and boot.
INFO: This may take a few minutes, depending on the size of your image.
rlwrap: warning: your $TERM is 'xterm' but rlwrap couldn't find it in the terminfo database. Expect some problems.: Inappropriate ioctl for device
INFO: Configuring the FPGA...                                                                             
INFO: Downloading bitstream to the target.
INFO: Downloading ELF file to the target.                                                                 
                                                                                                          
INFO: SOC Silicon version is 3.1.

Interaction avec un terminal sériel

Si on veut voir ce qui se passe et pouvoir interagir avec u-boot lors du chargement de ce dernier puis avec Linux, il faut utiliser l'UART1 configuré par défaut lors de la création du Zynq. Avec la ZedBoard, cette liaison série est renvoyée sur un port USB via un circuit Cypress. Elle est accessible sur le PC via l'interface /dev/ttyACM0 . On peut alors lancer un terminal de type minicom en vérifiant la configuration du port (115200 8N1) :

  • 115200 bauds
  • 8 bits
  • pas de parité
  • 1 bit de stop

Pour lancer minicom, ouvrir une nouvelle console de commande puis taper :

$ minicom -D /dev/ttyACM0 

Bienvenue avec minicom 2.7

OPTIONS: I18n 
Compilé le Jan  1 2014, 09:30:18.
Port /dev/ttyACM0, 09:26:16                                               
                                                                          
Tapez CTRL-A Z pour voir l'aide concernant les touches spéciales

:!: L'utilisateur doit être membre du groupe dialout3)
m( Si la carte a déjà été utilisée pour d'autres usages au préalable, il est préférable de faire une remise à zéro soit en utilisant le bouton BTN7 - PS-RST, soit en éteignant-rallumant la carte.

2) 1 + démarre u-boot

Pour un téléchargement jusqu'à l'exécution de u-boot, sur la console de commandes taper :

$ petalinux-boot --jtag --prebuilt 2
INFO: Launching XSDB for file download and boot.
INFO: This may take a few minutes, depending on the size of your image.
rlwrap: warning: your $TERM is 'xterm' but rlwrap couldn't find it in the terminfo database. Expect some problems.: Inappropriate ioctl for device
INFO: Configuring the FPGA...                                                                             
INFO: Downloading bitstream to the target.
INFO: Downloading ELF file to the target.                                                                 
INFO: Downloading ELF file to the target.                                                                 
                                                                                                          
INFO: SOC Silicon version is 3.1.

Dans le terminal série, on peut alors voir quelque-chose de ce type :

U-Boot 2015.04 (Nov 17 2015 - 13:56:21)                                   
                                                                          
DRAM:  ECC disabled 512 MiB                                               
MMC:   zynq_sdhci: 0                                                      
SF: Detected S25FL256S_64K with page size 256 Bytes, erase size 64 KiB, total 3B
*** Warning - bad CRC, using default environment                          
                                                                          
In:    serial                                                             
Out:   serial                                                             
Err:   serial                                                             
Net:   Gem.e000b000                                                       
U-BOOT for Petalinux_LEDs                                                 
                                                                                
Gem.e000b000 Waiting for PHY auto negotiation to complete......... TIMEOUT !    
Gem.e000b000: No link.                                                          
Hit any key to stop autoboot:  0                                                
U-Boot-PetaLinux>

3) 2 + démarre le noyau Linux

Pour un téléchargement jusqu'à l'exécution du noyau Linux et l'installation du système de fichiers, sur la console de commandes taper :

$ petalinux-boot --jtag --prebuilt 3
INFO: Append dtb - /home/deneb/projets_zync/Linux_LEDs/Petalinux_LEDs/pre-built/linux/images/system.dtb and other options to boot zImage
INFO: Launching XSDB for file download and boot.
INFO: This may take a few minutes, depending on the size of your image.
rlwrap: warning: your $TERM is 'xterm' but rlwrap couldn't find it in the terminfo database. Expect some problems.: Inappropriate ioctl for device
INFO: Configuring the FPGA...                                                                             
INFO: Downloading bitstream to the target.
INFO: Downloading ELF file to the target.                                                                 
INFO: Downloading ELF file to the target.                                                                 
                                                                                                          
INFO: SOC Silicon version is 3.1.

Dans le terminal série, on peut alors voir quelque-chose de ce type :

U-Boot 2015.04 (Nov 17 2015 - 13:56:21)

DRAM:  ECC disabled 512 MiB
MMC:   zynq_sdhci: 0
SF: Detected S25FL256S_64K with page size 256 Bytes, erase size 64 KiB, total 32 B
*** Warning - bad CRC, using default environment              
                                                              
In:    serial                                                 
Out:   serial                                                 
Err:   serial                                                 
Net:   Gem.e000b000
U-BOOT for Petalinux_LEDs

Gem.e000b000 Waiting for PHY auto negotiation to complete....Uncompressing Linux..
Booting Linux on physical CPU 0x0
Linux version 3.19.0-xilinx (deneb@deneb) (gcc version 4.9.1 (Sourcery CodeBench 5
CPU: ARMv7 Processor [413fc090] revision 0 (ARMv7), cr=18c5387d
CPU: PIPT / VIPT nonaliasing data cache, VIPT aliasing instruction cache
Machine model: Petalinux_LEDs
bootconsole [earlycon0] enabled
cma: Reserved 16 MiB at 0x1f000000
Memory policy: Data cache writealloc                                              
PERCPU: Embedded 9 pages/cpu @5ebd3000 s8128 r8192 d20544 u36864                  
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 130048       
Kernel command line: console=ttyPS0,115200 earlyprintk                            
PID hash table entries: 2048 (order: 1, 8192 bytes)                               
Dentry cache hash table entries: 65536 (order: 6, 262144 bytes)                   
Inode-cache hash table entries: 32768 (order: 5, 131072 bytes)                    
Memory: 492808K/524288K available (4696K kernel code, 250K rwdata, 1640K rodata, )
Virtual kernel memory layout:                                                     
    vector  : 0xffff0000 - 0xffff1000   (   4 kB)                                 
    fixmap  : 0xffc00000 - 0xfff00000   (3072 kB)                                 
    vmalloc : 0x60800000 - 0xff000000   (2536 MB)                                 
    lowmem  : 0x40000000 - 0x60000000   ( 512 MB)                                 
    pkmap   : 0x3fe00000 - 0x40000000   (   2 MB)                                 
    modules : 0x3f000000 - 0x3fe00000   (  14 MB)                                 
      .text : 0x40008000 - 0x40638514   (6338 kB)                                 
      .init : 0x40639000 - 0x409ba000   (3588 kB)                                 
      .data : 0x409ba000 - 0x409f8ba0   ( 251 kB)                                 
       .bss : 0x409f8ba0 - 0x40a2cab8   ( 208 kB)                                 
Preemptible hierarchical RCU implementation.

...

Built with PetaLinux v2015.2.1 (Yocto 1.8) Petalinux_LEDs /dev/ttyPS0             
Petalinux_LEDs login: 

On peut alors s'identifier avec l'utilisateur root et le mot de passe root.

Démarrage à partir d'une carte SD

Configuration de la carte SD avec un système de fichier EXT

La carte doit comporter 2 partitions. Il est possible de préparer la carte au moyen d'un logiciel tel que GPARTED ou avec plusieurs utilitaires en ligne de commande.

  1. 4 MB d'espace libre en premier
  2. 40 MB au moins formatés en FAT32, étiqueté BOOT. Cette partition comportera les images du programme de démarrage initial, du “devicetree” et du noyau.
  3. Le reste formaté en ext4, étiqueté rootfs. Cette partition contiendra le système de fichiers.

Configuration de Petalinux

  1. Aller dans la racine du répertoire du projet Petalinux
    $ cd <répertoire-projet-petalinux> 
  2. Éditer la configuration du projet
    $ petalinux-config 
  3. Sélectionner Image Packaging Configuration.
  4. Sélectionner Root filesystem type.
  5. Sélectionner SD card comme “RootFS” type.
  6. Sortir de “menuconfig” (Exit → Exit) et sauvegarder la configuration. Cela va mettre à jour les arguments de démarrage dans le fichier de “device-tree” system-conf.dtsi pour charger le système de fichiers depuis la carte SD. Vous pouvez consulter ce fichier ici : subsystems/linux/configs/device-tree/system-conf.dtsi
  7. Si nécessaire, générer les images Petalinux.
     $ petalinux-build 
  8. Si nécessaire, générer l'image de BOOT.BIN
     $ petalinux-package --boot --fsbl images/linux/zynq_fsbl.elf --fpga <FPGA bitstream> --u-boot 


    Si besoin, on utiliser l'option --force pour ré-générer l'image.
    <FSBL image> se trouve dans le répertoire : images/linux/ .
    <FPGA bitstream> est un un fichier .bit et il se trouve dans le répertoire : images/linux/ .

  9. Générer l'image rootfs.cpio. en sélectionnant SD card comme RootFS type, la commande petalinux-build ne la génère pas automatiquement.
     $ petalinux-package --image -c rootfs --format initramfs 

    Le fichier se trouvera dans le répertoire images/linux.

Installation des images sur la carte SD

  1. S'assurer que la partition BOOT de la carte SD est bien montée et la repérer dans le système de fichiers. Par exemple, taper la commande
     $ mount | grep BOOT 
     /dev/mmcblk0p1 on /media/BOOT type vfat rw,nosuid,nodev,relatime,uid=1000,gid=1000,fmask=0022,dmask=0077,codepage=437,iocharset=utf8,shortname=mixed,showexec,utf8,flush,errors=remount-ro,uhelper=udisks2) 


    Dans ce cas, la partition est montée ici : /media/BOOT.

  2. Copier BOOT.BIN et image.ub dans la partition BOOT de la carte SD. Le fichier image.ub contient les images du “device tree” et du noyau.
     $ cp images/linux/BOOT.BIN /media/BOOT/
     $ cp images/linux/image.ub /media/BOOT/ 
  3. S'assurer que la partition rootfs de la carte SD est bien montée et la repérer dans le système de fichiers. Par exemple, taper la commande
     $ mount | grep rootfs
    /dev/mmcblk0p2 on /media/rootfs type ext4 (rw,nosuid,nodev,relatime,data=ordered,uhelper=udisks2) 
  4. Copier rootfs.cpio dans la partition rootfs de la carte SD.
     sudo cp images/linux/rootfs.cpio /media/rootfs/
    [sudo] password for <utilisateur>: 

L'utilisation de sudo permet de se positionner en administrateur pour cette commande, si le système le permet pour cet <utilisateur>. En effet, la partition rootfs a des droits d'accès, il faut les respecter pour copier un fichier.

  1. Extraire le système de fichier de son image
     $ cd /media/rootfs
     $ sudo pax -rvf rootfs.cpio 

Et maintenant ...

Le système semble fonctionner correctement avec cette procédure par défaut. Il va falloir en faire quelque-chose maintenant. On pourra par exemple accéder aux entrées/sorties depuis l'espace utilisateur via SysFs.

wiki/linux_pour_zynq_de_xilinx/projet_dels_petalinux.txt · Dernière modification : 2016/04/19 13:12 de emeyer