Aliexpressにて激安で販売されている、Zync-7000(xc7z010clg400-1)を搭載したマイニング用ボード「EABZ4205」向けにAMD(Xilinx)の公式Linux環境であるPetaLinuxを動かした記録です。
ネット上の記事ではVivado(Vitis)のバージョンが古い(2020.1が多い)ものが多いこともあり、比較的新しい2023.2を使ってWindows11のWSL2+Ubuntuでビルドしたのですが、※1: Xilinxの公式ドキュメント(UG114)通りではエラーが出まくってかなり苦戦したので、記録に残しておきます。
EBAZ4205については、参考リンク ※2を参照してください。
WSL2でのPetaLinux環境の構築
開発環境
- Windows11 Pro 24H2
- WSL v2.3.26.0
Windows11にWSL2をインストールする
以下の記事を参考にさせていただきました。
Windows 11にWSL2をインストールする
Windows Power Shell を管理者権限で起動します。
起動したら、以下のコマンドでWSL2をインストールします。
PS C:\Users\***> WSL --install
インストールが完了したら、システムを再起動します。
標準のインストールでは、規定のUbuntuのバージョンがインストールされます。
PetaLinux2023.2がサポートするOSのバージョンをユーザーガイド(UG1144)で確認します。
WSL2でインストールできるディストリビューションをPower Shellで確認します。
PS C:\Users\***> WSL --list --online
インストールできる有効なディストリビューションの一覧を次に示します。
'wsl.exe --install <Distro>' を使用してインストールします。
NAME FRIENDLY NAME
Ubuntu Ubuntu
Debian Debian GNU/Linux
kali-linux Kali Linux Rolling
Ubuntu-18.04 Ubuntu 18.04 LTS
Ubuntu-20.04 Ubuntu 20.04 LTS
Ubuntu-22.04 Ubuntu 22.04 LTS
Ubuntu-24.04 Ubuntu 24.04 LTS
OracleLinux_7_9 Oracle Linux 7.9
OracleLinux_8_7 Oracle Linux 8.7
OracleLinux_9_1 Oracle Linux 9.1
openSUSE-Leap-15.6 openSUSE Leap 15.6
SUSE-Linux-Enterprise-15-SP5 SUSE Linux Enterprise 15 SP5
SUSE-Linux-Enterprise-15-SP6 SUSE Linux Enterprise 15 SP6
openSUSE-Tumbleweed openSUSE Tumbleweed
今回は、サポートしているUbuntuのバージョンで最新の"Ubuntu-22.04"を追加でインストールします。
PS C:\Users\***> wsl --install Ubuntu-22.04
インストールが終わったら、PoWER Shellでインストールされているディストリビューションを確認します。
PS C:\Users\***> WSL --list
Linux 用 Windows サブシステム ディストリビューション:
Ubuntu (既定)
Ubuntu-24.04
Ubuntu-22.04
以下のコマンドで規定のバージョンを22.04に変更します。
PS C:\Users\***> wsl --set-default ubuntu-22.04
この操作を正しく終了しました。
PS C:\Users\***> WSL --list
Linux 用 Windows サブシステム ディストリビューション:
Ubuntu-22.04 (既定)
Ubuntu-24.04
Ubuntu
PetaLinuxをインストールする
PetaLinux2023.2のインストーラを以下からダウンロードします。
ダウンロードページのリンク製品アップデートのリリース ノートおよび既知の問題を開きます。
最下段のリンクからUbuntu22.04での必要なパッケージリストが記載されたエクセルをダウンロードします。
このファイルの"Ubuntu Desktop/Server 64-bit"に記載された部分が必要なパッケージです。
Ubuntu22.04を起動必要なパッケージをインストールします。
Ubuntu22.04では"python"は廃止され”python2"に名称が変わっているので、以下のように修正して実行します。
~$ sudo apt-get install iproute2 gawk python3 python2 build-essential gcc git make net-tools libncurses5-dev tftpd zlib1g-dev libssl-dev flex bison libselinux1 gnupg wget git-core diffstat chrpath socat xterm autoconf libtool tar unzip texinfo zlib1g-dev gcc-multilib automake zlib1g:i386 screen pax gzip cpio python3-pip python3-pexpect xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev pylint
PetaLinux SDKのインストールで"python"(python2)を呼び出しますので、シンボリックリンクを作成します。
~$ sudo ln -s /usr/bin/python2 /usr/bin/python
今回はPetaLinuxのインストーラを"~/Downloads/"に置き、 PetaLinuxを "~/petalinux2023.2/"にインストールします。
~/petalinux2023.2$ ../Downloads/petalinux-v2023.2-10121855-installer.run
PetaLinuxを実行するための設定ファイルを読み込みます。
~/petalinux2023.2$ source settings.sh
毎回起動時に設定ファイルを読み込む場合は、同じ内容を.bashrcに追記します。
~/petalinux2023.2$ vi ~/.bashrc
//末尾に以下を追加
source ~/petalinux2023.2/settings.sh
EBAZ4205用のプロジェクトの作成
テンプレートから空のプロジェクトを作成します。
~/petalinux2023.2$ petalinux-create --type project --template zynq --name ebaz4205
~/petalinux2023.2$ cd ebaz4205/
~/petalinux2023.2/ebaz4205$
Vivadoからエクスポートしたハードウエア情報(ebaz4205_wrapper.xsa)を読み込みます。
~/petalinux2023.2/ebaz4205$ cp /mnt/c/Users/tomor/Downloads/ebaz4205_wrapper.xsa ../
~/petalinux2023.2/ebaz4205$ petalinux-config --get-hw-description ../ebaz4205_wrapper.xsa
筆者の環境ではここで以下のエラーが出ましたので、追加のパッケージをインストールして対応しました。
- "en_US.utf8がない"というエラーになった場合
以下の言語パックを追加インストールします。ついでに日本語も追加しておきます。
~/petalinux2023.2/ebaz4205$ sudo apt install language-pack-ja -y
~/petalinux2023.2/ebaz4205$ sudo apt install language-pack-en -y
- "[INFO] Generating Kconfig for project"でエラーになった場合
以下の"libtinfo5"をインストールします。
~/petalinux2023.2/ebaz4205$ sudo apt-get install libtinfo5
PetaLinux System Configuration
メニューが出るので、u-bootでFIT イメージ(image.ub)を読み込むアドレスを修正します。
デフォルト値
- imageub_addr=0x10000000
これは、EBAZ4205 に搭載された DDR3 のアドレス範囲(0x0000_0000~0x1000_0000)を超えていますので、正しく読み込めるアドレス
- imageub_addr=0x01000000
に変更します。
PetaLinuxをビルドする
UG1144の手順では、デバイスツリーの記載にtypoがありエラーでビルドができませんので、wavelet2氏のEBAZ4205リポジトリの2023.1ブランチを参考に作業をしていきます。
デフォルトでは"system_conf.dtsi"にtypoがあるので、まずデバイスツリーをビルドします。
~/petalinux2023.2/ebaz4205$ petalinux-build -c device-tree -x do_configure
以下のファイルの18行目を'ps7_nand_0'から'nfc0'に変更します。
- components/plnx_workspace/device-tree/device-tree/system-conf.dtsi
/*
* CAUTION: This file is automatically generated by PetaLinux SDK.
* DO NOT modify this file
*/
/ {
chosen {
bootargs = "console=ttyPS0,115200 earlycon root=/dev/ram0 rw";
stdout-path = "serial0:115200n8";
};
};
&gem0 {
local-mac-address = [00 0a 35 00 1e 53];
};
/*&ps7_nand_0 {*/
&nfc0 {
nand@0 {
partition@0 {
label = "nand-boot";
reg = <0x0 0x00000000 0x00500000>;
};
partition@1 {
label = "nand-kernel";
reg = <0x0 0x00500000 0x00a80000>;
};
partition@2 {
label = "nand-bootenv";
reg = <0x0 0x00f80000 0x00020000>;
};
partition@3 {
label = "nand-device-tree";
reg = <0x0 0x00fa0000 0x00400000>;
};
partition@4 {
label = "nand-rootfs";
reg = <0x0 0x013a0000 0x03c00000>;
};
};
};
修正が終わったら、PetaLinuxをビルドします。ビルドには数時間かかりますので気長に待ちます。
~/petalinux2023.2/ebaz4205$ petalinux-build
BOOT.BIN作成用のシェルスクリプトを作成し、プロジェクトディレクトリ(~/petalinux2023.2/ebaz4205$)に保存します。
#!/bin/bash -eu
petalinux-package --boot --force --fsbl ./images/linux/zynq_fsbl.elf --fpga ./project-spec/hw-description/ebaz4205_wrapper.bit --u-boot
シエルスクリプトを実行しBOOT.BINを作成します。
~/petalinux2023.2/ebaz4205$ ./make_BOOT.BIN.sh
[INFO] Sourcing buildtools
INFO: File in BOOT BIN: "/petalinux2023.2/ebaz4205/images/linux/zynq_fsbl.elf"
INFO: File in BOOT BIN: "/petalinux2023.2/ebaz4205/project-spec/hw-description/ebaz4205_wrapper.bit"
INFO: File in BOOT BIN: "/petalinux2023.2/ebaz4205/images/linux/u-boot.elf"
INFO: File in BOOT BIN: "/petalinux2023.2/ebaz4205/images/linux/system.dtb"
INFO: Generating zynq binary package BOOT.BIN...
****** Bootgen v2023.2
**** Build date : Sep 4 2023-15:57:12
** Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
** Copyright 2022-2023 Advanced Micro Devices, Inc. All Rights Reserved.
[INFO] : Bootimage generated successfully
INFO: Binary is ready.
~/petalinux2023.2/ebaz4205/images/Linux/ の下に起動用ブートイメージが生成されますので、
- BOOT.BIN
- boot.scr
- image.ub
の3個のファイルをSDカードにコピーします。
~/petalinux2023.2/ebaz4205/images/linux$ cp BOOT.BIN boot.scr image.ub /mnt/c/Users/*****/Downloads/
EBAZ4205をSDカードをからブートします。
筆者の環境では、u-bootを実行したところでFATの環境変数が設定されていないというエラーが出ましたので、以下のコマンドを実行し環境変数をFATファイルシステム(SDカード)に保存しました
Zynq> saveenv
リセットして再起動したら、u-bootのプロンプトで停止しましたが、"boot"と入力してPetaLinuxをブートできました。
U-Boot 2023.01 (Sep 21 2023 - 11:02:37 +0000)
CPU: Zynq 7z010
Silicon: v3.1
DRAM: ECC disabled 256 MiB
Core: 24 devices, 16 uclasses, devicetree: board
Flash: 0 Bytes
NAND: 0 MiB
MMC: mmc@e0100000: 0
Loading Environment from FAT... OK
In: serial@e0001000
Out: serial@e0001000
Err: serial@e0001000
Net:
ZYNQ GEM: e000b000, mdio bus e000b000, phyaddr 0, interface gmii
eth0: ethernet@e000b000
Hit any key to stop autoboot: 0
Zynq> boot
正常にブートすると、ログインのプロンプトが出ます。
ttyPS0経由では、rootログインできません。以下のユーザーが設定されていますのでこれでログインします。
- ユーザー: petalinux
- 新規パスワードの設定が要求されるので入力してログイン
PetaLinux 2023.2+release-S10121051 ebaz4205 ttyPS0
ebaz4205 login: petalinux
You are required to change your password immediately (administrator enforced).
New password:
Retype new password:
ebaz4205:~$
参考リンク
※1: PetaLinux ツール資料: リファレンス ガイド (UG1144) 2023.2
https://docs.amd.com/r/2023.2-English/ug1144-petalinux-tools-reference-guide/Overview
※2: 1500円の ZYNQ 基板を買ってみた (EBAZ4205, ANTMINER)
https://qiita.com/kan573/items/e951a0b2e26e19372800
※3: Windows 11にWSL2をインストールする
https://qiita.com/SAITO_Keita/items/148f794a5b358e5cb87b
※4: wavelet2氏のEBAZ4205リポジトリの2023.1ブランチ
https://github.com/wavelet2/EBAZ4205/blob/2023.1/docs/how-to-build.md