ブートおよびコンフィギュレーション

AMD Versal™ デバイス用にブートローダー、ベアメタル アプリケーション (APU/RPU 用)、および Linux オペレーティング システムを統合してロードする方法を示します。この章では、次のトピックについて説明します。

  • システム ソフトウェア: PLM、トラステッド ファームウェア A (TF-A)、U-Boot

  • スタンドアロン アプリケーションのブート イメージを生成する手順。

  • SD ブート、QSPI、および OSPI ブート モードのブート シーケンス。

AMD Vitis™ ソフトウェア プラットフォームと PetaLinux ツール フローを使用して、これらの構成にします。「Versal CIPS および NoC (DDR) IP コアの設定」では、PS 内に各プロセッシング ユニットのソフトウェア ブロックを作成することにのみに重点を置いていましたが、この章ではより大規模なシステムの一部としてこれらのブロックをロードする方法を説明します。

システム ソフトウェア

この章のブートおよびコンフィギュレーションの説明の大部分は、ここで挙げるシステム ソフトウェア ブロックについてです。

プラットフォーム ローダーおよびマネージャー

PLM (プラットフォーム ローダーおよびマネージャー) は、Versal デバイスの 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 デバイスの 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 デバイスのブート イメージ作成ウィザードがサポートされています。ブート イメージ PDI または Boot.bin を生成するには、Bootgen コマンド ライン オプションを使用するか、Vitis のウィザードを使用します。このチュートリアルでは、Vitis ソフトウェア プラットフォーム パッケージに含まれる Bootgen を使用したブート イメージを作成する方法を説明します。Bootgen の主な機能は、ブータブル イメージのさまざまなパーティションを統合することです。Bootgen は、Bootgen イメージ フォーマット (BIF) ファイルを入力として使用し、バイナリ BIN または PDI フォーマットで 1 つのファイル イメージを生成します。不揮発性メモリ (QSPI または SD カード) にロードできる単一のファイル イメージを出力します。次の手順に従って、PDI/BIN ファイルを生成します。

  1. Vitis IDE で [XSCT Console] ビューがまだ開いていない場合は、[Window] → [Show View] をクリックして開きます。Show View ウィザードの検索バーに「xsct console」と入力します。[Open] をクリックして、コンソールを開きます。

    ../../../../_images/image49.png
  2. [XSCT Console] で次のコマンドを入力して、ブート イメージを生成するフォルダーを作成します。

    mkdir bootimages
    cd bootimages/
    
  3. <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 の名前を変更します。

  4. [XSCT Console] ビューで次のコマンドを実行します。

    bootgen -image <bif filename>.bif -arch versal -o BOOT.BIN
    

    [XSCT Console] ビューには、次のログが表示されます。

    ../../../../_images/image51.jpeg

JTAG を使用した Versal ボードへの PetaLinux イメージのロード

