--- title: ARMv8 categories: ARM, ARMv8, ARM64, embedded ... ARMv8架構介紹 ===================================== .. image:: http://www.arm.com/zh/images/roadmap/V5_to_V8_Architecture.jpg ARMv8架構有一個重要的特點是他與其之前的架構相容。 Execution state ---------------------------- - AArch64 - 64-bit Execution state. - 提供 31組 64-bit 的通用暫存器 - 提供 64-bit Program Counter(PC), Stack-Poiner(SP)與Exception-Link-Register (ELR) - 定義最多四種(EL0 - EL3)特權模式 - 支援 64-bit 虛擬地址 - 定義一組PSTATE來保存PE state - AArch32 - 32-bit Execution state - 提供 16組 32-bit 的通用暫存器 - 提供 1組 ELR,作為從Hyp-Mode的Exception返回之用 - 提供 A32(相容ARMv7 ARM)與 T32(相容ARMv7 Thumb)兩種指令集 - 使用32-bit 虛擬地址 - 使用單一的CPSR來保存PE state 在A32與T32中做切換只要透過BX即可,但要在AArch32與AArch64間做切換只能透過Exception .. image:: http://loda.hala01.com/wp-content/uploads/2014/12/image005.png (圖片來自loda大大的blog) AArch64 指令集 (instruction set) 介紹 ===================================== ARMv8-A_Architecture_Reference_Manual P.111 系統層級架構 (System Level Architecture) ===================================== ARMv8-A_Architecture_Reference_Manual P.1405 例外層級 (Exception levels) ---------------------------- ARMv8-A_Architecture_Reference_Manual P.1408 - ARMv8-A架構定義了四個例外層級,分別為EL0到EL3,其中數字越大代表特權(privilege)越大。 - EL0: 無特權模式(unprivileged) - EL1: 作業系統核心模式(OS kernel mode) - EL2: 虛擬機器監視器模式(Hypervisor mode) - EL3: TrustZone® monitor mode - 要提升到較高層級需要透過exceptions(如: 中斷、page faults等)。 - EL0 => EL1: SVC (system call) - EL1 => EL2: HVC (hypervisor call) - EL2 => EL3: SMC (secure monitor call) - 在轉換時會將返回位址(return address)紀錄在例外連結暫存器ELR(Exception-Link-Register)。 - 每個EL會有個別的SP(stack pointer) .. image:: /embedded/armv8 arch.png 安全性狀態(Security state) --------------------------------------------------------------------------- ARMv8-A架構提供兩種安全性狀態,他們有個別的實體記憶體定址空間(Secure physical address space)。 - 安全狀態(Secure state): PE可以存取安全及不安全的實體定址空間 - 不安全狀態(Non-Secure state): 只能存取不安全的實體定址空間 虛擬化Virtualization ------------------------------------------------------------------------------------ 這邊的虛擬化只有支援有實現EL2的架構。以下為其基礎模型: - 一個跑在EL2的Hypervisor負責切換跑在EL1、EL0的virtual machines - 一些跑在virtual machines上(在EL1中)的Guest OS - 每個Guest OS上跑在EL0的應用程式 每個VM會被Hypervisor指定一個VMID。 EL2只會實現在 Non-secure state,並負責: - 提供虛擬值給少數特定的暫存器(1)。Guset OS 或其上的應用程式讀取這些暫存器時會得到虛擬的值。 - Trapping: 當在做記憶體管理及存取其他大多數的暫存器((1)之外的)時會產生exception並由EL2處理。 - Routing interrupt: 將中斷分配給 - 現在的Guest OS - 現在沒在執行的Guest OS - hypervisor (以上會在個別的章節特別探討) 實現EL2包含以下實作: - Hypervisor Call (HVC) exception - Traps to EL2 - 虛擬中斷: - 包括: - Virtual SError - Virtual IRQ - Virtual FIQ - 所有虛擬中斷會由EL1處理 - 每個虛擬中斷可由EL2個別啟用 - 每個虛擬中斷都會有其對應的實體中斷 - 當一個虛擬中斷被啟用時,其對應的實體中斷會由EL2處理(除非EL3指定他要處理) 虛擬記憶體系統架構 (Virtual Memory System Architecture) ------------------------------------------------------------------------------------ ARMv8-A_Architecture_Reference_Manual P.1707 通用計時器 (The Generic Timer) ------------------------------------------------------------------------------------ ARMv8-A_Architecture_Reference_Manual P.1855 reference ===================================== * `ARMv8-A_Architecture_Reference_Manual_(Issue_A.a) (需登入)`_ * `loda armv8-與-linux的新手筆記`_ * http://www.slideshare.net/badaindonesia/linux-on-arm-64bit-architecture?related=1