OP-TEE中的安全驅(qū)動是OP-TEE操作安全設備的載體。
TA通過調(diào)用某個安全驅(qū)動的接口就可實現(xiàn)對特定安全設備的操作。安全驅(qū)動在OP-TEE中的軟件框架如圖22-2所示。
(其實這里,你要搞清楚linux kernel與驅(qū)動的關(guān)系,那真的還是蠻簡單好理解的。但是我不知道~嚶嚶嚶)
系統(tǒng)服務層并非必需的,主要是為方便管理和上層使用。例如OP-TEE提供了各種各樣的密碼學算法,每一種算法的實現(xiàn)可通過不同的硬件引擎來完成。
為統(tǒng)一管理,可將這些硬件引擎驅(qū)動提供的操作接口統(tǒng)一集成到一個系統(tǒng)服務中,而上層用戶只需調(diào)用系統(tǒng)服務暴露的接口就可實現(xiàn)對硬件引擎的調(diào)用。(可能是通過輸入的參數(shù)進行分發(fā))
下面展開講講這個框架的細節(jié)。
系統(tǒng)服務層
系統(tǒng)服務層在OP-TEE啟動過程中由initcall段的代碼進行初始化和啟動,一個系統(tǒng)服務的初始化函數(shù)則是通過使用service_init宏來進行定義并在編譯時鏈接到OP-TEE的鏡像文件中。
在編譯OP-TEE時,該初始化函數(shù)將被保存到OP-TEE鏡像文件的initcall段中。
至于系統(tǒng)服務的初始化函數(shù)所要執(zhí)行的內(nèi)容則由開發(fā)者自行決定,一般是在系統(tǒng)服務的初始化函數(shù)中進行該服務的配置、狀態(tài)量的初始化以及系統(tǒng)服務提供給上層調(diào)用的操作接口變量的初始化,系統(tǒng)服務提供的結(jié)構(gòu)體變量會包含用于實現(xiàn)具體功能的函數(shù)指針變量,這些函數(shù)指針變量指向的函數(shù)就是安全驅(qū)動提供給TA調(diào)用的操作接口。
驅(qū)動層
OP-TEE啟動過程中會執(zhí)行各安全驅(qū)動的初始化,驅(qū)動的初始化函數(shù)是在OP-TEE執(zhí)行initcall段中的內(nèi)容時被調(diào)用的,在OP-TEE中通過使用driver_init宏來告訴編譯器,在編譯時將driver_init宏傳入的函數(shù)作為某個驅(qū)動的入口函數(shù)保存在鏡像文件的initcall段中。
安全驅(qū)動的初始化主要用來完成安全設備的寄存器的配置以及私有數(shù)據(jù)的初始化。
如果某個安全驅(qū)動需要系統(tǒng)服務的配合,則還需要將驅(qū)動提供的操作接口連接到系統(tǒng)服務中的操作接口變量中。
若該驅(qū)動不需以系統(tǒng)服務的方式向上層提供操作接口,則不用將對應接口暴露給系統(tǒng)服務,而是由TA通過系統(tǒng)調(diào)用的方式直接調(diào)用安全驅(qū)動的接口來操作安全設備。
driver_init service_init
驅(qū)動文件在源代碼中的位置
安全驅(qū)動需要被編譯到OP-TEE鏡像文件中,OP-TEE中有專門的目錄來存放驅(qū)動和系統(tǒng)服務的源代碼。
將驅(qū)動編譯到OP-TEE鏡像文件之前還需修改對應的sub.mk文件。
-
接口
+關(guān)注
關(guān)注
33文章
8254瀏覽量
149947 -
驅(qū)動
+關(guān)注
關(guān)注
12文章
1788瀏覽量
84901 -
框架
+關(guān)注
關(guān)注
0文章
396瀏覽量
17266 -
設備
+關(guān)注
關(guān)注
2文章
4346瀏覽量
70267
發(fā)布評論請先 登錄
相關(guān)推薦
評論