Outils pour utilisateurs

Outils du site


wiki:linux_pour_zynq_de_xilinx:projet_dels_petalinux

Ceci est une ancienne révision du document !


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.

Accéder aux DELs via l'espace utilisateur

4)Par défaut, le système de fichiers est configuré pour accéder aux GPIO via le procédé SysFs. Il s'agit d'un procédé de fichiers avec une arborescence spécifique accessible depuis /sys/. On peut retenir ces ces points importants :

  1. Les contrôleurs de GPIO sont visibles depuis /sys/class/gpio. Chaque contrôleur contrôle quelques GPIO.
    root@Petalinux_LEDs:~# ls /sys/class/gpio
    export       gpiochip890  gpiochip898  gpiochip906  unexport

    Ici nous pouvons voir trois contrôleurs gpiochip890, gpiochip898 et gpiochip906. Des informations sont disponibles pour chacun d'eux.

    root@Petalinux_LEDs:~# ls /sys/class/gpio/gpiochip890
    base       label      ngpio      power      subsystem  uevent
    root@Petalinux_LEDs:~# cat /sys/class/gpio/gpiochip890/base
    890
    root@Petalinux_LEDs:~# cat /sys/class/gpio/gpiochip890/label
    /amba_pl/gpio@41200000
    root@Petalinux_LEDs:~# cat /sys/class/gpio/gpiochip890/ngpio 
    8
    root@Petalinux_LEDs:~# ls /sys/class/gpio/gpiochip898
    base       label      ngpio      power      subsystem  uevent
    root@Petalinux_LEDs:~# cat /sys/class/gpio/gpiochip898/base 
    898
    root@Petalinux_LEDs:~# cat /sys/class/gpio/gpiochip898/label
    /amba_pl/gpio@41200000
    root@Petalinux_LEDs:~# cat /sys/class/gpio/gpiochip898/ngpio 
    8
    root@Petalinux_LEDs:~# ls /sys/class/gpio/gpiochip906/
    base       device     label      ngpio      power      subsystem  uevent
    root@Petalinux_LEDs:~# cat /sys/class/gpio/gpiochip906/base 
    906
    root@Petalinux_LEDs:~# cat /sys/class/gpio/gpiochip906/label 
    zynq_gpio
    root@Petalinux_LEDs:~# cat /sys/class/gpio/gpiochip906/ngpio 
    118

    Le premier contrôleur est réservé pour le port des interrupteurs, le second pour le port des DELs que nous avons configurés lors de la création du projet Vivado (il y en a 8 interrupteurs et 8 DELs au total) et le troisième correspond à l'ensemble des GPIOs qui sont accessibles par le Zynq. Les numéro indiqués dans le fichier base correspondent aux numéros de la première GPIO accessible sur le port correspondant. Les GPIO suivantes sont accessibles aux numéros suivants, jusqu'à base + ngpio.

  2. Les GPIOs à utiliser doivent être configurées. Il faut les déclarer dans le fichier export. Cela crée un répertoire du nom de la GPIO.
    root@Petalinux_LEDs:~# echo 898 > /sys/class/gpio/export
    root@Petalinux_LEDs:~# ls /sys/class/gpio/
    export       gpio898      gpiochip898  gpiochip906  unexport
    root@Petalinux_LEDs:~# ls /sys/class/gpio/gpio898
    active_low  direction   power       subsystem   uevent      value

    Une fois créée, il est nécessaire d'indiquer sa direction (entrée ou sortie), dans le fichier direction.

    root@Petalinux_LEDs:~# echo out > /sys/class/gpio/gpio898/direction

    Idem pour la les autres DELs et interrupteurs :

    root@Petalinux_LEDs:~# echo 905 > /sys/class/gpio/export
    root@Petalinux_LEDs:~# echo out > /sys/class/gpio/gpio905/direction
    root@Petalinux_LEDs:~# echo 890 > /sys/class/gpio/export 
    root@Petalinux_LEDs:~# echo 897 > /sys/class/gpio/export 
    root@Petalinux_LEDs:~# echo in > /sys/class/gpio/gpio890/direction 
    root@Petalinux_LEDs:~# echo in > /sys/class/gpio/gpio897/direction
  3. Pour affecter un état à la sortie, on utilise le fichier value
    root@Petalinux_LEDs:~# echo 1 > /sys/class/gpio/gpio898/value
    root@Petalinux_LEDs:~# echo 1 > /sys/class/gpio/gpio905/value

    Les DELs LD0 et LD7 s'allument.

    root@Petalinux_LEDs:~# echo 0 > /sys/class/gpio/gpio898/value
    root@Petalinux_LEDs:~# echo 0 > /sys/class/gpio/gpio905/value

    Les DELs LD0 et LD7 s'éteignent.

  4. Pour contrôler l'état d'une entrée, on utilise aussi le fichier value
    root@Petalinux_LEDs:~# cat /sys/class/gpio/gpio890/value 
    0
    root@Petalinux_LEDs:~# cat /sys/class/gpio/gpio897/value 
    0

    Lorsque les interrupteurs SW0 et SW7 sont ouverts.

    root@Petalinux_LEDs:~# cat /sys/class/gpio/gpio890/value 
    1
    root@Petalinux_LEDs:~# cat /sys/class/gpio/gpio897/value 
    1

    Lorsque les interrupteurs SW0 et SW7 sont fermés. <code>

wiki/linux_pour_zynq_de_xilinx/projet_dels_petalinux.1447951400.txt.gz · Dernière modification : 2015/11/19 17:43 de emeyer