Virtual Box上でZybo用にLinuxをビルドする


Linux環境がないシチュエーションでPetaLinuxをビルドする必要があったので、作業ログ。

基本的な内容は資料1 2を参考にした。

環境

項目 概要
OS Windows 10 Enterprise 1909
Vivado (on Windows) 2021.1
Virtual Box 6.1.26
PetaLinux 2021.1
Board Zybo z7-20

WSL(2), DockerではなくVirtual BoxなのはUSBが扱いやすいこと、PetaLinux用に環境が切れることが主な理由である。

Bitstream作成

Vivadoでプロジェクト作成後、Zybo Z7-20を選択した。

[PROJECT MANAGER]>[Create Block Design]でZynqだけのブロック作成

[Block Design]ビュー内の[Sources]>[Design Sources]のdesign_1_iを右クリックし、[Create HDL wrapper]でラッパーを作り、

[Project Manager]>[PROGRAM AND DEBUG]の、[Generate Bitstream]する。

完了後、[File]>[Export]>[Export Hardware]を選択、

下記のように選択し、

これでハードウェア情報を持つファイル、design_1_wrapper.xsaができる。後で使う。

Virtual Box上にUbuntuをインストール

6.1.28をインストールしたが、Hyper-V関係で起動できなかったため6.1.26にした。

対応するLinuxのバージョン及び保存容量、メモリ容量はPetaLinuxのリファレンスマニュアルをチェックすること
今回はPetaLinux 2021.1であるため、次のようにした。

項目 概要
OS on Virtual Box Ubuntu 18.04.1
メモリ 8GB
保存容量 120GB

PetaLinux周りに入る前に以下の設定は行った。

  • Windowsとの共有ディレクトリ作成3
  • WindowsでMicro SDカードのFAT32等のフォーマットを行うのは面倒なので、Virtual Boxで行うためマウント4
  • コピペの設定5

PetaLinux環境の構築

Terminal
# su するか適宜sudoしてください
apt update 
apt upgrade

# 共有ディレクトリの設定
apt install virtualbox-guest-utils
mkdir /share


# petalinux install
## 必要ライブラリのインストール(リファレンスマニュアル参照)
apt install -y gcc git make net-tools libncurses5-dev tftpd zlib1g-dev libssl-dev flex bison libselinux1 gnupg wget diffstat chrpath socat xterm autoconf libtool tar unzip texinfo zlib1g-dev gcc-multilib build-essential 
apt install -y -dev zlib1g:i386 screen pax gzip

## インストールディレクトリの設定
mkdir -p /opt/pkg/petalinux
chown -R [usr_name] /opt/pkg
chgrp -R [usr_nane] /opt/pkg

## インストール
./petalinux-v2021.1-final-installer.run --dir /opt/pkg/petalinux/

# device tree install
git clone https://git.kernel.org/pub/scm/utils/dtc/dtc.git
cd dtc
make

以下を~/.bashrcに追加

.bashrc
# petalinux関連
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
source /opt/pkg/petalinux/settings.sh 

# 共有ディレクトリのマウント
mount.vboxsf share /share             

# dtcのパス通す
PATH=$PATH:[dtcをインストールしたディレクトリ]

共有ディレクトリ経由等でWindows上のVivadoで生成したxsaファイル(下記ではdesign_1_wrapper.xsa)をコピーしておく。

Terminal
petalinux-create -t project --template zynq -n linux_build_test
cd linux_build_test
petalinux-config --get-hw-description=[path-to-you-putted]/design_1_wrapper.xsa

デフォルトのまま[Exit]

Terminal
petalinux-build
petalinux-package --boot --force --fsbl images/linux/zynq_fsbl.elf --fpga images/linux/system.bit --u-boot

SDカードへの書き込み。
gpartedを使う。

Terminal
apt install gparted
gparted

こんな感じでパーティションを作った。
今回はrootfs等は使わないのでext4の方はいらないが、今後楽なので。

パーティションを切った後、SDカードをマウントし直す必要があるが、面倒なのでrebootすることでマウントし直している。
作ったfat32のパーティションにimage.ubBOOT.bin, boot.scrをコピーする。
boot.scrを忘れると正常にbootできない6

Terminal
df -h # FAT32のパーティションを探す
cd images/linux/
cp image.ub BOOT.bin boot.scr [path-to-FAT32-partition]

コピーが終わったら、SDカードをZyboに差し、JP5ジャンパをSDカードブートに刺し替え、USBケーブルでPCと接続する。

Tera Term等で接続する。何も弄ってなければボーレートは115200である。

Teraterm
Starting tcf-agent: OK
root@linux_build_test:~#

参考資料