臨時頁表分析
MMU開啟前,需要建立好kernel、dtb、trampoline等頁表。以便MMU開啟后,并且在內存管理模塊運行之前,kernel可以正常初始化,dtb可以正常地被解析。這部分頁表都是臨時頁表,最終的頁表在setup_vm_final()建立。
臨時頁表創建順序:
首先為fixmap創建早期的PGD、PMD,這時PGD使用early_pg_dir
。然后對從kernel開始的前2M內存建立二級頁表,此時PGD使用trampoline_pg_dir
,為這2M建立的頁表也叫作superpage
。再然后,對整個kernel創建二級頁表,此時PGD使用early_pg_dir
。最后為dtb預留4M大小創建二級頁表。
頁表創建函數
create_pgd_mapping()
void __init create_pgd_mapping(pgd_t *pgdp,
uintptr_t va, phys_addr_t pa,
phys_addr_t sz, pgprot_t prot)
pgdp
:PGD頁表
va
:虛擬地址
pa
:物理地址
sz
:映射大小,PGDIR_SIZE或PMD_SIZE或PTE_SIZE
prot
:PAGE_KERNEL_EXEC/PAGE_KERNEL表示當前是最后一級頁表,否則pa代表下一級頁表的物理地址
create_pmd_mapping()
static void __init create_pmd_mapping(pmd_t *pmdp,
uintptr_t va, phys_addr_t pa,
phys_addr_t sz, pgprot_t prot)
pmdp
:PMD頁表
va
:虛擬地址
pa
:物理地址
sz
:映射大小,PMD_SIZE或PAGE_SIZE
prot
:權限,PAGE_KERNEL_EXEC/PAGE_KERNEL表示當前是最后一級頁表,否則pa代表下一級頁表的物理地址
create_pte_mapping()
static void __init create_pte_mapping(pte_t *ptep,
uintptr_t va, phys_addr_t pa,
phys_addr_t sz, pgprot_t prot)
ptep
:PTE頁表
va
:虛擬地址
pa
:物理地址
sz
:映射大小,PAGE_SIZE
prot
:權限,PAGE_KERNEL_EXEC/PAGE_KERNEL表示當前是最后一級頁表,否則pa代表下一級頁表的物理地址
使用舉例
例如,將虛擬地址PAGE_OFFSET映射到物理地址pa,映射大小為4K,創建三級頁表PGD、PMD和PTE:
create_pgd_mapping(early_pg_dir,PAGE_OFFSET,
(uintptr_t)early_pmd,PGDIR_SIZE,PAGE_TABLE);
create_pmd_mapping(early_pmd,PAGE_OFFSET,
(uintptr_t)early_pte,PGDIR_SIZE,PAGE_TABLE);
create_pte_mapping(early_pte,PAGE_OFFSET,
(uintptr_t)pa,PAGE_SIZE,PAGE_KERNEL_EXEC);
這樣創建后,MMU就會根據PAGE_OFFSET在PGD中找到PMD,然后再PMD中找到PTE,最后取出物理地址。
-
Linux
+關注
關注
87文章
11345瀏覽量
210417 -
函數
+關注
關注
3文章
4346瀏覽量
62979 -
RISC
+關注
關注
6文章
465瀏覽量
83877
發布評論請先 登錄
相關推薦
如何使用RISC-V創建自定義處理器
![如何使用<b class='flag-5'>RISC-V</b><b class='flag-5'>創建</b>自定義處理器](https://file.elecfans.com/web1/M00/EA/81/o4YBAGB2noOAabLKAAC_5vztIvQ781.png)
RISC-V Linux開發環境腳本
risc-v的發展歷史
《RISC-V能否復制Linux 的成功?》
基于risc-v架構的芯片與linux系統兼容性討論
科普RISC-V生態架構(認識RISC-V)
RISC-V-Reader-Chinese-v2p1 RISC-V手冊(中文) RISC-V開源指令集的指南
我了解的RISC-V
RISC-V 發展
RISC-V MCU開發 (二):工程創建與管理
![<b class='flag-5'>RISC-V</b> MCU開發 (二):工程<b class='flag-5'>創建</b>與管理](https://file.elecfans.com/web1/M00/D9/4E/pIYBAF_1ac2Ac0EEAABDkS1IP1s689.png)
專家力薦|《嵌入式系統原理與開發——基于RISC-V和Linux系統》新書發售
![專家力薦|《嵌入式系統原理與開發——基于<b class='flag-5'>RISC-V</b>和<b class='flag-5'>Linux</b>系統》新書發售](https://file.elecfans.com/web2/M00/1A/02/poYBAGF47iiANcvqAABSphpOXQU436.jpg)
評論