optee中MMU内存管理模型-页表的建立模型
思考:
1、__identity_map_init_start 的干啥的,作用? ----看起來是給ALSR用的,暫且不研究
MMU頁表的創建模型,在optee os系統中,有很多種類型的memory,詳見teecore_memtypes,每一種內存類型(或者說每一塊內存)都可以使用tee_mmap_region結構體來描述。而在系統啟動的時候,需要先map一些內存,表示這些內存的結構體,又是放在一個名為static_memory_map的靜態全局數組中的(固定大小的,如MAX index = 23)
在開機啟動階段,事實上就填充了一個結構體,表示__nozi_start - __nozi_end 區間.
總結:在開機階段就map了一小塊內存 : __nozi_start - __nozi_end 區間 ,并且是一一映射哦!!
(1)、teecore_memtypes 和 tee_mmap_region 結構體原型
非常重要的兩個結構體teecore_memtypes和tee_mmap_region
(optee_os/core/include/mm/tee_mmu_types.h)struct tee_mmap_region {unsigned int type; /* enum teecore_memtypes */unsigned int region_size;paddr_t pa;vaddr_t va;size_t size;uint32_t attr; /* TEE_MATTR_* above */ }; (optee_os/core/arch/arm/include/mm/core_mmu.h)enum teecore_memtypes {MEM_AREA_END = 0,MEM_AREA_TEE_RAM,MEM_AREA_TEE_RAM_RX,MEM_AREA_TEE_RAM_RO,MEM_AREA_TEE_RAM_RW,MEM_AREA_NEX_RAM_RW,MEM_AREA_TEE_COHERENT,MEM_AREA_TEE_ASAN,MEM_AREA_IDENTITY_MAP_RX,MEM_AREA_TA_RAM,MEM_AREA_NSEC_SHM,MEM_AREA_RAM_NSEC,MEM_AREA_RAM_SEC,MEM_AREA_IO_NSEC,MEM_AREA_IO_SEC,MEM_AREA_EXT_DT,MEM_AREA_RES_VASPACE,MEM_AREA_SHM_VASPACE,MEM_AREA_TA_VASPACE,MEM_AREA_PAGER_VASPACE,MEM_AREA_SDP_MEM,MEM_AREA_DDR_OVERALL,MEM_AREA_SEC_RAM_OVERALL,MEM_AREA_MAXTYPE };(2)、static_memory_map 靜態全局數組的定義
static struct tee_mmap_region static_memory_map[CFG_MMAP_REGIONS];CFG_MMAP_REGIONS為平臺的配置,如配置 CFG_MMAP_REGIONS = 23
(3)、init_mem_map() 創建頁表
在構造好static_memory_map結構體數組之后,調用init_mem_map() 即可遍歷數組去創建L1 L2 L3頁表, init_mem_map()的原型如下:
static unsigned long init_mem_map(struct tee_mmap_region *memory_map, size_t num_elems, unsigned long seed)其中memory_map為數組的首地址, num_elems為結構體的個數, seed是ALSR(地址隨機)用的種子.
(3)、static_memory_map 數組的填充
總結
以上是生活随笔為你收集整理的optee中MMU内存管理模型-页表的建立模型的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 经典面试题-Linux Kernel面试
- 下一篇: OPTEE的内存管理 : 将内存加入到页