添加系统服务系统服务的添加不是必需的,为方便对底层驱动的管理和对外部设备的扩展,可将安全驱动的接口接入到某个系统服务中,通过系统服务向外界暴露调用接口,以便上层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,2utee_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 732.内核空间代码的修改修改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),#include<tee/tee_test.h >上述三个函数的具体实现在tee_test.c文件中,读者可自行查阅这三个接口函数的实现。
常见排序算法分类
恩智浦推出世界首款无偏置电压I2C总线缓冲器
美国高科技公司排名_你所知道的有没有在里面
量子通信是什么意思_量子通信概念
单片机入门之数字电路学习
安全驱动如何添加系统服务
基于H.323高性能MCU的设计与实现知识分享
关于导热硅胶在LED灯具中降温的重要性分析
全球缺芯对于中国芯片行业是危还是机?
中国电信亮相首届中国5G+工业互联网大会,展出近20项创新成果
如何使用nohup命令在后台运行进程
物联网为中小企业带来的好处
农林小型气象站的特点以及作用,它有哪些应用场合
2019年Q4季度印度手机出货量,小米稳步上升至4290万部排名第一
开发者应该采取哪些方案来应对iOS14.5的新规
单电子管FM收音机,Vacuum Tube FM radio
高通发布这款调制解调器就问你服不服!
Wi-Fi新技术?U论坛推动LTE与非授权频谱的技术共存实践
华为任正非:可以授权镜头及电源技术给苹果公司
真正的按需计费-函数工作流 FunctionGraph实战,5分钟搭建图片压缩应用