日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

1 ARMv8存儲管理

1.1 Aarch64 Linux中的內(nèi)存布局

ARMv8架構(gòu)可以支持48位虛擬地址,并配置成4級頁表(4K頁),或者3級頁表(64K頁)。而本Linux系統(tǒng)只使用39位虛擬地址(512G內(nèi)核,512G用戶),配置成3級頁表(4K頁)或者2級頁表(64K頁)


用戶空間的地址63:39位都置零,內(nèi)核空間地址63:39都置一,虛擬地址的第63位可以用來選擇TTBRx。swapper_pg_dir只包含內(nèi)核全局映射,用戶的pgd包含用戶(非全局)映射。swapper_pg_dir地址在TTBR1中,不會(huì)寫入TTBR0中。


AArch64Linux內(nèi)存布局:


Start                                 End                             Size                     Use


--------------------------------------------------------------------------------------------------


0000000000000000         0000007fffffffff      512GB          user


 


ffffff8000000000             ffffffbbfffcffff           ~240GB       vmalloc


 


ffffffbbfffd0000               ffffffbcfffdffff         64KB            [guardpage]


 


ffffffbbfffe0000               ffffffbcfffeffff         64KB            PCII/O space


 


ffffffbbffff0000               ffffffbcffffffff          64KB            [guard page]


 


ffffffbc00000000             ffffffbdffffffff       8GB               vmemmap


 


ffffffbe00000000             ffffffbffbffffff         ~8GB           [guard,future vmmemap]


 


ffffffbffc000000                     ffffffbfffffffff            64MB           modules


 


ffffffc000000000             ffffffffffffffff                  256GB          memory


1.2 AArch64的虛擬地址格式

1.2.1 4K頁時(shí)的虛擬地址

 


1.2.2 64K頁時(shí)的虛擬地址


 



2 head.S頁表建立過程分析

2.1 頁表建立函數(shù)__create_page_tables

該函數(shù)用于在內(nèi)核啟動(dòng)時(shí),為FDT(設(shè)備樹)、內(nèi)核鏡像創(chuàng)建啟動(dòng)所必須的頁表。等內(nèi)核正常運(yùn)行后,還需運(yùn)行create_mapping為所有的物理內(nèi)存創(chuàng)建頁表,這將覆蓋__create_page_tables所創(chuàng)建的頁表。


內(nèi)核開始運(yùn)行時(shí)創(chuàng)建頁表源文件:arm64/kernel/head.Sline345


/*


 * Setup the initial page tables. We only setup the barest amount which is


 * required to get the kernel running. The following sections are required:


 *   -identity mapping to enable the MMU (low address, TTBR0)


 *   -first few MB of the kernel linear mapping to jump to once the MMU has


 *    been enabled, including the FDT blob (TTBR1)


 */


__create_page_tables:


          pgtbl     x25, x26,x24                         //idmap_pg_dir and swapper_pg_dir addresses


 


          /*


           * 清空新建的兩個(gè)頁表TTBR0,TTBR1


           */


          mov       x0,x25


          add       x6,x26, #SWAPPER_DIR_SIZE