このセクションでは、Versal ボードで JTAG モードを使用して Versal PetaLinux イメージをロードする方法について説明します。

  1. 次のコマンドを使用して、Linux イメージをビルドします。

    $petalinux-build
    
  2. 次のコマンドを実行して BOOT.BIN をビルドします。

    $petalinux-package --boot --uboot
    
  3. 次のように、Versal プロジェクト ディレクトリから petalinux コマンドを使用して Tcl スクリプトを作成します。

    $petalinux-boot --jtag --kernel --tcl versal.tcl
    

    注記

    versal.tcl ファイルには、適切なターゲットを選択し、DDR メモリ内の必要な場所にアプリケーション ファイルをダウンロードするためのコマンドが含まれています。

    ../../../../_images/versal_tcl.JPG
  4. 次のように、生成されたファイル versal.tcl を変更します。

    1. このチュートリアルでは rootfs イメージを使用するため、ramdisk.cpio.gz の名前を rootfs.cpio.gz.u-boot に変更します。

    2. con コマンドの前に次の行を追加して、BOOT.BIN を DDR メモリにロードします。

      puts stderr "INFO: Loading image: BOOT.BIN at 0x70000000"
      dow -data -force "BOOT.BIN" 0x70000000
           after 2000
      
  5. 次の図と同じように、ブート モード スイッチ SW1 を ON-ON-ON-ON JTAG に設定します。

    ../../../../_images/jtag-boot-mode.png
  6. Tera Term シリアル アプリケーションをデフォルトの 115200,N8 に設定し、Tera Term コンソールを開きます。

  7. XSCT コンソールで、connect コマンドを使用して JTAG を介してターゲットに接続します。

    xsct% connect
    

    connect コマンドは、接続のチャネル ID を返します。

  8. 次の target コマンドを実行して、使用可能なターゲットを一覧表示し、ID を使用してターゲットを選択します。

    xsct% targets
    

    ターゲットが JTAG チェーンで検出されると ID が割り当てられるため、ID はセッションごとに変更される可能性があります。

  9. 次のコマンドを使用して、VCK190 ボードの DDR メモリに BOOT.BINrootfs.cpio.gz.uboot、および boot.scr イメージをロードする versal.tcl ファイルをダウンロードします。

    xsct% targets 1
    xsct% rst
    xsct > source versal.tcl
    
  10. 先のコマンドを実行したあとに、シリアル コンソールに PLM と U-Boot のブート ログが表示されます。例:

    U-Boot 2022.01 (Feb 16 2022 - 14:57:10 +0000)
    
    CPU:   Versal
    Silicon: v2
    Model: Xilinx Versal vck190 Eval board revA
    DRAM:  8 GiB
    EL Level:       EL2
    MMC:   mmc@f1050000: 0
    Loading Environment from nowhere... OK
    In:    serial@ff000000
    Out:   serial@ff000000
    Err:   serial@ff000000
    Bootmode: JTAG_MODE
    Net:
    ZYNQ GEM: ff0c0000, mdio bus ff0c0000, phyaddr 1, interface rgmii-id
    zynq_gem ethernet@ff0c0000: Failed to read eth PHY id, err: -2
    
    Warning: ethernet@ff0c0000 (eth0) using random MAC address - fe:77:f4:77:5c:c7
    eth0: ethernet@ff0c0000
    ZYNQ GEM: ff0d0000, mdio bus ff0c0000, phyaddr 2, interface rgmii-id
    zynq_gem ethernet@ff0d0000: Failed to read eth PHY id, err: -2
    
    Warning: ethernet@ff0d0000 (eth1) using random MAC address - c6:e7:dd:d5:b1:05
    , eth1: ethernet@ff0d0000
          Hit any key to stop autoboot:  5  4  3  2  0
          Versal>
    

SD ブート モードのブート シーケンス

次の手順は、SD ブートモードのブート シーケンスを示しています。

  1. イメージを確認するには、必要なイメージを SD カードにコピーします。

    • スタンドアロンの場合は、BOOT.BIN を SD カードにコピーします。

    • Linux イメージの場合は、<plnx-proj-root>/images/linux に移動し、BOOT.BIN、イメージ、rootfs.cpio.gz.ubootboot.scr を SD カードにコピーします。

    注記

    リリースされたパッケージ パス (<design-package>/<vck190 or vmk180 or vpk180>/ready_to_test/qspi_images/linux/) の一部として、すぐにテスト可能なイメージを使用して VCK190/VMK180/VPK180 ボードを起動するか、「サンプル プロジェクト: PetaLinux を使用した Linux イメージの作成」を参照し、PetaLinux ツールを使用して独自の Linux イメージ セットをビルドします。

  2. SD カードを VMK180/VCK190/VPK180 ボードの J302 コネクタに挿入します。

  3. Micro USB ケーブルの一端を VMK180/VCK190/VPK180 ボードの Micro USB ポート (J207) に接続し、もう一端をホスト コンピューターの空いている USB ポートに接続します。

  4. スイッチ SW1 を次の図のように設定し、ボードを SD ブート モード (1-ON、2-OFF、3-OFF、4-OFF) に設定します。

    ../../../../_images/sd_boot_mode.JPG
  5. 12V 電源を VMK180/VCK190/VPK180 の 6 ピン Molex コネクタに接続します。

  6. 使用しているホスト コンピューターで Tera Term または Minicom を使用して、端末セッションを開始します。次の図に示すように、システムの COM ポートとボー レートを設定します。

    ../../../../_images/image46.png
  7. ポート設定では、デバイス マネージャーで COM ポートを検証し、com ポートに対して Interface-0 を選択します。

  8. 電源スイッチ (SW13) を使用して VMK180/VCK190/VPK180 ボードに電源を投入します。

    注記

    スタンドアロン イメージのログが端末に表示されます。Linux イメージの場合は、端末で起動シーケンスの後に user: root および pw: root を使用してログインできます。その後、端末で gpiotest を実行します。次の図のようにログが表示されます。

    ../../../../_images/led_example_console_prints.PNG

