こんにちは、
i.MX8MP EVKで、OP-TEEとFalcon Modeの両方を有効にしたいです。
マシン: imx8mpevk
リポジトリ: https://github.com/nxp-imx/imx-manifest
Branch: imx-linux-walnascar
XML: imx-6.12.34-2.1.0.xml
現在、私はmeta-imx-fastboot(lf-6.12.20-2.0.0-secure)を使用して、Falcon Mode経由で高速起動を実現しています。しかし、ファルコンモードが有効になっている場合、OP-TEEは無効になります。
私の要望としては、 OP-TEEとファルコンモードの両方を同時に有効にする必要があります。
i.MX8MP EVKのファルコンモードでOP-TEEを有効にする方法を教えていただけますか?
こんにちは、 @Sanjiv_Mns
現在、meta-imx-fastbootレイヤーはOP-TEEをサポートしていません。原理的には可能であるはずだが、まだ実現されていない。
説明: デフォルトの BSP では、OP-TEE の開始アドレスとサイズは、 rom_pointerに基づいて U-Boot の適切なブート ステージ中に計算されます (参照: https://github.com/nxp-imx/uboot-imx/blob/lf-6.12.20-2.0.0/arch/arm/mach-imx/dt_optee.c#L13) 。
SPLにおけるrom_pointerは、U-Boot本体とは異なる意味/値を持つ。SO、 ft_add_optee_node 関数はSPLからさらに変更なしで実行できません。
ありがとうございます
エレナ
こんにちは、 @elena_popa
OP-TEE→LinuxブートフローでSPLを達成するためにさらに進める方法→教えていただけませんか?これを確実に動作させるために必要な正しい手順と構成要素を理解したいです。
また、 STM32MP プラットフォームで同様のフローが実装されているリンクも見つけました。
https://patchwork.ozlabs.org/project/uboot/cover/[email protected]/
この方法が私のユースケースに適用できるのか、それとも一部を再利用したり、同じブートシーケンスを実現するために適応できるのか教えていただけますか?
こんにちは、 @Sanjiv_Mns
i.MX 8MPでOP-TEEをFalconモードで有効化して実行することに成功しました。
i.MX 8MPのブートフローは、SPL -> ATF -> OP-TEE -> Linux となります
手順は以下の通りです。
1. meta-imx-fastboot レイヤーの conf/layer.conf ファイル から次の行を削除します。
MACHINE_FEATURES:remove = "optee"
2.imx-boot mkimageのソースコードにおいて、 iMX8M/mkimage_fit_atf_kernel.shスクリプトを修正し、OP-TEEバイナリをFITイメージに追加する。
6a7,9
> # keep backward compatibility
> [ -z "$TEE_LOAD_ADDR" ] && TEE_LOAD_ADDR="0xfe000000"
>
19a23,41
> [ -z "$BL32" ] && BL32="tee.bin"
> PAD=../scripts/pad_image.sh
>
> if [ ! -f $BL32 ]; then
> BL32=/dev/null
> else
> echo "Building with TEE support, make sure $BL31 is compiled with spd. If you do not want tee, please delete $BL32" >&2
> if [ $TEE_COMPRESS_ENABLE ]; then
> echo "Start compress $BL32" >&2
> rm -f $BL32.lz4
> lz4 -9 $BL32 $BL32.lz4 >&2
> BL32=$BL32.lz4
> ./$PAD $BL32 >&2
> fi
> echo "$BL32 size: " >&2
> ls -lct $BL32 | awk '{print $5}' >&2
> LOADABLES="$LOADABLES, \"tee-1\""
> fi
>
71a94,103
> tee-1 {
> description = "TEE firmware";
> data = /incbin/("$BL32");
> type = "firmware";
> arch = "arm64";
> compression = "none";
> load = <$TEE_LOAD_ADDR>;
> entry = <$TEE_LOAD_ADDR>;
> };
>
87c119
< loadables = "kernel","dtb";
---
> loadables = "tee-1","kernel","dtb";
3. カーネルデバイスツリーに、OP-TEEノード(ファームウェアと予約済みメモリ)を手動で追加します。imx8mp.dtsiデバイスツリーを編集して、以下の手順を実行してください。
- ルートノード("/")に以下のOP-TEEファームウェアノードを追加します。
firmware {
optee {
compatible = "linaro,optee-tz";
method = "smc";
};
};
- OP-TEEの予約済みメモリ領域をreserved-memoryノードの下に追加します。
optee_core@56000000 {
reg = <0 0x56000000 0 0x1e00000>;
no-map;
};
optee_shm@57e00000 {
reg = <0 0x57e00000 0 0x200000>;
no-map;
};
4. イメージを作成し、ブートデバイスに書き込みます。
5. OP-TEEが起動しLinuxがドライバーをプローブしたかを確認するには、以下を実行します:
root@imx8mp-lpddr4-evk:~# dmesg | grep optee
[ 0.000000] OF: reserved mem: 0x0000000057e00000..0x0000000057ffffff (2048 KiB) nomap non-reusable optee_shm@57e00000
[ 0.000000] OF: reserved mem: 0x0000000056000000..0x0000000057dfffff (30720 KiB) nomap non-reusable optee_core@56000000
[ 2.581777] optee: probing for conduit method.
[ 2.590862] optee: revision 4.8 (e7ed997213779e3d)
[ 2.596363] optee: dynamic shared memory is enabled
[ 2.601567] optee: initialized driver
6.OP-TEEをテストしたいなら xtestを実行することができます。
root@imx8mp-lpddr4-evk:~# xtest
Run test suite with level=0
TEE test application started over default TEE instance
######################################################
#
# regression+pkcs11+regression_nxp
#
######################################################
* regression_1001 Core self tests
o regression_1001.1 Core self tests
regression_1001.1 OK
o regression_1001.2 Core dt_driver self tests
regression_1001.2 OK
o regression_1001.3 Core transfer list self tests
.....
+-----------------------------------------------------
49354 subtests of which 0 failed
161 test cases of which 0 failed
0 test cases were skipped
TEE test application done!
イネーブルメント中に問題があれば、ぜひ教えてください。
ありがとうございます
エレナ
こんにちは、 @elena_popa
この作業は既に完了しており、現在私のi.MX8MPボードで正常に起動しています。
現在の起動フローは以下のとおりです。
SPL → ATF → OP-TEE → Linux
すべて想定通りに動作しています。@elena_popaさん、コメントありがとうございます。
[ 0.412349] OPEE:導管方法のプロービング。
[ 0.412373] optee: リビジョン 4.6 (788dc101B05ae47b)
[ 0.412678] optee: 動的共有メモリが有効です
[ 0.413062] optee: 初期化されたドライバ