エンベデッド プロセッサ プラットフォームでのエミュレーションの実行 - 2023.2 日本語

Vitis 統合ソフトウェア プラットフォームの資料: アプリケーション アクセラレーション開発 (UG1393)

Document ID
UG1393
Release Date
2023-12-13
Version
2023.2 日本語
ヒント: ビルドを実行する前に、Vitis 環境の設定 で説明されるように、コマンド シェルまたはウィンドウを設定します。
  1. xrt.ini ファイルで必要なランタイムを設定します。

    xrt.ini ファイル で説明されるように、このファイルには、デバッグ、プロファイリング、ホスト アプリケーションおよびカーネルを実行する際に XRT で記録されるメッセージを制御するためのさまざまなパラメーターを指定します。アプリケーションでのプロファイリングのイネーブル で説明されるように、アプリケーションの実行中にランタイムでデバッグおよびプロファイル データを取得できるようになります。

    xrt.ini ファイルには、エンベデッド プラットフォームのパッケージ で説明されるように、ファイルとアプリケーションの実行に必要なその他のファイルも出力ファイルに含める必要があります。

    ヒント: カーネル コードをエミュレーション モードでコンパイルするには、v++ -g オプションを使用してください。
  2. 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 を設定すると、アプリケーションのデバッグに役立つコマンド実行のライブ トランスクリプトを監視できます。これはデフォルトではイネーブルになっていませんが、デバッグに役立ちつことがあります。

  3. 必要な設定で 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 に設定できます。これで、ホスト アプリケーションがエミュレーション モードで実行されるように設定されます。
  4. QEMU シェル内からアプリケーションを実行します。

    ランタイム初期化 (xrt.ini) を使用して XCL_EMULATION_MODE 環境を設定し、ホスト アプリケーションに必要なコマンド ラインを使用してホスト実行ファイルを実行します。次に例を示します。

    ./host.elf kernel.xclbin
    ヒント: このコマンド ラインでは、多くの AMD Vitis™ サンプルおよびチュートリアルと同様に、ホスト プログラムが xclbin ファイルの名前を引数として使用することを想定していますが、アプリケーションによっては xclbin ファイルの名前がホスト プログラムにコード記述されていたり、アプリケーションの実行に別の方法が必要であったりすることがあります。
  5. アプリケーション実行が終了したら、opencl_summary.csvopencl_trace.csvxrt.run_summary などのファイルがランタイムにより生成されます。これらのファイルは、QEMU 環境内の /mnt フォルダーに含まれます。ただし、これらのファイルは、QEMU Linux システムからローカル システムにコピーしないと表示できません。
    注記: ファイルは、scp コマンドを使用して、ゲストまたはホスト マシンからコピーできます。ここで注目すべき重要な用語は、「ホスト」と「ゲスト」です。ホスト マシンは QEMU をホストしているマシン、ゲスト マシンは QEMU 上で PetaLinux を使用するマシンです。Host-ip-address は、QEMU を起動するマシンの IP アドレスです。
    1. ホスト マシンからファイルをコピーします。
      1. まず、ゲスト マシンから cp -rf /mnt/<files> /home/petalinux/ コマンドを使用して、必要なファイルをルート領域から petalinux (デフォルト) のユーザー ホーム領域にコピーします。
      2. exit コマンドを使用して、デフォルトのログイン ユーザー petalinux から切り替えます。
      3. 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 22launch_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>: ローカル システムにファイルをコピーするデスティネーション パスです。

    2. ゲスト マシンからファイルをコピーします。

      scp <guest-file> <userid-of-hostmachine>@<host-ip-address>:<host's-dir-path> のように scp コマンドを使用して、ゲスト マシンからコピーできます。たとえば、scp /mnt/xrt.run_summary userabcd@172.55.12.26:~ のようになります。

  6. アプリケーションのエミュレーションが完了して必要なファイルをすべてコピーしたら、Ctrl + a + x キーを押して QEMU シェルを終了し、Linux シェルに戻ります。
    注記: QEMU 環境を終了できない場合は、起動したプロセスを強制終了して、環境を実行できます。ツールがトランスクリプトの開始時にプロセス ID (PID) をレポートします。または、エミュレーションの開始時に PID をキャプチャする -pid-file オプションを指定できます。