LoginSignup
5
2

More than 3 years have passed since last update.

1500円ZYNQ基板でPetaLinuxを動作させる(後編:PetaLinux ビルドと EBAZ4205 での動作)

Last updated at Posted at 2021-04-18

はじめに

1500円 ZYNQ 基板(EBAZ4205)で使える、PetaLinux ブートイメージを作成します
EBAZ4205が、RasPi と同じ感覚で使えるようになります。

GUI は無いので CUI のみですが、組み込み用の Linux として作られています。
RAM の上だけで動くように構成すると、SD カードが破損して起動不能になるような RasPi あるあるは起こりません。
必要なブートイメージとハードウェアを作成すると、年単位で安定運用することができます。

前編では、PetaLinux 環境の構築を行いました。
この後編では、PetaLinux の設定とビルドを行い、実際に EBAZ4205 で起動させてみます。

(2021.4.22 追記)
とりあえずですが、プロジェクト作成に使えるハードウェア情報(ebaz4205_wrapper.xsa)を、google driveにおいときました。
ebaz4205_wrapper.xsa

(2021.4.24 追記)
作成したブートイメージもおいときました。
EBAZ4205_Bootimage.zip

使用環境

  1. Windows10 Pro (20H2) で動くPC+RAM 16 GB+100 GB 程の空き領域
  2. Vivado 2020.1 (現在最新の 2020.2 でも、たぶん同手順)
  3. 前回の記事でインストールした VirtiualBox + Ubuntu 18.04.5 + PetaLinux 2020.1 環境
  4. EBAZ4205 (25MHz 水晶 有り/無しどちらでも可、microSD ソケットつき)

参考資料

UG1144 - PetaLinux ツール資料リファレンス ガイド (日本語版) (v2019.2)
UG1144 - PetaLinux Tools Documentation: Reference Guide (v2020.1)

PetaLinux のビルド

1. 仮想マシンのクローン作成

まず、前回構築した Ubuntu 18.04.5 のクローンを作成します。

何も作業していない、プレーンな環境は残しておいて、実際の作業にはクローンを使います。

こうする理由は、仮想マシン側でファイルを削除しても、仮想ディスクのファイルサイズが小さくならないためです。
作業でファイルを作るたびに仮想ディスクは大きくなり、いずれ上限の 100 GB を超えてしまいます。

仮想ディスクを小さくする方法は一応ありますが、手間がかかります。
大きくなった仮想ディスクは、綺麗さっぱり削除して、プレーンな環境から再スタートする方が楽です。

仮想マシンを最初から作りなおすと、Ubuntu のインストールからやり直しになります。
PetaLinux の設定まで終わった仮想マシンを保管しておいて、そこからクローンして使うのがよいです。
1.png

2. 新規プロジェクトの作成

Win10 側で、共有フォルダ share (Ubuntu 側では sf_share) に、Vivado でエクスポートしたハードウェア情報 ????.xsa をコピーしておきます。

クローンした仮想マシンを起動します。

表示 - 仮想スクリーン 1 - 1024 x 768 にリサイズ を設定します。
(1024 x 768 以上ならなんでもいい)
画面が小さいと、PetaLinux プロジェクト作成時にエラーになります。
2.png

Ubuntu のデスクトップで右クリックして、端末を開く(E) を選択します。
ホームディレクトリ(例では /home/kan573/) でターミナルが起動します。

EBAZ4205 用の linux ブートイメージ作成のためのプロジェクトフォルダ ebaz4205_test1 を、作成します。

$ petalinux-create --type project --template zynq --name ebaz4205_test1

/home/kan573/ebaz4205_test1 が、プロジェクトの作業フォルダとして作成されます。
3.png

3. ブート情報の修正

~/ebaz4205_test1/project-spec/meta-user/recipes-bsp/u-boot/u-boot-zynq-scr/boot.cmd.default

を編集します。
この中で、u-boot で FIT イメージ(image.ub)を読み込むアドレスが決め打ちされています。(12行目)

imageub_addr=0x10000000

例によって EBAZ4205 に搭載された DDR3 のアドレス範囲(0x0000_0000~0x1000_0000)を超えています。

そのままだと起動できませんので、正しく読み込めるアドレス、

imageub_addr=0x01000000

あたりに変更しておきます。

