Zynq: Unterschied zwischen den Versionen
Cfr34x (Diskussion | Beiträge) (Erste Schritte) |
Cfr34x (Diskussion | Beiträge) (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. |
|||
⚫ | |||
⚫ | |||
* 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:
- Vivado (getestet mit 2018.1)
- Die Linaro-GCC-Toolchain. Es ist die arm-linux-gnueabihf-Variante zu verwenden (für armv7)
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