0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

RISC-V Linux的頁表創(chuàng)建

麥辣雞腿堡 ? 來源:嵌入式Linux充電站 ? 作者:Vincent ? 2023-10-08 11:14 ? 次閱讀

臨時(shí)頁表分析

MMU開啟前,需要建立好kernel、dtb、trampoline等頁表。以便MMU開啟后,并且在內(nèi)存管理模塊運(yùn)行之前,kernel可以正常初始化,dtb可以正常地被解析。這部分頁表都是臨時(shí)頁表,最終的頁表在setup_vm_final()建立。

臨時(shí)頁表創(chuàng)建順序:

首先為fixmap創(chuàng)建早期的PGD、PMD,這時(shí)PGD使用early_pg_dir。然后對(duì)從kernel開始的前2M內(nèi)存建立二級(jí)頁表,此時(shí)PGD使用trampoline_pg_dir,為這2M建立的頁表也叫作superpage。再然后,對(duì)整個(gè)kernel創(chuàng)建二級(jí)頁表,此時(shí)PGD使用early_pg_dir。最后為dtb預(yù)留4M大小創(chuàng)建二級(jí)頁表。

頁表創(chuàng)建函數(shù)

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表示當(dāng)前是最后一級(jí)頁表,否則pa代表下一級(jí)頁表的物理地址

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:權(quán)限,PAGE_KERNEL_EXEC/PAGE_KERNEL表示當(dāng)前是最后一級(jí)頁表,否則pa代表下一級(jí)頁表的物理地址

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:權(quán)限,PAGE_KERNEL_EXEC/PAGE_KERNEL表示當(dāng)前是最后一級(jí)頁表,否則pa代表下一級(jí)頁表的物理地址

使用舉例

例如,將虛擬地址PAGE_OFFSET映射到物理地址pa,映射大小為4K,創(chuàng)建三級(jí)頁表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);

