AURIX TC4x CDSP介紹及應用 AURIX TC4x 硬件支持包助您實現初期開發,加速開發進程 AURIX TC4x 如何使用MathWorks Matlab工具箱自動生成PPU目標代碼 AURIX TC4x GETH對時間敏感網絡的支持介紹
引言
在之前的《AURIX TC4x虛擬化技術助力下一代汽車EE架構設計》一文中,我們已經介紹了嵌入式虛擬化的發展歷史,基本概念,使用案例,它的優勢以及當前面臨的挑戰。接下來,我們將深入探討TC4x對虛擬化技術的硬件支持,軟件開發流程以及現有的軟件Demo。
1. AURIX TC4x虛擬化硬件架構
AURIX TC4x在硬件上全面支持虛擬化技術,包括CPU虛擬化,內存虛擬化,中斷虛擬化,外設虛擬化以及虛擬機之間的IPC通信(如圖1所示)
圖1 AURIX TC4x虛擬化架構
2.CPU虛擬化
2.1 CPU虛擬化的硬件支持
我們知道,CPU的軟件運行狀態通過一套硬件資源簇來管理,圖2是AURIX TC3x 1.6.2內核的硬件資源簇。
圖2 AURIX TC3x內核硬件資源簇
TC4x 內核架構從1.6.2升級到1.8,一個重要的改變就是增加了對虛擬化的支持。為此,TC4x采用了三套硬件資源簇(HRA,HRB和HRHV)來管理CPU的運行(圖3)。
圖3 TC4x硬件資源簇
TC4x最多支持6個CPU,每一個CPU最多支持8個虛擬機。其中,VM0用作Hypervisor,負責調度上層的7個虛擬機(Guest VM),并由硬件資源簇HRHV來管控;VM1是一個實時虛擬機,獨享硬件資源簇HRA;另外6個虛擬機VM2-VM7,共享硬件資源簇HRB,可通過輪詢調度的方式去占用HRB。如圖4所示:
圖4 TC4x硬件資源簇與虛擬機的對應關系
內核復位后,虛擬化功能默認是打開的。通過修改VCON0的EN位,用戶可以去使能或禁用某一個CPU的虛擬化功能。需要注意的是VCON0.EN位具有“write once”的屬性,即在系統的一個上電周期內只能修改一次,二次修改該值無效。
每個CPU同一時刻只能有一個虛擬機運行,用戶可以通過讀取VCON1的CVMN位獲取當前運行的虛擬機的Number。而下一個需要運行的目標虛擬機,則可以通過VCON2的VMN位進行設置。此外,為了支持虛擬機之前的切換,TriCore1.8內核引入了兩個新的指令,RFH(Return from Hypervisor)和HVCALL:
RFH:用于Hypervisor到上層Guest VM的切換。客戶在Hypervisor軟件中調用RFH指令,則可以實現從Hypervisor到其他目標虛擬機的切換。
HVCALL:類似之前TriCore1.6的SYSCALL,用于上層Guest VM到Hypervisor的切換。因為上層VM之間不能直接切換,需要Hypervisor來統一調度,所以上層虛擬機執行完成之后,需要調用HVCALL回到Hypervisor軟件中去。
2.2 虛擬機在CPU中的部署
CPU在復位之后都會先進入VM0(也就是Hypervisor軟件),在Hypervisor中完成硬件資源的初始化后,則開始進行虛擬機的調度,虛擬機在CPU中的部署有如下幾種:
Hypervisor上層只有一個虛擬機VM1運行(圖5.a):類似傳統的CPU,用戶進入VM0之后可以直接切換到VM1,VM1獨享CPU的硬件資源和周期性任務。
Hypervisor上層有兩個虛擬機VM1和VM2運行(圖5.b):用戶需要分別為VM1和VM2分配硬件資源,Hypervisor需要根據客戶的需求調度VM1和VM2。
Hypervisor上層有兩個以上VM運行(圖5.c):由于VM2-VM7是共享一套資源簇HRB,所以每次切換到HRB進行操作時,需要特別指定是哪一個VM進行操作,一般客戶可以通過輪詢的方式去調度HRB里面的虛擬機。
圖5 虛擬機在CPU中的部署
以上是單核的情況,在多核場景下,每一個核都可以靈活地使用不同的虛擬機分配機制來實現整個系統的調度,如圖6所示:
圖6 TC4x多核虛擬化
圖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),具體如何使用可以根據客戶的需求靈活配置。
圖7 虛擬化部署示例
3. 內存虛擬化
在TC2x/TC3x的內核架構中,內存保護都是任務層級的。操作系統通過MPU模塊,對不同任務設置Memory的訪問權限。這一功能在TC4x的內核架構中依然沿用,并且我們將任務層級的MPU保護稱作Level 1 MPU。而當我們使能了虛擬化功能后,對于不同虛擬機之間的訪問保護,則需要額外的MPU保護,我們將不同Guest VM(VM1-VM7)之間的MPU保護稱作Level 2 MPU。如圖8所示:
圖8 TC4x L1/L2 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保護所涉及到的寄存器示意圖。
圖9 L1 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保護所涉及到的寄存器示意圖。
圖10 L2 MPU保護寄存器
需要注意的是,如果系統出現L1 MPU的訪問越界,則會觸發硬件資源的Trap,如果出現L2 MPU訪問的訪問越界,則會觸發Hypervisor的Trap。如果同時違背的L1 MPU和L2 MPU,則會按照L1 MPU的訪問越界響應。
4. 中斷虛擬化
4.1 中斷虛擬化的硬件支持
如下圖所示,是TC3x和TC4x的服務請求控制寄存器(SRC),可以看到對于TC4x的SRC寄存器,除了我們熟悉的優先級配置SRPN,服務請求使能位SRE,以及服務控制類型TOS以外,還額外增加了VM的位域。這表明,對于每一個中斷服務請求節點,用戶可以設置VM0-VM7的選項,從而將中斷的處理映射到某一個CPU的某一個VM中去。
圖11 TC3x/TC4x SRC寄存器對比
4.2 虛擬機的中斷仲裁和響應機制
中斷控制單元ICU會對不同硬件資源簇內部的虛擬機中斷服務請求進行仲裁,虛擬機是否參與仲裁由寄存器VMEMz.VMy的配置決定。仲裁采用輪詢機制,VM0-VM1-VMz依次輪詢,其中VMz表示的是HRB里面的虛擬機,HRB內部也按照輪詢機制進行二級仲裁。當某一個虛擬機參與仲裁之后,其產生的最高優先級的中斷服務請求會更新到VMxn_ICR的PIPN位等待ICU的仲裁。如下圖(圖12)所示:
圖12 虛擬機的中斷仲裁
此外,虛擬機的中斷還支持搶占功能,用戶可以對每一個虛擬機的中斷設置搶占閾值,只有高于該閾值的優先級中斷才可以搶占當前的虛擬機中斷。該功能可通過配置VMn_PETHRESH寄存器的的PE_THRESH位域實現。
整個虛擬機的中斷處理流程如下(圖13):
當產生中斷的響應虛擬機為當前正在運行的虛擬機時,則不需要做任何的虛擬機切換,只需要確認當前VM的中斷使能位VMn_ICR.IE置1,且其PIPN號大于正在運行的虛擬機的中斷優先級號,則直接處理新的中斷,否則新的中斷將處于Pending狀態。該機制適用于VM0,VM1以及VM2-7。
當產生中斷的響應虛擬機是Hypervisor,而當前正運行在VM1或者VM2-7時,則需要判斷新中斷的PIPN號是否大于Hypervisor的搶占閾值,如果大于搶占閾值且大于當前的CCPN號,則可以直接切到Hypervisor中執行新的中斷,否則新的中斷將處于Pending狀態。
當產生中斷的響應虛擬機是VM1,而當前正運行在VM2-7,或者反過來的情形,則需要判斷新中斷的PIPN號是否大于正在運行的虛擬機的搶占閾值,如果大于搶占閾值且大于當前的CCPN號,此時會產生一個Hypervisor的Trap,然后在該Trap中做好虛擬機的配置工作,再切到新的虛擬機之后進行中斷處理,否則新的中斷將處于Pending狀態。
當產生的中斷響應虛擬機時VM2-7,而當前正運行在VM2-7不同于之前虛擬機之中,則需要判斷新中斷的PIPN號是否大于正在運行的虛擬機的搶占閾值,如果大于搶占閾值且大于當前的CCPN號,此時會產生一個的Trap,然后在該Trap中進行虛擬機的Swap操作,再切到新的虛擬機之后進行中斷處理,否則新的中斷將處于Pending狀態。
圖13 虛擬機的中斷處理流程
5. 外設虛擬化
外設的訪問權限是通過ACCEN寄存器來實現的,只有被ACCEN選中的Master才運行訪問該外設的資源。TC3x中Master用6個bit的Tag ID表示。在TC4x中,我們對Master的定義做了額外的擴展,除了依據TAG ID以外,還額外增加了VM ID和PRS ID,客戶可以設置任意CPU的任意VM對外設的訪問權限。如下圖所示:
圖14 TC3x/TC4x外設寄存器保護
此外,TC4x針對原有的和SafetyEndinit 機制也做了修改,新的PROT和PROTE寄存器保護機制會兼顧不同虛擬機的寄存器權限設置,將寄存器修改的權限下發到VM層級。如下圖所示:
圖15 寄存器修改權限
6. IPC通信
區別于之前的核間通信,引入虛擬機之后,還會涉及到虛擬機之間的通信(圖16)。虛擬機直接按的通信一般可采用Share memory的方式。利用之前章節介紹的內存虛擬化機制,給不同虛擬機開辟一塊共享內存用于信息交互。
圖16 虛擬機的IPC通信
7. 虛擬化軟件開發流程和例程
7.1 虛擬化軟件開發流程
一般來講,虛擬化軟件的開發可以分為四個步驟(圖17):
1. 需求定義
首先,客戶需要根據項目的實際需求,做系統級的資源分配。將不同的軟件分配到不同的CPU,以及CPU內部不同的VM中去。
2. Hypervisor軟件配置
有了最基本的硬件資源分配之后,客戶需要開發一個統一的Hypervisor軟件去管理和調度不同的虛擬機。
配置:包括對外設資源的分配,內存保護的設置以及中斷資源的分配等
調度:根據客戶的需求,設置不同的調度策略,如基于時間觸發的調度或者基于事件響應的調度策略。
3.虛擬機開發
Hypervisor軟件開發完成之后,不同的虛擬機開發團隊基于Hypervisor的配置,獨立開發各自的應用,彼此之前沒有任何外設,內存,中斷的相互干擾。開發完成后,需要基于Hypervisor的調度策略做虛擬機層級的集成測試,以驗證虛擬機應用的基本功能和可靠性。
4.系統集成測試
不同虛擬機開發團隊將各自的虛擬機集成到ECU中去,基于Hypervisor做系統級的集成測試,以驗證整體功能的完整性和可靠性。
圖17 虛擬機軟件開發流程
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_Loop_Back_Mode_Virtualized兩個工程。兩個工程的切換需要通過Ifx_Cfg.h里面的IFX_CFG_HYPERVISOR_STANDALONE完成。如圖18所示:
圖18 ADS中Hypervisor Demo介紹
7.2.2 Demo工程的啟動流程
以All-in-one工程為例,下面是其啟動流程(圖19):
上電之后首先會運行芯片內部的boot,之后跳轉的VM0的Start函數跑SSW軟件,SSW軟件和TC3x的啟動流程類似,包括BIST測試,PLL的初始化,CSA的配置,Trap和中斷向量表的配置等待
之后就正式開始Hypervisor軟件的執行,主要包括對每一個core的初始化配置,L2的MPU保護,各個虛擬機的中斷配置,調度策略的初始化等等。之后就確定下一個需要運行的目標虛擬機VM1,調用RFH指令切到VM1虛擬機
開始執行VM1里面的任務,在完成任務之后重新切回到Hypervisor里面進行下一次虛擬機的調度
圖19 Hypervisor軟件啟動流程
7.2.3 Hypervisor的調度策略
該Demo支持兩種調度策略(圖20):
Counter Based:基于counter計數(事件觸發)的調度策略,當Guest VM中的代碼運行到某個counter值的時候,通過調用HVCALL切回Hypervisor,從而完成本次虛擬機的調度
Timer-interrupt based:基于STM定時器中斷(時間觸發)的調度策略,STM的中斷響應配置為Hypervisor,當在Guest VM里面運行到某一個時刻,STM觸發中斷,此時non running VM的中斷會觸發Hypervisor Trap進入到Hypervisor,Hypervisor Trap的地址對應著調度表的地址,從而進行下一次調度。
圖20 Hypervisor調度策略
該Demo可以實現多個虛擬機的輪詢調度,客戶可以根據自身的需求靈活地配置Hypervisor,實現適合自己項目開發的虛擬機配置和軟件調度策略。
總結
本文首先介紹了TC4x的硬件對虛擬化的全面支持,包括對CPU,Memory,中斷,外設的虛擬化,以及虛擬機之間的IPC通信。其次,從實際項目開發的角度,介紹了嵌入式虛擬化的開發流程以及Hypervisor的兩種調度策略。嵌入式虛擬化的引入,可以幫助可以更好地實現資源分配和安全隔離,幫助客戶節省更多開發和集成的成本。
-
嵌入式
+關注
關注
5094文章
19183瀏覽量
307774 -
虛擬化
+關注
關注
1文章
384瀏覽量
29859 -
虛擬機
+關注
關注
1文章
946瀏覽量
28436 -
Aurix
+關注
關注
1文章
72瀏覽量
10968
原文標題:AURIX? TC4x虛擬化技術詳解
文章出處:【微信號:駿龍電子,微信公眾號:駿龍電子】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論