これで、DDR3(256 MB)の、前から 16 MB の位置から PetaLinux の FIT イメージ(image.ub)を読み込む記述になります。

image.ub の大きさは、構築するカーネルの構成によりますが、10 MB~64 MB 程度になるようです。
PL で DDR 上にフレームバッファ等を実装する場合は、かち合わないようにアドレスを設定します。

※EBAZ4205 でユーザーが使える DDR3 のアドレス範囲は、0x0010_0000~0x0EFF_FFFF と思います。

4. PetaLinux オプションの設定

作成したプロジェクトフォルダに移動します。

$ cd ~/ebaz4205_test1

ハードウェア情報(.xsa)を置いてある共有フォルダーを指定して、PetaLinux の設定に入ります。
(Windows 側では \デスクトップ\share で、Ubuntu 側では /media/sf_share です)

$ petalinux-config --get-hw-description /media/sf_share

少し待つと、メニュー画面に切り替わります。
ここでは、PetaLinux の基本的な設定を行います。
設定項目がいろいろありますので、覗いてみてください。
4.png

変更する可能性があるのは、このあたりです。
よくわからなければ、そのまま Exit して構いません。

Subsystem AUTO Hardware Settings ---> Ethernet Settings ---> (DHCP/固定 IP の設定、MAC アドレス)
Firmware Version Configuration ---> (PetaLinux のホスト名、プロダクト名、バージョン)
Image Packaging Configuration ---> Copy final images to tftpboot ---> (tftpboot を使わないならチェックを外す)

5. u-boot の設定

u-boot の設定を行います。

$ petalinux-config -c u-boot

しばらく待つと、メニューが表示されます。

u-boot 設定は、不用意に触るとビルドが通らなくなるので、できるだけ触らないのが吉のようです。

※EBAZ4205 に搭載されていない USB は、チェックを外すと、エラーでビルドが通らなくなりました。
5.png

触って大丈夫なのは、このあたり。

(2) delay in seconds before automatically booting ---> (起動時のウェイト秒数 = 2秒)

6. カーネルの設定

PetaLinux のカーネルの設定を行います。

$ petalinux-config -c kernel

メニュー画面が表示されるまで、しばらくかかります。
6.png

ここでは、カーネルで使うモジュールを選択していきます。

設定項目が沢山あり、何がどうつながっていくのがよくわかりません。
https://www.kernelconfig.io/
で調べると、ヒントが得られるかもしれません。

変更する可能性があるのは、このあたりです。

PCI support ---> (チェックを外す)
Device Drivers ---> USB support ---> (チェックを外す)
Real Time Clock ---> (チェックを外す)

7. ルート fs の設定

ルート fs の設定を行います。

$ petalinux-config -c rootfs

こちらは、すぐにメニューが表示されます。
7.png

追加した分だけカーネルが大きくなりますので、不要な物はできるだけ入れないようにします。
開発中の microSD だといくら大きくしても大丈夫ですが、組み込み用の本番基板では eMMC や QSPI-Flash に入れるので、原価に直結します。
(大きいメモリは高い)

EBAZ4205 では 1Gb の NAND フラッシュに入れることもできるので、あまり気にしなくても大丈夫かもしれません。

変更する可能性があるのは、このあたりです。

Filesystem Packages ---> admin ---> sudo ---> sudo にチェック
Filesystem Packages ---> base ---> busybox ---> busybox にチェック
Filesystem Packages ---> base ---> i2c-tools ---> i2c-tools にチェック
Filesystem Packages ---> base ---> init-ifupdown ---> init-ifupdown にチェック
Filesystem Packages ---> console ---> network ---> ethtool ---> ethtool にチェック
Filesystem Packages ---> console ---> network ---> wget にチェック
Filesystem Packages ---> misc ---> packagegroup-core-buildessential ---> packagegroup-core-buildessential にチェック、gcc 入る(?)
Filesystem Packages ---> misc ---> gcc-runtime ---> libstdc++ にチェック、gcc で使う(?)
Image Features ---> debug-tweaks にチェック (scp を使うのに必要)
Image Features ---> auto-login にチェック (scp を使うのに必要)
PetaLinux RootFS Settings ---> Root password (root のパスワード。標準だとパスワードも root)

8. ビルド

$ petalinux-build

とすると、ブートイメージの作成に入ります。
しばらく待つと完了します。
(Core i5-4690, 16GB , SSD の環境で、実測 43 分ほど)
8.png

