LoginSignup
1
2

Ultra96/Ultra96-V2/KV260/KR260 向け Ubuntu 22.04(Desktop版) ブートイメージの提供

Last updated at Posted at 2024-01-16

はじめに

この記事の目的

かつて筆者は ZynqMP で Lima (Mali-400/450樣のオープンンソースなグラフィックドライバ)を Ubuntu 22.04 で試験的に動かしてみた記事を投稿しました。

上記の記事に示したような改造を加えた Ultra96/Ultra96-V2/KV260/KR260 用の Boot Loader(U-Boot等)、Linux Kernel、Ubuntu 22.04(jammy) Root File System を以下の URL に用意しました。この記事はそのインストール方法を説明します。Boot Loader や Linux Kernel のビルドが面倒くさいという方はどうぞ。

注意事項

この記事で紹介しているリポジトリで提供されている Linux カーネルと Ubuntu 22.04 ルートファイルシステムは、AMD社(旧Xilinx社)および Canonical社の公式のものではありません。筆者が道楽で自分好みに魔改造しています。使用する際にはこの点に留意して自己責任でお願いします。

特徴

対応ボード

  • 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.
  • KV260 : Kria KV260 Vision AI Startar Kit.
  • KR260 : Kria KR260 Robotics Startar Kit.

ブートローダー

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

Linux Kernel

  • Linux Kernel Version 6.1.70-zynqmp-fpga-trial
  • linux-stable 6.1.70 がベース
  • Patched equivalent to linux-xlnx v2023.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
  • Enable Lima(Open Source Mali-400 Device Driver)
    • Patch to lima for multiple clocks
    • Patch to lima for multiple interrupt names
    • Patch to lima for alternative device tree ID
    • Patch to xlnx_drm for default alignment size
    • Patch to xlnx_drm for enable data cache

Ubuntu 22.04(jammy) Root File System

インストール

ダウンロード

github から次のようにダウンロードしてください。

shell$ wget https://github.com/ikwzm/ZynqMP-FPGA-Ubuntu22.04-Desktop/archive/refs/tags/v3.0.0.tar.gz
shell$ tar xfz v3.0.0.tar.gz
shell$ cd ZynqMP-FPGA-Ubuntu22.04-Desktop-3.0.0

ファイルの説明

  • target/Kv260/boot/
    • boot.scr : U-Boot script file
    • uEnv.txt : U-Boot environment variables for linux boot
    • devicetree-6.1.70-zynqmp-fpga-trial-kv260-revB.dtb : Linux Device Tree Blob
    • devicetree-6.1.70-zynqmp-fpga-trial-kv260-revB.dts : Linux Device Tree Source
  • target/Kr260/boot/
    • boot.scr : U-Boot script file
    • uEnv.txt : U-Boot environment variables for linux boot
    • devicetree-6.1.70-zynqmp-fpga-trial-kr260-revB.dtb : Linux Device Tree Blob
    • devicetree-6.1.70-zynqmp-fpga-trial-kr260-revB.dts : Linux Device Tree Source
  • target/Ultra96/boot/
    • boot.bin : Stage 1 Boot Loader
    • uEnv.txt : U-Boot environment variables for linux boot
    • devicetree-6.1.70-zynqmp-fpga-trial-ultra96.dtb : Linux Device Tree Blob
    • devicetree-6.1.70-zynqmp-fpga-trial-ultra96.dts : Linux Device Tree Source
  • target/Ultra96-V2/boot/
    • boot.bin : Stage 1 Boot Loader
    • uEnv.txt : U-Boot environment variables for linux boot
    • devicetree-6.1.70-zynqmp-fpga-trial-ultra96v2.dtb : Linux Device Tree Blob
    • devicetree-6.1.70-zynqmp-fpga-trial-ultra96v2.dts : Linux Device Tree Source
  • files/
    • vmlinuz-6.1.70-zynqmp-fpga-trial-2 : Linux Kernel Image
    • config-6.1.70-zynqmp-fpga-trial-2 : Linux Kernel Configuration File
  • ubuntu22.04-desktop-rootfs.tgz.files/ : Ubuntu 22.04 Desktop Root File System
    • x00 .. x16 : (splited files)
  • debian/
    • linux-image-6.1.70-zynqmp-fpga-trial_6.1.70-zynqmp-fpga-trial-2_arm64.deb : Linux Image Package
    • linux-headers-6.1.70-zynqmp-fpga-trial_6.1.70-zynqmp-fpga-trial-2_arm64.deb : Linux Headers Package
    • libgl1-mesa-xlnx-dri_23.0.4-0ubuntu1~22.04.1_arm64.deb : Mesa Dri Xlnx Driver Package
    • xserver-xorg-video-armsoc-xilinx_1.5-trial-13_arm64.deb : X.org Graphics Driver 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 のマウント

