bootgen ist ein von Xilinx bereitgestelltes Entwicklungstool, das Binärdateien integriert, um Geräte-Boot-Images zu generieren. Es wird hauptsächlich für die folgenden Zwecke verwendet.
Weitere Informationen zu bootgen finden Sie im [Bootgen-Benutzerhandbuch] ug1283.
Übrigens ist dieses Bootgen ein Programm, das ursprünglich in Xilinx Vivado und Xilinx SDK enthalten war, und es funktioniert nur in der Umgebung, in der Xilinx Vivado oder Xilinx SDK zum Ausführen installiert ist. Ab 2019.2 wurde es außerdem unpraktisch, da das Xilinx SDK in Vitis integriert wurde und nur bootgen separat installiert wurde.
Glücklicherweise ist bootgen von Xilinx auf Github erhältlich.
Wenn Sie dies erstellen, funktioniert bootgen in Ihrer bevorzugten Umgebung. Glücklicherweise funktioniert es nicht nur mit der x86-Architektur, sondern auch mit der arm64-Architektur. Daher wird es in ["Bereitstellen eines Boot-Images für Debian GNU / Linux (Version 2019.1) für UltraZed / Ultra96 / Ultra96-V2"] ZynqMP-FPGA-Linux eingeführt. In einer solchen Umgebung kann bootgen auf dem Ziel so ausgeführt werden, wie es ist, was praktisch ist. Dieser Artikel enthält ein Beispiel für das Erstellen und Ausführen unter Debian GNU / Linux oder Ubuntu.
Zum Erstellen benötigen Sie einen Compiler und OpenSSL v1.1.1.
Beim Selbstkompilieren müssen Sie die OpenSSL-Entwicklungsumgebung in der von Ihnen erstellten Umgebung installieren. Verwenden Sie für Debian GNU / Linux und Ubuntu apt install, um das libssl-dev-Paket zu installieren. Beim Cross-Compilieren muss die OpenSSL-Entwicklungsumgebung für die Zielarchitektur in der zu erstellenden Umgebung installiert werden, was unerwartet problematisch ist. Dieser Artikel behandelt nicht das Cross-Kompilieren.
Laden Sie das folgende Github-Repository herunter (klonen Sie es).
shell# git clone https://github.com/Xilinx/bootgen
Cloning into 'bootgen'...
remote: Enumerating objects: 146, done.
remote: Counting objects: 100% (146/146), done.
remote: Compressing objects: 100% (95/95), done.
remote: Total 146 (delta 58), reused 138 (delta 50), pack-reused 0
Receiving objects: 100% (146/146), 386.16 KiB | 466.00 KiB/s, done.
Resolving deltas: 100% (58/58), done.
Normalerweise können Sie bootgen erstellen, indem Sie den Befehl make ausführen.
shell# cd bootgen
shell#
shell# make
:
(Unterlassung)
:
echo Building executable file: bootgen...
Building executable file: bootgen...
g++ -std=c++0x -O -Wall -Wno-reorder -Wno-deprecated-declarations -o bootgen \
bif.tab.o bif.yy.o reginit.tab.o reginit.yy.o cmdoptions.tab.o cmdoptions.yy.o \
authentication.o authentication-zynq.o authentication-zynqmp.o authkeys.o binar\
y.o binfile.o bitutils.o options.o bifoptions.o bootheader.o bootheader-zynq.o \
bootheader-zynqmp.o bootimage.o bootimage-zynq.o bootimage-zynqmp.o checksum.o \
elftools.o encryption.o encryptutils.o encryptionkeys.o encryption-zynq.o encry\
ption-zynqmp.o hash.o imageheadertable.o imageheadertable-zynq.o imageheadertab\
le-zynqmp.o Keccak-compact.o logger.o readimage.o readimage-zynq.o readimage-zy\
nqmp.o verifyimage.o main.o mcsfile.o outputfile.o parsing.o partition.o partit\
ionheadertable.o partitionheadertable-zynq.o partitionheadertable-zynqmp.o regi\
nit.o -lssl -lcrypto
shell#
shell# file bootgen
bootgen: ELF 64-bit LSB pie executable, ARM aarch64, version 1 (SYSV), dynamica\
lly linked, interpreter /lib/ld-linux-aarch64.so.1, for GNU/Linux 3.7.0, BuildI\
D[sha1]=9ea6dc2ff0979a37bd4e6
Kopieren Sie das erstellte Bootgen an einen Ort in Ihrem Ausführungspfad. Hier wird es nach / usr / local / bin kopiert.
shell# cp bootgen /usr/local/bin
shell# which bootgen
/usr/local/bin/bootgen
Zum Erstellen benötigen Sie einen Compiler und OpenSSL v1.1.1. Sie benötigen auch verschiedene Tools, um das Debian-Paket zu erstellen.
shell$ sudo apt install debhelper quilt dh-exec libssl-dev
:
(Unterlassung)
:
Platzieren Sie ein Repository, das bootgen zu einem Debian-Paket macht, unter der folgenden URL. Dieses Repository habe ich unter https://github.com/Xilinx/bootgen gespalten und verschiedene Dateien zum Erstellen des Debian-Pakets hinzugefügt. Beachten Sie, dass der Zweig 2019.2-Develop ist und nicht Master.
shell$ git clone -b 2019.2-develop https://github.com/ikwzm/bootgen.git
Cloning into 'bootgen'...
remote: Enumerating objects: 160, done.
remote: Counting objects: 100% (160/160), done.
remote: Compressing objects: 100% (104/104), done.
remote: Total 160 (delta 63), reused 150 (delta 53), pack-reused 0
Receiving objects: 100% (160/160), 389.17 KiB | 397.00 KiB/s, done.
Resolving deltas: 100% (63/63), done.
Erstellen Sie das Debian-Paket mit Debian / Rules Binary.
shell$ cd bootgen
shell$ sudo debian/rules binary
:
(Unterlassung)
:
dpkg-deb: building package 'bootgen' in '../bootgen_2019.2-1_arm64.deb'.
dpkg-deb: building package 'bootgen-dbgsym' in '../bootgen-dbgsym_2019.2-1_arm64.deb'.
Wenn bootgen_2019.2-1_arm64.deb im nächsthöheren Verzeichnis erstellt wird, ist der Build erfolgreich.
shell$ dpkg --info ../bootgen_2019.2-1_arm64.deb
new Debian package, version 2.0.
size 202168 bytes: control archive=596 bytes.
338 bytes, 10 lines control
192 bytes, 3 lines md5sums
Package: bootgen
Version: 2019.2-1
Architecture: arm64
Maintainer: ikwzm <[email protected]>
Installed-Size: 758
Depends: libc6 (>= 2.17), libgcc1 (>= 1:3.0), libssl1.1 (>= 1.1.1), libstdc++6 (>= 5.2)
Section: utils
Priority: optional
Homepage: <https://github.com/Xilinx/bootgen>
Description: Bootgen for Xilinx Zynq and ZU+SoCs
Installieren Sie Debian Packege mit dpkg.
shell$ sudo dpkg --install ../bootgen_2019.2-1_arm64.deb
Selecting previously unselected package bootgen.
(Reading database ... 85254 files and directories currently installed.)
Preparing to unpack ../bootgen_2019.2-1_arm64.deb ...
Unpacking bootgen (2019.2-1) ...
Setting up bootgen (2019.2-1) ...
shell$ which bootgen
/usr/bin/bootgen
shell$ bootgen
****** Xilinx Bootgen v2019.2
**** Build date : Jan 16 2020-08:00:00
** Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
------------------------------------------------------------------------------+
COMMAND LINE OPTIONS |
-------------------------------+----------------------------------------------+
-arch [options] | Xilinx Architecture |
| options: [zynq, zynqmp, fpga] |
-------------------------------+----------------------------------------------+
-image <filename> | Input Boot Image File (.bif) |
-------------------------------+----------------------------------------------+
-o <filename> | Output filename in MCS/BIN format |
-------------------------------+----------------------------------------------+
-w [options] | Overwrite mode |
| options: [on, off] |
-------------------------------+----------------------------------------------+
-encrypt [options] | AES Key storage in chip (Zynq only) |
| options: [bbram, efuse] |
-------------------------------+----------------------------------------------+
-p <string> | Part name |
-------------------------------+----------------------------------------------+
-efuseppkbits <filename> | Generate PPK hash for e-fuse |
-------------------------------+----------------------------------------------+
-generate_hashes | Generate SHA hashes (PKCS#1v1.5) |
-------------------------------+----------------------------------------------+
-spksignature <filename> | Generate SPK signature file |
-------------------------------+----------------------------------------------+
-fill <hex-byte> | Fill byte for padding |
-------------------------------+----------------------------------------------+
-split [options] | Split partitions to diff files |
| options: [bin, mcs] |
-------------------------------+----------------------------------------------+
-padimageheader [options] | Pad header tables |
| options: [0, 1] |
-------------------------------+----------------------------------------------+
-process_bitstream [options] | Outputs bitstream in bin/mcs format |
| options: [bin, mcs] |
-------------------------------+----------------------------------------------+
-generate_keys [options] | Generate authentication keys |
| options: [pem, rsa, obfuscatedkey] |
-------------------------------+----------------------------------------------+
-dual_qspi_mode [options] | Generate 2 output files for Dual QSPI |
| options: [parallel, stacked <size>] |
-------------------------------+----------------------------------------------+
-log [options] | Generate log file |
| options: [error, warning, info, debug, trace]|
-------------------------------+----------------------------------------------+
-zynqmpes1 | Generate boot image for (1.0)ES1 |
-------------------------------+----------------------------------------------|
-nonbooting | Generate an intermediate boot image |
-------------------------------+----------------------------------------------|
-encryption_dump | Generate encryption log file |
-------------------------------+----------------------------------------------+
-verify | Verify BootImage authentication |
-------------------------------+----------------------------------------------+
-h | -help | Print the help summary |
-------------------------------+----------------------------------------------+
-bif_help | Print the BIF help summary |
-------------------------------+----------------------------------------------+
Note : For more info on bootgen options, use the command |
bootgen -help <option> |
Example : bootgen -help efuseppkbits |
------------------------------------------------------------------------------+