当前位置: 首页 > 科技观察

SOC中的图形时间:系统中有哪些定时器?

时间:2023-03-12 02:25:14 科技观察

说明:本文是关于armv8-aarch64和armv9架构的设计模式的文章。本文包含一些个人观点。如有不同意见,可在评论区或微信群参与讨论。思考:一个大型系统中有多少个定时器?这些定时器的作用是什么?这些定时器有什么区别?它们的准确性有什么区别吗?LinuxKernel的Tick使用的是哪个定时器?哪个定时器?一个ARMCore中有多少个定时器?Timers在不同的软件系统中的使用有什么区别吗?应用中的setitimer()等函数会被底层程序调用吗?应用程序需要读取当前系统时间戳时,是否需要调用内核空间?可以在glibc中实现吗?什么是ArchTimer?什么是SOC定时器、apb定时器和内存映射定时器?对于一个archtimer,又分为物理timer和Virtualtimer?那么什么时候使用物理定时器,什么时候使用虚拟定时器呢?为什么?EL1和S-EL1中使用的archtimer是如何隔离的?(这里的隔离是指寄存器怎么隔离,中断怎么隔离)9.为什么EL3物理定时器对应的寄存器是xxxEL1,不应该是xxxEL3吗?1、系统中有多少个Timer?如上图所示,一个SOC中必须/可能存在:coretimer(也叫archtimer),每个core都有这个TimerSOCTimer(也叫apbtimer,memory-mappedTimer),可以有多个,也可以有如下:(1)Non-secure的专用定时器(2)Secure的专用定时器(3)特定用途的专用定时器(4)内核绑定的定时器,比如8个定时器,固定某个定时器对于某核2,每个核有多少个Timers2.1和4个物理TimerEL1PhysicalTimer不区分secure和non-secure,但是在ATF中切换cpucontext时,相关寄存器会被保存和恢复,所以从a软件方面,有两套寄存器,即non-secureEL1PhysicalTimer和secureEL1PhysicalTimer,这也是最理想的设计方案。不过非常非常非常非常遗憾的是,通过软件切换cpucontext可以将寄存器转换成两组,但是中断呢?中断不能同时用于非安全和安全,也不能在安全状态之间隔离中断。在这种情况下,就说明这样的硬件是一个“非常严重”的问题,那么我们来看看软件是如何使用的?(1)LinuxKernel使用正常。在读取计数器值和计数器频率时,同时会设置CTL、CVAL、TVAL等相关寄存器,同时会触发并处理30个中断(EL1PhysicalTimer默认中断数为30个);(2)在optee中,只有在读取计数器值和计数器频率时才能计算时间戳。optee不会读取CTL、CVAL、TVAL等相关寄存器,当然也不会触发和处理30个中断。以上是基于“硬件缺陷”的软件设计,自然不会有问题。那你说ARMTimer有缺陷,有缺陷?你真的了解他们的设计吗?其实在ARM的设计中,也考虑到了上述的问题。仔细看它的EL3PhysicalTimer,它的寄存器名称是xxx_EL1(而不是xxx_EL3),也就是说它是为了securesecurity(EL3也属于securesecurity)。另外,我还参考了具体的armcoretrm手册,发现EL3PhysicalTimer对应的中断号(中断号29)的信号配置描述为“SecureEL1PyhsicalTimer”。我们查看BL32(SecureEL1)trusted-firmware-a/bl32/tsp/tsp_timer.c的参考程序,它也操作了EL3PhysicalTimer。总结:(1)EL1PhysicalTimer不区分安全和非安全,不能隔离安全和非安全。通常它用于NS-EL1。当然,如果S-EL1只是通过读取计数器和频率来获取当前时间戳,也可以使用,但不建议这样做。因为通过这种方式,非安全汽车也可以窃取安全侧的时间戳。(2)EL3PhysicalTimer的初衷是为了secure,包括EL3和S-EL1EL2PhysicalTimerfornon-secureEL2,S-EL2PhysicalTimerforsecureEL2,EL3PhysicalTimerforSecure,包括EL3和S-EL12.2,三个虚拟TimerEL1VirtualTimer主要用于EL1OS(guestos),那么对于一个操作系统来说,是用EL1PhysicalTimer还是EL1VirtualTimer?是由宏控制决定的,在编译的时候就决定了。比如你的OS不是运行在VM中,那就用EL1PhysicalTimer,如果你的OS要运行在VM中,那就用EL1VirtualTimerEL2PhysicalTimer,这个很容易理解,是给EL2管理程序用的,但是EL2VirtualTimer它是给谁的?这里我们需要一点虚拟化的概念,EL2VirtualTimer是针对HostApp的。作者简介:Baron(csdn:代码改变世界ctw),九年手机安全/SOC底层安全开发经验。擅长trustzone/tee安全产品的设计与开发。