SD-Card のパーティション1(ブートパーティション)とパーティション2(ルートパーティション)を読み書き出来るようにマウントします。
この例では、ブートパーティションを /mnt/usb1 に、ルートパーティションを /mnt/usb2 にそれぞれマウントしています。

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

1. ブートパーティションの作成

KV260 の場合

SD-Card のブートパーティション(例では/mnt/usb1)に target/Kv260/boot/ 下のファイルと Linux Kernel Image をコピーします。

shell# cp target/Kv260/boot/*                                /mnt/usb1
shell# gzip -d -c files/vmlinuz-6.1.70-zynqmp-fpga-trial-2 > /mnt/usb1/image-6.1.70-zynqmp-fpga-trial
KR260 の場合

SD-Card のブートパーティション(例では/mnt/usb1)に target/Kr260/boot/ 下のファイルと Linux Kernel Image をコピーします。

shell# cp target/Kr260/boot/*                                /mnt/usb1
shell# gzip -d -c files/vmlinuz-6.1.70-zynqmp-fpga-trial-2 > /mnt/usb1/image-6.1.70-zynqmp-fpga-trial
Ultra96 の場合

SD-Card のブートパーティション(例では/mnt/usb1)に target/Ultra96/boot/ 下のファイルと Linux Kernel Image をコピーします。

shell# cp target/Ultra96/boot/*                              /mnt/usb1
shell# gzip -d -c files/vmlinuz-6.1.70-zynqmp-fpga-trial-2 > /mnt/usb1/image-6.1.70-zynqmp-fpga-trial
Ultra96-V2 の場合

SD-Card のブートパーティション(例では/mnt/usb1)に target/Ultra96-V2/boot/ 下のファイルと Linux Kernel Image をコピーします。

shell# cp target/Ultra96-V2/boot/*                           /mnt/usb1
shell# gzip -d -c files/vmlinuz-6.1.70-zynqmp-fpga-trial-2 > /mnt/usb1/image-6.1.70-zynqmp-fpga-trial

2. ルートパーティションの作成

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

shell# (cat ubuntu22.04-desktop-rootfs.tgz.files/*) | tar xfz - -C /mnt/usb2
shell# mkdir        /mnt/usb2/home/fpga/debian
shell# cp debian/*  /mnt/usb2/home/fpga/debian

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

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

Ultra96/Ultra96-V2 のブートパーティションは /dev/mmcblk0p1 です。

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

KV260/UltraZed のブートパーティションは /dev/mmcblk1p1 です。

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

KR260 のブートパーティションは /dev/sda1 です。

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

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

4. ネットワークの設定

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

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

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

shell# cat <<EOT > /mnt/usb2/etc/netplan/99-network-config.yaml
network:
  version: 2
  renderer: NetworkManager
  wifis:
    wlan0:
      optional: true
      access-points:
        "ssssssss" :
            password: "ppppppppp"
      dhcp4: true
EOT

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

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

起動方法

  1. インストールした SD-Card を Ultra96/Ultra96-V2/Kv260/Kr260 のスロットにセット
  2. Ultra96/Ultra96-V2/Kv260/Kr260 の display port にモニターを接続
  3. Ultra96/Ultra96-V2/Kv260/Kr260 の USB port に USB mouse と USB keyboard 接続
  4. Ultra96/Ultra96-V2/KV260/KR260 の電源を入れる
  5. 数秒後にディスプレイモニターに Ubuntu のログイン画面が表示されます
  6. ユーザーが fpga ならばパスワードに fpga を入力してください
  7. ユーザーが root ならばパスワードに admin を入力してください

参考

1
2
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
1
2