Help us understand the problem. What is going on with this article?

UltraZed/Ultra96/Ultra96-V2 向け Debian GNU/Linux (v2019.1版) ブートイメージの提供

注意(2020年2月6日追記)

この記事は 2019年に投稿したものであり、古い内容が含まれています。2020年2月6日に以下の記事を投稿しましたので参照していください。

はじめに

  • UltraZed-EG スターターキットは Xilinx 社の Zynq UltraScale+ MPSoC(XCZU3EG-SFVA625) を搭載した UltraZed-EG-SOM と UltraZed IOキャリアカードで構成された Avnet 社のキットです。
  • Ultra96 は Xilinx 社の Zynq Ultrascale+ MPSoC(XCZU3EG-1SBVA484E) を搭載した Avnet 社製の 96boads 互換のボードです。
  • Ultra96-V2 は 2018年にリリースされた Ultra96 を更新&再構成したものです。

UltraZed/Ultra96/Ultra96-V2 用に Boot Loader(U-Boot等)、Linux Kernel、Debian10(buster) Root File System を以下の URL に用意したので、この記事ではインストール方法を説明します。

Boot Loader や Linux Kernel のビルドが面倒くさいという方はどうぞ。

概要

  • Hardware
    • UltraZed-EG-IOCC : Xilinx Zynq UltraScale+ MPSoC Starter Kit by Avnet.
    • Ultra96 : Xilinx Zynq UltraScale+ MPSoC development board based on the Linaro 96Boards specification.
    • Ultra96-V2 : updates and refreshes the Ultra96 product that was released in 2018.
  • Boot Loader
    • FSBL(First Stage Boot Loader for ZynqMP)
    • PMU Firmware(Platform Management Unit Firmware)
    • BL31(ARM Trusted Firmware Boot Loader stage 3-1)
    • U-Boot xilinx-v2019.1 (customized)
  • Linux Kernel Version v4.19.0
    • linux-xlnx tag=xilinx-v2019.1
    • Enable Device Tree Overlay with Configuration File System
    • Enable FPGA Manager
    • Enable FPGA Bridge
    • Enable FPGA Reagion
    • Enable ATWILC3000 Linux Driver for Ultra96-V2
  • Debian10(buster) Root File System
  • FPGA Device Drivers and Services

インストール

ダウンロード

github から次のようにダウンロードしてください。現時点の最新バージョンは v2019.1.2 です。なお、いくつかのイメージファイルはかなり大きいので、Git LFS(Large File Storage)を使っています。お使いの環境に git-lfs がインストールされている必要があります。

shell$ git clone -b v2019.1.2 git://github.com/ikwzm/ZynqMP-FPGA-Linux
shell$ cd ZynqMP-FPGA-Linux
shell$ git lfs pull

注意

v2019.1.1 の Linux Kernel には以下の記事で示した修正が私のミスで反映されていませんでした。

v2019.1.2 の Linux Kernel でこの修正が反映されています。

ファイルの説明

  • target/Ultra96
    • boot/
      • boot.bin : Stage 1 Boot Loader for Ultra96
      • uEnv.txt : U-Boot environment variables for linux boot
      • image-4.19.0-xlnx-v2019.1-zynqmp-fpga : Linux Kernel Image (use Git LFS)
      • devicetree-4.19.0-xlnx-v2019.1-zynqmp-fpga-ultra96.dtb : Linux Device Tree Blob
      • devicetree-4.19.0-xlnx-v2019.1-zynqmp-fpga-ultra96.dts : Linux Device Tree Source
  • target/Ultra96-V2
    • boot/
      • boot.bin : Stage 1 Boot Loader for Ultra96-V2
      • uEnv.txt : U-Boot environment variables for linux boot
      • image-4.19.0-xlnx-v2019.1-zynqmp-fpga : Linux Kernel Image (use Git LFS)
      • devicetree-4.19.0-xlnx-v2019.1-zynqmp-fpga-ultra96v2.dtb : Linux Device Tree Blob
      • devicetree-4.19.0-xlnx-v2019.1-zynqmp-fpga-ultra96v2.dts : Linux Device Tree Source
  • target/UltraZed-EG-IOCC/
    • boot/
      • boot.bin : Stage 1 Boot Loader for UltraZed
      • uEnv.txt : U-Boot environment variables for linux boot
      • image-4.19.0-xlnx-v2019.1-zynqmp-fpga : Linux Kernel Image (use Git LFS)
      • devicetree-4.19.0-xlnx-v2019.1-zynqmp-fpga-ultra96v2.dtb : Linux Device Tree Blob
      • devicetree-4.19.0-xlnx-v2019.1-zynqmp-fpga-ultra96v2.dts : Linux Device Tree Source
  • debian10-rootfs-vanilla.tgz : Debian10 Root File System (use Git LFS)
  • linux-image-4.19.0-xlnx-v2019.1-zynqmp-fpga_4.19.0-xlnx-v2019.1-zynqmp-fpga-3_arm64.deb : Linux Image Package (use Git LFS)
  • linux-headers-4.19.0-xlnx-v2019.1-zynqmp-fpga_4.19.0-xlnx-v2019.1-zynqmp-fpga-3_arm64.deb : Linux Headers Package (use Git LFS)
  • fclkcfg-4.19.0-xlnx-v2019.1-zynqmp-fpga_1.2.0-1_arm64.deb : fclkcfg Device Driver and Services Package
  • udmabuf-4.19.0-xlnx-v2019.1-zynqmp-fpga_1.4.2-0_arm64.deb : udmabuf Device Driver and Services Package

