Zynq: Unterschied zwischen den Versionen

Aus bytewerk-Wiki
Zur Navigation springen Zur Suche springen
(Erste Schritte)
 
(Generell erweitert)
Zeile 7: Zeile 7:
* Bitfile soll aus dem Linux in die programmierbare Logik (PL) geladen werden können (nicht nur im FSBL!)
* Bitfile soll aus dem Linux in die programmierbare Logik (PL) geladen werden können (nicht nur im FSBL!)


Der erste Versuch erfolgt auf einem Zybo-Board.
== Status

== Status ==

* Linux läuft mit openSUSE-Userspace \o/


== Installationsanleitung ==
== Installationsanleitung ==
Zeile 24: Zeile 28:
* [https://github.com/Xilinx/linux-xlnx linux-xlnx] (getesteter Commit: 047a00be376f4aa99d4c0b2f8937fb7c8fbf5272)
* [https://github.com/Xilinx/linux-xlnx linux-xlnx] (getesteter Commit: 047a00be376f4aa99d4c0b2f8937fb7c8fbf5272)
* [https://github.com/Xilinx/u-boot-xlnx u-boot-xlnx] (getesteter Commit: 21812b5fd359d8756d619a15b49b6079ae3f9f36)
* [https://github.com/Xilinx/u-boot-xlnx u-boot-xlnx] (getesteter Commit: 21812b5fd359d8756d619a15b49b6079ae3f9f36)

Weiteres:

* Linux-Userspace: hier kann im Prinzip jede armv7-kompatible Distribution verwendet werden. Wir haben einen aktuellen Snapshot (vom 06. Mai 2018) von OpenSUSE Tumbleweed verwendet: [http://download.opensuse.org/ports/armv7hl/tumbleweed/images/openSUSE-Tumbleweed-ARM-JeOS.armv7-rootfs.armv7l-Current.tar.xz rootfs-Download]

Für Vivado kann folgendes Wrapper-Skript (''vivado_2018.1'') verwendet werden:

<nowiki>#!/bin/bash

cmd=$@

while [ ! -z "$1" ]
do
shift
done

source /opt/Xilinx/Vivado/2018.1/settings64.sh

exec $cmd</nowiki>

Der Aufruf von Vivado erfolgt dann mit

vivado_2018.1 vivado

=== Bauen von U-Boot ===

<nowiki>git clone https://github.com/Xilinx/u-boot-xlnx.git
cd u-boot-xlnx</nowiki>

Hier wird ein Wrapper-Skript für ''make'' erstellt, das dafür sorgt, dass die richtige Umgebung für Cross-Kompilierung verwendet wird. Das folgende Skript sollte ''make_wrap_zynq.sh'' heißen:
<nowiki>#!/bin/sh

export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-

make $@</nowiki>

Wir laden eine Standardkonfiguration...

./make_wrap_zynq.sh zynq_zybo_config

... und kompilieren diese (mit 4 parallelen Prozessen):

./make_wrap_zynq.sh -j4

Dies erstellt folgende relevante Ausgabedateien:

* ''spl/boot.bin'': der first-stage bootloader (FSBL) für den Zynq + u-boot-SPL
* ''u-boot.img'': das eigentliche u-boot-Binary

=== Bauen des Linux-Kernels ===

<nowiki>git clone https://github.com/Xilinx/linux-xlnx.git
cd linux-xlnx</nowiki>

Hier wird wieder ein Wrapper-Skript ''make_wrap_zynq.sh'' erstellt. Zu beachten ist, dass der Pfad zu den ''u-boot''-Tools angegeben werden muss:

<nowiki>#!/bin/sh

export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-

export PATH="/home/thomas/Software/u-boot-xlnx/tools/:$PATH"

make LOADADDR=0x8000 $@</nowiki>

Wir laden eine Standardkonfiguration...

./make_wrap_zynq.sh zynq_zybo_defconfig

... kompilieren diese (mit 4 parallelen Prozessen) ...

./make_wrap_zynq.sh -j4

... und installieren die Module in einen temporären Ordner:

./make_wrap_zynq.sh INSTALL_MOD_PATH=/tmp/zynq_modules modules_install






Version vom 3. Juni 2018, 15:22 Uhr

Diese Seite enthält eine Zusammenfassung von „Erkenntnissen“ bei der erstmaligen Konfiguration eines Zynq-SoCs gewonnen wurden. Die Doku dazu ist zum Teil leider sehr verstreut.

Folgendes sollte durch die erstellte Konfiguration abgedeckt werden:

  • Es sollte ein Linux auf dem Zynq laufen
  • Mit schreibbarem/persistenten Userspace auf der SD-Karte
  • Bitfile soll aus dem Linux in die programmierbare Logik (PL) geladen werden können (nicht nur im FSBL!)

Der erste Versuch erfolgt auf einem Zybo-Board.

Status

  • Linux läuft mit openSUSE-Userspace \o/

Installationsanleitung

Dieser Abschnitt beschreibt, wie man Linux auf dem Zynq zum Laufen bekommt und damit ein Bitfile in die PL lädt.

Vorbereitung

Folgende Tools müssen installiert werden:

Folgende Git-Repositories werden benötigt:

  • linux-xlnx (getesteter Commit: 047a00be376f4aa99d4c0b2f8937fb7c8fbf5272)
  • u-boot-xlnx (getesteter Commit: 21812b5fd359d8756d619a15b49b6079ae3f9f36)

Weiteres:

  • Linux-Userspace: hier kann im Prinzip jede armv7-kompatible Distribution verwendet werden. Wir haben einen aktuellen Snapshot (vom 06. Mai 2018) von OpenSUSE Tumbleweed verwendet: rootfs-Download

Für Vivado kann folgendes Wrapper-Skript (vivado_2018.1) verwendet werden:

#!/bin/bash

cmd=$@

while [ ! -z "$1" ]
do
    shift
done

source /opt/Xilinx/Vivado/2018.1/settings64.sh

exec $cmd

Der Aufruf von Vivado erfolgt dann mit

vivado_2018.1 vivado

Bauen von U-Boot

git clone https://github.com/Xilinx/u-boot-xlnx.git
cd u-boot-xlnx

Hier wird ein Wrapper-Skript für make erstellt, das dafür sorgt, dass die richtige Umgebung für Cross-Kompilierung verwendet wird. Das folgende Skript sollte make_wrap_zynq.sh heißen:

#!/bin/sh                                                                                               

export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-

make $@

Wir laden eine Standardkonfiguration...

./make_wrap_zynq.sh zynq_zybo_config

... und kompilieren diese (mit 4 parallelen Prozessen):

./make_wrap_zynq.sh -j4

Dies erstellt folgende relevante Ausgabedateien:

  • spl/boot.bin: der first-stage bootloader (FSBL) für den Zynq + u-boot-SPL
  • u-boot.img: das eigentliche u-boot-Binary

Bauen des Linux-Kernels

git clone https://github.com/Xilinx/linux-xlnx.git
cd linux-xlnx

Hier wird wieder ein Wrapper-Skript make_wrap_zynq.sh erstellt. Zu beachten ist, dass der Pfad zu den u-boot-Tools angegeben werden muss:

#!/bin/sh                                                                                               

export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-

export PATH="/home/thomas/Software/u-boot-xlnx/tools/:$PATH"

make LOADADDR=0x8000 $@

Wir laden eine Standardkonfiguration...

./make_wrap_zynq.sh zynq_zybo_defconfig

... kompilieren diese (mit 4 parallelen Prozessen) ...

./make_wrap_zynq.sh -j4

... und installieren die Module in einen temporären Ordner:

./make_wrap_zynq.sh INSTALL_MOD_PATH=/tmp/zynq_modules modules_install