www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 公眾號(hào)精選 > 嵌入式IoT

1.概述

armv8 mmu頁(yè)表結(jié)構(gòu)比較復(fù)雜,總體說(shuō)來(lái)可以將MMU分為以下幾個(gè)部分:


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


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


最高的地址位是48為的地址,用4級(jí)頁(yè)表進(jìn)行管理。


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


虛擬地址的63位可以用來(lái)選擇TTBRx。


2.虛擬地址格式

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


4K時(shí)頁(yè)表的映射


64K時(shí)頁(yè)表的映射


3.頁(yè)表映射過(guò)程


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


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

由于需要進(jìn)行4K頁(yè)表的映射,所以需要3個(gè)512字節(jié)的數(shù)組用來(lái)存放表項(xiàng)。


那么我們相信分析一下頁(yè)表的映射過(guò)程:


第一步:定義一個(gè)表的開(kāi)始地址


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以上的空間,所以把這部分空間再進(jìn)行第二次映射。直接指向了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空間直接映射。如果此時(shí)訪問(wèn)這2M虛擬地址,則直接1:1訪問(wèn)到物理地址上去了。


當(dāng)然,如果想將這個(gè)地址映射的更加具體,也就是將這2M的空間,映射成4K,那就需要第三級(jí)的頁(yè)表項(xiàng)來(lái)映射。


現(xiàn)在我們用樹(shù)莓派3B來(lái)舉例。


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


所以,總的表的映射過(guò)程如下:


//第一次映射

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;


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


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


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