SD-Card のフォーマット

  1. SD-Card のパーティション1を VFAT File System でファイルシステムを作ります。
  2. SD-Card のパーティション2を ext4 File System でファイルシステムを作ります。

Linux での SD-Card のフォーマット方法は次の URL を参照してください。

SD-Card への書き込み

0. SD-Card のマウント

shell# mount /dev/sdc1 /mnt/usb1
shell# mount /dev/sdc2 /mnt/usb2

1. Boot Partition のコピー

Ultra96 の場合

SD-Card のパーティション1(下の例では/dev/sdc1)に target/Ultra96/boot/ 下のファイルをコピーします。

shell# cp target/Ultra96/boot/*                                           /mnt/usb1
Ultra96-V2 の場合

SD-Card のパーティション1(下の例では/dev/sdc1)に target/Ultra96-V2/boot/ 下のファイルをコピーします。

shell# cp target/Ultra96-V2/boot/*                                        /mnt/usb1
UltraZed の場合

SD-Card のパーティション1(下の例では/dev/sdc1)に target/UltraZed-EG-IOCC/ 下のファイルをコピーします。

shell# cp target/UltraZed-EG-IOCC/boot/*                                  /mnt/usb1

2. RootFS Partition の生成

SD-Card のパーティション2(下の例では/dev/sdc2)に debian10-rootfs-vanilla.tgz の中身を展開します。展開したルートファイルシステムの home/fpga にデバイスドライバの Debian パッケージをあらかじめコピーしておくと良いでしょう。後から network 経由でコピーしてもかまいません。

shell# tar xfz debian10-rootfs-vanilla.tgz -C                             /mnt/usb2
shell# mkdir                                                              /mnt/usb2/home/fpga/debian
shell# cp linux-image-4.19.0-xlnx-v2019.1-zynqmp-fpga_4.19.0-xlnx-v2019.1-zynqmp-fpga-3_arm64.deb   /mnt/usb2/home/fpga/debian
shell# cp linux-headers-4.19.0-xlnx-v2019.1-zynqmp-fpga_4.19.0-xlnx-v2019.1-zynqmp-fpga-3_arm64.deb /mnt/usb2/home/fpga/debian
shell# cp fclkcfg-4.19.0-xlnx-v2019.1-zynqmp-fpga_1.2.0-1_arm64.deb       /mnt/usb2/home/fpga/debian
shell# cp udmabuf-4.19.0-xlnx-v2019.1-zynqmp-fpga_1.4.2-0_arm64.deb       /mnt/usb2/home/fpga/debian

3. ブートパーティションを見えるように fstab を設定

Boot Partition を Linux 側から常時見えるようにしておくと便利です。その場合は、あらかじめ fstab にブートパーティションをマウントするように設定しておくと良いでしょう。すでに fstab には configfs のマウントが設定されているので注意してください。

shell# mkdir /mnt/usb2/mnt/boot
shell# cat <<EOT >> /mnt/usb2/etc/fstab
/dev/mmcblk0p1  /mnt/boot   auto    defaults    0   0
EOT

余談: このくらいの記述ならあらかじめ debian10-rootfs-vanilla.tgz に書いておけば良いのに、何故わざわざ後で設定するのか疑問に思われるかもしれません。その理由は、debian10-rootfs-vanilla.tgz が Ultra96 と UltraZed と共用だからです。Ultra96 の SD-Card のブートパーティションは /dev/mmcblk0p1 ですが、UltraZed の SD-Card のブートパーティションは /dev/mmcblk1p1 です。しかも UltraZed には /dev/mmcblk0p1 というのも存在していて、あらかじめ debian10-rootfs-vanilla.tgz に書いてしまっていると UltraZed では間違えて別のデバイスにアクセスしてしまいます。そこで、面倒ですが後で設定するようにしました。

4. network の設定

Ultra96/Ultra96-V2 は WiFi を通じてネットワークに接続します。あらかじめホスト側で設定ファイルを作って RootFS に書いておくと良いかもしれません。もちろん、後で Ultra96/Ultra96-V2 を起動してそちらで設定してもかまいません。

