Linux
Debian
FPGA
U-boot
ultra96

Ultra96 向け Debian GNU/Linux (v2018.2版) ブートイメージの提供


はじめに

Ultra96 は Xilinx 社の Zynq Ultrascale+ MPSoC を搭載した 96boads 互換のボードです。Ultra96 用に Boot Loader(U-Boot等)、Linux Kernel、Debian 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.



  • 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-v2018.2 (customized)



  • Linux Kernel Version v4.14.0



    • linux-xlnx tag=xilinx-v2018.2

    • Enable Device Tree Overlay with Configuration File System

    • Enable FPGA Manager

    • Enable FPGA Bridge

    • Enable FPGA Reagion



  • Debian9(stretch) Root File System


    • Installed build-essential

    • Installed device-tree-compiler

    • Installed ruby ruby-msgpack ruby-serialport

    • Installed python python3 msgpack-rpc-python

    • Installed u-boot-tools



  • FPGA Device Drivers and Services




インストール


ダウンロード

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

shell$ git clone -b v2018.2.1 git://github.com/ikwzm/ZynqMP-FPGA-Linux

shell$ cd ZynqMP-FPGA-Linux
shell$ git lfs pull


ファイルの説明


  • target/Ultra96


    • boot/


      • boot.bin : Stage 1 Boot Loader

      • uEnv.txt : U-Boot environment variables for linux boot

      • image-4.14.0-xlnx-v2018.2-zynqmp-fpga : Linux Kernel Image (use Git LFS)

      • devicetree-4.14.0-xlnx-v2018.2-zynqmp-fpga-ultra96.dtb : Linux Device Tree Blob


      • devicetree-4.14.0-xlnx-v2018.2-zynqmp-fpga-ultra96.dts : Linux Device Tree Source





  • debian9-rootfs-vanilla.tgz : Debian9 Root File System (use Git LFS)

  • linux-image-4.14.0-xlnx-v2018.2-zynqmp-fpga_4.14.0-xlnx-v2018.2-zynqmp-fpga-1_arm64.deb : Linux Image Package (use Git LFS)

  • linux-headers-4.14.0-xlnx-v2018.2-zynqmp-fpga_4.14.0-xlnx-v2018.2-zynqmp-fpga-1_arm64.deb : Linux Headers Package (use Git LFS)

  • fclkcfg-4.14.0-xlnx-v2018.2-zynqmp-fpga_1.1.0-1_arm64.deb : fclkcfg Device Driver and Services Package

  • udmabuf-4.14.0-xlnx-v2018.2-zynqmp-fpga_1.3.2-1_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 のコピー

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

shell# cp target/Ultra96/boot/*                                           /mnt/usb1


2. RootFS Partition の生成

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

shell# tar xfz debian9-rootfs-vanilla.tgz -C                              /mnt/usb2

shell# mkdir /mnt/usb2/home/fpga/debian
shell# cp linux-image-4.14.0-xlnx-v2018.2-zynqmp-fpga_4.14.0-xlnx-v2018.2-zynqmp-fpga-1_arm64.deb /mnt/usb2/home/fpga/debian
shell# cp linux-headers-4.14.0-xlnx-v2018.2-zynqmp-fpga_4.14.0-xlnx-v2018.2-zynqmp-fpga-1_arm64.deb /mnt/usb2/home/fpga/debian
shell# cp fclkcfg-4.14.0-xlnx-v2018.2-zynqmp-fpga_0.0.1-1_arm64.deb /mnt/usb2/home/fpga/debian
shell# cp udmabuf-4.14.0-xlnx-v2018.2-zynqmp-fpga_0.0.1-1_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

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


4. network の設定

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

ここでは 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 をブートして root でログイン

root'password is "admin".

debian-fpga login: root

Password:
root@debian-fpga:~#


Linux Image Package のインストール

Linux Image Package(linux-image-4.14.0-xlnx-v2018.2-zynqmp-fpga_4.14.0-xlnx-v2018.2-zynqmp-fpga-1_arm64.deb) はあらかじめ debian9-rootfs-vanilla.tgz にインストールされています。特にここでインストールする必要はありません。もし、再度インストールする場合は、dpkg を使って linux-image-4.14.0-xlnx-v2018.2-zynqmp-fpga_4.14.0-xlnx-v2018.2-zynqmp-fpga-1_arm64.deb をインストールします。

root@debian-fpga:~# cd /home/fpga/debian

