2019年3月3日日曜日

Xilinx Qemu で Cortex-R5 用 TOPPERS/ATK2 を動かした

TOPPERS/ATK2 を、 Debian 上の Xilinx/qemu で動かしたので手順を記録する。

環境

  • OS: Windows 10 Pro
  • Docker: Docker version 18.09.2, build 6247962
    • debian/buster-slim コンテナを使用
  • ATK2: atk2-sc1-mc_zynqmp_r5_gcc-20170929.tar.gz(Zynq UltraScale+ MPSoC Cortex-R5 用)
  • cfg: TOPPERS/cfg を Linux 64bit 対応したものを使用

ATK2 に必要なファイルのダウンロード

ATK2 ソース

TOPPERS/ATK2 の簡易パッケージダウンロードページから atk2-sc1-mc_zynqmp_r5_gcc-20170929.tar.gz をダウンロードし、任意の場所に展開する。

cfg

64bit Linux 対応版(最適化無効) から cfg をダウンロードし、 atk2-sc1-mc_1.4.2/cfg/cfg/cfg という配置になるように展開する。

環境構築

Docker コンテナの起動

展開した atk2-sc1 のディレクトリをマウントしつつ、 Docker コンテナを起動。

docker run -it -v "/PATH/TO/atk2-sc1-mc_1.4.2:/atk2-sc1-mc" --workdir /work debian/buster-slim

以降はこのコンテナ内で作業を行う。

必要なパッケージのインストール

下記作業を行うので、それに必要なパッケージをインストールする。

  • git リポジトリクローン
  • qemu ビルド
  • qemu の dtb ビルド
  • ATK2 のビルド
# いつもの
apt-get update
apt-get upgrade

# git
apt-get install git

# qemu ビルド
apt-get install build-essential python libglib2.0-dev libgcrypt20-dev zlib1g-dev autoconf automake libtool bison flex libpixman-1-dev

# dtb ビルド
apt-get install device-tree-compiler

# ATK2 ビルド
apt-get install gcc-arm-none-eabi

Xilinx/qemu の入手とビルド・インストール

git clone --recursive https://github.com/Xilinx/qemu.git
cd qemu
./configure --target-list="aarch64-softmmu,microblazeel-softmmu" --enable-fdt --disable-kvm --disable-xen
make
make install

Xilinx/qemu-devicetree の入手とビルド

git clone --recursive https://github.com/Xilinx/qemu-devicetrees.git
cd qemu-devicetrees
make OUTDIR=/tmp/dts

TOPPERS/ATK2 のビルド

cd /atk2-sc1-mc
mkdir mysample
cd mysample
../configure -T zynqmp_r5_gcc
make GCC_TARGET=arm-none-eabi

動作確認

Xilinx Quick Emulator User Guide の Table 3-7:Cortex-R5 Registers and Command に、 R5 で動かすための設定例が書いてある。 それを利用して QEMU を起動。

qemu-system-aarch64 -M arm-generic-fdt -nographic -serial mon:stdio -dtb /tmp/dts/LATEST/SINGLE_ARCH/zcu102-arm.dtb -device loader,file=./atk2-sc1-mc,cpu-num=4 -device loader,addr=0xff5e023c,data=0x80008fde,data-len=4 -device loader,addr=0xff9a000,data=0x8000218,data-len=4

オーディオの初期化に失敗するようだが、とりあえずシリアル出力はできている。

audio: Could not init `oss' audio driver

TOPPERS/ATK2-SC1-MC Release 1.4.2 for ZYNQMP_R5 (Mar  2 2019, 14:12:32)

StartupHook @ core0
activate MainTask! @ core0
Input Command:
1
Input Command:
a
Call ActivateTask(Task1)
RaiseInterCoreInterrupt before
/***********************/
Coer0_ICI_1 run!
Coer0_ICI_1 GetISRID() = 4
Coer0_ICI_1 GetApplicationID() = 0
RaiseInterCoreInterrupt finish
Task1 ACTIVATE
Input Command:

Docker イメージ

Xilinx/qemu の Docker イメージを作った。

今回作った環境とは構成が異なるので注意。

  • gcc-arm-none-eabi 未インストール
  • dts の格納場所を、 /tmp から /var に変更

以上。

参考資料

0 件のコメント:

コメントを投稿