9. BOOT.BIN の生成

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

で、BOOT.BIN を生成します。
9.png

10. ブートイメージを microSD にコピー

作成された microSD 起動用のブートイメージを、共有フォルダにコピーします。
BOOT.BIN / image.ub / boot.scr の、3つのファイルが必要です。

BOOT.BIN は、一つ上で生成しました。
image.ub は、petalinux-build コマンドで作成されました。
boot.scr は、petalinux-build コマンドで作成されたものは使えないので、新たに作ります。

$ cp ~/ebaz4205_test1/images/linux/BOOT.BIN /media/sf_share
$ cp ~/ebaz4205_test1/images/linux/image.ub /media/sf_share
$ mkimage -c none -A arm -T script -d ~/ebaz4205_test1/project-spec/meta-user/recipes-bsp/u-boot/u-boot-zynq-scr/boot.cmd.default /media/sf_share/boot.scr

10.png

Windows 側の共有フォルダに、必要なファイルの準備ができました。
11.png

ここから、3 つのファイルを microSD カードのルートディレクトリにコピーします。
microSD は、通常の FAT フォーマットでよいです。

これで、EBAZ4205 で PetaLinux を起動する準備ができました。
12.png

EBAZ4205 での起動テスト

microSD カードを EBAZ4205 の microSD ソケットに挿します。
microSD ブートの設定で、電源オン or リセットボタンをポチー します。

無事起動すると、シリアルコンソールに下記のようなブートログが表示されます。

オートログインを有効にしてあるので、すぐにプロンプトが出ます。
13.png

この PetaLinux ですが、カーネルイメージ image.ub を RAM 上に展開して、Initrd で RAM 上のファイルシステムで動いています。
作成したファイルや変更は保存されず、常に初期状態で起動します。

起動後、microSD にはアクセスしないので、電源はいつでもブチ切りしてかまいません。

ドライブの認識状態は下記の通りです。
14.png

/media/sd-mmcblk0p1 が microSD カードです。
ファイルを保存したいときは、こちらにコピーしておくと、消えずに残せます。

ルート fs の設定で、gcc と wget は使えるようにしたので、ある程度 RasPi 的な使い方もできます。

※apt-get は、どのモジュールに含まれているか不明なので、入れられていません。ご存じの方がおられたら教えてください。

25 MHz 水晶無しの EBAZ4205 基板でも、LAN は普通に DHCP で使えます。
このハードウェア構築方法は、次回の投稿にて。

Vivado でハードウェアを変更するとき

Vivado で PS の設定を変えたり、PL に新しい回路を作りこんだりしてから、PetaLinux を再度ビルドするときは下記のようにします。

エクスポートしたハードウェア情報(.xsa)を share フォルダにコピーしておきます。

プロジェクトのフォルダ(~/ebaz4205_test1)に入って、ハードウェア情報を取り込みます。

$ petalinux-config --get-hw-description /media/sf_share --silentconfig

--silentconfig をつけると、メニュー画面を何も変更せずに、設定だけ出力します。

そのまま、ブートイメージを作成します。

$ petalinux-build

BOOT.BIN を生成します。

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

共有フォルダにコピーします。

$ cp ~/ebaz4205_test1/images/linux/BOOT.BIN /media/sf_share
$ cp ~/ebaz4205_test1/images/linux/image.ub /media/sf_share

boot.scr は、読み込みアドレスを変更しないのであれば、そのまま使えます。

microSD にコピーしたら、EBAZ4205 に挿し込んでリセットボタンをポチーすれば、ハードウェアが更新された PetaLinux が起動します。

プロジェクトを作り直したいとき

$ rm -Rf ebaz4205_test1

で、プロジェクトフォルダごと削除して、新しくプロジェクトを作成します。

$ petalinux-create --type project --template zynq --name ebaz4205_test2

ただし、フォルダを削除しても仮想ディスクは小さくなりません。

仮想ディスクが大きくなりすぎたら、その仮想マシンは削除して、新しくクローンを作成してやり直しましょう。

まとめ

EBAZ4205 で動作する PetaLinux の構築方法がわかりました。

今回構築した構成だと、55 MB 程度のイメージサイズになりました。
512 Mbit の QSPI-Flash に収まり、かなり組み込みっぽい Linux になっています。

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