女人被狂躁到高潮视频免费无遮挡,内射人妻骚骚骚,免费人成小说在线观看网站,九九影院午夜理论片少妇,免费av永久免费网址

當前位置:首頁 > > 嵌入式IoT

1.概述

armv8 mmu頁表結(jié)構(gòu)比較復雜,總體說來可以將MMU分為以下幾個部分:


(1)虛擬地址(VA)為48位,而一般只使用到39位(512G內(nèi)核,512G用戶)


(2)可以配置成3級頁表(64K頁)或者4級頁表(4K頁)


最高的地址位是48為的地址,用4級頁表進行管理。


用戶空間的[63:39]都為零,而內(nèi)核空間的[63:39]都是1。


虛擬地址的63位可以用來選擇TTBRx。


2.虛擬地址格式

按照虛擬地址格式可以分為以下幾種:


4K時頁表的映射


64K時頁表的映射


3.頁表映射過程


如果要理解ARM64的映射過程,需要搞清楚的是


目前基于ARMv8-A架構(gòu)的處理器最大可支持到48根地址線,也就是尋址2^48的虛擬地址空間。即虛擬地址空間范圍為 0x0000 0000 0000 0000 ~ 0x0000 FFFF FFFF FFFF,共 256 TB。

由于需要進行4K頁表的映射,所以需要3個512字節(jié)的數(shù)組用來存放表項。


那么我們相信分析一下頁表的映射過程:


第一步:定義一個表的開始地址


main_tll[0]=(unsigned long)((unsigned char*)&T0_L1[0]) | // physical address

PTE_TYPE_PAGE |     // it has the "Present" flag, which must be set, and we have area in it mapped by pages

MEM_ATTR_MEMORY;


其中main_tll為組表的表頭,可以看main_tll[0]可以映射的空間范圍是0到(0x4000 0000 - 1)。


這里由于用不到0x4000 0000以上的空間,所以把這部分空間再進行第二次映射。直接指向了T0_L1表的地址。


T0_L1[0]=(unsigned long)(0) | // physical address

PT_BLOCK |     // we have area in it mapped by pages

MEM_ATTR_MEMORY;


可以看到,這里直接將T0_L1的地址賦值為0,這里表示這0-0x200000這2M空間直接映射。如果此時訪問這2M虛擬地址,則直接1:1訪問到物理地址上去了。


當然,如果想將這個地址映射的更加具體,也就是將這2M的空間,映射成4K,那就需要第三級的頁表項來映射。


現(xiàn)在我們用樹莓派3B來舉例。


樹莓派的串口寄存器地址0x3F200000。只需要映射到后面4k就可以了。


所以,總的表的映射過程如下:


//第一次映射

main_tll[0]=(unsigned long)((unsigned char*)&T0_L1[0]) |   // physical address

PTE_TYPE_PAGE |     // it has the "Present" flag, which must be set, and we have area in it mapped by pages

MEM_ATTR_MEMORY;


//第二次映射

T0_L1[505]=((unsigned long)(&T0_L2[0]) |  // physical address

PT_PAGE |    // map 4K

MEM_ATTR_MEMORY); // different attributes for device memory


//第三次映射

T0_L2[0]=(unsigned long)((505<<21)) | // physical address

PTE_TYPE_PAGE |     // map 4k

MEM_ATTR_MEMORY;


這樣就可以正常的訪問地址空間了,至于為什么有個505,實際上0x3F200000 << 21得到的。21=12+9。


到這里三級映射關(guān)系就建立完成了。這時4K空間已經(jīng)映射完成。


本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
關(guān)閉