安全驱动如何添加系统服务

描述

添加系统服务

系统服务的添加不是必需的,为方便对底层驱动的管理和对外部设备的扩展,可将安全驱动的接口接入到某个系统服务中,通过系统服务向外界暴露调用接口,以便上层TA可以使用该安全驱动。

在本示例中建立的系统服务的源代码为tee_test.c文件,需将该文件保存到optee_os/core/tee目录中,同时将tee_test.h文件保存到optee_os/core/include/tee目录中,然后修改optee_os/core/tee目录中的sub.mk文件,添加“srcs-y += tee_test.c”,将tee_test.c集成到编译系统中。

也可使用宏来控制该系统服务的编译,其实现方法与上一节相同。

在tee_test.c文件中使用service_init宏来定义该系统服务的初始化函数(tee_test_init),该初始化函数将会被编译到OP-TEE的初始化段中,OP-TEE启动时将会执行服务段中包含的函数,调用tee_test_init函数初始化该系统服务。

到这里明白了driver_init和service_init的差异。一个是直接注册驱动的系统调用,一个注册到系统服务。

3.4 添加系统调用

上层的TA运行于OP-TEE的用户空间,如果上层的TA需要调用安全驱动,则需通过调用系统调用接口的方式来调用安全驱动提供的操作接口。

若要在TA中使用本示例中的安全驱动,则还需在OP-TEE中增加该驱动对应的系统调用。包括用户空间接口的定义和内核空间接口的定义,关于OP-TEE中系统调用的实现原理可参阅第16章。(小的马上后面补上)

驱动

1.用户空间代码的修改

修改optee_os/lib/libutee/arch/arm/utee_syscalls_asm.S文件,添加如下内容:

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中调用该驱动时使用的函数,

TEE_SCN_TESTDRIVER_XXX是该系统调用对应的索引值。

上层TA调用utee_testDriver_xxx函数后会进入OP-TEE的内核空间,系统通过查找TEE_SCN_TESTDRIVER_XXX对应的接口来找到该功能在OP-TEE内核中的实现。

最后的数字表示调用该接口时需要代入的参数的个数。

修改optee_os/lib/libutee/include/utee_syscalls.h文件,添加如下内容,申明上述三个函数接口。在TA的源代码中包含该头文件后就可调用这三个接口来对该安全驱动进行调用。

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文件,添加上述三个系统调用接口的索引值,并修改TEE_SCN_MAX的值,需要修改和添加的内容如下:

#define TEE_SCN_TESTDRIVER_WRITE              71
#define TEE_SCN_TESTDRIVER_READ           72
#define TEE_SCN_TESTDRIVER_DUMP           73
#define TEE_SCN_MAX                73

2.内核空间代码的修改

修改optee_os/core/arch/arm/tee/arch_svc.c文件中系统调用数组变量tee_svc_syscall_table的内容,将上述系统调用对应的内核层接口添加到该数组中,并包含申明这三个接口的头文件,在该文件中添加的内容如下:

SYSCALL_ENTRY(syscall_testDriver_write),
        SYSCALL_ENTRY(syscall_testDriver_read),
        SYSCALL_ENTRY(syscall_testDriver_dump),
#includetee/tee_test.h >

上述三个函数的具体实现在tee_test.c文件中,读者可自行查阅这三个接口函数的实现。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分