- 博客(44)
- 资源 (21)
- 问答 (1)
- 收藏
- 关注
原创 optee的同步方法
optee的同步方法有三种:spin-lock, mutex, and condvar1、spin-lock在使用cpu_spin_lock之前,需先关闭foreign interrupt,如果不关闭则会assertstatic inline void cpu_spin_lock(unsigned int *lock){cpu_spin_lock_no_dldetect(lock);}static inline void cpu_spin_lock_no_dldetect(unsigned i
2020-10-31 19:37:54 1133
原创 window使用笔记
1、在插入字符的时候会自动删除后面的字符怎么办?当年不小心按到什么键时,光标的闪烁也从竖线变成了下划线,这个时候你发现你想插入一个字符,但会自动删除后面的字符。其实你只要搜索“window的insert键盘怎么按” 即可对于thinkpad笔记本,只需按" Fn + insert" 键即可...
2020-10-31 19:27:51 245
原创 [mmu/cache]-Cache Type Register(CTR)寄存器介绍-InProgress
CTR_EL0, Cache Type Register(1)、DminLine/IminLineLog2 of the number of words in the smallest cache line of all the data caches and unified caches that are controlled by the PE.获取d-cache cache-line的示例代码: .macro dcache_line_size, reg, tmp
2020-10-30 13:36:00 4175 1
原创 [mmu/cache]-cache在linux和optee中的应用-InProgress
在trustzone技术背景下,linux+optee系统环境,当cpu访问一块内存时,会经过memory filter的过滤,如果我将一块内存配置成secure memory,那么当cpu发起访问的时候,会被memroy filter挡回去,返回一个AXI Error.但是在secure memory已经缓存到了cache的情况下,如果cpu再去访问该内存,cpu直接读写cache,就不经过memory filter,那么是如何保证cache安全的呢?第一种情况:在配置该内存位secure属性后,
2020-10-30 09:40:03 1946
原创 [gic]-ARM gicv3/gicv2的总结和介绍-PPT
gic,gicv2,gicv3,中断控制器,IRQ,FIQ,Serror, 中断,同步异常,异步异常,TF-A,TF-M,ATF,TrustedFirmware,trustzone,TEE,optee,trusty,tlk,lk,armv8,armv9,arm,secureboot,BL31,BL32,BL1,BL2,hypervisor,终端安全,secureboot,security,virtulization
2020-10-30 09:13:31 3497 1
原创 ARMV8-aarch64的寄存器介绍(二)
1、aarch64通用寄存器ARMV8-aarch64有31个64位的寄存器 : x0-x30, 其中x29是Frame pointer(FP), x30是procedure link register(LR)2、aarch64特殊寄存器(sp pc spsr elr xzr等)在aarch64中,没有x31或w31寄存器,但是在一些指令或软件编码中,经常将数字31做为XZR或SP4、Stack pointer(sp)寄存器介绍默认情况下,来了一个异常后,选择当前异常级别的sp,例如来了一个
2020-10-29 23:12:45 6345
原创 ARM trustzone的安全扩展介绍-一篇就够了
1、ARM Trustzone的安全扩展简介ARM Trustzone是什么? ARM Trustzone不具体指一个硬件,也不是一个软件,而是一套技术一套标志,在支持ARM Trustzone的SOC中,需按照ARM Trustzone技术对各个子模块进行设计。(1)、AMBA-AXI总线的扩展, 增加了标志secure读和写地址线:AWPROT[1]和ARPROT[1](2)、processor的扩展(或者说master的扩展),在ARM Core内部增加了SCR.NS比特位,这样ARM Co
2020-10-29 23:11:19 8440 1
原创 [ATF]-ATF的代码学习篇-一篇就够了
★★★ 个人博客导读首页—点击此处 ★★★.说明:在默认情况下,本文讲述的都是ARMV8-aarch64架构,linux kernel 64位文章目录1、ATF里都有什么?2、ATF的编译3、ATF的启动4、进入ATF的和退出ATF方式(1)、进入ATF的方式(2)、退出ATF的方式5、ATF中向量表的介绍6、ATF中栈的设置7、ATF中寄存器的保存和恢复8、ATF的rt_svc介绍(runtime service)(1)、SMC Calling convention文档(2)、DECLARE_.
2020-10-29 23:10:11 9026 3
原创 [ARM-assembly]-ARM交叉编译器下编译的各个镜像的反汇编文件分析
文章目录1、ATF的dump文件(1)、section段(2)、符号表 symbol table(3)、汇编代码段 disassembly(4)、常量区1、ATF的dump文件cat bl31.elf(1)、section段architecture: aarch64, flags 0x00000112:EXEC_P, HAS_SYMS, D_PAGEDstart address 0x000000004ce01000Program Header: LOAD off 0x00000
2020-10-29 22:31:40 3877 1
原创 [mmu/cache]-ARM MMU的学习笔记-一篇就够了
MMU分为两个部分:Address translation 和 TLB其中Address translation也就包含如下14条系统指令而TLB就多了,包含数十条指令,如下是其中的一部分
2020-10-29 22:26:49 9130 6
原创 optee内存管理和页表建立
文章目录1、rodata section指向内存的结构体2、内存的分类和注册3、内存的属性(type)4、页表的构建1、rodata section指向内存的结构体rodata section的地址段 *(.rodata .rodata.*) /* * 8 to avoid unwanted padding between __start_ta_head_section * and the first structure in ta_head_section, in 64-bit
2020-10-29 17:27:05 3992
原创 [mmu/cache]-ARM cache的学习笔记-一篇就够了
文章目录1、cache的应用——什么时候需要刷cache1、cache的应用——什么时候需要刷cache(1)、cpu在往内存(src地址)写数据时,cache中会缓存这些数据,并没有立即同步到DDR, 只有该地址在cache中被换出去时候,才会同步到ddr(2)、Device和ddr直接无cache,device直接从ddr(src地址)中读取数据, 此时当然读不到前面cpu写入的数据.解决办法, 在device读取ddr数据之前, 先做__flush_dcache_area, 将cache数据
2020-10-29 12:47:52 11805 1
原创 [mmu/cache]-ARMV8 MMU内存管理中的Memory attributes和Cache policies
1、MMU页表中的内存属性介绍Memory attributes在MMU translation tables中为每一个region(entry)定义了memory和cache属性在该属性中的BIT[4:2]做为index指向指向了系统寄存器MAIR_ELn (Cache policies), 系统寄存器MAIR_ELn分成8*8bytesTLB做为一种特殊的cache,在它的entry中包含了memory type,所有修改MAIR_ELn寄存器后,在使用ISB指令或TLB invalidate
2020-10-29 09:47:44 5636
原创 optee中的中断处理详解
文章目录1、注册一个中断2、调用到中断处理函数1、注册一个中断注册中断很简单,itr_add和itr_enable就可以了struct itr_handler temp_irq = { 50, //中断号 0, //flag tzc_itr_handler, //handler &itr_tzc_data[0], //paramaters {NULL} //link};itr_add(&temp_irq);itr_enable(50);2、调
2020-10-28 19:55:44 3733
原创 [ARM异常]-ARMV8的异步异常(中断)详细介绍
1、VBAR寄存器的介绍VBAR(Vector Base Address Register)的寄存器有:如果是aarch64:VBAR_EL1VBAR_EL2VBAR_EL3如果是aarch32VBARHVBARMVBAR在开启MMU的系统,VBAR中写入的是虚拟地址,以VBAR_EL1为例,介绍下field的使用:Bits [10:0] reservedBits [11:63]:如果不支持ARMv8.2-LVA(Large VA support:使用64kb页面时,
2020-10-26 14:35:39 5728
原创 [ARM异常]-ARMV8的中断的routing和Mask表
Asynchronous exception routing1、Routing when both EL3 and EL2 are implemented (continued)2、Routing when EL3 is implemented and EL2 is not implemented3、Routing when EL3 is not implemented and EL2 is implementedAsynchronous exception masking1、Physic
2020-10-26 12:13:12 3787
原创 [mmu/cache]-MMU的寄存器学习
文章目录1、PAR_EL1, Physical Address Register1、PAR_EL1, Physical Address Register寄存器:寄存器读写:MRS <Xt>, PAR_EL1MSR PAR_EL1, <Xt>SH : Shareability attribute, for the returned output address. Permitted values are:0b00 Non-shareable.0b10 Outer S
2020-10-25 11:52:08 2278
原创 [mmu/cache]-cache的一些基本概念介绍
文章目录1、Cache的一些概念Cache分配策略(Cache allocation policy)(1)、读分配(read allocation)(2)、写分配(write allocation)Cache更新策略(Cache update policy)(3)、写直通(write through)(4)、写回(write back)properties of normal memory(5)、inner and outer1、Cache的一些概念Cache分配策略(Cache allocation
2020-10-23 18:22:05 4369 1
原创 [register]-ARMV8-aarch64-通用寄存器介绍
X0-X7 Argument registersThese are used to pass parameters to a function and to return a result. They can be used as scratch registers or as caller-saved register variables that can hold intermediate values within a function, between calls to other un.
2020-10-22 13:43:36 4653
原创 [ATF]-中断配置:SCR.FIQ/SCR.IRQ的配置详解
1、ARMV8 SCR.FIQ/SCR.IRQ的bit位定义意思就是说,如果SCR.IRQ=0,IRQ中断不会target到EL3,如果SCR.IRQ=1,则IRQ将会被target到EL3同样FIQ也是如此,如果SCR.FIQ=0,FIQ中断不会target到EL3,如果SCR.FIQ=1,则FIQ将会被target到EL32、SCR.FIQ/SCR.IRQ的配置那么SCR.FIQ/SCR.IRQ是在哪里配置的呢? 因为SCR只有SCR_EL3寄存器,只能在EL3级别操作.在linux+opt
2020-10-21 20:45:22 3510
原创 [architecture]-ARMv8/armv7/linux的栈/sp的学习和总结
1、ARMV8 ARMV7的SP寄存器的介绍(1)、ARMV7-aarch32的SP寄存器在ARMV8-aarch32的状态下,有以下SP寄存器spsp_usrsp_svcsp_abtsp_undsp_irqsp_fiqsp_monsp_hyp注意:在armv7上,arm有七种模式:user、system、supervisor、abort、undefined、irq、fiq, 再加两个扩展模式:hyp、monitor(2)、ARMV8-aarch32的SP寄存器ASRMV8为
2020-10-21 10:23:38 4357 2
原创 Android init.rc执行顺序
适用于android9极其之前的版本所有的action运行于service之前下面为各个section的执行顺序,英文编号的section是系统内建的(写死在init.c中的命令)early-init a) wait_for_coldboot_done b) property_init c) keychord_int d) console_init e) set_init_propertiesinit early-fsfspost-fs.
2020-10-21 09:34:50 2142
原创 [crypto]-02-非对称加解密RSA原理概念详解
说明:本文使用的数据来自网络,重复的太多了,也不知道哪篇是原创.随机选择两个不相等的质数 : p=61、q=53计算 n = p × q = 61×53 = 3233计算n的欧拉函数 : φ(n) = (p-1)(q-1) = 3120随机选择一个整数e,条件是1< e < φ(n),且e与φ(n) 互质, 我们选择一个 e=17计算e对于φ(n)的模反元素d : d*e%φ(n)=1支持 n e d都算出来了,n=3233,e=17,d=2753,所以公钥就是 (3233,.
2020-10-20 13:13:20 1997 2
原创 optee堆Virtualization(hypervisor)的支持
1、一些概念的介绍optee提供虚拟化的支持, 可以在多个VMs上的optee os上跑TAs. 一个VM不能影响到另外一个VM;启用虚拟化支持之后,optee将依赖hypervisor,因为只有hypervisor才知道当前使用哪个VM的optee.hypervisor负责创建和销毁VMs,而且在大多数场景下, hypervisor会开机two-state MMU,所有VMs看到的不是真实的物理地址,二十IPA(intermediate physical addresses)。也就说optee只能
2020-10-20 09:49:11 3834
原创 optee内核中栈的介绍(一)
文章目录1、optee内核的反汇编文件2、optee中的内核栈的定义3、optee中的内核栈的设置1、optee内核的反汇编文件内核栈定义在nozi段out/arm-plat-xxxx/core/tee.elf: file format elf64-littleaarch64out/arm-plat-xxxx/core/tee.elfarchitecture: aarch64, flags 0x00000112:EXEC_P, HAS_SYMS, D_PAGEDstart addres
2020-10-20 09:17:13 3765
原创 [hypervisor]-AArch64 (hypervisor)Virtualization学习笔记
主流的操作系统都有一个假设,就是这个系统有一个特权模式下的os,之上在跑多个非特权模式的APP.而ARM的虚拟化技术就是在同一个系统上共存多个操作系统. 实现这种虚拟core需要硬件的扩展(加速虚拟机之间的切换)和hypervisor软件层的实现.Virtualization是一个允许多个操作系统共享一套硬件的程序, 下面是一个支持Virtualization的软件框图实现Virtualization需要使用一下several architectural features:• A dedicate
2020-10-20 09:12:21 3818
原创 optee内核中栈的介绍(二)
目录1、在optee中的栈内存:2、optee中的栈指针3、在不同阶段使用不同的栈内存和栈指针★★★ 友情链接 : 个人博客导读首页—点击此处 ★★★1、在optee中的栈内存:(1)、Secure monitor stack (128 bytes),绑定cpu, 给armv7使用的(2)、Temp stack (small ~1KB) 128,绑定cpu, 状态切换时使用的, 使用该栈时interrupt是关闭的(3)、Abort stack (medium ~2KB),绑定cpu, 取数据或
2020-10-19 20:06:15 3491
原创 [工具]-脚本自动化工具:按照linux kernel标准格式化输出文件(format_file)
import sysimport osconditional_str = [ "if", "while", "for"]def table_space(tag_count): total_str="" if tag_count == 0: return total_str for num in range(0,tag_count): total_str += '\t' return total_strdef is_space_line(line): if '' ==
2020-10-19 20:03:07 1956 2
原创 optee中User TA的加载和运行
文章目录1、tee_entry_std :std smc的调用2、open_session1、tee_entry_std :std smc的调用在linux kernel中,通过GP标准调用的与TA通信的命令(opensession\invoke\closession)其实都是std smc call。该smc调用后,会进入到TEE中的tee_entry_std中:/* * Note: this function is weak just to make it possible to exclud
2020-10-19 19:55:33 4209 1
原创 optee aarch64体系下栈的设计(sp_el0/sp_el1)
文章目录1、设置sp(1)、stack_tmp和stack_abt(2)、set_sp函数(宏)分析(3)、set_sp的使用2、thread_core_local3、thread_init_per_cpu4、异常进来之后,设置tmp栈(sp_el0)(1)、剖析一个irq异常程序Notes for AArch64There are only two stack pointers, SP_EL1 and SP_EL0, available for OP-TEE in AArch64. When an
2020-10-19 16:39:52 2710
原创 [register]-ARMV8-aarch64 部分系统寄存器总结(必背)
ELR_ELx 异常链接寄存器该寄存器只有ELR_EL1 ELR_EL2 ELR_EL3, 没用ELR_EL0. 因为异常不会routing(target)到EL0.例如在user mode时触发了一个target到EL1的irq异常,那么会将PC指针保持到ELR_EL1中,然后跳转到EL1的异常向量表中;user mode时触发了一个target到EL3的irq异常,,那么会将PC指针保持到ELR_EL3中,然后跳转到EL3的异常向量表中;ELR_ELx (exception Syn...
2020-10-16 13:21:42 5436 1
原创 [思考]-32位的应用程序为什么不能跑64位的应用程序
在ARM文档中,可以找到如下两句话:When the processor moves from a higher to a lower Exception level, the Execution state can stay the same, or it can switch from AArch64 to AArch32.When moving from a lower to a higher Exception level, the Execution state can stay the s
2020-10-16 10:24:54 2745 2
原创 [实验]-从汇编代码来看volatile关键字的作用
环境aarch64的交叉编译器我们将C语言翻译成汇编代码,来看volatile关键字的作用我们先看一段C语言代码void udelay(uint64_t usec){ uint64_t start, cnt, delta,freq; volatile uint64_t delta_us = 0; //------------------在这里定义了一个volatile变量 uint64_t reference_ratio = 16;
2020-10-16 09:39:56 2268
原创 [architecture]-AMRV7和ARMV8中的一些细微差异
文章目录1、svc和swi的区别1、svc和swi的区别svc和swi都是supervisor call指令,都是系统调用.再armv7之前,用的都是swi,触发异步异常,进入vector_swi异常向量表;在armv8-arch64架构下,抛弃了swi,改用了svc,触发的是同步异常,进入同步异常向量表sync_exception_aarch64...
2020-10-15 09:56:58 2020
原创 ARM架构中MMU/TLB/Cache的一些概念和寄存器
1、一些基本概念(1)、Write-through 和 Write-backWrite-through- Write is done synchronously both to the cache and to the backing store.Write-back (or Write-behind) - Writing is done only to the cache. A modified cache block is written back to the store, just befor
2020-10-14 09:25:52 3577
原创 aarch64的TCR寄存器介绍
在ARM Core中,还有几个相关的系统寄存器:TCR_EL1TCR_EL2TCR_EL3(1)、T1SZ、T0SZT1SZ, bits [21:16] 通过TTBR1寻址的内存区域的大小偏移量,也就是TTBR1基地址下的一级页表的大小T0SZ, bits [5:0](2)、ORGN1、IRGN1、ORGN0、IRGN0其实可以总结为这样:...
2020-10-13 17:55:52 4034
原创 [ARM异常]-ARMV8-aarch64异常和中断处理概念详细介绍
文章目录1、异常和中断的概念2、异常产生的方法:(1)、Abort :(2)、Reset(3)、同步异常(4)、异步异常(中断)1、异常和中断的概念(AArch64 Exception and Interrupt Handling)异常是指需要特权软件(an exception handler))采取某些操作,以确保系统的平稳运行中断有时用作异常的同义词。但是对于ARM的术语来说,中断是异步异常,只是异常的一种;异常是一个事件(而不是分支或跳转指令)导致指令的正常顺序执行被修改。一个中断是一个异
2020-10-12 13:13:52 4749 1
基于英飞凌产品的汽车EPS方案介绍
2023-06-23
面向安全要求严苛的应用的飞思卡尔双核控制器系列
2023-06-23
汽车电动助力转向系统的研究与方案-英飞凌
2023-06-23
支持ASIL D 应用的安全集成硬件解决方案
2023-06-23
论文:函数信号发生器制作
2023-06-23
论文:单相电参数测量仪
2023-06-23
基于51单片机循迹智能小车
2023-06-23
C8051F005小车自动控制
2023-06-23
AT89C51红外避障小车
2023-06-23
电动车跷跷板-全国大学生电子设计竞赛
2023-06-23
电动智能小车(完整论文)
2023-06-23
嵌入式Linux C语言初学者项目实践:火车票订票系统
2023-04-12
GPD_TEE_TUI_Extn_Biometrics_API_v1.0_PublicRelease_2018_04_03.pdf
2021-08-05
GPD_TEE_Internal_Core_API_Specification_v1.3_PublicRelease.pdf
2021-08-05
python英文批量翻译成中文?
2021-08-23
TA创建的收藏夹 TA关注的收藏夹
TA关注的人