ARM32的OP-TEE与ARM64的OP-TEE启动过程大致相同。ARM64的OP-TEE的_start函数定义在generic_entry_a64.S文件中,而且该函数不像ARM32位系统一样会进入reset中去执行OP-TEE启动,而是直接在_start函数中就完成整个启动过程,
在进行初始化操作之前会注册一个异常向量表,该异常向量表会在唤醒从核阶段被使用,当主核通知唤醒从核时,从核会查找该异常向量表,然后命中对应的处理函数并执行从核的启动操作。
ARM64的OP-TEE的启动过程与ARM32的OP-TEE的启动过程几乎一样。ARM64位系统的_start函数内容说明如下:
FUNC _start , :
mov x19, x0 //保存paged_table的地址到x19中
mov x20, x2 //保存device tree的地址到x20中
adr x0, reset_vect_table //获取异常向量表的地址
msr vbar_el1, x0 //将异常向量表的地址写入VBAR寄存器中
isb
//设置系统控制寄存器,禁止cache等操作
mrs x0, sctlr_el1
mov x1, #(SCTLR_I | SCTLR_A | SCTLR_SA)
orr x0, x0, x1
msr sctlr_el1, x0
isb
//复制OP-TEE镜像中的init部分到内存中
copy_init:
ldp x3, x4, [x1], #16
stp x3, x4, [x0], #16
cmp x0, x2
b.lt copy_init
msr daifclr, #DAIFBIT_ABT //使能异常处理
adr x0, __text_start //将__text_start的地址保存到x0中
adrp x1, __end //将_end的地址保存到x1中
add x1, x1, :lo12:__end
sub x1, x1, x0
bl inv_dcache_range //关闭数据cache
bl console_init //初始化console
bl core_init_mmu_map //初始化MMU的页表
bl core_init_mmu_regs //将MMU的页表信息写入TTBRx寄存器中
bl cpu_mmu_enable //使能MMU
bl cpu_mmu_enable_icache //使能MMU的指令cache
bl cpu_mmu_enable_dcache //使能MMU的数据cache
mov x0, x19 //将paged_table的地址保存到x0中
mov x1, #-1
mov x2, x20 //将device tree的地址保存到x2中
//使用device tree和paged_table作为参数开始OP-TEE的启动
bl generic_boot_init_primary
mov x19, x0
adr x0, __text_start
add x1, x1, :lo12:__end
sub x1, x1, x0
bl flush_dcache_range //刷新数据cache
bl thread_clr_boot_thread //清空系统线程的状态
mov x1, x19
//将TEESMC_OPTEED_RETURN_ENTRY_DONE保存到x0
mov x0, #TEESMC_OPTEED_RETURN_ENTRY_DONE
smc #0 //调用SMC切换到normal world状态
b . /* SMC不应该有返回操作 */
END_FUNC _start
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
ARM
+关注
关注
134文章
9097浏览量
367648 -
函数
+关注
关注
3文章
4332浏览量
62638 -
TEE
+关注
关注
0文章
29浏览量
10266
发布评论请先 登录
相关推荐
ARM32位设计
ARM32位设计,兼容16位指令集,现在被软银收购ARM1-11 从功能机到智能手机新款命名 :cortex V7-A 手机智能设备-R 实时操作系统-M嵌入式开发stm32 性能从
发表于 08-24 06:51
请问HSE op-tee是什么关系?
我有个问题。S32G同时支持HSE和op-tee。S32G的安全加解密和证书管理是通过HSE完成的吗?op-tee 和 HSE 只是其中之一吗?有没有相关的设计文档?谢谢
发表于 04-06 06:26
Core 3399KJ Linux根文件系统镜像(arm64/arm32)
电子发烧友网站提供《Core 3399KJ Linux根文件系统镜像(arm64/arm32).txt》资料免费下载
发表于 09-14 10:08
•3次下载
Core 3399J Linux根文件系统镜像(arm64/arm32)
电子发烧友网站提供《Core 3399J Linux根文件系统镜像(arm64/arm32).txt》资料免费下载
发表于 09-14 09:24
•0次下载
Core 3399 JD4 V2文件系统Linux根文件系统镜像(arm64/arm32)
电子发烧友网站提供《Core 3399 JD4 V2文件系统Linux根文件系统镜像(arm64/arm32).txt》资料免费下载
发表于 09-16 09:44
•10次下载
ROC RK3399 PC Pro文件系统Linux根文件系统镜像(arm64/arm32)
电子发烧友网站提供《ROC RK3399 PC Pro文件系统Linux根文件系统镜像(arm64/arm32).txt》资料免费下载
发表于 09-20 10:59
•5次下载
AIO 3399ProC Linux根文件系统镜像(arm64/arm32)
电子发烧友网站提供《AIO 3399ProC Linux根文件系统镜像(arm64/arm32).txt》资料免费下载
发表于 09-21 09:52
•11次下载
OP-TEE中安全驱动的框架
OP-TEE中的安全驱动是OP-TEE操作安全设备的载体。 TA通过调用某个安全驱动的接口就可实现对特定安全设备的操作。安全驱动在OP-TEE中的软件框架如图22-2所示。 (其实这里,你要搞清楚
OP-TEE的内核初始化函数调用
generic_boot_init_primary函数内容 generic_boot_init_primary函数是OP-TEE建立系统运行环境的入口函数,该函数会进行建立线程运行空间、初始化
OP-TEE服务项的启动
OP-TEE服务项的启动分为: service_init以及service_init_late ,需要被启动的服务项通过使用这两个宏,在编译时,相关服务的内容将会被保存到initcall1
OP-TEE的安全存储的简介
OP-TEE的安全存储的简介 OP-TEE的安全存储功能是OP-TEE为用户提供的安全存储机制。用户可使用安全存储功能来保存敏感数据、密钥等信息。 使用OP-TEE安全存储功能保存数据
OP-TEE安全存储安全文件的格式
安全文件、dirf.db文件的数据格式和操作过程 OP-TEE的安全存储功能可满足用户保存敏感数据的需求,需要被保存的数据会被加 密保存到文件系统或RPMB分区中 。 当选择将数据保存到文件系统中
评论