やまものブログ

メモ書きブログです (^_^;A

Xilinx Zynq QEMU - PetaLinux でクロスコンパイラ入手!

Zynq QEMU にて下記の簡単な Cプログラムを実行してみました。

---------- hello.c ----------
#include <stdio.h>

int main(int argc, char *argv[]){
    printf("Hello World!\n");
    return 0;
}
---------- hello.c ----------

QEMU で実行する Linuxイメージ上には gcc などの開発ツールは用意されていません。
# そんなの当たり前と突っ込まれそうですが、実はちょっと期待していました

そこで、ホストマシン(Ubuntu 13.10)で ARM のバイナリを生成できるクロス開発環境が必要になります。
これをどうしようかといろいろ探し回りましたが、きっとこれ↓がおすすめです


ダウンロードは、
Xilinx社ダウンロードサイト
にて、
"PetaLinux"タブ
を選択(クリック)して、下記をダウンロードしました。

PetaLinux 2013.10 Installation archive for Zynq and MicroBlaze (BSP - 754.68 MB)

なお、ダウンロードにはアカウントが必要です。
会社のメールアドレスが要求されますが、登録は無償です。


いよいよインストールですが、手順はユーザガイド(下記)に記載がありました。

PetaLinux SDK User Guide
Installation Guide
UG976 (v2013.10) November 25, 2013



実際に自分が入力したコマンドは下記の通りです。

まずは、UG976 の ”Required Tools and Libraries” に記載されているパッケージをインストールします。

$ sudo apt-get install tofrodos
$ sudo apt-get install iproute
$ sudo apt-get install gawk
$ sudo apt-get install gcc
$ sudo apt-get install git-core
$ sudo apt-get install make
$ sudo apt-get install net-tools
$ sudo apt-get install ncurses-dev
$ sudo apt-get install tftpd
$ sudo apt-get install zlib1g-dev
$ sudo apt-get install flex
$ sudo apt-get install bison
$ sudo apt-get install ia32-libs lib32ncursesw5


ここまでで、ia32-libs は古いという警告がありましたが、自分の環境は 32-bit 関連のライブラリをすでに install 済みなので無視しました。上記のうち、まだインストール済みでないパッケージは数えるほどしかありませんでした。

つづいて、PetaLinux をインストールします。

$ sudo mkdir /opt/pkg
$ chmod +x petalinux-v2013.10-final-installer.run
$ sudo ./petalinux-v2013.10-final-installer.run /opt/pkg


この段階で「tftp サーバが無いと出来ないことがあるよ」みたいな警告を受けましたが、これも無視

最後に環境設定です。
$ source /opt/pkg/petalinux-v2013.10-final/settings.sh

ここから、冒頭に掲げた hello.c をコンパイルします。
なお、上記 setting.sh ではクロスコンパイラの実行形式へのパスが設定されません。
ですので、以下ではクロスコンパイラをフルパスで指定しました。

$ /opt/pkg/petalinux-v2013.10-final/tools/linux-i386/arm-xilinx-linux-gnueabi/bin/arm-xilinx-linux-gnueabi-gcc -o hello hello.c

次に、Zynq QEMU 環境を起動します。
そこへ上記で生成した hello を、ホストの別のターミナルから FTP で転送します。

$ ftp localhost 10021
Connected to localhost.
220 Operation successful
Name (localhost:myname): root
230 Operation successful
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> put hello
local: hello remote: hello
200 Operation successful
150 Ok to send data
226 Operation successful
6719 bytes sent in 0.00 secs (63704.1 kB/s)
ftp> quit


 QEMU環境で /var/ftp/ へ移動して、hello に実行権をつけて実行します。
イメージ 1

"Hello World!"  が表示されました

なお、上記の通り、ここで使用している Linuxイメージ 14.6-release.tar.xz では PetaLinux のロゴがでます。これ自体がすでに PetaLinux なんですね。

以上では、クロスコンパイラを使うためだけに PetaLinux をインストールしました。
ユーザガイドを斜め読みすると、PetaLinux をインストールすると QEMUも付属しているっぽい記載が見受けられます(未確認)。その QEMUが使えるなら、githum.com/Xilinx から持ってくる必要は無かったかもしれません

なお、PetaLinux のライセンスですが、
PetaLinux のライセンスとリソース
によると、サポート無しの「ベース ライセンス」なら無償です

とりあえず arm-xilinx-linux-gnueabi-gcc を使っただけだと、以上の通りライセンスの設定をしなくても済んでいます。これも無償ツールに含まれているものを使っているだけなので、問題なさそうですね