OP-TEE中的安全驅動是OP-TEE操作安全設備的載體。
TA通過調用某個安全驅動的接口就可實現對特定安全設備的操作。安全驅動在OP-TEE中的軟件框架如圖22-2所示。
(其實這里,你要搞清楚linux kernel與驅動的關系,那真的還是蠻簡單好理解的。但是我不知道~嚶嚶嚶)
系統服務層并非必需的,主要是為方便管理和上層使用。例如OP-TEE提供了各種各樣的密碼學算法,每一種算法的實現可通過不同的硬件引擎來完成。
為統一管理,可將這些硬件引擎驅動提供的操作接口統一集成到一個系統服務中,而上層用戶只需調用系統服務暴露的接口就可實現對硬件引擎的調用。(可能是通過輸入的參數進行分發)
下面展開講講這個框架的細節。
系統服務層
系統服務層在OP-TEE啟動過程中由initcall段的代碼進行初始化和啟動,一個系統服務的初始化函數則是通過使用service_init宏來進行定義并在編譯時鏈接到OP-TEE的鏡像文件中。
在編譯OP-TEE時,該初始化函數將被保存到OP-TEE鏡像文件的initcall段中。
至于系統服務的初始化函數所要執行的內容則由開發者自行決定,一般是在系統服務的初始化函數中進行該服務的配置、狀態量的初始化以及系統服務提供給上層調用的操作接口變量的初始化,系統服務提供的結構體變量會包含用于實現具體功能的函數指針變量,這些函數指針變量指向的函數就是安全驅動提供給TA調用的操作接口。
驅動層
OP-TEE啟動過程中會執行各安全驅動的初始化,驅動的初始化函數是在OP-TEE執行initcall段中的內容時被調用的,在OP-TEE中通過使用driver_init宏來告訴編譯器,在編譯時將driver_init宏傳入的函數作為某個驅動的入口函數保存在鏡像文件的initcall段中。
安全驅動的初始化主要用來完成安全設備的寄存器的配置以及私有數據的初始化。
如果某個安全驅動需要系統服務的配合,則還需要將驅動提供的操作接口連接到系統服務中的操作接口變量中。
若該驅動不需以系統服務的方式向上層提供操作接口,則不用將對應接口暴露給系統服務,而是由TA通過系統調用的方式直接調用安全驅動的接口來操作安全設備。
driver_init service_init
驅動文件在源代碼中的位置
安全驅動需要被編譯到OP-TEE鏡像文件中,OP-TEE中有專門的目錄來存放驅動和系統服務的源代碼。
將驅動編譯到OP-TEE鏡像文件之前還需修改對應的sub.mk文件。
-
接口
+關注
關注
33文章
8882瀏覽量
152946 -
驅動
+關注
關注
12文章
1878瀏覽量
86323 -
框架
+關注
關注
0文章
404瀏覽量
17723 -
設備
+關注
關注
2文章
4611瀏覽量
71324
發布評論請先 登錄
相關推薦
TEE解決了什么問題?
請問Beal環境下編譯OP-TEE后生成FIP需要哪些文件?
如何將大量電源管理和計時工作從ATF轉移到OP-TEE上呢
如何在不使用op-tee的情況下進行編譯?
請問HSE op-tee是什么關系?
OP-TEE無法在鎖定的i.MX6UL上初始化JR怎么解決?
物聯網終端應用TEE的一些思考

OP-TEE的內核初始化過程

OP-TEE的內核初始化函數調用

OP-TEE服務項的啟動
ARM64位與ARM32位OP-TEE啟動過程的差異
OP-TEE安全存儲安全文件的格式

評論