本示例中的驱动只实现了对内存的读写操作,并提供了测试使用的TA和CA。
读者可使用如下指令从GitHub上获取到示例源代码:
git clone https://GitHub.com/shuaifengyun/opentee_driver.git
下载完代码后就需要将该TA和CA集成到OP-TEE中,需修改OP-TEE源代码build目录下的qemu.mk(开发者板级对应的mk文件)和common.mk文件,同时也需要将安全驱动集成到OP-TEE的内核中。
然后编译整体OP-TEE后就能够使用该份示例代码来验证本书提供的安全驱动示例是否运行正常。
获取到示例代码后将opentee_driver/my_test目录全部复制到op-tee的根目录下,再切换到根目录的build目录中,然后使用git apply命令合入补丁文件后就可完成测试使用的TA和CA集成到OP-TEE,合入全部补丁的操作步骤如下:
1)将示例代码中的my_test_common_3.0.0.patch文件和my_test_qemu_3.0.0.patch文件复制到build目录中,将0001-Integrate-secure-driver-test-into-op-tee.patch文件复制到optee_os目录中。
2)切换到build目录,使用如下命令合入补丁:
git apply my_test_common_3.0.0.patch
git apply my_test_qemu_3.0.0.patch
3)切换到optee_os目录,使用如下命令合入安全驱动在内核中的补丁:
git am 0001-Integrate-secure-driver-test-into-op-tee.patch
将补丁合入完成后就可使用make -f qemu.mk all编译整个工程,然后使用make -f qemu.mk run-only来启动OP-TEE,在启动的正常世界状态的终端执行secStorTest命令就能实现该示例的CA对TA的调用。示例代码的运行效果如图22-3所示。
开发一个安全驱动时,需要在optee_os/core/drivers目录中建立该安全驱动的源文件,在源文件中实现驱动的初始化函数、操作设备的接口函数(read、write、ioctl),具体的接口函数由开发者自行定义。
若该驱动需要在系统启动过程中执行一些初始化操作则可使用driver_init宏进行定义, 编译完成后需要被执行的内容将会被保存到镜像文件的initcall段中, 这些使用driver_init宏定义的内容将在OP-TEE启动时被调用。 (相当于提前为驱动的调用准备了环境与初始条件)
示例源代码中的driver_test.c文件需要放在optee_os/core/drivers目录中,然后修改optee_os/core/drivers目录下的sub.mk文件,将driver_test.c文件添加编译系统中。在sub. mk文件中添加如下内容:
srcs-y += driver_test.c
若需要使用宏的方式来控制该驱动的编译,可将添加到sub.mk的内容修改成“srcs-$(CFG_XXX) += driver_test.c”,然后在optee_os/mk/config.mk文件中定义CFG_XXX变量,通过将CFG_XXX变量赋值成y或n来控制该驱动是否需要被编译进系统。 (这个还是蛮有用的)
该驱动对应的头文件driver_test.h文件需保存到optee_os/core/inlcude/drivers目录中,该文件中声明了该驱动暴露给外界调用的接口和相关结构体。
实现完驱动接口实现,现在来实现添加系统服务
全部0条评论
快来发表一下你的评论吧 !