文章目录

  • 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进程时候的硬件行为相关推荐

  1. Meltdown:Reading Kernel Memory from User Space 论文中英对照

    Meltdown:Reading Kernel Memory from User Space 翻译目录 摘要(Abstract) 一.简介(Introduction) 二.背景介绍(Backgroun ...

  2. Meltdown: Reading Kernel Memory from User Space论文翻译

    Meltdown: Reading Kernel Memory from User Space翻译 摘要(Abstract) The security of computer systems fund ...

  3. 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 ...

  4. kernel笔记——内核编译与进程管理

    内核与操作系统 由于一些商业操作系统设计上的缺陷以及日益庞杂,"操作系统"的概念对很多人而言变得含糊不清.在进一步讨论Linux内核的话题前,我们先区分"内核" ...

  5. JVM内存区域划分 EDEN SPACE、SURVIVOR SPACE、TENURED GEN

    JVM区域总体分两类,heap区和非heap区.heap区又分:Eden Space(伊甸园).Survivor Space(幸存者区).Tenured Gen(老年代-养老区). 非heap区又分: ...

  6. Unity内置管线升级URP之色彩空间(伽马、sRGB、Gamma Space和Linear Space)

    目录 本文内容 伽马(Gamma) sRGB 色彩空间(Color Space) 总结 转色彩空间后出现问题的缘由 1.相同场景材质和光照为什么变暗了? 2.个人定制化的PBR显示不正确了?(讨论的是 ...

  7. 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 ...

  8. 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 ...

  9. JVM内存区域划分Eden Space、Survivor Space、Tenured Gen,Perm Gen解释

    jvm区域总体分两类,heap区和非heap区.heap区又分:Eden Space(伊甸园).Survivor Space(幸存者区).Tenured Gen(老年代-养老区). 非heap区又分: ...

最新文章

  1. 2.1:CGPROGRAM
  2. java,如何处理大批量数据插入
  3. hive 的drop table命令出错
  4. 整理一些计算机基础知识!
  5. OmniConverter: Mac上的最简单好用的免费全能音视频转换器
  6. matlab仿真之大尺度衰落因子的产生
  7. WEP密码破解BT3-spoonwep2教程及下…
  8. 流形学习t-SNE,LLE,Isomap
  9. 游戏开发bug解决思路
  10. linkedin解封_LinkedIn信号:Scala,JRuby和Voldemort的案例研究
  11. git pull出现“fatal: refusing to merge unrelated histories“
  12. Java解析银联报文_银联ISO8583报文解析过程
  13. web 2.0 的一些说明
  14. win10用hdmi线与电视连接了,但不显示的原因
  15. java手机qq通用版2012_javaqq通用版?qq2012java通用版下载?qqjava通用版下载?手机qq2011java通用版...
  16. 计算机网络技术自主招生考试题,自主招生试题库
  17. 怎样实现Word2003转PDF?无需插件即可另存为PDF的虚拟打印机法
  18. 峰会实录 | StarRocks PMC Chair 赵纯:数据分析的极速统一3.0 时代
  19. 《基于eigen3多层感知机的反向传播算法实现》
  20. word文件找回打开密码

热门文章

  1. 数据机房建设常用材料有哪些?
  2. python绘制如下图形、小三角形边长20_在编程中发现数学之美——使用Python小龟绘制多边形...
  3. DS之信息挖掘:利用pandas库统计某一列col中各个值出现的次数(降序输出)
  4. Py之tornado:tornado库的简介、安装、使用方法之详细攻略
  5. 成功解决The NVIDIA driver on your system is too old (found version 9010). Please update your GPU driver
  6. AI:人工智能概念之机器学习ML、深度学习DL、数据挖掘、知识发现、模式识别等重要领域之间比较关系结构图之详细攻略
  7. DL之DNN:利用DNN【784→50→100→10】算法对MNIST手写数字图片识别数据集进行预测、模型优化
  8. EL之GB(GBC):利用GB对多分类问题进行建模(分层抽样+调1参)并评估
  9. DL之RNN:人工智能为你写代码——基于TF利用RNN算法实现生成编程语言代码(C++语言)、训练测试过程全记录
  10. TF之CNN:CNN实现mnist数据集预测 96%采用placeholder用法+2层C及其max_pool法+隐藏层dropout法+输出层softmax法+目标函数cross_entropy法+