1:        stp       xzr,xzr, [x0], #16


          stp       xzr,xzr, [x0], #16


          stp       xzr,xzr, [x0], #16


          stp       xzr,xzr, [x0], #16


          cmp       x0,x6


          b.lo      1b


 


          ldr       x7,=MM_MMUFLAGS


 


          /*


           * Create the identity mapping.


           */


          add       x0, x25,#PAGE_SIZE                   // sectiontable address


          adr       x3, __turn_mmu_on            // virtual/physical address


          create_pgd_entry x25, x0, x3, x5, x6  //展開見1.1.3


          create_block_map x0, x7, x3, x5, x5, idmap=1


 


          /*


           * Map the kernel image (starting withPHYS_OFFSET).


           */


          add       x0,x26, #PAGE_SIZE                   //section table address


          mov       x5,#PAGE_OFFSET


          create_pgd_entry x26, x0, x5, x3, x6


          ldr       x6,=KERNEL_END - 1


          mov       x3,x24                               // physoffset


          create_block_map x0, x7, x3, x5, x6


 


          /*


           * Map the FDT blob (maximum 2MB; must bewithin 512MB of


           * PHYS_OFFSET).


           */


          mov       x3,x21                               // FDTphys address


          and       x3,x3, #~((1 << 21) - 1)    // 2MBaligned


          mov       x6,#PAGE_OFFSET


          sub       x5,x3, x24                           //subtract PHYS_OFFSET


          tst       x5,#~((1 << 29) - 1)                 //within 512MB?


          csel      x21,xzr, x21, ne            // zero the FDTpointer


          b.ne      1f


          add       x5,x5, x6                            // __va(FDTblob)


          add       x6,x5, #1 << 21             // 2MB forthe FDT blob


          sub       x6,x6, #1                            //inclusive range


          create_block_map x0, x7, x3, x5, x6


1:


          ret


ENDPROC(__create_page_tables)


 


 


2.1.1  pgtbl   x25, x26, x24分析

pgtbl是個(gè)宏,定義如下:


arm64/kernel/head.S line55


          .macro    pgtbl,ttb0, ttb1, phys


          add       ttb1,phys, #TEXT_OFFSET - SWAPPER_DIR_SIZE


          sub       ttb0,ttb1, #IDMAP_DIR_SIZE


          .endm


pgtbl               x25,x26, x24  //展開后如下


add                x26,x24, #TEXT_OFFSET -SWAPPER_DIR_SIZE


sub                x25,x26,#IDMAP_DIR_SIZE


 


其中各變量定義如下:


#defineSWAPPER_DIR_SIZE     (3 * PAGE_SIZE)


#defineIDMAP_DIR_SIZE                (2 *PAGE_SIZE)


說明:


1、關(guān)于TTBR0、TTBR1的介紹見ARM ARM 手冊的Page B4-1708


2、x25中存TTBR0(TTBR0 holds the base address of translation table 0)的地址;


3、X26存TTBR1(TTBR1 holds the base address of translation table 1)地址;


4、X24 存PHYS_OFFSET,/* PHYS_OFFSET- the physical address of the start of memory. */


    #definePHYS_OFFSET      ({ memstart_addr; })


5、TEXT_OFFSET是Bootloader啟動(dòng)時(shí)傳進(jìn)來的參數(shù),是內(nèi)核Image加載時(shí)相對于RAM起始地址的偏移量


6、PAGE_OFFSEST:the virtual address of the start of the kernel image.


 


 


 



圖1  pgtbl宏分析


 


2.1.2 MM_MMUFLAGS解釋

在文件arm64/kernel/head.S line71:


/*


 * Initial memory map attributes.


 */


#ifndefCONFIG_SMP


#definePTE_FLAGS      PTE_TYPE_PAGE | PTE_AF


#definePMD_FLAGS     PMD_TYPE_SECT | PMD_SECT_AF


#else


#definePTE_FLAGS      PTE_TYPE_PAGE | PTE_AF |PTE_SHARED


#definePMD_FLAGS     PMD_TYPE_SECT | PMD_SECT_AF| PMD_SECT_S


#endif


 


#ifdefCONFIG_ARM64_64K_PAGES


#defineMM_MMUFLAGS   PTE_ATTRINDX(MT_NORMAL) |PTE_FLAGS


#defineIO_MMUFLAGS      PTE_ATTRINDX(MT_DEVICE_nGnRE)| PTE_XN | PTE_FLAGS


#else


#defineMM_MMUFLAGS   PMD_ATTRINDX(MT_NORMAL) |PMD_FLAGS


#defineIO_MMUFLAGS      PMD_ATTRINDX(MT_DEVICE_nGnRE)| PMD_SECT_XN | PMD_FLAGS


#endif


 


