Armadilloフォーラム

pseudo TAのロードについて

imai98

2023年8月22日 11時46分

お世話になっております。

OP-TEEの機能の一つであるpseudo TAを利用しようと思い、手始めに
https://optee.readthedocs.io/en/latest/architecture/trusted_application…
で例として挙げられているimx-optee-os/core/pta/statsを利用しようと考え、client appでSTATS_UUIDを指定して呼び出そうとしたのですが以下のようなエラーとなりました。

E/LD:  init_elf:437 sys_open_ta_bin(d96a5b40-e2c7-b1af-8794-1002a5d5c61b)
E/TC:? 0 ldelf_init_with_ldelf:126 ldelf failed with res: 0xffff0008
pseudota_stats: INVOKE_TEST TEEC_Opensession failed with code 0xffff0008 origin 0x3

xtest --stats --pager
を実行することでも全く同じ結果となりましたので、おそらく結果自体に間違いはないはずだと考えています。
エラー出力に表示されるuuidも正しいことから、uuidの指定の仕方等に問題があるのではなく、そもそもoptee-osコンパイル時にptaがoptee-coreに載せられていないのだろうと考え、imx-optee-os/mk/config.mk内を見ていたところ、以下のような記述が見つかり、

# All embedded tests are supposed to be disabled by default, this flag
# is used to control the default value of all other embedded tests
CFG_ENABLE_EMBEDDED_TESTS ?= n
 
# Enable core self tests and related pseudo TAs
CFG_TEE_CORE_EMBED_INTERNAL_TESTS ?= $(CFG_ENABLE_EMBEDDED_TESTS)

CFG_ENABLE_EMBEDDED_TESTS ? = y として改めてmakeし、ブートローダをswupdateで更新したのですが結果は同じでした。

他のPTAも同様にほとんどがopenの際にエラーが出る一方で、imx-optee-os/core/pta/tests/invoke.cのPTA_INVOKE_TESTS_UUIDは正しく動作することが確認できており、PTAという機能自体は正常に動作していることが確認できています。

imx-optee-osのコンパイルオプション関係で何か誤りがあるのだと考えているのですが、もし何かご存知であればご享受お願いいたします。

コメント

at_kei.odagiri

2023年8月22日 13時49分

アットマークテクノ 小田桐です。
お世話になっております。

エラーコードは、TEE_ERROR_ITEM_NOT_FOUND なので文字通り TA が見つかっていません。
このエラーにはいろいろと原因があります。

まずは、out/xxx/core/pta に、stats.o ができているのでアーキがあっているのか、
out/xxx/core/tee.map や tee.dmp をみて、きちんとリンクされているのか、確認してください。

だめなら、/data/dirf.db (すいません、場所はうろ覚え)を削除するとうまくいくことがあります。
また、CFG_TEE_CORE_LOG_LEVELを変更してデバッグ出力を増やして、解析するとヒントがあるかもしれません。
# 0: none
# 1: error
# 2: error + info
# 3: error + info + debug
# 4: error + info + debug + flow

以下も若干参考になるかもしれません。
https://github.com/OP-TEE/optee_os/issues/5016

宜しくお願い致します。

imai98

2023年8月22日 15時18分

小田桐様

お世話になっております。

> まずは、out/xxx/core/pta に、stats.o ができているのでアーキがあっているのか、
> out/xxx/core/tee.map や tee.dmp をみて、きちんとリンクされているのか、確認してください。
out/xxx/core/ptaにstats.oができておらず、同ディレクトリ内のsub.mkを参照すると
srcs-$(CFG_WITH_STATS) += stats.c
の記述があり、CFG_WITH_STATSにyが設定されているときに生成されるようでした。
/core/arch/arm/plat-imx/conf.mkでは設定されていなかったので(他のプラットフォームで設定されている場合にはこのファイルで設定されている)、
CFG_WITH_STATS ?= y
とすることで、imxでこれが設定されていなかった理由はわかってはいないものの一応解決しました。

お手数おかけしました。
ありがとうございました。