QSPI ブート モードのブート シーケンス

このセクションでは、QSPI ブートモードのブート シーケンスを示します。このためには、次の図に示すように QSPI ドーター カード (製品番号: X_EBM-01、REV_A01) を接続する必要があります。

図 2: VCK190 のドーター カード

../../../../_images/vck190_production_board_QSPI_daughter_card.jpg

次の手順に従って、イメージをドーター カードのフラッシュ メモリに書き込む必要があります。

  1. カードの電源を切った状態で、QSPI ドーター カードを取り付けます。

  2. ボードに電源を投入します。「JTAG を使用した Versal ボードへの PetaLinux イメージのロード」セクションから Versal Tcl の修正バージョンを実行し、U-Boot が実行されていて、Boot.BIN が DDR の場所にコピーされていることを確認します。

  3. U-Boot の段階で、「Hit any key to stop autoboot:」というメッセージが表示されたら、いずれかのキーを押し、次のコマンドを実行して QSPI ドーター カードのイメージをフラッシュ メモリに書き込みます。

    // check QSPI is available or not
    sf probe 0 0 0
    // Erase QSPI Flash of size 256 MB
    sf erase 0x0 0x10000000
    // Copy BOOT.BIN file from DDR address,0x70000000 to QSPI Flash address,0x0
    sf write 0x70000000 0x0 <BOOT.BIN_filesize_in_hex>
    // Copy Image file from DDR address,0x00200000 to QSPI Flash address,0xF00000
    sf write 0x00200000 0xF00000 <Image_filesize_in_hex>
    // Copy rootfs.cpio.gz.u-boot file from DDR address,0x04000000 to QSPI Flash address,0x2E00000
    sf write 0x04000000 0x2E00000 <rootfs.cpio.gz.u-boot_filesize_in_hex>
    // Copy boot.scr file from DDR address,0x20000000  to QSPI Flash address,0x7F80000
    sf write 0x20000000 0x7F80000 <boot.scr_filesize_in_hex>
    
  4. 次の図のように、メージをフラッシュ メモリに書き込んだ後、ボードの電源スイッチをオフにし、SW1 ブート モード ピンの設定を QSPI ブート モード (ON-OFF-ON-ON, M[0:3] = 0100) に変更します。

    ../../../../_images/image52.png
  5. ボードの電源を切って入れ直します。これで、QSPI フラッシュ内のイメージを使用してボードが起動します。

OSPI ブート モードのブート シーケンス

OSPI ブート モード用にデザインをコンフィギュレーションするには、「OSPI ブート モードのコンフィギュレーション」を参照してください。このセクションでは、OSPI ブートモードのブート シーケンスを示します。このためには、次の図のように OSPI ドーター カード (パーツ番号 X-EBM-03 REV_A02) を接続する必要があります。

注記

OSPI ドーター カードは VCK190 キットには含まれていません。

../../../../_images/X-EBM-03_OSPI_Daughter_card.jpg

