Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
17
Help us understand the problem. What is going on with this article?
@iwatake2222

ZYBO (Zynq) 初心者ガイド (8) Linux起動する

More than 3 years have passed since last update.

この記事の内容を3分で見る ( https://youtu.be/ARlSAwkGriE )

環境

  • 開発用PC: Windows 10 64-bit
    • Vivado 2017.4 WebPACKライセンス
    • Xilinx SDK 2017.4 <- 今回は使わない
  • 開発用PC (Linux): Ubuntu 16.04 本家 (日本語版じゃない) (on VirtualBox 5.2.4)
    • PetaLinux 2017.4
  • ターゲットボード: ZYBO (Z7-20)

Windows環境は1回目を参照。

Linux起動する

今までSDKでプロジェクトを作るとき、OS Platformにはstandaloneを指定していました。そのため、OSなしの環境(ベアメタル環境)となっていました。今回は、Linuxのイメージファイルを作って起動確認するところまでをやります。
(ちなみに、RTOSを使いたい場合は、SDKでOS Platformとしてfreertosを選ぶだけでOKです。Free RTOS用ライブラリを含むbspプロジェクトと、タスクが2個あるサンプルプロジェクトが作られます。)

PetaLinuxツール

一般的に、オリジナルボードのLinuxシステムの構築には、Yocto Projectを使うようです。Zynqでは、XilinxからPetaLinuxというLinuxシステム開発キットが用意されているので、それを使います。
結局、PetaLinux内部で、Yoctoを使用しているようです。
紛らわしいのですが、PetaLinuxというのはあくまでツール名であって、Linuxの名称(Ubuntu等)ではありません。(SDKといい、HLx、HLSといい、Xilinxの付ける名前はセンスがないというか、紛らわしいのが多い。。。)

PetaLinuxツールをインストールする

基本的には、ここ(https://github.com/Digilent/Petalinux-Zybo-Z7-20/blob/master/README.md )やここ (https://japan.xilinx.com/support/documentation/sw_manuals_j/xilinx2017_2/ug1144-petalinux-tools-reference-guide.pdf )の手順通りに進めていけばOKです。

開発用ホストPCにLinux環境を入れる

開発PCがLinuxの場合は、そのまま使えます。Windowsの場合は、VirtualBox上でUbuntuをインストールしておきます。

PetaLinuxツールのインストーラをダウンロードしておく

Xilinxのページから、PetaLinuxツールのインストーラ(petalinux-v2017.4-final-installer.run)をダウンロードしておきます (https://www.xilinx.com/support/download/index.html/content/xilinx/en/downloadNav/embedded-design-tools.html )。
ダウンロード後、Ubuntu上の~/work/tempに配置しておきます。

01.jpg

必要なライブラリ/ツールのインストール

下記コマンドで、必要なライブラリ/ツールをインストールします。

sudo apt-get install tofrodos gawk xvfb git libncurses5-dev tftpd zlib1g-dev zlib1g-dev:i386 libssl-dev flex bison chrpath socat autoconf libtool texinfo gcc-multilib libsdl1.2-dev libglib2.0-dev screen pax

さらに、以下もインストールしておきます。ビルド時にエラーが発生したため、調べた結果、以下が必要らしい (一部冗長かもしれません。)
https://forums.xilinx.com/t5/Embedded-Linux/petalinux-build-ERROR-Failed-to-generate-Kconfig-syshw/td-p/812430
https://github.com/RobertBerger/meta-mainline/issues/8

sudo apt-get install rsync 
sudo apt-get install locales
sudo dpkg-reconfigure locales 
sudo locale-gen en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
sudo apt-get install libgtk2.0-0

PetaLinuxツールをインストールする

/opt/pkg/petalinux/にインストールします。まず、ディレクトリ作成後、一般ユーザ(ここだと、takさん)も使えるように権限を設定しておきます。その後、~/work/tempに配置しておいたインストーラを実行します。インストール完了後、統計データの送信設定をOFFにしておきます(任意)。

sudo mkdir -p /opt/pkg/petalinux
sudo chown tak /opt/pkg/
sudo chgrp tak /opt/pkg/
sudo chgrp tak /opt/pkg/petalinux/
sudo chown tak /opt/pkg/petalinux/

cd ~/work/temp
./petalinux-v2017.4-final-installer.run /opt/pkg/petalinux/

petalinux-util --webtalk off

02.jpg

ボードファイルのコピー (不要かも)

Zyboのボードファイルをコピーしておいた方がいいかもしれません。なくても大丈夫でしたが。Digilentから取得したボードファイルをここ(/opt/pkg/petalinux/tools/hsm/data/boards/board_files/)にコピーします。

PetaLinuxツールでLinuxイメージを作る

ハードウェア(hdf)の用意

Vivadoで、PSだけを配置したハードウェアを作って、hdfをエクスポートして(ビットストリーム込みで)、Ubuntu側にコピーしておきます。今回は、作業ディレクトリを、~/work/petaとして、project_1.sdkのフォルダごとコピーしました。

03.jpg
04.jpg

環境設定

新規ターミナルで作業開始のたびに、下記コマンドで環境設定が必要です。PetaLinux専用環境なら、~/.bashrcに書いておいても良いと思います。(言語設定は一部冗長かもしれません。)

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

settings.shで、シェルがbashじゃない、tftpサーバが見つからない、といった警告が出ますが、無視してOKです。

Linuxイメージを作る

SimplePSという名前のプロジェクトを作り(petalinux-create)、指定したハードウェア情報(hdf)に基づくカーネル設定(petalinux-config)をして、ビルドします(petalinux-build)。petalinux-configをしたときに、設定画面が出ますが、なにもせずにExitしてOKです。(make menuconfigと同じ)
Linuxシステムイメージのビルドが完了したら、ブートイメージ(BOOT.bin)を作ります(petalinux-package)

cd ~/work/peta
petalinux-create --type project --template zynq --name SimplePS
cd SimplePS/
petalinux-config --get-hw-description=../project_1.sdk
petalinux-build
petalinux-package --boot --force --fsbl images/linux/zynq_fsbl.elf --fpga images/linux/design_1_wrapper.bit --u-boot

成果物

最終的に必要となる成果物は、以下の2つです。

  • images/linux/BOOT.bin
    • FSBL (First Stage Boot Loader)、ビットストリーム、U-Boot (Second Stage Boot Loader)
  • images/linux/image.ub
    • Linuxシステムイメージ (カーネルなど)

SDカードからLinux起動してみる

作成したBOOT.binとimage.ubを、SDカード(FAT32フォーマット)にコピーします。(以下コマンドは、SDカードがUbuntu上で/media/tak/BOOTにマウントされている場合。GUIでコピーしてもOK)

cp images/linux/BOOT.BIN /media/tak/BOOT/
cp images/linux/image.ub /media/tak/BOOT/

イメージをコピーしたSDカードを、ZYBOボードにさして、SDカード起動するようにジャンパ(JP5)を設定します。

TeraTermなどにシリアル接続して、電源ONすると、U-BootからLinuxが起動していることが分かると思います。

06.jpg

ちなみに、ログインユーザ = root、パスワード = rootです。

07.jpg

ノート

ノート: clean方法

ビルドに失敗した時は、以下でclean出来ます。やりすぎかもしれません。

petalinux-build -c clean
petalinux-build -x clean
petalinux-build -x distclean
petalinux-build -x mrproper

念のため、以下もやった方がいいみたいです。

Go to <petalinux_proj> directory and remove the below directories:
rm -rf components/plnx_workspace/
rm -rf build/cache build/tmp

https://forums.xilinx.com/t5/Embedded-Linux/Petalinux-2016-4-u-boot-doesn-t-compile/td-p/760308
https://forums.xilinx.com/t5/Embedded-Linux/petalinux-build-fails-on-device-tree-generation/td-p/762108

ノート: BSPをパッケージ化する / BSPからプロジェクトを作りビルドする

配布用に、以下コマンドでパッケージ化(BSPファイル化)できます。

cd ~/work/peta/SimplePS/
petalinux-package --prebuilt --clean --fpga images/linux/design_1_wrapper.bit -a images/linux/image.ub:images/image.ub 
petalinux-build -x distclean
petalinux-build -x mrproper
petalinux-package --bsp --force -p ./ --output SimplePS.bsp

BSPファイルから再度プロジェクトを作ってビルドするときは、

petalinux-create -t project -s SimplePS.bsp
cd SimplePS/
petalinux-config --oldconfig
petalinux-build

ちなみに、petalinux-package --prebuiltをしてpre-builtディレクトリを作った後だと、JTAG起動や、QEMU起動ができるようになります。

petalinux-boot --qemu --prebuilt 3

ノート: Digilent提供のBSP

Digilentから、ZYBO用のPetaLinux BSPが提供されています(https://github.com/Digilent/Petalinux-Zybo-Z7-20 )。しかし、これはPetaLinux 2017.2で作られています。それが理由か分かりませんが、僕の環境(2017.4)だと、petalinux-build中にエラーが出ました。

とはいえ、デバイスツリーの設定などは非常に参考になるので、手元にコピーしておくと後々便利だと思います。

17
Help us understand the problem. What is going on with this article?
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
iwatake2222
Embedded software engineer

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
17
Help us understand the problem. What is going on with this article?