ここでは SSID を ssssssssに、パスフレーズを ppppppppp に、暗号化したアクセスキーを xxxx とします。

まずは wpa_passphrase に SSID とパスフレーズを入力して暗号化したアクセスキーを作ります。

shell# wpa_passphrase ssssssss ppppppppp
network={
    ssid="ssssssss"
    #psk="ppppppppp"
    psk=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
}
4.1 /etc/network/interfaces.d/wlan0 に直接記述

SSID と暗号化したアクセスキーをネットワーク設定ファイル(/etc/network/interfaces.d/wlan0)に直接記述します。

/mnt/usb2/etc/network/interfaces.d/wlan0
auto  wlan0
iface wlan0 inet dhcp
    wpa-ssid ssssssss
    wpa-psk  xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
4.2 /etc/wpa_supplicant/wpa_supplicant.conf に記述

ネットワーク設定ファイル(/etc/network/interfaces.d/wlan0)に、次のように、ブート時に wpa_supplicant.conf を読み込んで Wifi を設定するように記述します。

/mnt/usb2/etc/network/interfaces.d/wlan0
auto  wlan0
iface wlan0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

SSID と暗号化したアクセスキーをWifi設定ファイル(/etc/wpa_supplicant/wpa_supplicant.conf)に記述します。

/etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=/run/wpa_supplicant
update_config=1

network={
    ssid="ssssssss"
    psk=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
}

なお、ステルス SSID の場合、スキャンを強制的に行う必要があります。この場合は、/etc/wpa_supplicant/wpa_supplicant.conf に scan_ssid=1 を追加します。

/etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=/run/wpa_supplicant
update_config=1

network={
    ssid="ssssssss"
    scan_ssid=1
    key_mgmt=WPA-PSK
    psk=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
}

パスフレーズ無し の SSID に接続する場合は、key_mgmt=NONE(NONE は大文字) にすると良いようです。

/etc/wpa_supplicant/wpa_supplicant.conf
ctrl_interface=/run/wpa_supplicant
update_config=1

network={
    ssid="ssssssss"
    scan_ssid=1
    key_mgmt=NONE
}

5. SD-Card のアンマウント

shell# umount /mnt/usb1
shell# umount /mnt/usb2

デバイスドライバ パッケージのインストール

Ultra96/Ultra96-V2/UltraZed をブートして root でログイン

root'password is "admin".

debian-fpga login: root
Password:
root@debian-fpga:~#

Linux Image Package のインストール

debian10-rootfs-vanilla.tgz にはすでに v2019.1.1 の Linux Image Package(linux-image-4.19.0-xlnx-v2019.1-zynqmp-fpga_4.19.0-xlnx-v2019.1-zynqmp-fpga-2_arm64.deb) がインストールされています。v2019.1.1 から v2019.1.2 にアップグレードするためには linux-image-4.19.0-xlnx-v2019.1-zynqmp-fpga_4.19.0-xlnx-v2019.1-zynqmp-fpga-3_arm64.deb をインストールして Linux Image Package を更新してください。

root@debian-fpga:~# cd /home/fpga/debian
root@debian-fpga:~# sudo dpkg -i linux-image-4.19.0-xlnx-v2019.1-zynqmp-fpga_4.19.0-xlnx-v2019.1-zynqmp-fpga-3_arm64.deb
(Reading database ... 48216 files and directories currently installed.)
Preparing to unpack linux-image-4.19.0-xlnx-v2019.1-zynqmp-fpga_4.19.0-xlnx-v2019.1-zynqmp-fpga-3_arm64.deb ...
Unpacking linux-image-4.19.0-xlnx-v2019.1-zynqmp-fpga (4.19.0-xlnx-v2019.1-zynqmp-fpga-3) over (4.19.0-xlnx-v2019.1-zynqmp-fpga-2) ...
Setting up linux-image-4.19.0-xlnx-v2019.1-zynqmp-fpga (4.19.0-xlnx-v2019.1-zynqmp-fpga-3) ...

Linux Header Package のインストール

dpkg を使って linux-headers-4.19.0-xlnx-v2019.1-zynqmp-fpga_4.19.0-xlnx-v2019.1-zynqmp-fpga-3_arm64.deb をインストールします。

