1150871_ja-JP

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

1150871_ja-JP

1150871_ja-JP

LX2160ARDB ‑ SD/eMMC カードに TF‑A バイナリを展開する方法

Cortex-A 用の信頼できるファームウェア (TF-A) は、EL3 セキュアファームウェアの実装です。TF-A はセキュアファームウェアの役割で PPA を置き換えます。

注:このトピックに記載されている手順は、LSDK 18.12以降のリリースでのみ実行可能であることにご注意ください。

以前のブートフロー(PPA 使用)から TF‑A ブートフローへ移行するには、bl2_..pbl と fip.bin をコンパイルし、対応するブートメディアにフラッシュする必要があります。

SD/eMMC ブートの場合、次の TF‑A バイナリをコンパイルする必要があります。

TF-A バイナリ名 コンポーネント

bl2_sd.pbl/bl2_emmc.pbl

  • BL2 バイナリ: プラットフォーム初期化用バイナリ
  • SD/eMMC ブート用の RCW バイナリ

fip.bin

  • BL31:セキュアランタイムファームウェア
  • BL32: 信頼できるOS、例えば、OPTEE(オプション)
  • BL33: U-Boot/UEFIイメージ

TF-A バイナリ (bl2_sd.pbl/bl2_emmc.pbl および fip.bin) をSD/eMMCカードにコンパイルして展開するには、次の手順に従ってください。

  1. RCWバイナリをコンパイルする
  2. U-Boot バイナリをコンパイルする
  3. [オプション] OP‑TEE バイナリをコンパイル
  4. SD/eMMC ブート用に、TF-A バイナリ (bl2_sd.pbl/bl2_emmc.pbl および fip.bin) をコンパイルします。
  5. TF‑A バイナリを SD/eMMC カードにプログラムします。

ステップ 1:RCW バイナリをコンパイルする

bl2_sd.pbl/bl2_emmc.pbl バイナリをビルドするには、RCWバイナリをコンパイルする必要があります。

rcw リポジトリをクローンし、RCW バイナリをコンパイルしてください。

  1. $ git clone https://source.codeaurora.org/external/qoriq/qoriq-components/rcw
  2. $ cd rcw
  3. $ git checkout -b <新しいブランチ名> を実行します。例: $ git checkout -b LSDK-20.04 LSDK-20.04
  4. Rev 1 または Rev 2 ボード用に RCW をコンパイルします。
    • For LX2160ARDB Rev1: $ cd lx2160ardb
    • LX2160ARDB Rev 2 の場合: $ cd lx2160ardb_rev2
  5. 必要に応じて、rcw ファイルに変更を加えてください。
  6. $ make

SD/eMMC ブート用にコンパイルされた RCW バイナリ LX2160ARDB、コア周波数 2000 MHz、プラットフォーム周波数 700 MHz、DDR メモリ データ レート 2900 MT/s、serdes1 = 19、serdes2 = 5、serdes3 = 2、rcw_2000_700_2900_19_5_2.bin は以下で入手できます:

  • rcw/lx2160ardb/XGGFF_PP_HHHH_RR_19_5_2(LX2160ARDB Rev 1 の場合)
  • rcw/lx2160ardb_rev2/XGGFF_PP_HHHH_RR_19_5_2(LX2160ARDB Rev 2)

注: RCW ソースファイルおよびバイナリファイルを含むディレクトリの命名規則については、rcw/lx2160ardb/README または rcw/lx2160ardb_rev2/README を参照してください。

ステップ2:U-Bootバイナリをコンパイルする

u‑boot.bin をコンパイルして fip.bin をビルドする必要があります。

u‑boot リポジトリをクローンし、TF‑A 用の U‑Boot バイナリをコンパイルします。

  1. $git clone https://source.codeaurora.org/external/qoriq/qoriq-components/u-boot.git
  2. $ cd u-boot
  3. $ git checkout -b <新しいブランチ名> LSDK- を実行します。例: $ git checkout  -b LSDK-20.04  LSDK-20.04 
  4. $ export ARCH=arm64
  5. $ export CROSS_COMPILE=aarch64-linux-gnu-
  6. $ make distclean
  7. make lx2160ardb_tfa_defconfig
  8. $ make

注: make コマンドで "*** Your GCC is older than 6.0 and is not supported" というエラーが表示された場合は、LSDK 18.12 以降の U‑Boot バイナリをビルドするため、Ubuntu 18.04(64 ビット)を使用していることを確認してください。

コンパイルされたU-Bootバイナリu-boot.binは、 u-boot/で入手可能です。

ステップ3: [オプション] OPTEEバイナリをコンパイルする

OP‑TEE を利用して fip.bin をビルドするには、tee.bin をコンパイルする必要があります。 OP‑TEE を使用しない場合は、OP‑TEE のコンパイル手順を省略できます。