イメージをドーター カードのフラッシュ メモリに書き込むには、次の手順に従います。

  1. カードの電源を切った状態で、OSPI ドーター カードを取り付けます。

  2. ボードに電源を投入します。「JTAG を使用した Versal ボードへの PetaLinux イメージのロード」 セクションで、セクションから Versal Tcl の修正バージョンを実行し、U-Boot が実行されていて、Boot.BIN が DDR の場所にコピーされていることを確認します。

  3. U-Boot の段階で、「Hit any key to stop autoboot:」というメッセージが表示されたら、いずれかのキーを押し、次のコマンドを実行して OSPI ドーター カードのイメージをフラッシュ メモリに書き込みます。

    // Check if OSPI flash is available or not
    sf probe 0 0 0
    // Erase the OSPI Flash of size 256 MB
    sf erase 0x0 0x10000000
    // Copy BOOT.BIN file from DDR address,0x70000000 to OSPI Flash address,0x0
    sf write 0x70000000 0x0 <BOOT.BIN_filesize_in_hex>
    // Copy Image file from DDR address,0x00200000 to QSPI Flash address,0xF00000
    sf write 0x00200000 0xF00000 <Image_filesize_in_hex>
    // Copy rootfs.cpio.gz.u-boot file from DDR address,0x04000000 to OSPI Flash address,0x2E00000
    sf write 0x04000000 0x2E00000 <rootfs.cpio.gz.u-boot_filesize_in_hex>
    // Copy boot.scr file from DDR address,0x20000000 to OSPI Flash address,0x7F80000
    sf write 0x20000000 0x7F80000 <boot.scr_filesize_in_hex>
    
  4. イメージを書き込んだら、ボードの電源スイッチをオフにします。

  5. SW1 ブート モードのピン設定を OSPI ブート モードに変更します。つまり、MODE[0:3] pins = 0001、ON-ON-ON-OFF に変更します。

  6. ボードの電源を切って入れ直します。これで、OSPI フラッシュ内のイメージを使用してボードが起動します。

注記

VPK180 量産ボードの場合、OSPI イメージはデザイン パッケージの一部として提供されません。VCK190 および VMK180の OSPI イメージのみがデザイン パッケージの一部として共有されます。

eMMC ブート モードのブート シーケンス

eMMC ブート モード用にデザインをコンフィギュレーションするには、「eMMC ブート モードのコンフィギュレーション」を参照してください。このセクションでは、eMMC ブート モードのブート シーケンスを示します。このためには、次の図のように eMMC ドーター カード (パーツ番号 X-EBM-02、REV_A02) を接続する必要があります。

注記

eMMC ドーター カードは VCK190 キットには含まれていません。

../../../../_images/X-EBM-02_emmc_Daughter_card.jpg

注記

VPK180 プロダクション ボードの場合、emmc イメージはデザイン パッケージの一部として提供されません。VCK190 および VMK180 の emmc イメージのみがデザイン パッケージの一部として共有されます。