根據(jù)以上宏定義能明確,MM_MMUFLAGS就是根據(jù)你編譯內(nèi)核時(shí)選定的頁大?。?4K or 4K),設(shè)置MMU。


2.1.3 create_pgd_entry/create_block_map宏解釋

1、create_pgd_entry


/*


 * Macro to populate the PGD for thecorresponding block entry in the next


 * level (tbl) for the given virtual address.


 *


 * Preserves:     pgd,tbl, virt


 * Corrupts:       tmp1,tmp2


 */


      .macro   create_pgd_entry,pgd, tbl, virt, tmp1, tmp2


      lsr   tmp1,virt, #PGDIR_SHIFT

[1] [2] [3]
關(guān)鍵字:ARMv8  aarch64  建立過程 引用地址:ARMv8(aarch64)頁表建立過程詳細(xì)分析

上一篇:關(guān)于ARMv8另外幾個(gè)問題
下一篇:單片機(jī)p0口的工作原理解析

推薦閱讀

在2016年1月的時(shí)候,荷蘭的非營利消費(fèi)者群體Consumentenbond曾對三星提起了訴訟,表示該公司應(yīng)該為手機(jī)提供長至4年的更新支持。根據(jù)BBC 5月31日的一篇報(bào)道,荷蘭的法院已經(jīng)正式宣判三星勝訴,Consumentenbond的請求由于一些無法預(yù)見的情況無法加以執(zhí)行。Consumentenbond曾表示,三星提供軟件更新的時(shí)間應(yīng)該持續(xù)到手機(jī)首發(fā)后四年,或用戶購買兩年后。三星...
據(jù)外媒報(bào)道,蘋果公司公布了一項(xiàng)與其泰坦項(xiàng)目(Project Titan)相關(guān)的專利。該專利系統(tǒng)能在霧天、雪天等低能見度條件下,利用多個(gè)回反射器提高道路標(biāo)志和車輛的可檢測性。例如,如果在暴風(fēng)雪天行駛,路標(biāo)被雪覆蓋,可以使用雷達(dá)的反射系統(tǒng)讀取積雪下的文字,并顯示在車載顯示器和或其他設(shè)備顯示器(iPhone、iPad)上。蘋果公司指出,車輛的能見度對駕駛...
翻譯自——microwavejournal 5G商業(yè)化應(yīng)用正在推動(dòng)新基礎(chǔ)設(shè)施設(shè)計(jì),以適應(yīng)基站數(shù)量的增長。這些單元在寬頻率范圍內(nèi)工作,并且彼此靠得更近,以提供最佳的連接。影響這些設(shè)計(jì)的主要趨勢包括集中式基站日益增加的復(fù)雜性,其中許多基站將包括形成波束的大量多輸入、多輸出(MIMO)天線,這些天線不僅使用低頻低于6 GHz頻段,而且還使用高頻毫米波頻譜。 另一個(gè)...
要說中國汽車板塊市值最高的公司,估計(jì)不少人會(huì)首先想到比亞迪、上汽、吉利等車企。然而并非如此,市值最高的公司是為電動(dòng)車供應(yīng)電池的寧德時(shí)代。在5月31日,寧德時(shí)代開盤大漲5%,股價(jià)逼近430元,市值超過1萬億元,成為創(chuàng)業(yè)板首個(gè)打入萬億俱樂部的上市企業(yè)。并且如果把它看作汽車零配件公司,寧德時(shí)代的市值相當(dāng)于比亞迪、長城及上汽三大汽車企業(yè)的總和。6...

史海拾趣

問答坊 | AI 解惑

arm的流水線

一直以來感覺arm的流水線處理的很有問題  可能是我比較無知吧 但是 不同版本的arm以內(nèi)流水線等級不同導(dǎo)致pc這里很亂 同時(shí)導(dǎo)致了 各個(gè)版本的cpu軟件的不兼容 這樣是不是不利于以后的兼容性啊  x86的話 奔騰也是可以跑486的軟件 ...…

