ブートおよびコンフィギュレーション¶
Versal® ACAP 用にブートローダー、ベアメタル アプリケーション (APU/RPU 用)、および Linux オペレーティング システムを統合してロードする方法を示します。この章では、次のトピックについて説明します。
システム ソフトウェア: PLM、トラステッド ファームウェア A (TF-A)、U-Boot
スタンドアロン アプリケーションのブート イメージを生成する手順。
SD ブート、QSPI、および OSPI ブート モードのブート シーケンス。
これらの設定は、Vitis™ ソフトウェア プラットフォームと PetaLinux ツール フローを使用して実行できます。../2-cips-noc-ip-config では PS 内の各プロセッシング ユニットのソフトウェア ブロックを作成することにのみ重点を置いていましたが、この章ではより大規模なシステムの一部としてこれらのブロックを読み込む方法を説明します。
システム ソフトウェア¶
この章のブートおよびコンフィギュレーションの説明の大部分は、ここで挙げるシステム ソフトウェア ブロックについてです。
プラットフォーム ローダーおよびマネージャー¶
PLM (プラットフォーム ローダーおよびマネージャー) は、Versal ACAP の PMC (Platform Management Controller) ブロック内の専用プロセッサの 1 つで実行されるソフトウェアです。プラットフォーム管理、エラー管理、パーシャル リコンフィギュレーション、デバイスのサブシステム再起動など、起動および実行時の管理を担当します。PLM はイメージを再ロードし、パーシャル PDI とサービス割り込みをロードできます。PLM はブート ソースからプログラマブル デバイス イメージを読み取り、NoC の初期化、DDR メモリの初期化、プログラマブル ロジック、およびプロセッシング システムを、含むシステムのコンポーネントを設定してから、デバイスのブートを完了します。
U-Boot¶
U-Boot はセカンダリ ブートローダーとして機能します。U-Boot は、PLM ハンドオフ後に Linux を Arm A72 APU にロードし、ボード コンフィギュレーションに基づいてプロセッシング システム内の残りのペリフェラルをコンフィギュレーションします。U-Boot は、eMMC、SATA、TFTP、SD、QSPI などのさまざまなメモリ ソースからイメージを取得できます。U-Boot は、PetaLinux ツール フローを使用して設定およびビルドできます。
トラステッド ファームウェア A¶
トラステッド ファームウェア A (ATF) は、APU の EL3 (例外レベル 3) で実行される透過的なベアメタル アプリケーション レイヤーです。ATF には、セキュア ワールドと非セキュア ワールドを切り替えるためのセキュア モニター レイヤーが含まれます。セキュア モニターの呼び出しと TBBR (Trusted Board Boot Requirements) の実装により、Versal ACAP の APU に Linux をロードするには ATF レイヤーが必須です。PLM は APU で実行される ATF をロードします。ATF は EL3 で動作し続けてサービス要求を待ちます。PLM はまた、APU が実行される DDR メモリに U-Boot をロードします。DDR メモリは、Linux OS を SMP モードで APU にロードします。ATF (bl31.elf) は、デフォルトで PetaLinux に構築されます。このファイルは、PetaLinux プロジェクト イメージ ディレクトリにあります。
スタンドアロン アプリケーションのブート イメージの生成¶
Vitis ソフトウェア プラットフォームでは、Versal ACAP アーキテクチャの自動ブート イメージ作成がサポートされていません。ブータブル イメージを生成するには Bootgen を使用します。Bootgen は Vitis ソフトウェア プラットフォーム パッケージに含まれるコマンド ライン ユーティリティです。Bootgen の主な機能は、ブータブル イメージのさまざまなパーティションを統合することです。Bootgen は、Bootgen イメージ フォーマット (BIF) ファイルを入力として使用し、バイナリ BIN または PDI フォーマットで 1 つのファイル イメージを生成します。不揮発性メモリ (NVM) (QSPI または SD カード) にロードできる単一のファイル イメージを出力します。次の手順を実行して、PDI/BIN ファイルを生成します。
Vitis IDE で [XSCT Console] ビューがまだ開いていない場合は、[Window] → [Show View] をクリックして開きます。Show View ウィザードの検索バーに「xsct console」と入力します。[Open] をクリックして、コンソールを開きます。
[XSCT Console] で次のコマンドを入力して、ブート イメージを生成するフォルダーを作成します。
mkdirbootimagescdbootimages/
<design-package>/<board-name>/ready_to_test/qspi_images/standalone/<cips or cips_noc>/<apu or rpu>/ディレクトリにある sd_boot.bif ファイル、<Vitis platform project>/hw/<.pdi-file>ディレクトリにある PDI ファイル、<Vitis application-project>/Debugフォルダーにあるアプリケーションの ELF ファイルを、手順 2 で作成したフォルダーにコピーします。注記
必要に応じて、任意のテキスト エディターで sd_boot.bif ファイルを開き、Vitis プロジェクトごとに PDI または ELF の名前を変更します。
[XSCT Console] ビューで次のコマンドを実行します。
bootgen-image<biffilename>.bif-archversal-oBOOT.BIN
[XSCT Console] ビューには、次のログが表示されます。
JTAG を使用した Versal ボードへの Petalinux イメージのロード¶
このセクションでは、Versal ボードで JTAG モードを使用して Versal PetaLinux イメージをロードする方法について説明します。
次のコマンドを使用して、Linux イメージをビルドします。
$petalinux-build $petalinux-build
次のコマンドを実行して BOOT.BIN をビルドします。
$petalinux-package --boot --uboot $petalinux-package --boot --uboot
次のように、Versal プロジェクト ディレクトリから petalinux コマンドを使用して Tcl スクリプトを作成します。
$petalinux-boot --jtag --kernel --tcl versal.tcl $petalinux-boot --jtag --kernel --tcl versal.tcl
注記
versal.tclファイルには、適切なターゲットを選択し、DDR メモリ内の必要な場所にアプリケーション ファイルをダウンロードするためのコマンドが含まれています。
次のように、生成されたファイル versal.tcl を変更します。
このチュートリアルでは rootfs イメージを使用するため、ramdisk.cpio.gz の名前を rootfs.cpio.gz.u-boot に変更します。
con コマンドの前に次の行を追加して、BOOT.BIN を DDR メモリにロードします。
puts stderr "INFO: Loading image: BOOT.BIN at 0x70000000" dow -data -force "BOOT.BIN" 0x70000000 after 2000“
次の図と同じように、ブート モード スイッチ SW1 を ON-ON-ON-ON JTAG に設定します。
Tera Term シリアル アプリケーションをデフォルトの 115200,N8 に設定し、Tera Term コンソールを開きます。
XSCT コンソールで、connect コマンドを使用して JTAG を介してターゲットに接続します。
xsct%connect
connect コマンドは、接続のチャネル ID を返します。
次の target コマンドを実行して、使用可能なターゲットを一覧表示し、ID を使用してターゲットを選択します。
xsct%targets
ターゲットが JTAG チェーンで検出されると ID が割り当てられるため、ID はセッションごとに変更される可能性があります。
次のコマンドを使用して、VCK190 ボードの DDR メモリに BOOT.BIN、rootfs.cpio.gz.uboot、および boot.scr イメージをロードする versal.tcl ファイルをダウンロードします。
xsct%targets1xsct%rstxsct>sourceversal.tcl
先のコマンドを実行したあとに、シリアル コンソールに PLM と U-Boot のブート ログが表示されます。次に例を示します。
U-Boot2021.01(Sep172021-11:19:26+0000)CPU:VersalSilicon:v2Model:XilinxVersalvck190EvalboardrevA(EMMC)DRAM:8GiBELLevel:EL2MMC:sdhci@f1040000:1,sdhci@f1050000:0In:serial@ff000000Out:serial@ff000000Err:serial@ff000000Bootmode:JTAG_MODENet:ZYNQGEM:ff0c0000,mdiobusff0c0000,phyaddr1,interfacergmii-idWarning:ethernet@ff0c0000(eth0)usingrandomMACaddress-5e:47:01:44:d3:57eth0:ethernet@ff0c0000ZYNQGEM:ff0d0000,mdiobusff0c0000,phyaddr2,interfacergmii-idWarning:ethernet@ff0d0000(eth1)usingrandomMACaddress-6a:26:ad:16:af:8b,eth1:ethernet@ff0d0000Hitanykeytostopautoboot:54320Versal>
SD ブート モードのブート シーケンス¶
次の手順は、SD ブートモードのブート シーケンスを示しています。
イメージを確認するには、必要なイメージを SD カードにコピーします。
スタンドアロンの場合は、BOOT.BIN を SD カードにコピーします。
Linux イメージの場合は、<plnx-proj-root>/images/linux に移動し、BOOT.BIN、イメージ、rootfs.cpio.gz.uboot、boot.scr を SD カードにコピーします。
注記
リリースされたパッケージ パス (
<design-package>/<vck190 or vmk180>/ready_to_test/qspi_images/linux/) の一部として、すぐにテスト可能なイメージを使用して VCK190/VMK180 ボードを起動するか、「サンプル プロジェクト: PetaLinux を使用した Linux イメージの作成」を参照し、PetaLinux ツールを使用して独自の Linux イメージ セットをビルドします。SD カードを VMK180/VCK190 ボードの J302 コネクタに挿入します。
Micro USB ケーブルの一端を VMK180/VCK190 ボードの Micro USB ポート (J207) に接続し、もう一端をホスト マシンの空きの USB ポートに接続します。
スイッチ SW1 を次の図のように設定し、ボードを SD ブート モード (1-ON、2-OFF、3-OFF、4-OFF) に設定します。
12V 電源を VMK180/VCK190 の 6 ピン Molex コネクタに接続します。
使用しているホスト コンピューターで Tera Term または Minicom を使用して、端末セッションを開始します。次の図に示すように、システムの COM ポートとボー レートを設定します。
ポート設定では、デバイス マネージャーで COM ポートを検証し、com ポートに対して Interface-0 を選択します。
電源スイッチ (SW13) を使用して VMK180/VCK190 ボードに電源を投入します。
注記
スタンドアロン イメージのログが端末に表示されます。Linux イメージの場合は、端末で起動シーケンスの後に user: root および pw: root を使用してログインできます。その後、端末で gpiotest を実行します。次の図のようログが表示されます。
QSPI ブート モードのブート シーケンス¶
このセクションでは、QSPI ブートモードのブート シーケンスを示します。このためには、次の図に示すように QSPI ドーター カード (製品番号: X_EBM-01、REV_A01) を接続する必要があります。
図 2: VCK190 のドーター カード
注記
スタンドアロンの場合は、BOOT.BIN を SD カードにコピーします。Linux イメージの場合は、リリースされたパッケージ パス (<design-package>/<vck190 or vmk180>/ready_to_test/qspi_images/linux/) の一部として、すぐにテスト可能なイメージを使用して VCK190/VMK180 ボードを起動するか、「サンプル プロジェクト: PetaLinux を使用した Linux イメージの作成」を参照し、PetaLinux ツールを使用して独自の Linux イメージ セットをビルドします。
次の手順に従って、イメージをドーター カードのフラッシュ メモリに書き込む必要があります。
注記
次の手順では、SD ブート モードを使用してイメージをロードし、QSPI フラッシュ メモリを間接的にプログラムします。
カードの電源を切った状態で、QSPI ドーター カードを取り付けます。
ボードに電源を投入します。JTAG を介して DDR メモリにイメージをロードする方法については、JTAG を使用した Veral ボードへの PetaLinux イメージのロードのセクションを参照してください。
U-Boot の段階で、「Hit any key to stop autoboot:」というメッセージが表示されたら、いずれかのキーを押し、次のコマンドを実行して QSPI ドーター カードのイメージをフラッシュ メモリに書き込みます。
//checkQSPIisavailableornotsfprobe000//EraseQSPIFlashofsize256MBsferase0x00x10000000//CopyBOOT.BINfilefromDDRaddress,0x70000000toQSPIFlashaddress,0x0sfwrite0x700000000x0<BOOT.BIN_filesize_in_hex>//CopyImagefilefromDDRaddress,0x00200000toQSPIFlashaddress,0xF00000sfwrite0x002000000xF00000<Image_filesize_in_hex>//Copyrootfs.cpio.gz.u-bootfilefromDDRaddress,0x04000000toQSPIFlashaddress,0x2E00000sfwrite0x040000000x2E00000<rootfs.cpio.gz.u-boot_filesize_in_hex>//Copyboot.scrfilefromDDRaddress,0x20000000toQSPIFlashaddress,0x7F80000sfwrite0x200000000x7F80000<boot.scr_filesize_in_hex>
次の図のように、メージをフラッシュ メモリに書き込んだ後、ボードの電源スイッチをオフにし、SW1 ブート モード ピンの設定を QSPI ブート モード (ON-OFF-ON-ON, M[0:3] = 0100) に変更します。
ボードの電源を切って入れ直します。これで、QSPI フラッシュ内のイメージを使用してボードが起動します。
OSPI ブート モードのブート シーケンス¶
OSPI ブート モード用にデザインをコンフィギュレーションするには、「OSPI ブート モードのコンフィギュレーション」を参照してください。このセクションでは、OSPI ブートモードのブート シーケンスを示します。このためには、次の図のように OSPI ドーター カード (パーツ番号 X-EBM-03 REV_A02) を接続する必要があります。
注記
OSPI ドーター カードは VCK190 キットには含まれていません。
注記
スタンドアロンの場合は、BOOT.BIN を SD カードにコピーします。Linux イメージの場合は、リリースされたパッケージ パス (<design-package>/<vck190 or vmk180>/ready_to_test/ospi_images/linux) の一部として、すぐにテスト可能なイメージを使用して VCK190 または VMK180 ボードを起動するか、「サンプル プロジェクト: PetaLinux を使用した Linux イメージの作成」を参照し、PetaLinux ツールを使用して独自の Linux イメージ セットをビルドします。
イメージをドーター カードのフラッシュ メモリに書き込むには、次の手順に従います。
注記
次の手順では、SD ブート モードを使用してイメージをロードし、OSPI フラッシュ メモリを間接的にプログラムします。
カードの電源を切った状態で、OSPI ドーター カードを取り付けます。
ボードに電源を投入します。JTAG を介して DDR メモリにイメージをロードする方法については、JTAG を使用した Veral ボードへの PetaLinux イメージのロードのセクションを参照してください。
U-Boot の段階で、「Hit any key to stop autoboot:」というメッセージが表示されたら、いずれかのキーを押し、次のコマンドを実行して OSPI ドーター カードのイメージをフラッシュ メモリに書き込みます。
//CheckifOSPIflashisavailableornotsfprobe000//ErasetheOSPIFlashofsize256MBsferase0x00x10000000//CopyBOOT.BINfilefromDDRaddress,0x70000000toOSPIFlashaddress,0x0sfwrite0x700000000x0<BOOT.BIN_filesize_in_hex>//CopyImagefilefromDDRaddress,0x00200000toQSPIFlashaddress,0xF00000sfwrite0x002000000xF00000<Image_filesize_in_hex>//Copyrootfs.cpio.gz.u-bootfilefromDDRaddress,0x04000000toOSPIFlashaddress,0x2E00000sfwrite0x040000000x2E00000<rootfs.cpio.gz.u-boot_filesize_in_hex>//Copyboot.scrfilefromDDRaddress,0x20000000toOSPIFlashaddress,0x7F80000sfwrite0x200000000x7F80000<boot.scr_filesize_in_hex>
イメージを書き込んだら、ボードの電源スイッチをオフにします。
SW1 ブート モードのピン設定を OSPI ブート モードに変更します。つまり、MODE[0:3] pins = 0001、ON-ON-ON-OFF に変更します。
ボードの電源を切って入れ直します。これで、OSPI フラッシュ内のイメージを使用してボードが起動します。
注記
VMK180 量産ボードの場合、OSPI イメージはデザイン パッケージの一部として提供されません。VCK190 の OSPI イメージのみがデザイン パッケージの一部として共有されます。
eMMC ブート モードのブート シーケンス¶
eMMC ブート モード用にデザインをコンフィギュレーションするには、「eMMC ブート モードのコンフィギュレーション」を参照してください。このセクションでは、eMMC ブート モードのブート シーケンスを示します。このためには、次の図のように eMMC ドーター カード (パーツ番号 X-EBM-02、REV_A02) を接続する必要があります。
注記
eMMC ドーター カードは VCK190 キットには含まれていません。
注記
スタンドアロンの場合は、BOOT.BIN を SD カードにコピーします。Linux イメージの場合は、リリースされたパッケージ パス (<designpackage>/<vck190 or YAML_DT_BOARD_FLAGS_vmk180>/ready_to_test/emmc_images/linux) の一部として、すぐにテスト可能なイメージを使用して VCK190 または vmk180 ボードを起動するか、「サンプル プロジェクト: PetaLinux を使用した Linux イメージの作成」を参照し、PetaLinux ツールを使用して独自の Linux イメージ セットをビルドします。
Versal ACAP ボード上の eMMC フラッシュ メモリを初めてフォーマットする場合は、次の手順に従います。
カードの電源を切った状態で、eMMC ドーター カードを取り付けます。
次の図と同じように、ブート モード スイッチ SW1 を ON-ON-ON-ON JTAG に設定します。
この例では、XSCT コンソールを使用して、ブート イメージ ファイル (boot.bin) をダウンロードします。eMMC フラッシュ メモリをフォーマットするのに Linux イメージをロードするため、U-boot コンソールを使用します。
ボードとホスト コンピューターにイーサネット ケーブルが接続されていることを確認してください。ホスト コンピューター上で dhcp および tftpb サーバーを設定します。
Linux イメージの BOOT.BIN、イメージ、rootfs.cpio.gz.u-boot、および boot.scr をホスト tftp ホーム ディレクトリにコピーします。
XSCT コンソールで、connect コマンドを使用して JTAG を介してターゲットに接続します。
xsct%connect
connect コマンドは、接続のチャネル ID を返します。
次の target コマンドを実行して、使用可能なターゲットを一覧表示し、ID を使用してターゲットを選択します。ターゲットには JTAG チェーンで検出されたときに ID が割り当てられるので、ターゲット ID はセッションごとに変わります。
xsct%targets
次のコマンドを使用して、VCK190 ボードに boot.bin をダウンロードし、U-Boot コンソールを取得します。
xsct%targets1xsct%rstxsct%deviceprogramBOOT.BIN
このコマンドを実行したあとに、シリアル コンソールに PLM と U-Boot のブート ログが表示されます。
U-Boot の段階で、「Hit any key to stop autoboot:」というメッセージが表示されたら、いずれかのキーを押し、次のコマンドを実行して eMMC ドーター カードのイメージをフラッシュ メモリに書き込みます。
dhcptftpboot0x80000Imagetftpboot0x2000000rootfs.cpio.gz.u-bootbooti0x800000x20000000x1000
先の U-Boot コマンドを実行したあと、Linux がブートを開始し、Linux コンソール プロンプトで停止し、ユーザーがコマンドを入力するのを待ちます。
Linux コンソール プロンプトから次のコマンドを実行して、eMMC Linux のブータブル パーティションを作成し、eMMC を FAT32 ファイルシステムでフォーマットします。
root@xilinx-vmk180-2021_1:~# fdisk /dev/mmcblk0Thenumberofcylindersforthisdiskissetto233472.Thereisnothingwrongwiththat,butthisislargerthan1024,andcouldincertainsetupscauseproblemswith:1)softwarethatrunsatboottime(e.g.,oldversionsofLILO)2)bootingandpartitioningsoftwarefromotherOSs(e.g.,DOSFDISK,OS/2FDISK)Command(mforhelp):mCommandActionatoggleabootableflagbeditbsddisklabelctogglethedoscompatibilityflagddeleteapartitionllistknownpartitiontypesnaddanewpartitionocreateanewemptyDOSpartitiontablepprintthepartitiontableqquitwithoutsavingchangesscreateanewemptySundisklabeltchangeapartition's system iduchangedisplay/entryunitsvverifythepartitiontablewwritetabletodiskandexitCommand(mforhelp):nPartitiontypepprimarypartition(1-4)eextendedpPartitionnumber(1-4):1Firstsector(16-14942207,default16):Usingdefaultvalue16Lastsectoror+size{,K,M,G,T}(16-14942207,default14942207):Usingdefaultvalue14942207Command(mforhelp):wThepartitiontablehasbeenaltered.Callingioctl()tore-readpartitiontablefdisk:WARNING:rereadingpartitiontablefailed,kernelstillusesoldtable:Deviceorresourcebusyroot@xilinx-vmk180-2021_1:~# mkfs.vfat -F 32 -n boot /dev/mmcblk0p1
eMMC フラッシュ メモリは FAT32 ファイルシステムでフォーマットされています。
eMMC フラッシュ メモリへの Linux イメージの書き込み¶
Linux イメージを eMMC フラッシュ メモリに書き込むには、次の手順に従います。
カードの電源を切った状態で、eMMC ドーター カードを取り付けます。
ブート モード スイッチ SW1 を ON-ON-ON-ON JTAG に設定します。
ボードに電源を投入します。JTAG を介して DDR メモリにイメージをロードする方法については、JTAG を使用した Versal ボードへの PetaLinux イメージのロードを参照してください。
U-Boot の段階で、「Hit any key to stop autoboot:」というメッセージが表示されたら、いずれかのキーを押し、次のコマンドを実行して eMMC ドーター カードのイメージをフラッシュ メモリに書き込みます。
//CheckemmcisFATfilesystemformattedornot.fatlsmmc0//copyBOOT.BINfilefromDDRaddress,0x70000000toemmcfatwritemmc00x70000000BOOT.BIN<sizeinhex>//copyImagefilefromDDRaddress,0x00200000toemmcfatwritemmc00x00200000Image<sizeinhex>//copyrootfs.cpio.gz.u-bootfilefromDDRaddress,0x04000000toemmcfatwritemmc00x04000000rootfs.cpio.gz.u-boot<sizeinhex>//copyboot.scrfilefromDDRaddress,0x20000000toemmcfatwritemmc00x20000000boot.scr<sizeinhex>
フラッシュ メモリに書き込んだあと、ボードの電源スイッチをオフにし、SW1 ブート モード ピンの設定を eMMC ブート モード ON-OFF-OFF-ON (MODE[0:3]= 0110) に変更します。
ボードの電源を切って入れ直します。これで、eMMC フラッシュ メモリ内のイメージを使用してボードが起動します。