optee_os リポジトリをクローンして OP‑TEE バイナリをビルドします。

  1. $ git clone https://source.codeaurora.org/external/qoriq/qoriq-components/optee_os
  2. $ cd optee_os
  3. $ git checkout -b <新しいブランチ名> LSDK- を実行します。例: $ git checkout -b LSDK-20.04  LSDK-20.04
  4. $ export ARCH=arm
  5. $ export CROSS_COMPILE=aarch64-linux-gnu-
  6. $ make CFG_ARM64_core=y PLATFORM=ls-lx2160ardb
  7. $ aarch64-linux-gnu-objcopy -v -O binary out/arm-plat-ls/core/tee.elf out/arm-plat-ls/core/tee.bin

コンパイルされた OP‑TEE イメージ tee.binoptee_os/out/arm-plat-ls/core/ にあります。

ステップ 4: SD/eMMC ブート用に TF‑A バイナリをコンパイルする

atf リポジトリをクローンし、TF‑A バイナリ(bl2_sd.pbl/bl2_emmc.pbl および fip.bin)をコンパイルします。

  1. $ git clone https://source.codeaurora.org/external/qoriq/qoriq-components/atf
  2. $ cd atf
  3. git checkout -b  LSDK-. For example,$git checkout -b LSDK-20.04 LSDK-20.04
  4. $ export ARCH=arm64
  5. $ export CROSS_COMPILE=aarch64-linux-gnu-
  6. OP‑TEE を使用して BL2 バイナリをビルドします。
    • For SD boot: $ make PLAT=lx2160ardb bl2 SPD=opteed BOOT_MODE=sd BL32=/tee.bin pbl RCW=/rcw_2000_700_2900_19_5_2.bin
    • For eMMC boot: $ make PLAT=lx2160ardb bl2 SPD=opteed BOOT_MODE=emmc BL32=/tee.bin pbl RCW=/rcw_2000_700_2900_19_5_2.bin

      コンパイルされた BL2 イメージ bl2.binbl2_sd.pbl/bl2_emmc.pbl は、atf/build/lx2160ardb/release/ にあります。

      BL2 ソースコードまたは RCW バイナリを更新した場合は、bl2_sd.pbl/bl2_emmc.pbl を再コンパイルする必要があります。

      OPTEEを使用せずにBL2バイナリをコンパイルするには:

      For SD boot: make PLAT=lx2160ardb bl2 BOOT_MODE=sd pbl RCW=/rcw_2000_700_2900_19_5_2.bin   

      For emmc boot: make PLAT=lx2160ardb bl2 BOOT_MODE=emmc pbl RCW=/rcw_2000_700_2900_19_5_2.bin 
  7. OP‑TEE を使用し、Trusted Board Boot なしで FIP バイナリをビルドします。
    • $ make PLAT=lx2160ardb fip BL33=/u-boot.bin SPD=opteed BL32=/tee.bin

      コンパイルされた BL31 および FIP バイナリ(bl31.bin、fip.bin)は、atf/build/lx2160ardb/release/ にあります。

      BL31、BL32、または BL33 バイナリを更新した場合は、fip.binを再コンパイルする必要があります。

      OP‑TEE および Trusted Board Boot を使用せずに FIP バイナリをコンパイルするには:

      SD ブートの場合: $ make PLAT=lx2160ardb fip BOOT_MODE=sd BL33=/u-boot.bin


      For eMMC boot: $ make PLAT=lx2160ardb fip BOOT_MODE=emmc BL33=/u-boot.bin

      Trusted Board Boot で FIP バイナリをコンパイルする場合は、/plat/nxp/README.TRUSTED_BOO/plat/nxp/README.TRUSTED_BOO の README を参照してください。

ステップ5:TF-AバイナリをSD/eMMCカードにプログラムする

  1. FlexSPI から LX2160ARDB を起動します。スイッチが FlexSPI ブートに設定されていることを確認してください。 FlexSPI からのブート手順:
    • SW1[1:8] = 1111 100X(X = 0 FlexSPI NOR flash0、X = 1 FlexSPI NOR flash1)
    • SW2[1:8] = 0000 0110
    • SW3[1:8] = 1111 1100
    • SW4[1:8] = 1011 1000
  2. FlexSPI NOR flash0 からブート: => qixis_reset

LX2160ARDB Rev 1 の場合、ブートログには次が表示されます。

ボード: LX2160ACE Rev 1.0‑RDBボードバージョン: B、FlexSPI DEV#0 から起動

LX2160ARDB Rev 2 の場合、ブートログには次のように表示されます。

ボード:LX2160ACE Rev2.0-RDB、ボードバージョン:B、FlexSPI DEV#0から起動

イーサネット接続をセットアップする

ボードが起動すると、U-Bootは有効なイーサネット・インターフェースのリストを表示します。

DPMAC2@xlaui4, DPMAC3@xgmii [PRIME], DPMAC4@xgmii, DPMAC5@25g-aui, DPMAC6@25g-aui, DPMAC17@rgmii-id, DPMAC18@rgmii-id, e1000#0

  1. サーバーのIPアドレスを、TFTPサーバーを設定したホストマシンのIPアドレスに設定してください。

    => setenv serverip

  2. ethactethprimeをTFTPサーバに接続されたイーサネット・インターフェースとして設定します。

    注: LX2160ARDB Ethernet port mapping を参照してください。これは、シャーシ前面パネルに表示される Ethernet ポート名と U‑Boot および Linux におけるポート名との対応表です。

    => setenv ethprime

    例:

    => setenv ethprime DPMAC3@xgmii

    => setenv ethact

    例:

    => setenv ethact DPMAC3@xgmii

  3. ボードの IP アドレスを設定します。静的 IP アドレスを設定するか、ボードが DHCP サーバーに接続できる場合は、dhcp コマンドを使用できます。

    静的IPアドレスの割り当て:=> setenv ipaddr => setenv netmask

    => setenv gatewayIP

    動的IPアドレスの割り当て:=> dhcp

  4. 設定を保存します。 => saveenv
  5. ボードとTFTPサーバー間の接続を確認してください。

=> ping $serverip

DPMAC3@xgmii デバイスを使用します。

host 192.168.1.1 is alive

TFTP サーバーから SD ブート用の TF‑A バイナリをロードします。

注: TF‑A バイナリのフラッシュイメージレイアウトの詳細については、LSDK memory layout for TF‑A boot flow を参照してください。

  1. Flash bl2_sd.pbl:

    • => tftp 82000000 bl2_sd.pbl
    • => mmc dev 0; mmc write 82000000 8

      ここで、blk_cntは、ファイルサイズに応じて書き込む必要がある SD カード上のブロック数を示します。

      たとえば、TFTP サーバーから bl2_sd.pbl をロードし、転送されたバイト数が 103 353(0x193B9) の場合、blk_cnt は「103 353 / 512 = 201(0xC9)」に、最後のブロックを欠落させないように切り上げたセクタ数を加えて算出されます。したがって、この例で 10 セクタ(0xA)切り上げた場合、mmc write コマンドは次のようになります。=> mmc write 82000000 8 D3

  2. Flash fip.bin:
    • => tftp 82000000 fip.bin
    • => mmc dev 0; mmc write 82000000 800

      ここで、blk_cntは、ファイルサイズに応じて書き込む必要があるSDカードのブロックの数を示します。

      たとえば、TFTP サーバーから fip.bin をロードし、転送されたバイト数が 1 178 967(0x11FD57)の場合、blk_cnt は「1 178 967 / 512 = 2 302(0x8FE)」に、最後のブロックを欠落させないように切り上げたセクタ数を加えて算出されます。したがって、この例で 10 セクタ(0xA)切り上げた場合、mmc write コマンドは次のようになります: => mmc write 82000000 800 908

  3. Boot from SD カード:=> qixis_reset sd

    LX2160ARDB は TF‑A で起動します。ブートログには、次の内容が表示されます。

    => NOTICE:  BL2: v1.5(release):LSDK-20.04
    NOTICE:  BL2: Built : 22:01:10, Aug 20 2020
    NOTICE:  UDIMM 18ADF2G72AZ-3G2E1
    NOTICE:  DDR4 UDIMM with 2-rank 64-bit bus (x8)
    
    NOTICE:  32 GB DDR4, 64-bit, CL=22, ECC on, 256B, CS0+CS1
    NOTICE:  BL2: Booting BL31
    NOTICE:  BL31: v1.5(release):LSDK-20.04
    NOTICE:  BL31: Built : 22:02:07, Aug 20 2020
    NOTICE:  Welc
    
    U-Boot 2019.10 (Aug 14 2020 - 17:43:28 +0530)
    
    SoC:  LX2160ACE Rev2.0 (0x87360020)
    Clock Configuration:
           CPU0(A72):2000 MHz  CPU1(A72):2000 MHz  CPU2(A72):2000 MHz
           CPU3(A72):2000 MHz  CPU4(A72):2000 MHz  CPU5(A72):2000 MHz
           CPU6(A72):2000 MHz  CPU7(A72):2000 MHz  CPU8(A72):2000 MHz
           CPU9(A72):2000 MHz  CPU10(A72):2000 MHz  CPU11(A72):2000 MHz
           CPU12(A72):2000 MHz  CPU13(A72):2000 MHz  CPU14(A72):2000 MHz
           CPU15(A72):2000 MHz
           Bus:      700  MHz  DDR:      2900 MT/s
    Reset Configuration Word (RCW):
           00000000: 50777738 24500050 00000000 00000000
           00000010: 00000000 0c010000 00000000 00000000
           00000020: 02e001a0 00002580 00000000 00000096
           00000030: 00000000 00000000 00000000 00000000
           00000040: 00000000 00000000 00000000 00000000
           00000050: 00000000 00000000 00000000 00000000
           00000060: 00000000 00000000 00027000 00000000
           00000070: 08b30010 00150020
    Model: NXP Layerscape LX2160ARDB Board
    Board: LX2160ACE Rev2.0-RDB, Board version: B, boot from SD
    

TFTP サーバーから eMMC ブート用の TF‑A バイナリをロードします。

注: TF‑A バイナリのフラッシュイメージレイアウトの詳細については、LSDK memory layout for TF‑A boot flow を参照してください。

  1. Flash bl2_emmc.pbl:

    • => tftp 82000000 bl2_emmc.pbl
    • => mmc dev 1; mmc write 82000000 8

      ここで、blk_cntは、ファイルサイズに応じて書き込む必要がある SD カード上のブロック数を示します。

      たとえば、TFTP サーバーから bl2_emmc.pbl をロードし、転送されたバイト数が 103 353(0x193B9) の場合、blk_cnt は「103 353 / 512 = 201(0xC9)」に、最後のブロックを欠落させないように切り上げたセクタ数を加えて算出されます。したがって、この例で 10 セクタ(0xA)切り上げた場合、mmc write コマンドは次のようになります。=> mmc write 82000000 8 D3

  2. Flash fip.bin:
    • => tftp 82000000 fip.bin
    • => mmc dev 1; mmc write 82000000 800

      ここで、blk_cntは、ファイルサイズに応じて書き込む必要があるSDカードのブロックの数を示します。

      たとえば、TFTP サーバーから fip.bin をロードし、転送されたバイト数が 1 178 967(0x11FD57)の場合、blk_cnt は「1 178 967 / 512 = 2 302(0x8FE)」に、最後のブロックを欠落させないように切り上げたセクタ数を加えて算出されます。したがって、この例で 10 セクタ(0xA)切り上げた場合、mmc write コマンドは次のようになります: => mmc write 82000000 800 908

  3. Boot from eMMC カード:=> qixis_reset emmc

    LX2160ARDB は TF‑A で起動します。ブートログには、次の内容が表示されます。

     

    => NOTICE:  BL2: v1.5(release):LSDK-20.04
    NOTICE:  BL2: Built : 22:01:10, Aug 20 2020
    NOTICE:  UDIMM 18ADF2G72AZ-3G2E1
    NOTICE:  DDR4 UDIMM with 2-rank 64-bit bus (x8)
    
    NOTICE:  32 GB DDR4, 64-bit, CL=22, ECC on, 256B, CS0+CS1
    NOTICE:  BL2: Booting BL31
    NOTICE:  BL31: v1.5(release):LSDK-20.04
    NOTICE:  BL31: Built : 22:02:07, Aug 20 2020
    NOTICE:  Welc
    
    U-Boot 2019.10 (Aug 14 2020 - 17:43:28 +0530)
    
    SoC:  LX2160ACE Rev2.0 (0x87360020)
    Clock Configuration:
           CPU0(A72):2000 MHz  CPU1(A72):2000 MHz  CPU2(A72):2000 MHz
           CPU3(A72):2000 MHz  CPU4(A72):2000 MHz  CPU5(A72):2000 MHz
           CPU6(A72):2000 MHz  CPU7(A72):2000 MHz  CPU8(A72):2000 MHz
           CPU9(A72):2000 MHz  CPU10(A72):2000 MHz  CPU11(A72):2000 MHz
           CPU12(A72):2000 MHz  CPU13(A72):2000 MHz  CPU14(A72):2000 MHz
           CPU15(A72):2000 MHz
           Bus:      700  MHz  DDR:      2900 MT/s
    Reset Configuration Word (RCW):
           00000000: 50777738 24500050 00000000 00000000
           00000010: 00000000 0c010000 00000000 00000000
           00000020: 02e001a0 00002580 00000000 00000096
           00000030: 00000000 00000000 00000000 00000000
           00000040: 00000000 00000000 00000000 00000000
           00000050: 00000000 00000000 00000000 00000000
           00000060: 00000000 00000000 00027000 00000000
           00000070: 08b30010 00150020
    Model: NXP Layerscape LX2160ARDB Board
    Board: LX2160ACE Rev2.0-RDB, Board version: B, boot from eMMC
    

タグ(1)
評価なし
バージョン履歴
最終更新日:
‎01-04-2026 11:45 PM
更新者: