petalinuxでC++を扱いたい


目的(purpose)

※この記事は2020/1/25にqiitaに投稿していた記事です。
前回(Vitis + Vivado + zynq = 楽しい)ではHello Worldを出力しました。
まだ見ていない方はぜひ見てください。
Vitis + Vivado + zynq = 楽しい - fetchkun技術レポート

今回はzybo上でLinuxを起動しC++hello worldを出力するファイルを作成してみようと思います。
なお、g++を有効にする方法を探してみたのですが結構時間がかかったのでメモ代わりに記事を書きました。
また、petalinuxの導入部分は前回と同じ方の記事(参考URL1つ目)を参考にさせていただきました。


開発環境(Development environment)

OS:

  • Windows10 Home

ツール:

  • Vivado 2019.2
  • petalinux-v2019.2-final-installer.run
  • Tera Term
  • ZYBO Z7 (Zynq 7010)
  • VitrualBox 6.0.14 (Ubuntu ja 18.04.3)


petalinuxのダウンロード(download petalinux)

Xilinxのダウンロードページ」からPetaLinux 2019.2 Installer(TAR/GZIP - 7.92GB)をダウンロードします。
ダウンロードしたらVirtualBoxUbuntu上に"~/work/temp"フォルダを作成し、そこにpetalinuxのインストーラーを入れておきます。
※以降からVirtualBoxUbuntu環境の話になります。


petalinuxのインストール(install petalinux)

Petalinux Tools DocumentaionSetting Up Your Environmentには入れて置かなければいけない(Ubuntu上に)ライブラリが表になっていますので正確な情報が欲しいときは上記のページで確認してください。
私は以下のライブラリを入れました。

sudo apt install python tofrodos gawk libncurses5-dev tftpd libssl-dev flex bison chrpath socat autoconf libtool texinfo zlib1g-dev gcc-multilib screen pax net-tools xterm

また、参考記事より一応以下のライブラリも入れています。

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 install libgtk2.0-0

そしてUbuntuにpetalinuxをインストールします。
公式や参考記事では/opt/pkg/以下にインストールしてますが、なぜか私の環境ではうまく機能しなかったため
"~/work/peta/"以下にインストールしたらうまくpetalinuxが機能しました。

cd ~/work/temp
.petalinux-v2019.2-final-installer.run ~/work/peta/

上記の2つのコマンドを実行し、petalinuxをインストールしました。


ハードウェアを用意する(Prepare the hardware)

今回使用するハードウェアは前回hello worldを出力する際に使用したハードウェアを使用します。
なのでvivadoで前回と同じハードウェアを作成し、エクスポートして".xsaファイル"の作成までしてください。
用意できたらvivadoのプロジェクトごとUbuntu内のどこかに配置してください。
私の場合、ホストOS(windows10)とUbuntuの共有フォルダの中にvivadoのプロジェクトを作成しているためそのままの配置で使用しました。


Ubuntuの環境設定(Ubuntu environment settings)

こちらも冒頭で紹介した参考記事の環境設定をしました。


Linuxイメージのプロジェクトを作成(Create Linux image project)

cd ~/work/peta
petalinux-create --type project --template zynq --name LanPS ※testは任意の名前
cd LanPS
petalinux-config --get-hw-description=/media/sf_ubu_win10_share/vivadoで作成したプロジェクト名

上記を実行するとコンフィグ画面が表示されます。今回、私はSDカード内のパーティションを分けて使用しましたが、今回の記事の内容を考えるとパーティションを分けずに使用しても構いません。
パーティションを分けて使用する場合はこの記事を参考にしてください。
一応、petalinux-configの設定状況の画像を載せます。

f:id:fetchkun:20200518181803p:plain

f:id:fetchkun:20200518181851p:plain

次にg++(と一応今回はgdbも入れました。)を入れていきます。

petalinux-config -c rootfs

上記のコマンドを実行します。

  • Filesystem Packages → misc → gcc-runtime -> libstdc++
  • Filesystem Packages -> misc -> packagegroup-core-buildessential -> packagegroup-core-buildessential
  • Filesystem Packages → misc → gdbgdb, gdb-dbg

上記それぞれ有効にします。

f:id:fetchkun:20200518181921p:plain

f:id:fetchkun:20200518181937p:plain

f:id:fetchkun:20200518181953p:plain

設定できたら以下のコマンドを実行します。

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

すると"./image/linux/"フォルダ内にBOOT.BIN, image.ub, rootfs.tar.gzが生成されます。
パーティションを分けない場合はBOOT.BIN, image.ubをそのままSDカードに入れてください。
パーティションを分ける場合はFAT32にフォーマットした部分にBOOT.BIN, image.ubを入れ、
ext4にフォーマットした部分にrootfs.tar.gzをtarコマンドで展開します。

zyboにmicroSDをセットし、下画像の青丸の部分のジャンパをSDに繋ぎます。

f:id:fetchkun:20200518182033j:plain

そして起動するとlinuxが立ち上がります。そして/usr/binを確認すると

f:id:fetchkun:20200518182051p:plain
g++, gdbが入っているのがわかります。

適当にhello worldを出力するコードを作成し

f:id:fetchkun:20200518182108p:plain

実行すると下のようになる。

f:id:fetchkun:20200518182126p:plain


おまけ(extra)

今回、PCに刺したSDカードをVirtualBoxUbuntuに認識させて使っているが、そのやりかたを調べるのに時間がかかってしまったためメモとして記載します。

  • SDカードはVirtualBoxだとUSB2.0で認識されるみたい(USB3.0で認識されるものもあるのかな?)
  • VirtualBoxはデフォルトだとUSB1.1にしか対応していないっぽい(ver 6.0.14時点ではUSB1.1にしか対応していなかった)
  • VirtualBoxUSB2.0, USB3.0に対応させるにはVirtualBox Extention Packをインストールする必要があるみたい。

下記のURLからVirtualBox Extention Packをダウンロードしてくる
※各々自分が使っているVirtualBoxのバージョンと同じものをダウンロードしてください。
Downloads – Oracle VM VirtualBox


ダウンロードして、インストールまで完了したらVirtualBoxを起動し設定画面よりUSB2.0を選択する

f:id:fetchkun:20200518182153p:plain

そしてUbuntuを起動したらデバイスのUSBの欄から認識させたいデバイスをクリックする
(私の場合はGeneric USB2.0がSDカードでした)

f:id:fetchkun:20200518182208j:plain

下画像のように(パーティションを分けた後)にちゃんと認識されていることが分かります。

f:id:fetchkun:20200518182225j:plain

f:id:fetchkun:20200518182239j:plain

ここまで見て頂いてありがとうございます。


参考URL(Reference URL)

ZYBO (Zynq) 初心者ガイド (8) Linux起動する - Qiita
Windows10にVirtualBox 5.1をインストールする - Qiita