添加系統(tǒng)服務(wù)
系統(tǒng)服務(wù)的添加不是必需的,為方便對(duì)底層驅(qū)動(dòng)的管理和對(duì)外部設(shè)備的擴(kuò)展,可將安全驅(qū)動(dòng)的接口接入到某個(gè)系統(tǒng)服務(wù)中,通過系統(tǒng)服務(wù)向外界暴露調(diào)用接口,以便上層TA可以使用該安全驅(qū)動(dòng)。
在本示例中建立的系統(tǒng)服務(wù)的源代碼為tee_test.c文件,需將該文件保存到optee_os/core/tee目錄中,同時(shí)將tee_test.h文件保存到optee_os/core/include/tee目錄中,然后修改optee_os/core/tee目錄中的sub.mk文件,添加“srcs-y += tee_test.c”,將tee_test.c集成到編譯系統(tǒng)中。
也可使用宏來控制該系統(tǒng)服務(wù)的編譯,其實(shí)現(xiàn)方法與上一節(jié)相同。
在tee_test.c文件中使用service_init宏來定義該系統(tǒng)服務(wù)的初始化函數(shù)(tee_test_init),該初始化函數(shù)將會(huì)被編譯到OP-TEE的初始化段中,OP-TEE啟動(dòng)時(shí)將會(huì)執(zhí)行服務(wù)段中包含的函數(shù),調(diào)用tee_test_init函數(shù)初始化該系統(tǒng)服務(wù)。
到這里明白了driver_init和service_init的差異。一個(gè)是直接注冊(cè)驅(qū)動(dòng)的系統(tǒng)調(diào)用,一個(gè)注冊(cè)到系統(tǒng)服務(wù)。
3.4 添加系統(tǒng)調(diào)用
上層的TA運(yùn)行于OP-TEE的用戶空間,如果上層的TA需要調(diào)用安全驅(qū)動(dòng),則需通過調(diào)用系統(tǒng)調(diào)用接口的方式來調(diào)用安全驅(qū)動(dòng)提供的操作接口。
若要在TA中使用本示例中的安全驅(qū)動(dòng),則還需在OP-TEE中增加該驅(qū)動(dòng)對(duì)應(yīng)的系統(tǒng)調(diào)用。包括用戶空間接口的定義和內(nèi)核空間接口的定義,關(guān)于OP-TEE中系統(tǒng)調(diào)用的實(shí)現(xiàn)原理可參閱第16章。(小的馬上后面補(bǔ)上)
1.用戶空間代碼的修改
修改optee_os/lib/libutee/arch/arm/utee_syscalls_asm.S文件,添加如下內(nèi)容:
UTEE_SYSCALL utee_testDriver_write, TEE_SCN_TESTDRIVER_WRITE,3
UTEE_SYSCALL utee_testDriver_read, TEE_SCN_TESTDRIVER_READ,3
UTEE_SYSCALL utee_testDriver_dump, TEE_SCN_TESTDRIVER_DUMP,2
utee_testDriver_xxx是在TA中調(diào)用該驅(qū)動(dòng)時(shí)使用的函數(shù),
TEE_SCN_TESTDRIVER_XXX是該系統(tǒng)調(diào)用對(duì)應(yīng)的索引值。
上層TA調(diào)用utee_testDriver_xxx函數(shù)后會(huì)進(jìn)入OP-TEE的內(nèi)核空間,系統(tǒng)通過查找TEE_SCN_TESTDRIVER_XXX對(duì)應(yīng)的接口來找到該功能在OP-TEE內(nèi)核中的實(shí)現(xiàn)。
最后的數(shù)字表示調(diào)用該接口時(shí)需要代入的參數(shù)的個(gè)數(shù)。
修改optee_os/lib/libutee/include/utee_syscalls.h文件,添加如下內(nèi)容,申明上述三個(gè)函數(shù)接口。在TA的源代碼中包含該頭文件后就可調(diào)用這三個(gè)接口來對(duì)該安全驅(qū)動(dòng)進(jìn)行調(diào)用。
TEE_Result utee_testDriver_write(void*buf,size_t blen,size_t offset);
TEE_Result utee_testDriver_read(void*buf,size_t blen,size_t offset);
TEE_Result utee_testDriver_dump(void*buf,size_t blen);
修改optee_os/lib/libutee/include/tee_syscall_numbers.h文件,添加上述三個(gè)系統(tǒng)調(diào)用接口的索引值,并修改TEE_SCN_MAX的值,需要修改和添加的內(nèi)容如下:
#define TEE_SCN_TESTDRIVER_WRITE 71
#define TEE_SCN_TESTDRIVER_READ 72
#define TEE_SCN_TESTDRIVER_DUMP 73
#define TEE_SCN_MAX 73
2.內(nèi)核空間代碼的修改
修改optee_os/core/arch/arm/tee/arch_svc.c文件中系統(tǒng)調(diào)用數(shù)組變量tee_svc_syscall_table的內(nèi)容,將上述系統(tǒng)調(diào)用對(duì)應(yīng)的內(nèi)核層接口添加到該數(shù)組中,并包含申明這三個(gè)接口的頭文件,在該文件中添加的內(nèi)容如下:
SYSCALL_ENTRY(syscall_testDriver_write),
SYSCALL_ENTRY(syscall_testDriver_read),
SYSCALL_ENTRY(syscall_testDriver_dump),
#include<tee/tee_test.h >
上述三個(gè)函數(shù)的具體實(shí)現(xiàn)在tee_test.c文件中,讀者可自行查閱這三個(gè)接口函數(shù)的實(shí)現(xiàn)。
-
驅(qū)動(dòng)
+關(guān)注
關(guān)注
12文章
1827瀏覽量
85186 -
設(shè)備
+關(guān)注
關(guān)注
2文章
4480瀏覽量
70548 -
代碼
+關(guān)注
關(guān)注
30文章
4753瀏覽量
68368 -
系統(tǒng)
+關(guān)注
關(guān)注
1文章
1010瀏覽量
21320
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論