Versal ボード上の eMMC フラッシュ メモリを初めてフォーマットする場合は、次の手順に従います。

  1. カードの電源を切った状態で、eMMC ドーター カードを取り付けます。

  2. 次の図と同じように、ブート モード スイッチ SW1 を ON-ON-ON-ON JTAG に設定します。

    ../../../../_images/vck190_jtag_boot_mode_sw1_settings.png

    この例では、XSCT コンソールを使用して、ブート イメージ ファイル (boot.bin) をダウンロードします。eMMC フラッシュ メモリをフォーマットするのに Linux イメージをロードするため、U-boot コンソールを使用します。

  3. ボードとホスト コンピューターにイーサネット ケーブルが接続されていることを確認してください。ホスト コンピューター上で dhcp および tftpb サーバーを設定します。

  4. Linux イメージの BOOT.BIN、イメージ、rootfs.cpio.gz.u-boot、および boot.scr をホスト tftp ホーム ディレクトリにコピーします。

  5. XSCT コンソールで、connect コマンドを使用して JTAG を介してターゲットに接続します。

    xsct% connect
    

    connect コマンドは、接続のチャネル ID を返します。

  6. 次の target コマンドを実行して、使用可能なターゲットを一覧表示し、ID を使用してターゲットを選択します。ターゲットには JTAG チェーンで検出されたときに ID が割り当てられるので、ターゲット ID はセッションごとに変わります。

    xsct% targets
    
  7. 次のコマンドを使用して、VCK190 ボードに boot.bin をダウンロードし、U-Boot コンソールを取得します。

    xsct% targets 1
    xsct% rst
    xsct% device program BOOT.BIN
    

    このコマンドを実行したあとに、シリアル コンソールに PLM と U-Boot のブート ログが表示されます。

  8. U-Boot の段階で、「Hit any key to stop autoboot:」というメッセージが表示されたら、いずれかのキーを押し、次のコマンドを実行して eMMC ドーター カードのイメージをフラッシュ メモリに書き込みます。

    dhcp
    tftpboot 0x80000 Image
    tftpboot 0x2000000 rootfs.cpio.gz.u-boot
    booti 0x80000 0x2000000 0x1000
    

    先の U-Boot コマンドを実行したあと、Linux がブートを開始し、Linux コンソール プロンプトで停止し、ユーザーがコマンドを入力するのを待ちます。

  9. Linux コンソール プロンプトから次のコマンドを実行して、eMMC Linux のブータブル パーティションを作成し、eMMC を FAT32 ファイルシステムでフォーマットします。

    xilinx-vck190-20221:~$ fdisk /dev/mmcblk0
    The number of cylinders for this disk is set to 233472.
    There is nothing wrong with that, but this is larger than 1024,
    and could in certain setups cause problems with:
    1) software that runs at boot time (e.g., old versions of LILO)
    2) booting and partitioning software from other OSs
    (e.g., DOS FDISK, OS/2 FDISK)
    
    Command (m for help): m
    Command Action
    a       toggle a bootable flag
    b       edit bsd disklabel
    c       toggle the dos compatibility flag
    d       delete a partition
    l       list known partition types
    n       add a new partition
    o       create a new empty DOS partition table
    p       print the partition table
    q       quit without saving changes
    s       create a new empty Sun disklabel
    t       change a partition's system id
    u       change display/entry units
    v       verify the partition table
    w       write table to disk and exit
    
    Command (m for help): n
    Partition type
    p   primary partition (1-4)
    e   extended
    p
    Partition number (1-4): 1
    First sector (16-14942207, default 16):
    Using default value 16
    Last sector or +size{,K,M,G,T} (16-14942207, default 14942207):
    Using default value 14942207
    
    Command (m for help): w
    The partition table has been altered.
    Calling ioctl() to re-read partition table
    fdisk: WARNING: rereading partition table failed, kernel still uses old table: Device or resource busy
    
    xilinx-vck190-20221:~$ mkfs.vfat -F 32 -n boot /dev/mmcblk0p1
    

注記

eMMC フラッシュ メモリは FAT32 ファイルシステムでフォーマットされています。

eMMC フラッシュ メモリへの Linux イメージの書き込み

Linux イメージを eMMC フラッシュ メモリに書き込むには、次の手順に従います。

  1. カードの電源を切った状態で、eMMC ドーター カードを取り付けます。

  2. ブート モード スイッチ SW1 を ON-ON-ON-ON JTAG に設定します。

  3. ボードに電源を投入します。JTAG を介して DDR メモリにイメージをロードする方法については、「JTAG を使用した Versal ボードへの PetaLinux イメージのロード」を参照してください。

  4. U-Boot の段階で、「Hit any key to stop autoboot:」というメッセージが表示されたら、いずれかのキーを押し、次のコマンドを実行して eMMC ドーター カードのイメージをフラッシュ メモリに書き込みます。

    // Check emmc is  FAT filesystem formatted or not.
    fatls mmc 0
    // copy BOOT.BIN file from DDR address,0x70000000 to emmc
    fatwrite mmc 0 0x70000000 BOOT.BIN <size in hex>
    // copy Image file from DDR address,0x00200000 to emmc
    fatwrite mmc 0 0x00200000 Image <size in hex>
    // copy rootfs.cpio.gz.u-boot file from DDR address,0x04000000 to emmc
    fatwrite mmc 0 0x04000000 rootfs.cpio.gz.u-boot <size in hex>
    // copy boot.scr file from DDR address, 0x20000000 to emmc
    fatwrite mmc 0 0x20000000 boot.scr <size in hex>
    
  5. フラッシュ メモリに書き込んだあと、ボードの電源スイッチをオフにし、SW1 ブート モード ピンの設定を eMMC ブート モード ON-OFF-OFF-ON (MODE[0:3]= 0110) に変更します。

  6. ボードの電源を切って入れ直します。これで、eMMC フラッシュ メモリ内のイメージを使用してボードが起動します。