root@debian-fpga:~# cd /home/fpga/debian
root@debian-fpga:/home/fpga/debian# dpkg -i linux-headers-4.19.0-xlnx-v2019.1-zynqmp-fpga_4.19.0-xlnx-v2019.1-zynqmp-fpga-3_arm64.deb
Selecting previously unselected package linux-headers-4.19.0-xlnx-v2019.1-zynqmp-fpga.
(Reading database ... 26341 files and directories currently installed.)
Preparing to unpack linux-headers-4.19.0-xlnx-v2019.1-zynqmp-fpga_4.19.0-xlnx-v2019.1-zynqmp-fpga-3_arm64.deb ...
Unpacking linux-headers-4.19.0-xlnx-v2019.1-zynqmp-fpga (4.19.0-xlnx-v2019.1-zynqmp-fpga-3) ...
Setting up linux-headers-4.19.0-xlnx-v2019.1-zynqmp-fpga (4.19.0-xlnx-v2019.1-zynqmp-fpga-3) ...
make: Entering directory '/usr/src/linux-headers-4.19.0-xlnx-v2019.1-zynqmp-fpga'
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/conf.o
  YACC    scripts/kconfig/zconf.tab.c
  LEX     scripts/kconfig/zconf.lex.c
  HOSTCC  scripts/kconfig/zconf.tab.o
  HOSTLD  scripts/kconfig/conf
scripts/kconfig/conf  --syncconfig Kconfig
  HOSTCC  scripts/dtc/dtc.o
  HOSTCC  scripts/dtc/flattree.o
  HOSTCC  scripts/dtc/fstree.o
  HOSTCC  scripts/dtc/data.o
  HOSTCC  scripts/dtc/livetree.o
  HOSTCC  scripts/dtc/treesource.o
  HOSTCC  scripts/dtc/srcpos.o
  HOSTCC  scripts/dtc/checks.o
  HOSTCC  scripts/dtc/util.o
  HOSTCC  scripts/dtc/dtc-lexer.lex.o
  HOSTCC  scripts/dtc/dtc-parser.tab.o
  HOSTLD  scripts/dtc/dtc
  CC      scripts/mod/empty.o
  HOSTCC  scripts/mod/mk_elfconfig
  MKELF   scripts/mod/elfconfig.h
  HOSTCC  scripts/mod/modpost.o
  CC      scripts/mod/devicetable-offsets.s
  HOSTCC  scripts/mod/file2alias.o
  HOSTCC  scripts/mod/sumversion.o
  HOSTLD  scripts/mod/modpost
  HOSTCC  scripts/bin2c
  HOSTCC  scripts/kallsyms
  HOSTCC  scripts/conmakehash
  HOSTCC  scripts/sortextable
  HOSTCC  scripts/asn1_compiler
  HOSTCC  scripts/extract-cert
make: Leaving directory '/usr/src/linux-headers-4.19.0-xlnx-v2019.1-zynqmp-fpga'

fclkcfg デバイスドライバ&サービスのインストール

dpkg を使って fclkcfg-4.19.0-xlnx-v2019.1-zynqmp-fpga_1.2.0-1_arm64.deb をインストールします。

root@debian-fpga:~# cd /home/fpga/debian
root@debian-fpga:/home/fpga/debian# dpkg -i fclkcfg-4.19.0-xlnx-v2019.1-zynqmp-fpga_1.2.0-1_arm64.deb
Selecting previously unselected package fclkcfg-4.19.0-xlnx-v2019.1-zynqmp-fpga.
(Reading database ... 45308 files and directories currently installed.)
Preparing to unpack fclkcfg-4.19.0-xlnx-v2019.1-zynqmp-fpga_1.2.0-1_arm64.deb ...
Unpacking fclkcfg-4.19.0-xlnx-v2019.1-zynqmp-fpga (1.2.0-1) ...
Setting up fclkcfg-4.19.0-xlnx-v2019.1-zynqmp-fpga (1.2.0-1) ...

udmabuf デバイスドライバ&サービスのインストール

dpkg を使って udmabuf-4.19.0-xlnx-v2019.1-zynqmp-fpga_1.4.2-0_arm64.deb をインストールします。

root@debian-fpga:~# cd /home/fpga/debian
root@debian-fpga:/home/fpga/debian# dpkg -i udmabuf-4.19.0-xlnx-v2019.1-zynqmp-fpga_1.4.2-0_arm64.deb
Selecting previously unselected package udmabuf-4.19.0-xlnx-v2019.1-zynqmp-fpga.
(Reading database ... 45308 files and directories currently installed.)
Preparing to unpack udmabuf-4.19.0-xlnx-v2019.1-zynqmp-fpga_1.4.2-0_arm64.deb ...
Unpacking udmabuf-4.19.0-xlnx-v2019.1-zynqmp-fpga (1.4.2-0) ...
Setting up udmabuf-4.19.0-xlnx-v2019.1-zynqmp-fpga (1.4.2-0) ...

参考

ikwzm
元へっぽこ電子回路エンジニア。現在隠居中。どちらかというとVHDL派。最近はFPGA+SoC でいろいろやってます。github でもいろいろと公開してます。 https://github.com/ikwzm
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away