root@debian-fpga:~# sudo dpkg -i linux-image-4.14.0-xlnx-v2018.2-zynqmp-fpga_4.14.0-xlnx-v2018.2-zynqmp-fpga-1_arm64.deb
(Reading database ... 24872 files and directories currently installed.)
Preparing to unpack linux-image-4.14.0-xlnx-v2018.2-zynqmp-fpga_4.14.0-xlnx-v2018.2-zynqmp-fpga-1_arm64.deb ...
Unpacking linux-image-4.14.0-xlnx-v2018.2-zynqmp-fpga (4.14.0-xlnx-v2018.2-zynqmp-fpga-1) over (4.14.0-xlnx-v2018.2-zynqmp-fpga-1) ...
Setting up linux-image-4.14.0-xlnx-v2018.2-zynqmp-fpga (4.14.0-xlnx-v2018.2-zynqmp-fpga-1) ...


Linux Header Package のインストール

dpkg を使って linux-headers-4.14.0-xlnx-v2018.2-zynqmp-fpga_4.14.0-xlnx-v2018.2-zynqmp-fpga-1_arm64.deb をインストールします。

root@debian-fpga:~# cd /home/fpga/debian

root@debian-fpga:~# sudo dpkg -i linux-headers-4.14.0-xlnx-v2018.2-zynqmp-fpga_4.14.0-xlnx-v2018.2-zynqmp-fpga-1_arm64.deb
Selecting previously unselected package linux-headers-4.14.0-xlnx-v2018.2-zynqmp-fpga.
(Reading database ... 24821 files and directories currently installed.)
Preparing to unpack linux-headers-4.14.0-xlnx-v2018.2-zynqmp-fpga_4.14.0-xlnx-v2018.2-zynqmp-fpga-1_arm64.deb ...
Unpacking linux-headers-4.14.0-xlnx-v2018.2-zynqmp-fpga (4.14.0-xlnx-v2018.2-zynqmp-fpga-1) ...
Setting up linux-headers-4.14.0-xlnx-v2018.2-zynqmp-fpga (4.14.0-xlnx-v2018.2-zynqmp-fpga-1) ...
make: Entering directory '/usr/src/linux-headers-4.14.0-xlnx-v2018.2-zynqmp-fpga'
HOSTCC scripts/basic/fixdep
HOSTCC scripts/basic/bin2c
HOSTCC scripts/kconfig/conf.o
HOSTCC scripts/kconfig/zconf.tab.o
HOSTLD scripts/kconfig/conf
scripts/kconfig/conf --silentoldconfig 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
CHK scripts/mod/devicetable-offsets.h
HOSTCC scripts/mod/file2alias.o
HOSTCC scripts/mod/sumversion.o
HOSTLD scripts/mod/modpost
HOSTCC scripts/kallsyms
HOSTCC scripts/conmakehash
HOSTCC scripts/sortextable
make: Leaving directory '/usr/src/linux-headers-4.14.0-xlnx-v2018.2-zynqmp-fpga'


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

dpkg を使って fclkcfg-4.14.0-xlnx-v2018.2-zynqmp-fpga_1.1.0-1_arm64.deb をインストールします。

root@debian-fpga:~# cd /home/fpga/debian

root@debian-fpga:~# dpkg -i fclkcfg-4.14.0-xlnx-v2018.2-zynqmp-fpga_1.1.0-1_arm64.deb
Selecting previously unselected package fclkcfg-4.14.0-xlnx-v2018.2-zynqmp-fpga.
(Reading database ... 44216 files and directories currently installed.)
Preparing to unpack fclkcfg-4.14.0-xlnx-v2018.2-zynqmp-fpga_1.1.0-1_arm64.deb ...
Unpacking fclkcfg-4.14.0-xlnx-v2018.2-zynqmp-fpga (1.1.0-1) ...
Setting up fclkcfg-4.14.0-xlnx-v2018.2-zynqmp-fpga (1.1.0-1) ...


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

dpkg を使って udmabuf-4.14.0-xlnx-v2018.2-zynqmp-fpga_1.3.2-1_arm64.deb をインストールします。

root@debian-fpga:~# cd /home/fpga/debian

root@debian-fpga:~# dpkg -i udmabuf-4.14.0-xlnx-v2018.2-zynqmp-fpga_1.3.2-1_arm64.deb
Selecting previously unselected package udmabuf-4.14.0-xlnx-v2018.2-zynqmp-fpga.
(Reading database ... 44222 files and directories currently installed.)
Preparing to unpack udmabuf-4.14.0-xlnx-v2018.2-zynqmp-fpga_1.3.2-1_arm64.deb ...
Unpacking udmabuf-4.14.0-xlnx-v2018.2-zynqmp-fpga (1.3.2-1) ...
Setting up udmabuf-4.14.0-xlnx-v2018.2-zynqmp-fpga (1.3.2-1) ...


参考