★★★ 友情链接 : 个人博客导读首页—点击此处 ★★★

在optee中 arm_va2pa_helper实现了virtual addr转换phys addr,具体实现如下

/*virt transform to phys, regardless of the virt is ddr addr or register addr*/arm_va2pa_helper((void *)buf_in, &phy_in);arm_va2pa_helper((void *)buf_out, &phy_out);
#include <linux/module.h>#define BIT32(nr)     ((1 & 0xffffffff) << (nr))
#define BIT64(nr)       ((1 & 0xffffffffffffffff) << (nr))#define PAR_F           BIT32(0)
#define PAR_PA_SHIFT        12
#define PAR_PA_MASK     (BIT64(36) - 1)#define DEFINE_REG_READ_FUNC_(reg, type, asmreg) \
static inline type read_##reg(void)         \
{                           \type val;                  \\asm volatile("mrs %0, " #asmreg : "=r" (val));   \return val;                    \
}#define DEFINE_U64_REG_READ_FUNC(reg) \DEFINE_REG_READ_FUNC_(reg, uint64_t, reg)DEFINE_U64_REG_READ_FUNC(par_el1)static inline void write_at_s1e1r(uint64_t va)
{asm volatile ("at S1E1R, %0" : : "r" (va));
}bool arm_va2pa_helper(void *va, uint64_t *pa)
{uint64_t par;uint64_t par_pa_mask;bool ret = false;local_irq_disable();write_at_s1e1r((uint64_t)va);isb();par = read_par_el1();par_pa_mask = PAR_PA_MASK;if (par & PAR_F)goto out;*pa = (par & (par_pa_mask << PAR_PA_SHIFT)) |((uint64_t)va & ((1 << PAR_PA_SHIFT) - 1));ret = true;
out:local_irq_enable();;return ret;
}
EXPORT_SYMBOL(arm_va2pa_helper);

总结一下arm_va2pa_helper,其实就是将虚拟地址写入MMU寄存器,然后再读取另外一个寄存器获取物理地址

optee中的arm64的virt_to_phys的实现相关推荐

  1. optee中User TA的加载和运行

    文章目录 1.optee中的TA简介 2.TA的调用 2.tee_entry_std :std smc的调用 3.open_session 思考: User TA是怎样编译的? User TA是怎样签 ...

  2. optee中的密码学算法注册模型

    1.optee中Symmetric ciphers.HASH.RNG等算法的注册模型 1.1.aes_desc 结构模型 (1).如果开启硬件加速(如ARM Cryptography Extensio ...

  3. optee中添加一个中断以及底层代码的相关解读

    optee.中断.gic.gicv3.itr_add.安全中断.tee.trustzone.ATF ★★★ 个人博客导读首页-点击此处 ★★★ . 说明: 在默认情况下,本文讲述的都是ARMV8-aa ...

  4. [mmu/cache]-cache在linux和optee中的应用-InProgress

    在trustzone技术背景下,linux+optee系统环境,当cpu访问一块内存时,会经过memory filter的过滤,如果我将一块内存配置成secure memory,那么当non-secu ...

  5. optee中User TA的加载/验签和运行

    文章目录 1.TA的加载到TEE内存 思考:- User TA是怎样编译的?- User TA是怎样签名的?- User TA是怎样被load到内存的?- 怎样验证TA签名的?- 如何解析TA hea ...

  6. [optee]-optee中的异常向量表的实现

    Optee异常向量表 ARMV8-aarch64 1.optee中定义的异常向量表 2.optee中设置向量表基地址VBAR_EL1 ARMV8-aarch32.ARMV7-aarch32 1.opt ...

  7. 38. OP-TEE中secure stroage------安全文件数据格式和操作过程

    历经一年多时间的系统整理合补充,<手机安全和可信应用开发指南:TrustZone与OP-TEE技术详解 >一书得以出版,书中详细介绍了TEE以及系统安全中的所有内容,全书按照从硬件到软件, ...

  8. 2. OP-TEE中添加自己的TA和CA

    历经一年多时间的系统整理合补充,<手机安全和可信应用开发指南:TrustZone与OP-TEE技术详解 >一书得以出版,书中详细介绍了TEE以及系统安全中的所有内容,全书按照从硬件到软件, ...

  9. 19. OP-TEE中TA与CA执行流程详解-------软件架构篇

    历经一年多时间的系统整理合补充,<手机安全和可信应用开发指南:TrustZone与OP-TEE技术详解 >一书得以出版,书中详细介绍了TEE以及系统安全中的所有内容,全书按照从硬件到软件, ...

最新文章

  1. Day04:函数参数、对象、嵌套、闭包函数和装饰器
  2. 持久化数据结构(笔记)
  3. Building JavaScript Games for Phones Tablets and Desktop(6)- 响应玩家输入
  4. ppt中插入excel源文件丢失,提取图中数据
  5. rabbitmq队列中消息过期配置
  6. android原生 6108v9a,全国通用版华为EC6108V9A图文教程
  7. 【养生】观舌头知健康
  8. 那些年,我闯荡江湖的创业经历与感悟;分享给迷茫的你。
  9. Windows系统下在Git Bash中把文件内容复制到剪贴板的命令
  10. 数据库应用系统的生命周期
  11. 搜狗都上市了,王小川还是单身,难道要找AI当女朋友?
  12. apache dubbo 源码分析系列汇总
  13. 数据库关系代数运算除法
  14. CPU 寄存器 和内存三者之间的关系
  15. aba会导致问题_浅谈Java中ABA问题及避免
  16. Revit二次开发之双事件:空闲事件与DocumentChanged事件
  17. 13、DA数模转换(PWM输出)
  18. Vista不是黄金甲
  19. OPPO Watch 2系列正式发布 双擎混动技术兼顾智能与续航
  20. scada系统集成_SCADA、DCS、PLC三者之间的区别

热门文章

  1. 新基建重点,5G时代基石,数据中心加速发展
  2. 市电中断时,数据中心机房如何保证持续供电?
  3. 单片机彩灯移动实验_单片机课程设计彩灯实验.doc
  4. serializable接口_Java Serializable:明明就一个空的接口嘛
  5. matlab文件读写监听,matlab对文件的读写
  6. Algorithm:【Algorithm算法进阶之路】之十大经典排序算法
  7. Anaconda:Anaconda安装pytorch网络连接失败记录
  8. 成功解决absl.flags._exceptions.IllegalFlagValueError: flag --train_size=inf: Expect argument to be a str
  9. ML之Kmeans:利用自定义Kmeans函数实现对多个坐标点(自定义四个点)进行自动(最多迭代10次)分类
  10. 深入浅出计算机组成原理学习笔记:总线-计算机内部的高速公路(第42讲)