這樣創(chuàng)建后,MMU就會(huì)根據(jù)PAGE_OFFSET在PGD中找到PMD,然后再PMD中找到PTE,最后取出物理地址。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Linux
    +關(guān)注

    關(guān)注

    87

    文章

    11182

    瀏覽量

    208534
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4263

    瀏覽量

    62250
  • RISC
    +關(guān)注

    關(guān)注

    6

    文章

    461

    瀏覽量

    83616
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何使用RISC-V創(chuàng)建自定義處理器

    采用RISC-V來替代其自定義體系結(jié)構(gòu)。該體系結(jié)構(gòu)吸引人的一個(gè)關(guān)鍵特征是,CPU開發(fā)人員可以在不犧牲為基本標(biāo)準(zhǔn)創(chuàng)建的工具和庫的適用性的情況下,使RISC-V功能適應(yīng)其需求。適應(yīng)的關(guān)鍵在于了解R
    的頭像 發(fā)表于 04-14 15:55 ?4078次閱讀
    如何使用<b class='flag-5'>RISC-V</b><b class='flag-5'>創(chuàng)建</b>自定義處理器

    RISC-V Linux開發(fā)環(huán)境腳本

    比較多的RISC-V SOC Linux開發(fā)環(huán)境使用CMake/Makefile,雖然也知道些怎么用,但有沒完整系統(tǒng)的這方面學(xué)習(xí)資料?如語法、腳本鏈接結(jié)構(gòu)等,可以分享下深入學(xué)習(xí)
    發(fā)表于 03-31 12:48

    risc-v的發(fā)展歷史

    RISC-V的發(fā)展歷史可以追溯到2006年左右,當(dāng)時(shí)David Patterson和其他研究者開始探索創(chuàng)建一個(gè)開放和可擴(kuò)展的指令集架構(gòu)(ISA)。以下是RISC-V發(fā)展的主要里程碑: 一、起源與初步
    發(fā)表于 07-29 17:20

    科普RISC-V生態(tài)架構(gòu)(認(rèn)識(shí)RISC-V)

    RISC-V,逐步完成全線產(chǎn)品遷移到RISC-V定制架構(gòu);MicroSemi提供基于Risc-V+Linux+CNN加速器的AI解決方案;印度***則大力資助基于RISC-V的處理器項(xiàng)
    發(fā)表于 08-02 11:50

    RISC-V中***會(huì)子活動(dòng)之一:基于RISC-V的鴻蒙開發(fā)板設(shè)計(jì)

    `一、Workshop介紹 首屆RISC-V中***會(huì)(RISC-V World Conference China)將于6月21日在上海科技大學(xué)盛大開幕。 本次峰會(huì)預(yù)計(jì)線下超過1000人、線上
    發(fā)表于 06-03 16:26

    RISC-V-Reader-Chinese-v2p1 RISC-V手冊(cè)(中文) RISC-V開源指令集的指南

    RISC-V 手冊(cè) 一本開源指令集的指南 本書是由 RISC-V 設(shè)計(jì)者 DAVID PATTERSON等親自寫的書。書寫的非常精彩,和Risc-V一樣非常簡潔明了,沒有廢話,書本身也不厚,114
    發(fā)表于 04-22 18:04

    我了解的RISC-V

    幾十條指令。 RISC-V的規(guī)范文檔僅有145,而“特權(quán)架構(gòu)文檔”的篇幅也僅為91。 易于移植*nix 現(xiàn)代操作系統(tǒng)都做了特權(quán)級(jí)指令和用戶級(jí)指令的分離,特權(quán)指令只能操作系統(tǒng)調(diào)用,而用戶級(jí)指令才能
    發(fā)表于 03-19 10:52

    RISC-V 發(fā)展

    。RISC-V指令集有RV32I、RV32E、RV64I、RV64E、RV64I等等,RV代表RISC-V,32/64代32位或64位,I和E都是基本指令集,在I和E的基礎(chǔ)上,可以添加D(雙精度浮點(diǎn)擴(kuò)展
    發(fā)表于 04-14 10:18

    RISC-V規(guī)范的演進(jìn) RISC-V何時(shí)爆發(fā)?

    RISC-V的關(guān)注度越來越高,開源的理念也正在被越來越多的開發(fā)者和公司接受。對(duì)于尚不成熟的RISC-V而言,無論是規(guī)范和技術(shù)的演進(jìn)還是生態(tài)的建設(shè),還有人才和專利都還有不小挑戰(zhàn)。2021年RISC-V
    的頭像 發(fā)表于 02-11 10:10 ?3090次閱讀

    RISC-V MCU開發(fā) (二):工程創(chuàng)建與管理

    RISC-V MCU開發(fā) (二):工程創(chuàng)建與管理MounRiver? Studio(MRS)內(nèi)置了GD、WCH等芯片廠家的RISC-V/ARM以及RISC-V通用指令集系列的芯片工程模
    發(fā)表于 11-26 15:36 ?20次下載
    <b class='flag-5'>RISC-V</b> MCU開發(fā) (二):工程<b class='flag-5'>創(chuàng)建</b>與管理

    RISC-VRISC-V AI的未來(特邀講座)

    主題演講:RISC-VRISC-V AI的未來(特邀講座)ppt分享
    發(fā)表于 07-14 17:15 ?15次下載

    RISC-V設(shè)計(jì)支持工具,支持RISC-V技術(shù)的基礎(chǔ)

    RISC-V設(shè)計(jì)支持工具,支持RISC-V技術(shù)的基礎(chǔ) ppt分享
    發(fā)表于 07-14 17:15 ?12次下載

    Arch Linux RISC-V 端口及相關(guān)作品簡介

    Arch Linux RISC-V 端口及相關(guān)作品簡介 演講ppt分享
    發(fā)表于 07-17 16:34 ?6次下載

    創(chuàng)建源碼分析RISC-V Linux

    創(chuàng)建源碼分析 RISC-V Linux啟動(dòng),經(jīng)歷了兩次頁
    的頭像 發(fā)表于 10-08 11:22 ?706次閱讀

    專家力薦|《嵌入式系統(tǒng)原理與開發(fā)——基于RISC-VLinux系統(tǒng)》新書發(fā)售

    當(dāng)前,嵌入式系統(tǒng)已成為智能設(shè)備的核心之一,RISC-V+Linux的開源力量為嵌入式系統(tǒng)注入強(qiáng)大的創(chuàng)新動(dòng)力。作為中國RISC-V軟硬件生態(tài)領(lǐng)導(dǎo)者,賽昉科技與業(yè)界專家合作推出《嵌入式系統(tǒng)原理與開發(fā)
    的頭像 發(fā)表于 07-24 08:20 ?429次閱讀
    專家力薦|《嵌入式系統(tǒng)原理與開發(fā)——基于<b class='flag-5'>RISC-V</b>和<b class='flag-5'>Linux</b>系統(tǒng)》新書發(fā)售