optee:kernel space调用user space进程时候的硬件行为
文章目录
- 1、先看kernel调用userspace所需的的参数
- 2、先看kernel mode切换user mode的寄存器行为
★★★ 链接 : 个人博客导读首页—点击此处 ★★★
我们以optee为例,看下kernel space调用user space时有哪些硬件行为
1、先看kernel调用userspace所需的的参数
- 函数入库
- session
- 函数参数
- cmd
- usr_stack //该应用程序的栈地址
- enrty_func
- is_32bit //该参数只是在kernel中使用
- panicked
- panic_code
res = thread_enter_user_mode(func, tee_svc_kaddr_to_uref(session),(vaddr_t)usr_params, cmd, usr_stack,utc->entry_func, utc->is_32bit,&utc->ctx.panicked, &utc->ctx.panic_code);uint32_t thread_enter_user_mode(unsigned long a0, unsigned long a1,unsigned long a2, unsigned long a3, unsigned long user_sp,unsigned long entry_func, bool is_32bit,uint32_t *exit_status0, uint32_t *exit_status1)
{uint32_t spsr;tee_ta_update_session_utime_resume();if (!get_spsr(is_32bit, entry_func, &spsr)) {*exit_status0 = 1; /* panic */*exit_status1 = 0xbadbadba;return 0;}return __thread_enter_user_mode(a0, a1, a2, a3, user_sp, entry_func,spsr, exit_status0, exit_status1);
}
2、先看kernel mode切换user mode的寄存器行为
将usr_stack地址,同时写入到了x13(R13/sp_usr)、和SP_EL0, 也就是在此处,程序并不需要知道你的userspace是32位或64位
FUNC __thread_enter_user_mode , :ldr x8, [sp]/** Create the and fill in the struct thread_user_mode_rec*/sub sp, sp, #THREAD_USER_MODE_REC_SIZEstore_xregs sp, THREAD_USER_MODE_REC_EXIT_STATUS0_PTR, 7, 8store_xregs sp, THREAD_USER_MODE_REC_X19, 19, 30/** Switch to SP_EL1* Disable exceptions* Save kern sp in x19*/msr daifset, #DAIFBIT_ALLmov x19, spmsr spsel, #1/** Save the kernel stack pointer in the thread context*//* get pointer to current thread context */get_thread_ctx sp, 21, 20, 22/** Save kernel stack pointer to ensure that el0_svc() uses* correct stack pointer*/str x19, [x21, #THREAD_CTX_KERN_SP]/** Initialize SPSR, ELR_EL1, and SP_EL0 to enter user mode*/msr spsr_el1, x6/* Set user sp */mov x13, x4 /* Used when running TA in Aarch32 */msr sp_el0, x4 /* Used when running TA in Aarch64 *//* Set user function */msr elr_el1, x5/* Set frame pointer (user stack can't be unwound past this point) */mov x29, #0/* Jump into user mode */store_xregs sp, THREAD_CORE_LOCAL_X0, 0, 1b eret_to_el0
END_FUNC __thread_enter_user_mode
optee:kernel space调用user space进程时候的硬件行为相关推荐
- Meltdown:Reading Kernel Memory from User Space 论文中英对照
Meltdown:Reading Kernel Memory from User Space 翻译目录 摘要(Abstract) 一.简介(Introduction) 二.背景介绍(Backgroun ...
- Meltdown: Reading Kernel Memory from User Space论文翻译
Meltdown: Reading Kernel Memory from User Space翻译 摘要(Abstract) The security of computer systems fund ...
- JVM内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)
参考文章: https://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html https://www.cnblogs.com/duanx ...
- kernel笔记——内核编译与进程管理
内核与操作系统 由于一些商业操作系统设计上的缺陷以及日益庞杂,"操作系统"的概念对很多人而言变得含糊不清.在进一步讨论Linux内核的话题前,我们先区分"内核" ...
- JVM内存区域划分 EDEN SPACE、SURVIVOR SPACE、TENURED GEN
JVM区域总体分两类,heap区和非heap区.heap区又分:Eden Space(伊甸园).Survivor Space(幸存者区).Tenured Gen(老年代-养老区). 非heap区又分: ...
- Unity内置管线升级URP之色彩空间(伽马、sRGB、Gamma Space和Linear Space)
目录 本文内容 伽马(Gamma) sRGB 色彩空间(Color Space) 总结 转色彩空间后出现问题的缘由 1.相同场景材质和光照为什么变暗了? 2.个人定制化的PBR显示不正确了?(讨论的是 ...
- java eden space_JVM内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)...
JVM区域总体分两类,heap区和非heap区. heap区又分为: Eden Space(伊甸园). Survivor Space(幸存者区). Old Gen(老年代). 非heap区又分: Co ...
- java old区域_JVM内存区域详解(Eden Space、Survivor Space、Old Gen、Code Cache和Perm Gen)...
JVM区域总体分两类,heap区和非heap区. heap区又分为: Eden Space(伊甸园). Survivor Space(幸存者区). Old Gen(老年代). 非heap区又分: Co ...
- JVM内存区域划分Eden Space、Survivor Space、Tenured Gen,Perm Gen解释
jvm区域总体分两类,heap区和非heap区.heap区又分:Eden Space(伊甸园).Survivor Space(幸存者区).Tenured Gen(老年代-养老区). 非heap区又分: ...
最新文章
- 2.1:CGPROGRAM
- java,如何处理大批量数据插入
- hive 的drop table命令出错
- 整理一些计算机基础知识!
- OmniConverter: Mac上的最简单好用的免费全能音视频转换器
- matlab仿真之大尺度衰落因子的产生
- WEP密码破解BT3-spoonwep2教程及下…
- 流形学习t-SNE,LLE,Isomap
- 游戏开发bug解决思路
- linkedin解封_LinkedIn信号:Scala,JRuby和Voldemort的案例研究
- git pull出现“fatal: refusing to merge unrelated histories“
- Java解析银联报文_银联ISO8583报文解析过程
- web 2.0 的一些说明
- win10用hdmi线与电视连接了,但不显示的原因
- java手机qq通用版2012_javaqq通用版?qq2012java通用版下载?qqjava通用版下载?手机qq2011java通用版...
- 计算机网络技术自主招生考试题,自主招生试题库
- 怎样实现Word2003转PDF?无需插件即可另存为PDF的虚拟打印机法
- 峰会实录 | StarRocks PMC Chair 赵纯:数据分析的极速统一3.0 时代
- 《基于eigen3多层感知机的反向传播算法实现》
- word文件找回打开密码
热门文章
- 数据机房建设常用材料有哪些?
- python绘制如下图形、小三角形边长20_在编程中发现数学之美——使用Python小龟绘制多边形...
- DS之信息挖掘:利用pandas库统计某一列col中各个值出现的次数(降序输出)
- Py之tornado:tornado库的简介、安装、使用方法之详细攻略
- 成功解决The NVIDIA driver on your system is too old (found version 9010). Please update your GPU driver
- AI:人工智能概念之机器学习ML、深度学习DL、数据挖掘、知识发现、模式识别等重要领域之间比较关系结构图之详细攻略
- DL之DNN:利用DNN【784→50→100→10】算法对MNIST手写数字图片识别数据集进行预测、模型优化
- EL之GB(GBC):利用GB对多分类问题进行建模(分层抽样+调1参)并评估
- DL之RNN:人工智能为你写代码——基于TF利用RNN算法实现生成编程语言代码(C++语言)、训练测试过程全记录
- TF之CNN:CNN实现mnist数据集预测 96%采用placeholder用法+2层C及其max_pool法+隐藏层dropout法+输出层softmax法+目标函数cross_entropy法+