Arm TrustZone 學習 - 0.3 向 OPTEE 添加用戶自己的 TA/CA

感謝 帥峯雲 博主的教程,書已購買講的很細緻:https://blog.csdn.net/shuaifengyun/article/details/71499619

感謝 技術宅阿棍兒 up主的視頻,已三連投幣:https://www.bilibili.com/video/av55057371/

 

上一篇搭建了 Qemu & OPTEE 的運行環境,並且運行了 ~/optee/optee_examples/hello_world 中的示例代碼。

我們想向 OPTEE環境中添加自己的 TA/CA,最簡單的方法當然是找示例代碼作爲模板,修改關鍵內容並且添加自己的代碼段。

 

一、示例代碼的目錄結構

先來看下 ~/optee/optee_examples/hello_world 示例代碼的目錄結構:

左側爲 示例代碼 hello_world的目錄結構,上邊爲其中比較重要的文件。

host 文件夾存放的是 CA的代碼,重要文件是 main.c。

ta 文件夾存放的是 TA的代碼,重要文件是 hello_world_ta.c。

各個目錄下都有一個 Makefile,清一色的編譯套路,稍作修改即可。

 

二、複製代碼

複製代碼前,因爲以前文件中有很多中間文件,需要先清理一下。

git clean -fx

之後翻看了下 host 和 ta 的文件,少了很多以前的中間文件。

創建 ~/optee/optee_examples/mytest 文件夾,將 hello_world 中的文件都複製過來。

使用 Vscode  -  文件  -  打開文件夾  - ,進入這個工作目錄。

 

三、編輯文件,替換代碼內容

./host/main.c:

main.c 中主要的內容有:

res = TEEC_InitializeContext(NULL, &ctx);

res = TEEC_OpenSession(&ctx, &sess, &uuid,
                   TEEC_LOGIN_PUBLIC, NULL, NULL, &err_origin);

res = TEEC_InvokeCommand(&sess, TA_HELLO_WORLD_CMD_INC_VALUE, &op,
                 &err_origin);

TEEC_CloseSession(&sess);

TEEC_FinalizeContext(&ctx);

我們對如下進行修改,先是 CTRL + F 搜索 hello,然後將 hello world 改爲 mytest,大寫同理。

36 44 53 82 86 行有改動,三處註釋三處代碼。

 

./host/Makefile:

沒什麼改動,只需要改下輸出可執行文件名稱。

 

./ta/include/hello_world_ta.h:

將 ./ta/include/hello_world_ta.h 重命名爲 mytest_ta.h

依然是 CTRL + F 搜索 hello,然後將 hello world 改爲 mytest,大寫同理。

然後修改 UUID,按照註釋的提示,UUID生成器鏈接:http://www.itu.int/ITU-T/asn1/uuid.html

上邊的鏈接打開很慢,最後還是要跳轉到這個鏈接,這個打開很快:https://www.uuidgenerator.net/

7c07d8be-244a-4491-8f26-0d1d8f2dd4e7

複製,對照着修改。使用網頁生成器生成的 UUID能保證唯一性,不會與別人發佈的衝突

UUID可以自行隨意修改,但如果需要發佈,可能會與他人的造成衝突。只能用於本地個人測試。

 

./ta/sub.mk:

將指定的源文件,改爲 mytest_ta.c。

 

./ta/hello_world_ta.c:

將 ./ta/hello_world_ta.c 重命名爲 mytest_ta.c

繼續 CTRL + F 搜索 hello,然後將 hello world 改爲 mytest,大寫同理。

找到 static TEE_Result inc_value ,修改運算邏輯。

 

./ta/Makefile:

修改 UUID

 

./ta/user_ta_header_defines.h:

頭文件、和UUID宏的名稱

下面第 45行的內容暫且先不要修改。

 

四、將此文件夾添加進編譯列表中

修改 ~/optee/optee_examples/Makefile,把 mytest 添加進去。Esc,:wq 保存退出。

 

五、編譯 運行

回到目錄  ~/optee/build  下。

make run

c回車

optee_hello_world

optee_mytest

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章