查看全部問答∨

VS2005 C++基于對話框的智能設(shè)備程序,引入頭文件后,增加變量CFtpConnection* m_pFTPConnection;出錯(cuò)

如題:   VS2005里,用VC++建立基于對話框的智能設(shè)備程序,在包含頭文件后,給對話框類增加CFtpConnection* m_pFTPConnection;成員變量,運(yùn)行時(shí)出現(xiàn)如下錯(cuò)誤: 1>------ Build started: Project: test, Configuration: Debug Pocket PC ...…

查看全部問答∨

請教usb主控芯片給usb設(shè)備寫驅(qū)動(dòng)程序的問題?知道的幫幫忙哦!

要做一個(gè)實(shí)時(shí)數(shù)據(jù)采集系統(tǒng),因?yàn)槭且ㄟ^無線方式將采來的數(shù)據(jù)(速率是8Mbits/s)傳給電腦,讓電腦進(jìn)行處理,同時(shí)電腦還可以給這個(gè)系統(tǒng)傳一些控制命令。 由于是無線方式的,同時(shí)數(shù)據(jù)量也比較大,所以就想用無線網(wǎng)卡(支持wifi協(xié)議的)來實(shí)現(xiàn),現(xiàn)在 ...…

查看全部問答∨

Smart Grid and Renewable Energy《智能電網(wǎng)與可再生能源》期刊導(dǎo)讀

Smart Grid and Renewable Energy《智能電網(wǎng)與可再生能源》期刊導(dǎo)讀 ISSN: 2151-481X (Print) 2151-4844 (Online).《智能電網(wǎng)與可再生能源》SGRE免費(fèi)下載網(wǎng)址: http://www.scirp.org/journal/sgre.   Table of Contents(Vol.02 No.02, May ...…

查看全部問答∨

一個(gè)邏輯工程師的成長之路-社招邏輯工程師筆式題庫

最近公司招了很多人,不僅僅硬件在招,軟件也在招人,實(shí)際上,我是非常羨慕軟件的面試人員的,因?yàn)樗麄冇泄P試題。不過是自己出的也好,網(wǎng)上搜的也好,總之軟件的很多知識,是可以通過一份試卷來先考察一下的。我經(jīng)??吹杰浖娜税亚舐氄邘У綍?huì)議室 ...…

查看全部問答∨

為什么晶體管共基極接法適合寬帶放大?

本帖最后由 dontium 于 2015-1-23 11:38 編輯 因?yàn)樗斎腚娮璧蛦?請問誰能知道其中的原因,大概就行的 …

查看全部問答∨

曬WEBENCH設(shè)計(jì)的過程+P10R-005(S)熱電耦傳感器設(shè)計(jì)

本帖最后由 ltbytyn 于 2014-8-16 11:22 編輯 P10R-005(S)熱電耦傳感器設(shè)計(jì) 第一步:打開TI官網(wǎng),進(jìn)入WEBENCH的“傳感器”選項(xiàng)。選擇“熱耦合傳感器”,點(diǎn)擊“開始設(shè)計(jì)”。 第二步:選擇熱電偶傳感器。 首先選擇熱電偶溫度范圍和接合點(diǎn)溫度 ...…

查看全部問答∨

stm32f103rb+usb+fatfs 可行性

最近想利用stm32f103rb的板子做個(gè)u盤,以此來加強(qiáng)對usb和fatfs 格式的理解。 用的是外接的一個(gè)spi flash。 網(wǎng)上資料是很多啦,但大多用的是zet6的,用rbt6的話都提示內(nèi)存不夠 如圖: 附件是所用例程,請哪位大神幫忙看看,怎么改才可在RBT6中運(yùn) ...…

查看全部問答∨
小廣播
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號

 
EEWorld服務(wù)號

 
汽車開發(fā)圈

 
機(jī)器人開發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號 京ICP備10001474號-1 電信業(yè)務(wù)審批[2006]字第258號函 京公網(wǎng)安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved