引言
在之前的《AURIX™ TC4x虛擬化技術輔助下一代汽車EE架構設計》一文中,我們已經介紹了嵌入式虛擬化的發展歷史,基本概念,使用案例,它的優勢以及當前面臨的挑戰。接下來,我們將深入探討TC4x對虛擬化技術的硬體支持,軟體開發流程以及現有的軟體Demo。
Dec . 2024
分享至
在之前的《AURIX™ TC4x虛擬化技術輔助下一代汽車EE架構設計》一文中,我們已經介紹了嵌入式虛擬化的發展歷史,基本概念,使用案例,它的優勢以及當前面臨的挑戰。接下來,我們將深入探討TC4x對虛擬化技術的硬體支持,軟體開發流程以及現有的軟體Demo。
圖1 AURIX™ TC4x虛擬化架構
AURIX™ TC4x在硬體上全面支援虛擬化技術,包括CPU虛擬化,記憶體虛擬化,中斷虛擬化,週邊虛擬化以及虛擬機器之間的IPC通訊(如圖1所示)
圖2 AURIX™ TC3x核心硬體資源簇
2.1 CPU虛擬化的硬體支持
我們知道,CPU的軟體運作狀態透過一套硬體資源簇來管理,圖2是AURIX™ TC3x 1.6.2核心的硬體資源簇。
圖3 TC4x硬體資源簇
TC4x 核心架構從1.6.2升級到1.8,一個重要的改變就是增加了對虛擬化的支援。為此,TC4x採用了三套硬體資源簇(HRA,HRB和HRHV)來管理CPU的運作(圖3)。
圖4 TC4x硬體資源簇與虛擬機器的對應關係
TC4x最多支援6個CPU,每個CPU最多支援8個虛擬機器。其中,VM0用作Hypervisor,負責調度上層的7個虛擬機(Guest VM),並由硬體資源簇HRHV來管控;VM1是一個即時虛擬機,獨享硬體資源簇HRA;另外6個虛擬機VM2- VM7,共享硬體資源簇HRB,可透過輪詢調度的方式佔用HRB。如圖4所示:
核心復位後,虛擬化功能預設是開啟的。透過修改VCON0的EN位,使用者可以去啟用或停用某一個CPU的虛擬化功能。需要注意的是VCON0.EN位元具有「write once」的屬性,即在系統的一個上電週期內只能修改一次,二次修改該值無效。
每個CPU同一時刻只能有一個虛擬機器運行,使用者可以透過讀取VCON1的CVMN位元來取得目前運行的虛擬機器的Number。而下一個需要運作的目標虛擬機,則可以透過VCON2的VMN位元進行設定。此外,為了支援虛擬機器之前的切換,TriCore1.8核心引入了兩個新的指令,RFH(Return from Hypervisor)和HVCALL:
圖5 虛擬機器在CPU中的部署
2.2 虛擬機器在CPU中的部署
CPU在重設之後都會先進入VM0(也就是Hypervisor軟體),在Hypervisor中完成硬體資源的初始化後,則開始進行虛擬機器的調度,虛擬機器在CPU中的部署有以下幾種:
圖6 TC4x多核心虛擬化
以上是單核心的情況,在多核心場景下,每個核心都可以靈活地使用不同的虛擬機器分配機制來實現整個系統的調度,如圖6所示:
圖7 虛擬化部署範例
圖7是虛擬機器在不同CPU內部署的範例,假設我們有兩個應用APP1和APP2,它們分別佔用CPU0/1/2/3/4的VM1和CPU3/4/5的VM2。可以看到,不同CPU裡面Hypervisor的調度是不同的,有可能存在一個VM獨享CPU的情況(CPU0/1/2/5),也有可能需要Hypervisor去調度多個虛擬機器(CPU3/4),具體如何使用可以根據客戶的需求靈活配置。
圖8 TC4x L1/L2 MPU
在TC2x/TC3x的核心架構中,記憶體保護都是任務層級的。作業系統透過MPU模組,對不同任務設定Memory的存取權限。這項功能在TC4x的核心架構中依然沿用,並且我們將任務層級的MPU保護稱為Level 1 MPU。而當我們啟用了虛擬化功能後,對於不同虛擬機器之間的存取保護,則需要額外的MPU保護,我們將不同Guest VM(VM1-VM7)之間的MPU保護稱為Level 2 MPU。如圖8所示:
圖9 L1 MPU保護暫存器
3.1 Level 1 MPU保護
L1的MPU保護是透過HRx_CORECON.PROTEN暫存器的PROTEN位元來啟用。 HRHV,HRA和HRB均可獨立設定是否啟用L1的MPU保護。 TC4x支援多達24個資料段和16個代碼段的存取權限設定。客戶可以在每個VM的RTOS中,透過配置CPXEy,DPWEy以及DPREy暫存器來選擇自身VM運行存取的資料段和代碼段,並透過配置CPUx_HRx_PSW暫存器的PRS2和PRS位元來切換不同任務需要保護的資料和代碼段,TC4x最多支援8個保護暫存器簇(PRS0-PRS7)。圖9是L1 MPU保護所涉及的暫存器示意圖。
圖10 L2 MPU保護暫存器
3.2 Level 2 MPU保護
在啟用了虛擬化功能之後,L2的MPU保護預設是開啟的,使用者可以根據自身需求,在Hypervisor軟體中配置不同虛擬機器的存取權限。 HRHV_CPXE_x,HRHV_DPRE_x以及HRHV_DPWE_x中的x由VCON2.L2_PRS位元來決定,其他的配置部分與L1 MPU相同。圖10是L1 MPU保護所涉及的暫存器示意圖。
圖11 TC3x/TC4x SRC暫存器對比
4.1 中斷虛擬化的硬體支持
如下圖所示,是TC3x和TC4x的服務請求控制暫存器(SRC),可以看到對於TC4x的SRC暫存器,除了我們熟悉的優先權配置SRPN,服務請求啟用位元SRE,以及服務控制類型TOS以外,也額外增加了VM的位元域。這表示,對於每一個中斷服務請求節點,使用者可以設定VM0-VM7的選項,從而將中斷的處理對應到某一個CPU的某一個VM中去。
圖12 虛擬機器的中斷仲裁
4.2 虛擬機器的中斷仲裁和回應機制
中斷控制單元ICU會對不同硬體資源群集內部的虛擬機器中斷服務請求進行仲裁,虛擬機器是否參與仲裁由暫存器VMEMz.VMy的配置決定。仲裁採用輪詢機制,VM0-VM1-VMz依序輪詢,其中VMz表示的是HRB裡面的虛擬機,HRB內部也依照輪詢機制進行二級仲裁。當某一台虛擬機器參與仲裁之後,其產生的最高優先權的中斷服務請求會更新到VMxn_ICR的PIPN位元等待ICU的仲裁。如下圖(圖12)所示:
圖13 虛擬機器的中斷處理流程
此外,虛擬機器的中斷還支援搶佔功能,使用者可以對每個虛擬機器的中斷設定搶佔閾值,只有高於該閾值的優先權中斷才可以搶佔目前的虛擬機器中斷。此功能可透過配置VMn_PETHRESH暫存器的的PE_THRESH位元域來實現。
整個虛擬機器的中斷處理流程如下(圖13):
圖14 TC3x/TC4x外設暫存器保護
週邊裝置的存取權限是透過ACCEN暫存器來實現的,只有ACCEN選取的Master才執行存取該週邊裝置的資源。 TC3x中Master用6個bit的Tag ID表示。在TC4x中,我們對Master的定義做了額外的擴展,除了依據TAG ID以外,還額外增加了VM ID和PRS ID,客戶可以設定任意CPU的任意VM對外設的存取權。如下圖所示:
圖15 寄存器修改權限
此外,TC4x針對原有的和SafetyEndinit 機制也做了修改,新的PROT和PROTE暫存器保護機制會兼顧不同虛擬機器的暫存器權限設置,將暫存器修改的權限下發到VM層級。如下圖所示:
圖16 虛擬機器的IPC通信
有別於先前的核間通信,引進虛擬機器之後,也會牽涉到虛擬機器之間的通信(圖16)。虛擬機器直接按的通訊一般可採用Share memory的方式。利用先前章節介紹的記憶體虛擬化機制,為不同虛擬機器開闢一塊共享記憶體用於資訊互動。
圖17 虛擬機器軟體開發流程
7.1 虛擬化軟體開發流程
一般來講,虛擬化軟體的開發可以分為四個步驟(圖17):
1. 需求定義
首先,客戶需要根據專案的實際需求,做系統級的資源分配。將不同的軟體分配到不同的CPU,以及CPU內部不同的VM中去。
2. Hypervisor軟體配置
有了最基本的硬體資源分配之後,客戶需要開發一個統一的Hypervisor軟體去管理和調度不同的虛擬機器。
配置:包括對週邊資源的分配,記憶體保護的設定以及中斷資源的分配等
調度:根據客戶的需求,設定不同的調度策略,例如基於時間觸發的調度或基於事件回應的調度策略。
3. 虛擬機器開發
Hypervisor軟體開發完成之後,不同的虛擬機開發團隊基於Hypervisor的配置,獨立開發各自的應用,彼此之前沒有任何外設,內存,中斷的相互幹擾。開發完成後,需要基於Hypervisor的調度策略做虛擬機器層級的整合測試,以驗證虛擬機器應用的基本功能和可靠性。
4. 系統整合測試
不同虛擬機器開發團隊將各自的虛擬機器整合到ECU中去,基於Hypervisor做系統級的整合測試,以驗證整體功能的完整性和可靠性。
圖18 ADS中Hypervisor Demo介紹
7.2 虛擬化軟體例程
7.2.1 Demo工程介紹
英飛凌將多個TC4x虛擬化的例程放在ADS Limited開發環境中,客戶可透過ADS Limited搜尋「Hypervisor」或「Virtualized」等關鍵字找到相關例程。
本文以iLLD_TC4D9_ADS_Virtualization_Hypervisor_StandAlone這個Demo。此Demo支援All-in-one模式,即Hypervisor和虛擬機器軟體在同一個工程裡面。此外,該Demo同時支援Standalone模式,即上述工程只提供Hypervisor的初始化配置和調度功能,虛擬機軟體需要額外的軟體支持,額外的軟體包含iLLD_TC4D9_ADS_Blinky_LDE_Virtualized和iLLD_TC4D9_ADS_CAN_Blinky_LDE_Virtualized和iLLD_TC4D9_ADS_CAN_Loop_Back_Mode_LirtualBack_Mode_FirtFirtBcDS_CAN_Loop_Back_Mode_LirtualAack_Rirt_Loop_Pirt_CAN_Loop。兩個工程的切換需要透過Ifx_Cfg.h裡面的IFX_CFG_HYPERVISOR_STANDALONE完成。如圖18所示:
圖19 Hypervisor軟體啟動流程
7.2.2 Demo工程的啟動流程
以All-in-one工程為例,以下是其啟動流程(圖19):
圖20 Hypervisor調度策略
7.2.3 Hypervisor的調度策略
此Demo支援兩種調度策略(圖20):
此Demo可以實現多個虛擬機器的輪詢調度,客戶可以根據自身的需求靈活地配置Hypervisor,實現適合自己專案開發的虛擬機器配置和軟體調度策略。
本文首先介紹了TC4x的硬體對虛擬化的全面支持,包括對CPU,Memory,中斷,週邊裝置的虛擬化,以及虛擬機器之間的IPC通訊。其次,從實際專案開發的角度,介紹了嵌入式虛擬化的開發流程以及Hypervisor的兩種調度策略。嵌入式虛擬化的引入,可以幫助可以更好地實現資源分配和安全隔離,幫助客戶節省更多開發和集成的成本。
文章來源:英飛凌汽車電子生態圈