1 OP-TEE OS的入口函数
- • OP-TEE镜像的入口函数是在编译OP-TEE OS时通过链接文件来确定的,
- • OP-TEE在编译时是按照optee_os/core/arch/arm/kernel/kern.ld.S文件链接生成OP-TEE OS的镜像文件,
- • 在kern.ld.S文件中通过ENTRY宏来指定OP-TEE OS的入口函数,在OP-TEE中指定的入口函数是_start,
- • 对于ARM32位系统,该函数定义在optee_os/core/arch/arm/generic_entry_a32.S文件中,
- • 对于ARM64位系统而言,该函数定义在optee_os/core/arch/arm generic_entry_a64.S文件中。
2 OP-TEE的内核初始化过程
** _start会调用reset函数进入OP-TEE OS的启动过程**。
由于对称多处理(Symmetr ical Multi-Processing, SMP)架构的原因,在reset函数中会对主核和从核进行不同的启动操作,分别调用reset_primary函数和reset_secondary函数来完成。
1. reset入口函数执行内容
reset函数是主核和从核启动的第一个函数,该函数的执行流程如图所示。
reset函数执行流程
进入到reset函数后, 系统会将_start的地址写入VBAR寄存器作为中断向量表的起始地址使用 ,
在启动从核时, 从核知道会到该地址去获取应该执行代码来完成从核的启动 。整个reset函数的内容和注释如下:
LOCAL_FUNC reset , :
UNWIND( .fnstart)
UNWIND( .cantunwind)
bootargs_entry //获取启动带入的参数,主要是启动地址、device tree地址等
/* 使能对齐检查并禁用数据和指令缓存 */
read_sctlr r0 //读取sctlr中的数据,获取当前CPU控制寄存器中的值
#if defined(CFG_SCTLR_ALIGNMENT_CHECK)
orr r0, r0, #SCTLR_A //设定对齐校验
#else
bic r0, r0, #SCTLR_A
#endif
bic r0, r0, #SCTLR_C //关闭数据cache
bic r0, r0, #SCTLR_I //关闭指令cache
#if defined(CFG_HWSUPP_MEM_PERM_WXN) && defined(CFG_CORE_RWDATA_NOEXEC)
orr r0, r0, #(SCTLR_WXN | SCTLR_UWXN)
#endif
write_sctlr r0 //将r0写入到sctlr中,用于关闭cache
isb
/* 早期ARM核安全监控模式态的特殊配置 */
bl plat_cpu_reset_early //执行CPU早期初始化
ldr r0, =_start //设定r0寄存器的值为_start函数的地址
write_vbar r0 //将_start函数的地址写入VBAR寄存器中,用于启动时使用
#if defined(CFG_WITH_ARM_TRUSTED_FW)
b reset_primary //支持ATF时跳转到reset_primary中执行
#else
bl get_core_pos //判定当前CPU CORE的编号
cmp r0, #0 //将获得的CPU编号与0对比
beq reset_primary //如果当前core是主核,则使用reset_primary进行初始化
b reset_secondary //如果当前core是从核,则使用reset_secondary进行初始化
#endif
UNWIND( .fnend)
END_FUNC reset
plat_cpu_reset_early函数将会设定SCR寄存器中的安全标志位 ,用于标记当前CPU是处于安全世界状态中,并且将_start地址写入VBAR寄存器,用于在需要启动从核时系统能找到启动代码的入口地址,
reset_primary函数是主核启动代码的入口函数,该函数将会启动主核的基本初始化、配置运行环境,然后再开始执行唤醒从核的操作。
- • 对于从核的唤醒操作,如果系统支持PSCI,从核的唤醒是在REE OS启动时 ,发送PSCI给EL3或Monitor模式的代码来启动从核;
- • 如果不使用PSCI,而是选择在OP-TEE中使能CFG_SYNC_BOOT_CPU,则OP-TEE会在主核启动结束后唤醒从核。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
寄存器
+关注
关注
30文章
5028浏览量
117721 -
函数
+关注
关注
3文章
3868浏览量
61309 -
架构
+关注
关注
1文章
484浏览量
25200 -
TEE
+关注
关注
0文章
28浏览量
10146
发布评论请先 登录
相关推荐
TEE解决了什么问题?
一、引言近年来,可信执行的概念在物联网安全领域也逐渐流传。可信执行环境(TEE,Trusted Execution Environment)在智能手机中的应用非常广泛,如OP-TEE[1
发表于 02-16 06:03
请问Beal环境下编译OP-TEE后生成FIP需要哪些文件?
stm32mp157d-***-bl32.dtb fip.bin但是当我使用 OP-TEE 时,我使用以下命令:fiptool 创建 --tos-fw tee
发表于 12-05 07:06
如何在不使用op-tee的情况下进行编译?
我按照本指南使用自定义 DTS 文件(按步骤操作)并出现以下错误,如何在不使用 op-tee 的情况下进行编译?ERROR: optee-os-stm32mp-3.12.0.r1-r0
发表于 12-28 10:01
请问HSE op-tee是什么关系?
我有个问题。S32G同时支持HSE和op-tee。S32G的安全加解密和证书管理是通过HSE完成的吗?op-tee 和 HSE 只是其中之一吗?有没有相关的设计文档?谢谢
发表于 04-06 06:26
OP-TEE无法在锁定的i.MX6UL上初始化JR怎么解决?
imx 存储库,而 U-boot 来自主线存储库 (2023.1)在我们锁定设备之前,这似乎工作正常。锁定设备后,我们在 OP-TEE 初始化时得到以下输出(启用了一些额外的跟踪消息):E/TC:0 0
发表于 04-17 07:31
解析内核初始化时根内存盘的加载过程
2006-12-12 13:54:41 来源:Linux 宝库 分享到:标签:loadlin gzip 作者:opera 概述 ==== 1)当内核配置了内存盘时, 内核在初始化时可以将软盘加载
发表于 11-08 10:40
•0次下载
OP-TEE中安全驱动的框架
OP-TEE中的安全驱动是OP-TEE操作安全设备的载体。 TA通过调用某个安全驱动的接口就可实现对特定安全设备的操作。安全驱动在OP-TEE中的软件框架如图22-2所示。 (其实这里,你要搞清楚
reset_primary函数的执行流程
reset_primary函数是OP-TEE对CPU主核进行初始化操作的函数,该函数会初始化系统的MMU,并调用generic_boot_init_primary函数完成OP-TEE
OP-TEE的内核初始化函数调用
generic_boot_init_primary函数内容 generic_boot_init_primary函数是OP-TEE建立系统运行环境的入口函数,该函数会进行建立线程运行空间、初始化
OP-TEE服务项的启动
OP-TEE服务项的启动分为: service_init以及service_init_late ,需要被启动的服务项通过使用这两个宏,在编译时,相关服务的内容将会被保存到initcall1
ARM64位与ARM32位OP-TEE启动过程的差异
一样会进入reset中去执行OP-TEE启动,而是直接在_start函数中就完成整个启动过程, 在进行初始化操作之前会注册一个异常向量表,该异常向量表会在唤醒从核阶段被使用,当主核通知唤醒从核时,从核会查找
OP-TEE的安全存储的简介
OP-TEE的安全存储的简介 OP-TEE的安全存储功能是OP-TEE为用户提供的安全存储机制。用户可使用安全存储功能来保存敏感数据、密钥等信息。 使用OP-TEE安全存储功能保存数据
OP-TEE安全存储安全文件的格式
安全文件、dirf.db文件的数据格式和操作过程 OP-TEE的安全存储功能可满足用户保存敏感数据的需求,需要被保存的数据会被加 密保存到文件系统或RPMB分区中 。 当选择将数据保存到文件系统
评论