optee中的arm64的virt_to_phys的实现
★★★ 友情链接 : 个人博客导读首页—点击此处 ★★★
在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的实现相关推荐
- optee中User TA的加载和运行
文章目录 1.optee中的TA简介 2.TA的调用 2.tee_entry_std :std smc的调用 3.open_session 思考: User TA是怎样编译的? User TA是怎样签 ...
- optee中的密码学算法注册模型
1.optee中Symmetric ciphers.HASH.RNG等算法的注册模型 1.1.aes_desc 结构模型 (1).如果开启硬件加速(如ARM Cryptography Extensio ...
- optee中添加一个中断以及底层代码的相关解读
optee.中断.gic.gicv3.itr_add.安全中断.tee.trustzone.ATF ★★★ 个人博客导读首页-点击此处 ★★★ . 说明: 在默认情况下,本文讲述的都是ARMV8-aa ...
- [mmu/cache]-cache在linux和optee中的应用-InProgress
在trustzone技术背景下,linux+optee系统环境,当cpu访问一块内存时,会经过memory filter的过滤,如果我将一块内存配置成secure memory,那么当non-secu ...
- optee中User TA的加载/验签和运行
文章目录 1.TA的加载到TEE内存 思考:- User TA是怎样编译的?- User TA是怎样签名的?- User TA是怎样被load到内存的?- 怎样验证TA签名的?- 如何解析TA hea ...
- [optee]-optee中的异常向量表的实现
Optee异常向量表 ARMV8-aarch64 1.optee中定义的异常向量表 2.optee中设置向量表基地址VBAR_EL1 ARMV8-aarch32.ARMV7-aarch32 1.opt ...
- 38. OP-TEE中secure stroage------安全文件数据格式和操作过程
历经一年多时间的系统整理合补充,<手机安全和可信应用开发指南:TrustZone与OP-TEE技术详解 >一书得以出版,书中详细介绍了TEE以及系统安全中的所有内容,全书按照从硬件到软件, ...
- 2. OP-TEE中添加自己的TA和CA
历经一年多时间的系统整理合补充,<手机安全和可信应用开发指南:TrustZone与OP-TEE技术详解 >一书得以出版,书中详细介绍了TEE以及系统安全中的所有内容,全书按照从硬件到软件, ...
- 19. OP-TEE中TA与CA执行流程详解-------软件架构篇
历经一年多时间的系统整理合补充,<手机安全和可信应用开发指南:TrustZone与OP-TEE技术详解 >一书得以出版,书中详细介绍了TEE以及系统安全中的所有内容,全书按照从硬件到软件, ...
最新文章
- Day04:函数参数、对象、嵌套、闭包函数和装饰器
- 持久化数据结构(笔记)
- Building JavaScript Games for Phones Tablets and Desktop(6)- 响应玩家输入
- ppt中插入excel源文件丢失,提取图中数据
- rabbitmq队列中消息过期配置
- android原生 6108v9a,全国通用版华为EC6108V9A图文教程
- 【养生】观舌头知健康
- 那些年,我闯荡江湖的创业经历与感悟;分享给迷茫的你。
- Windows系统下在Git Bash中把文件内容复制到剪贴板的命令
- 数据库应用系统的生命周期
- 搜狗都上市了,王小川还是单身,难道要找AI当女朋友?
- apache dubbo 源码分析系列汇总
- 数据库关系代数运算除法
- CPU 寄存器 和内存三者之间的关系
- aba会导致问题_浅谈Java中ABA问题及避免
- Revit二次开发之双事件:空闲事件与DocumentChanged事件
- 13、DA数模转换(PWM输出)
- Vista不是黄金甲
- OPPO Watch 2系列正式发布 双擎混动技术兼顾智能与续航
- scada系统集成_SCADA、DCS、PLC三者之间的区别
热门文章
- 新基建重点,5G时代基石,数据中心加速发展
- 市电中断时,数据中心机房如何保证持续供电?
- 单片机彩灯移动实验_单片机课程设计彩灯实验.doc
- serializable接口_Java Serializable:明明就一个空的接口嘛
- matlab文件读写监听,matlab对文件的读写
- Algorithm:【Algorithm算法进阶之路】之十大经典排序算法
- Anaconda:Anaconda安装pytorch网络连接失败记录
- 成功解决absl.flags._exceptions.IllegalFlagValueError: flag --train_size=inf: Expect argument to be a str
- ML之Kmeans:利用自定义Kmeans函数实现对多个坐标点(自定义四个点)进行自动(最多迭代10次)分类
- 深入浅出计算机组成原理学习笔记:总线-计算机内部的高速公路(第42讲)