optee os
文章平均质量分 65
tiantao2012
这个作者很懒,什么都没留下…
展开
-
optee中的栈
optee中定义了三种stack#define DECLARE_STACK(name, num_stacks, stack_size, linkage) \linkage uint32_t name[num_stacks] \ [ROUNDUP(stack_size + STACK_CANARY_SIZE + STACK_CHECK_EXTRA, \ STACK_ALIGNMENT) / sizeof(uint32_t)] \ __attrib...原创 2021-09-16 21:40:21 · 421 阅读 · 0 评论 -
optee的启动
optee是从ATF中启动的,是作为一个svc来启动,启动玩后在optee中又通过smc返回到ATF中.从core/arch/arm/kernel/kern.ld.S 中可以发现optee的入口,这也是个通用的规律,即从lds文件中找到入口函数OUTPUT_FORMAT(CFG_KERN_LINKER_FORMAT)OUTPUT_ARCH(CFG_KERN_LINKER_ARCH)ENTRY(_start)这里可以知道入口是_start,针对arm32的函数在entry_a32.S 中,针对原创 2021-09-14 11:17:25 · 956 阅读 · 0 评论 -
fastcall
所谓的fast call 就是ATF通过smc 陷入到optee中后,获取一些参数,例如UID、MUTEX等从ATF陷入到OPTEE的入口为:core/arm/kernel/thread_optee_smc_a64.S/** Vector table supplied to ARM Trusted Firmware (ARM-TF) at* initialization.** Note that ARM-TF depends on the layout of this vector ...原创 2021-09-13 20:11:11 · 939 阅读 · 0 评论 -
optee_client
libteec主要是用于CA->TA的其流程如下:CA->libteec.so->tee_driver->ATF->TEE_kernel->TA假如TA服务有部分工作需要返回非安全态执行,则会通过如下流程来嗲用tee_supplicant去完成TA->ATF->tee_drvier->tee_supplicant这里的tee-supplicant和libteec.so 都是在运行的EL0中libteec.so 和 tee-supplican原创 2021-09-13 18:56:34 · 416 阅读 · 0 评论 -
optee中支持的软算算法
在lib/libmbedtls/core/tomcrypt.c中定义了加解密算法的入口,TEE_Result crypto_init(void){ tomcrypt_init(); return TEE_SUCCESS;}在tomcrypt_init 中我们就可以明确知道optee中支持了哪些软算的算法void tomcrypt_init(void){ ltc_init();}static void ltc_init(void){#if defined(_CFG...原创 2021-09-13 11:25:36 · 345 阅读 · 0 评论 -
optee os 中的系统调用
当在TA 中发生系统调用时,其入口函数在optee_os-master/core/arch/arm/kernel/thread_a64.S LOCAL_FUNC el0_svc , : /* get pointer to current thread context in x0 */ get_thread_ctx sp, 0, 1, 2 /* load sa原创 2017-07-04 16:48:41 · 2302 阅读 · 0 评论 -
对TA 镜像文件的加密
optee中通过scripts中的sign.py 来对tee签名#def get_args(): from argparse import ArgumentParser parser = ArgumentParser() parser.add_argument('--key', required=True, help='Name of key file原创 2017-07-14 14:55:21 · 995 阅读 · 0 评论 -
optee 中静态memory的管理
optee os中的静态memory都存在static_memory_map 这个数组中,这里的#define MAX_MMAP_REGIONS 13所以这个数组最大保存14个静态memorystatic struct tee_mmap_region static_memory_map[MAX_MMAP_REGIONS + 1] __early_bss;这个数组会在core_in原创 2017-07-14 15:57:58 · 2019 阅读 · 0 评论 -
static TA和user TA
user space发送的open session命令最终是在tee_entry_std中处理的void tee_entry_std(struct thread_smc_args *smc_args){ /* Enable foreign interrupts for STD calls */ thread_set_foreign_intr(true);原创 2017-06-27 15:27:57 · 2255 阅读 · 0 评论 -
optee os中的console driver
optee 中可以有自己的console来打印log,每个厂商必须实现自己的console driver,这里以D02为例其code在core/arch/arm/plat-d02/main.c 中,所有注册给optee的console 必须调用register_serial_console,这种机制和kernel中的类似static struct hi16xx_uart_data cons原创 2017-06-15 16:37:02 · 1681 阅读 · 1 评论 -
linaro optee os官网的几张架构图
第一张:第二张第三张原创 2017-07-21 17:32:27 · 3298 阅读 · 0 评论 -
离开和进入trusted os的过程
从下图可以很清楚的可以看到normal world 通过smc进入secure monitor,再到trust os再离开的过程,分别牵扯到save/restore 两种context的过程,两种context 分别是non-secure 和secure context可以看到在通过smc进入monitor的过程中RQ和FIQ 是block的。在trusted os中处理的时候IRQ和FIQ原创 2017-06-24 15:57:06 · 1819 阅读 · 1 评论 -
optee的同步机制总结
optee有三种同步机制分别是spin-lock/mutex/condvar1:spin-lock举例如下:spin-lock 是一个unsigned int类型的变量,总共有三个函数| Function | Purpose ||----------|---------|| `cpu_spin_lock()` | Locks a spin-lock || `cpu_spin原创 2017-06-12 10:35:49 · 1366 阅读 · 0 评论 -
optee 的helloworld ta
linaro有提供一个optee的hello world 程序,路径如下:https://github.com/linaro-swg/hello_world/blob/master/host/main.c在执行这个main 程序是需要制定uuid,这样才能找到对应的TA程序#include #include #include /* OP-TEE TEE client A原创 2017-06-19 15:05:53 · 2336 阅读 · 1 评论 -
optee中的fiq的执行
在optee的初始化时会调用 thread_init_per_cpuvoid thread_init_per_cpu(void) { size_t pos = get_core_pos(); struct thread_core_local *l = thread_get_core_local(); init_sec_mon(pos);原创 2017-06-19 16:48:48 · 1532 阅读 · 0 评论 -
optee的generic_boot_init_primary 分析
generic_boot_init_primary是optee os初始化的主要函数#if defined(CFG_WITH_ARM_TRUSTED_FW)struct thread_vector_table *generic_boot_init_primary(unsigned long pageable_part, unsigned long u __unused,原创 2017-06-08 11:27:30 · 1388 阅读 · 0 评论 -
libteec 1
libteec 是OP-TEE 提供给用户在linux userspace层面调用的接口实现,从makefile中可以看到libtees是被build成libteec.so,其源文件有两个tee_client_api.c,teec_trace.c.其中主要的接口在tee_client_api.c中,而teec_trace.c 中只是提供用于打印log的_dprintf的实现MAJOR_VERS原创 2017-06-20 14:57:30 · 1647 阅读 · 0 评论 -
libteec 2
session表示TA和CA之间的联系,从hello world程序中可以知道TA是有特定的UUID制定的。TEEC_Result TEEC_OpenSession(TEEC_Context *ctx, TEEC_Session *session, const TEEC_UUID *destination, uint32_t connecti原创 2017-06-20 15:53:55 · 998 阅读 · 0 评论 -
optee thread的初始化
optee os 是支持thread的,thread的初始化主要在下面两个函数中进行init_runtime->thread_init_boot_threadvoid thread_init_boot_thread(void){//得到这个cpu id对应的thread_core_local struct thread_core_local *l = thread_get原创 2017-06-09 10:20:09 · 1448 阅读 · 0 评论 -
fast_smc调用的流程
当在secure monitor下发生中断是,cpu切换到secure worid,执行vector tableoptee/optee_os-master/core/arch/arm/kernel/thread_a64.S FUNC thread_vector_table , : b vector_std_smc_entry b vector_fast_sm原创 2017-06-09 15:23:48 · 1111 阅读 · 0 评论 -
libteec 3
TEEC_RegisterSharedMemory 用于在TA和CA之前注册一个共享内存TEEC_Result TEEC_RegisterSharedMemory(TEEC_Context *ctx, TEEC_SharedMemory *shm){ int fd; size_t s; if (!ctx || !shm) return T原创 2017-06-21 15:20:06 · 1351 阅读 · 1 评论 -
std_smc 调用流程
FUNC thread_std_smc_entry , : /* pass x0-x7 in a struct thread_smc_args */ sub sp, sp, #THREAD_SMC_ARGS_SIZE store_xregs sp, THREAD_SMC_ARGS_X0, 0, 7 mov x0, sp /* Cal原创 2017-06-09 16:16:25 · 1484 阅读 · 0 评论 -
tee-supplicant的作用是帮忙optee_linuxdriver 从userspace访问rishos的文件系统中的资源
tee-supplicant 是运行在user space,主要是optee_linuxdriver通过ioctl告诉上层,让其访问rich os文件系统中的资源。从其makefile中可以看到最终build出的可执行档就是tee-supplicant包换的源文件:tee_supplicant.c/teec_ta_load.c/tee_supp_fs.c/rpmb.c/handle.cal原创 2017-06-22 16:58:12 · 3618 阅读 · 0 评论 -
optee os 的启动和初始化
optee的ld文件在如下路径os/core/arch/arm/kernel/kern.ld.SENTRY(_start)SECTIONS{ . = CFG_TEE_LOAD_ADDR; __text_start = .; /* * Memory between CFG_TEE_LOAD_ADDR and page aligned ro原创 2017-06-01 10:35:04 · 2992 阅读 · 0 评论