optee堆Virtualization(hypervisor)的支持
1、一些概念的介紹
optee提供虛擬化的支持, 可以在多個(gè)VMs上的optee os上跑TAs. 一個(gè)VM不能影響到另外一個(gè)VM;
啟用虛擬化支持之后,optee將依賴hypervisor,因?yàn)橹挥衕ypervisor才知道當(dāng)前使用哪個(gè)VM的optee.
hypervisor負(fù)責(zé)創(chuàng)建和銷毀VMs,而且在大多數(shù)場(chǎng)景下, hypervisor會(huì)開機(jī)two-state MMU,所有VMs看到的不是真實(shí)的物理地址,二十IPA(intermediate physical addresses)。
也就說optee只能完成VA到IPA的轉(zhuǎn)換,而IPA到PA的轉(zhuǎn)換需要到hypervisor中完成.
因此,hypervisor應(yīng)該包含一個(gè)了解OP-TEE協(xié)議內(nèi)部?jī)?nèi)容并能夠進(jìn)行轉(zhuǎn)換的組件。我們將該組件稱為"TEE mediator",目前只有XEN hypervisor擁有optee的TEE mediator。
打開CFG_VIRTUALIZATION后,optee將支持虛擬化,當(dāng)然了這時(shí)需要有一個(gè)兼容的hypervisor組件,optee才能正常工作;
CFG_VIRT_GUEST_COUNT決定當(dāng)前支持VMS的最大個(gè)數(shù),安全內(nèi)存就這么一點(diǎn)點(diǎn),支持的VMs越多,那么每個(gè)guest os的可用內(nèi)存就會(huì)越少
2、optee適配hypervisor需要做哪些事情
- 創(chuàng)建optee VMs時(shí),hypervisor需要調(diào)用OPTEE_SMC_VM_CREATED smc通知optee,其中a1參數(shù)是該guest os的VM ID
- 當(dāng)optee VMs銷毀時(shí),hypervisor要發(fā)送OPTEE_SMC_VM_DESTROYED smc到optee中,確保沒有正在運(yùn)行的線程.
- 每一次到optee中的smc,都會(huì)跟上a7參數(shù). 如果是hypervisor調(diào)用optee,該參數(shù)是HYP_CLNT_ID; 如果是optee返回hypervisor,該參數(shù)是VMs ID
- Hypervisor應(yīng)該為所有SMCs執(zhí)行IPA<->PA地址轉(zhuǎn)換。這包括a1-a6寄存器和內(nèi)存中的命令緩沖區(qū)中的兩個(gè)參數(shù)
- Hypervisor應(yīng)該鎖定VM與OP-TEE共享的內(nèi)存頁。這意味著,hypervisor應(yīng)該確保固定的頁面將駐留在原始PA上,只要它與OP-TEE共享。而且它應(yīng)該仍然屬于共享它的VM。例如,hypervisor不應(yīng)該交換此頁面、將所有權(quán)轉(zhuǎn)移到另一個(gè)VM、從VM地址空間取消映射等等。
- hypervisor應(yīng)該正確地處理OP-TEE協(xié)議,因此對(duì)于任何VM來說,它看起來都應(yīng)該是直接使用OP-TEE的。
總結(jié)
以上是生活随笔為你收集整理的optee堆Virtualization(hypervisor)的支持的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: optee内核中栈的介绍(一)
- 下一篇: [crypto]-02-非对称加解密RS