-
xrt.ini ファイルで必要なランタイムを設定します。
xrt.ini ファイル で説明されるように、このファイルには、デバッグ、プロファイリング、ホスト アプリケーションおよびカーネルを実行する際に XRT で記録されるメッセージを制御するためのさまざまなパラメーターを指定します。アプリケーションでのプロファイリングのイネーブル で説明されるように、アプリケーションの実行中にランタイムでデバッグおよびプロファイル データを取得できるようになります。
xrt.ini ファイルには、エンベデッド プラットフォームのパッケージ で説明されるように、ファイルとアプリケーションの実行に必要なその他のファイルも出力ファイルに含める必要があります。
ヒント: カーネル コードをエミュレーション モードでコンパイルするには、v++ -g
オプションを使用してください。 -
launch_sw_emu.sh スクリプトまたは launch_hw_emu.sh スクリプトを実行して、QEMU エミュレーション環境を起動します。
launch_sw_emu.sh -forward-port 1440 22
スクリプトは、パッケージ プロセス中にエミュレーション ディレクトリに作成され、
launch_emulator.py
コマンドを使用して QEMU を設定して起動します。エミュレーション スクリプトを起動するときに、launch_emulator.py
コマンドにオプションを指定することもできます。たとえば、-forward-port
オプションを使用すると、QEMU ポートをローカル システムのオープン ポートに転送できます。これは、次の手順 5 で説明するように、QEMU からファイルをコピーしようとする場合に必要となります。コマンドの詳細は、launch_emulator ユーティリティ を参照してください。また、
launch_hw_emu.sh -enable-debug
を指定して、QEMU および PL プロセスのために開く追加の XTERM を設定すると、アプリケーションのデバッグに役立つコマンド実行のライブ トランスクリプトを監視できます。これはデフォルトではイネーブルになっていませんが、デバッグに役立ちつことがあります。 - 必要な設定で QEMU シェルをマウントして設定します。
AMD エンベデッドのベース プラットフォームには、SD カード上の別の EXT4 パーティションに
rootfs
があります。Linux の起動後、このパーティションをマウントする必要があります。エミュレーションを手動で実行している場合は、QEMU シェルから次のコマンドを実行する必要があります。mount /dev/mmcblk0p1 /mnt cd /mnt export LD_LIBRARY_PATH=/mnt:/tmp:$LD_LIBRARY_PATH export XCL_EMULATION_MODE=hw_emu export XILINX_XRT=/usr export XILINX_VITIS=/mnt
ヒント:XCL_EMULATION_MODE
環境変数は、ソフトウェア エミュレーションの場合はsw_emu
に、ハードウェア エミュレーションの場合はhw_emu
に設定できます。これで、ホスト アプリケーションがエミュレーション モードで実行されるように設定されます。 - QEMU シェル内からアプリケーションを実行します。
ランタイム初期化 (xrt.ini) を使用して
XCL_EMULATION_MODE
環境を設定し、ホスト アプリケーションに必要なコマンド ラインを使用してホスト実行ファイルを実行します。次に例を示します。./host.elf kernel.xclbin
ヒント: このコマンド ラインでは、多くの AMD Vitis™ サンプルおよびチュートリアルと同様に、ホスト プログラムが xclbin ファイルの名前を引数として使用することを想定していますが、アプリケーションによっては xclbin ファイルの名前がホスト プログラムにコード記述されていたり、アプリケーションの実行に別の方法が必要であったりすることがあります。 - アプリケーション実行が終了したら、opencl_summary.csv、opencl_trace.csv、xrt.run_summary などのファイルがランタイムにより生成されます。これらのファイルは、QEMU 環境内の /mnt フォルダーに含まれます。ただし、これらのファイルは、QEMU Linux システムからローカル システムにコピーしないと表示できません。 注記: ファイルは、
scp
コマンドを使用して、ゲストまたはホスト マシンからコピーできます。ここで注目すべき重要な用語は、「ホスト」と「ゲスト」です。ホスト マシンは QEMU をホストしているマシン、ゲスト マシンは QEMU 上で PetaLinux を使用するマシンです。Host-ip-address
は、QEMU を起動するマシンの IP アドレスです。- ホスト マシンからファイルをコピーします。
- まず、ゲスト マシンから
cp -rf /mnt/<files> /home/petalinux/
コマンドを使用して、必要なファイルをルート領域からpetalinux
(デフォルト) のユーザー ホーム領域にコピーします。 -
exit
コマンドを使用して、デフォルトのログイン ユーザーpetalinux
から切り替えます。 -
sudo chmod 755 <files>
を使用して、コピーしたファイルのパーミッションを変更します。
ファイルは、
scp -P <port-num> <guest-machine-user-name>@<host-ip-address>:<source-file> <dest-path>
のようにホスト マシンから scp コマンドを使用するとコピーできます。たとえば、scp -P 1440 root@172.55.12.26:/mnt/xrt.run_summary
のように指定します。<port-num>
: ゲスト マシンのファイルをホストにコピーするには、ホストとゲストが接続されているポート番号が必要です。1440 はゲスト ポートに接続する QEMU ポートです。-forward-port 1440 22
をlaunch_emulator
に渡し、ゲスト ポートをホスト ポートにマップします。ここで、22 はゲスト TCP ポート、1440 はホスト ポートです。両方のポートがマップされています。ゲスト TCP サービス (ポート 22) にアクセスするには、ホスト マシンのマップされたポート (例: 1440) を使用します。ホストのポート 1440 にアクセスするということは、ゲスト ポート 22 にアクセスするということです。<guest-machine-user-name>
: ゲスト マシンのユーザー名は、PetaLinux ターミナルからwhoami
コマンドで確認することができます。<host-ip-address>
: ホスト IP アドレスは、nslookup <machine name>
またはhostname-i
などの linux コマンドで見つけることができます。<source-file>: QEMU 環境からコピーするファイルのパスと名前です。
<dest-path>: ローカル システムにファイルをコピーするデスティネーション パスです。
- まず、ゲスト マシンから
- ゲスト マシンからファイルをコピーします。
scp <guest-file> <userid-of-hostmachine>@<host-ip-address>:<host's-dir-path>
のようにscp
コマンドを使用して、ゲスト マシンからコピーできます。たとえば、scp /mnt/xrt.run_summary userabcd@172.55.12.26:~
のようになります。
- ホスト マシンからファイルをコピーします。
- アプリケーションのエミュレーションが完了して必要なファイルをすべてコピーしたら、Ctrl + a + x キーを押して QEMU シェルを終了し、Linux シェルに戻ります。注記: QEMU 環境を終了できない場合は、起動したプロセスを強制終了して、環境を実行できます。ツールがトランスクリプトの開始時にプロセス ID (PID) をレポートします。または、エミュレーションの開始時に PID をキャプチャする
-pid-file
オプションを指定できます。
推奨: エンベデッド ハードウェア エミュレーションは、メモリ用にファイル サイズが大きいファイルを作成できるため、マシンのファイル サイズ制限は無制限または 16 GB を超える値に設定する必要があります。
ヒント: ビルドを実行する前に、Vitis 環境の設定 で説明されるように、コマンド シェルまたはウィンドウを設定します。