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中,不會寫入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
設(shè)計(jì)資源 培訓(xùn) 開發(fā)板 精華推薦
- 用于光網(wǎng)絡(luò)的光收發(fā)器
- AD8616ARZ-REEL 二階低通濾波器運(yùn)算放大器的典型應(yīng)用電路
- 磁懸浮月球燈
- 【語音識別】CI1103離線語音識別模塊
- A8586KLJTR-T 寬輸入電壓、可調(diào)頻率、3.5A 降壓穩(wěn)壓器的典型應(yīng)用電路
- LTC3588IMSE-1 熱電能量收集器的典型應(yīng)用電路
- AD5307 4 緩沖、8 位 DAC 的典型應(yīng)用,用于對系統(tǒng)中的多個(gè)設(shè)備進(jìn)行解碼
- FlyingRC-F405-SLEEK-V1.0
- 二自由度云臺機(jī)器人控制平臺
- DC988A-C,使用 LT3585EDDB-2、400mA I 輸入、具有可調(diào)輸入電流限制和集成 IGBT 驅(qū)動(dòng)器的閃光燈充電器的演示板
- S3C2440 開發(fā)板實(shí)戰(zhàn)(4):外部中斷
- 日本半導(dǎo)體產(chǎn)業(yè):輝煌不再 優(yōu)勢仍存
- 高性能電源半導(dǎo)體公司MPS勢頭正猛,納入標(biāo)準(zhǔn)普爾 500 指數(shù)
- 比亞迪或?qū)⑾蚴刻m微下單億元級車規(guī)級IGBT
- NVIDIA聯(lián)合半導(dǎo)體三巨頭,顛覆計(jì)算光刻方法學(xué)
- 康普RUCKUS觀點(diǎn):共享頻譜和融合網(wǎng)絡(luò)打造2023年企業(yè)連接新亮點(diǎn)
- 信號發(fā)生器的簡單介紹
- Cadence 發(fā)布面向 TSMC 3nm 工藝的 112G-ELR SerDes IP 展示
- 面壁智能端側(cè)大模型首日上線,英特爾工程師聯(lián)合優(yōu)化實(shí)現(xiàn)2.2倍推理效率躍升
- 瞄準(zhǔn)車規(guī)級碳化硅,理想發(fā)表重要成果
- 車規(guī)級MCU國內(nèi)替代提速
- 博世新獲國內(nèi)頭部車企座艙域控項(xiàng)目定點(diǎn)
- 首款測量電動(dòng)汽車電機(jī)溫度的傳感器問世,提升對磁鐵的保護(hù)以減少稀土的使用
- Arm開發(fā)出計(jì)算子系統(tǒng) 以加速汽車設(shè)計(jì)的下一代AI芯片的開發(fā)
- 福特汽車申請新專利 或?qū)崿F(xiàn)車庫定向音樂播放
- 泊車場景一定需要超聲波嗎?
- 同星新一代TC1055 Pro開啟車載網(wǎng)絡(luò)測試新時(shí)代
- 福特汽車申請新專利 或?qū)⑴鋫浒踩ㄗ粉櫹到y(tǒng)
- 滁州市半導(dǎo)體產(chǎn)業(yè)聯(lián)盟成立
- 美國18年第一季度新增126兆瓦時(shí)的住宅儲能 創(chuàng)下了記錄
- 樂鑫連續(xù)三年被 Gartner 物聯(lián)網(wǎng)酷供應(yīng)商榜單引用
- 年增長31.8%,環(huán)球晶前五個(gè)月賺翻了!
- 紅米6手機(jī)6月13日北京發(fā)布 劉海屏+雙攝組合
- 機(jī)器人將在中國加速發(fā)展,既能看病也能巡邏
- 什么是鋰電池鋁塑膜?它的作用是什么?
- 智能汽車基礎(chǔ)腦!國汽智控發(fā)布1.0版本
- 鈷奶奶”再發(fā)威 動(dòng)力電池廠商還要“受虐”多久?
- 從零到一,MEMS激光雷達(dá)的車規(guī)量產(chǎn)夢想照進(jìn)現(xiàn)實(shí)