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 |
|
|
fip.bin |
|
TF-A バイナリ (bl2_sd.pbl/bl2_emmc.pbl および fip.bin) をSD/eMMCカードにコンパイルして展開するには、次の手順に従ってください。
bl2_sd.pbl/bl2_emmc.pbl バイナリをビルドするには、RCWバイナリをコンパイルする必要があります。
rcw リポジトリをクローンし、RCW バイナリをコンパイルしてください。
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 ソースファイルおよびバイナリファイルを含むディレクトリの命名規則については、rcw/lx2160ardb/README または rcw/lx2160ardb_rev2/README を参照してください。
u‑boot.bin をコンパイルして fip.bin をビルドする必要があります。
u‑boot リポジトリをクローンし、TF‑A 用の U‑Boot バイナリをコンパイルします。
注: 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/で入手可能です。
OP‑TEE を利用して fip.bin をビルドするには、tee.bin をコンパイルする必要があります。 OP‑TEE を使用しない場合は、OP‑TEE のコンパイル手順を省略できます。
optee_os リポジトリをクローンして OP‑TEE バイナリをビルドします。
コンパイルされた OP‑TEE イメージ tee.bin は optee_os/out/arm-plat-ls/core/ にあります。
atf リポジトリをクローンし、TF‑A バイナリ(bl2_sd.pbl/bl2_emmc.pbl および fip.bin)をコンパイルします。
コンパイルされた BL2 イメージ bl2.bin と bl2_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=
コンパイルされた 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=
For eMMC boot: $ make PLAT=lx2160ardb fip BOOT_MODE=emmc BL33=
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
=> setenv serverip
ethactとethprimeをTFTPサーバに接続されたイーサネット・インターフェースとして設定します。
注: LX2160ARDB Ethernet port mapping を参照してください。これは、シャーシ前面パネルに表示される Ethernet ポート名と U‑Boot および Linux におけるポート名との対応表です。
=> setenv ethprime
例:
=> setenv ethprime DPMAC3@xgmii
=> setenv ethact
例:
=> setenv ethact DPMAC3@xgmii
静的IPアドレスの割り当て:=> setenv ipaddr
=> setenv gatewayIP
動的IPアドレスの割り当て:=> dhcp
=> ping $serverip
DPMAC3@xgmii デバイスを使用します。
host 192.168.1.1 is alive
注: TF‑A バイナリのフラッシュイメージレイアウトの詳細については、LSDK memory layout for TF‑A boot flow を参照してください。
Flash bl2_sd.pbl:
ここで、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
=> 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
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
注: TF‑A バイナリのフラッシュイメージレイアウトの詳細については、LSDK memory layout for TF‑A boot flow を参照してください。
Flash bl2_emmc.pbl:
ここで、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
=> 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
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