LoginSignup
7
3

More than 3 years have passed since last update.

bootgen を Debian GNU/Linux、Ubuntu で動かす

Last updated at Posted at 2020-02-01

はじめに

bootgen は バイナリファイルを統合してデバイスブートイメージを生成する Xilinx 社が提供している開発ツールです。主に次の用途に使用します。

  1. Zynq や ZynqMP 等のシステムオンチップ(SoC) のブートイメージ(boot.bin) を生成
    参考: 「Ultra96 向け Debian GNU/Linux (v2018.2版) の構築(BOOT.BIN編)」@Qiita
  2. FPGA をコンフィギュレーションする際にビットストリームファイル(xxxx.bit) をバイナリファイル(xxxx.bin) に変換
    参考: 「UltraZed 向け Debian GNU/Linux (v2018.2版) で FPGA をコンフィギュレーション例」@Qiita

bootgen の詳細は 「Bootgen ユーザー ガイド」 を参照してください。

さて、この bootgen ですが、もともと Xilinx Vivado および Xilinx SDK に含まれていたプログラムで、実行するには Xilinx Vivado または Xilinx SDK がインストールされている環境でしか動きません。また、2019.2 からは Xilinx SDK が Vitis に統合されたこともあってか bootgen だけが別インストールになったりちょっと不便になりました。

幸い、bootgen は Xilinx 社がソースコードを github で公開しています。

これをビルドすれば bootgen がお好みの環境で動きます。嬉しいことに x86 アーキテクチャだけでなく arm64 アーキテクチャでも動作するため、「UltraZed/Ultra96/Ultra96-V2 向け Debian GNU/Linux (v2019.1版) ブートイメージの提供」で紹介した環境であれば、そのままターゲットの上で bootgen が実行できて地味に便利だったりします。この記事では Debian GNU/Linux または Ubuntu でビルドして実行する例を紹介します。

普通にビルドしてインストールする方法

準備

ビルドするためにはコンパイラおよび OpenSSL v1.1.1 が必要です。

セルフコンパイルする際は、ビルドする環境に OpenSSL の開発環境をインストールする必要があります。Debian GNU/Linux や Ubuntu の場合は、apt install で libssl-dev パッケージをインストールしておきます。
クロスコンパイルする際は、ビルドする環境にターゲットアーキテクチャ用のOpenSSL の開発環境をインストールする必要があるのですが、意外と面倒です。この記事ではクロスコンパイルの方法には触れません。

ダウンロード

以下の github のリポジトリをダウンロード(clone)します。

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.

ビルド

make コマンドを実行すればふつ〜に bootgen がビルド出来ます。

shell# cd bootgen
shell# 
shell# make
  :
  (中略)
  :
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

インストール

ビルドした bootgen を実行パスの通っているところにコピーします。ここでは /usr/local/bin にコピーしています。

shell# cp bootgen /usr/local/bin
shell# which bootgen
/usr/local/bin/bootgen

Debian Package 化してインストールする方法

準備

ビルドするためにはコンパイラおよび OpenSSL v1.1.1 が必要です。さらに Debian Package をビルドするための各種ツールが必要です。

shell$ sudo apt install debhelper quilt dh-exec libssl-dev
  :
  (中略)
  :

ダウンロード

以下の URL に bootgen を Debian Package にするリポジトリを置いておきます。このリポジトリは筆者が https://github.com/Xilinx/bootgen を fork して、Debian Package をビルドするための各種ファイルを追加したものです。ブランチが master ではなく 2019.2-develop であることに注意してください。

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.

ビルド

debian/rules binary で Debian Package をビルドします。

shell$ cd bootgen
shell$ sudo debian/rules binary
  :
  (中略)
  :
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'.

一つ上のディレクトリに bootgen_2019.2-1_arm64.deb が出来ていればビルド成功です。

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 <ichiro_k@ca2.so-net.ne.jp>
 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

インストール

Debian Packege を 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                                        |
------------------------------------------------------------------------------+

参考

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3