0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

RISC-V Linux的页表创建

麦辣鸡腿堡 ? 来源:嵌入式Linux充电站 ? 作者:Vincent ? 2023-10-08 11:14 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

临时页表分析

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
    +关注

    关注

    88

    文章

    11535

    浏览量

    214882
  • 函数
    +关注

    关注

    3

    文章

    4388

    浏览量

    65310
  • RISC
    +关注

    关注

    6

    文章

    482

    浏览量

    85173
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    如何使用RISC-V创建自定义处理器

    采用RISC-V来替代其自定义体系结构。该体系结构吸引人的一个关键特征是,CPU开发人员可以在不牺牲为基本标准创建的工具和库的适用性的情况下,使RISC-V功能适应其需求。适应的关键在于了解R
    的头像 发表于 04-14 15:55 ?4576次阅读
    如何使用<b class='flag-5'>RISC-V</b><b class='flag-5'>创建</b>自定义处理器

    RISC-V Linux开发环境脚本

    比较多的RISC-V SOC Linux开发环境使用CMake/Makefile,虽然也知道些怎么用,但有没完整系统的这方面学习资料?如语法、脚本链接结构等,可以分享下深入学习
    发表于 03-31 12:48

    risc-v的发展历史

    RISC-V的发展历史可以追溯到2006年左右,当时David Patterson和其他研究者开始探索创建一个开放和可扩展的指令集架构(ISA)。以下是RISC-V发展的主要里程碑: 一、起源与初步
    发表于 07-29 17:20

    RISC-V能否复制Linux 的成功?》

    的产品,Linux成为开源软件发展的基石。 这种成功是否可以复制到开源硬件上呢?RISC-V这样的指令集架构(ISA)是否也可以像Linux内核作为开源软件的基础一样,成为开源硬件发展的基石呢? 这个
    发表于 11-26 20:20

    基于risc-v架构的芯片与linux系统兼容性讨论

    一直对基于RISC-V架构的芯片与Linux系统的兼容性比较感兴趣,查了各种资料,众说纷纭,在此整理一下学习内容,以备后用。这个复杂而重要的话题,涉及多个方面的考量。下面谈谈我的学习总结
    发表于 11-30 17:20

    科普RISC-V生态架构(认识RISC-V)

    RISC-V,逐步完成全线产品迁移到RISC-V定制架构;MicroSemi提供基于Risc-V+Linux+CNN加速器的AI解决方案;印度***则大力资助基于RISC-V的处理器项
    发表于 08-02 11:50

    RISC-V-Reader-Chinese-v2p1 RISC-V手册(中文) RISC-V开源指令集的指南

    RISC-V 手册 一本开源指令集的指南 本书是由 RISC-V 设计者 DAVID PATTERSON等亲自写的书。书写的非常精彩,和Risc-V一样非常简洁明了,没有废话,书本身也不厚,114
    发表于 04-22 18:04

    我了解的RISC-V

    几十条指令。 RISC-V的规范文档仅有145,而“特权架构文档”的篇幅也仅为91。 易于移植*nix 现代操作系统都做了特权级指令和用户级指令的分离,特权指令只能操作系统调用,而用户级指令才能
    发表于 03-19 10:52

    RISC-V 发展

    RISC-V指令集有RV32I、RV32E、RV64I、RV64E、RV64I等等,RV代表RISC-V,32/64代32位或64位,I和E都是基本指令集,在I和E的基础上,可以添加D(双精度浮点扩展
    发表于 04-14 10:18

    RISC-VRISC-V AI的未来(特邀讲座)

    主题演讲:RISC-VRISC-V AI的未来(特邀讲座)ppt分享
    发表于 07-14 17:15 ?18次下载

    RISC-V设计支持工具,支持RISC-V技术的基础

    RISC-V设计支持工具,支持RISC-V技术的基础 ppt分享
    发表于 07-14 17:15 ?22次下载

    Arch Linux RISC-V 端口及相关作品简介

    Arch Linux RISC-V 端口及相关作品简介 演讲ppt分享
    发表于 07-17 16:34 ?6次下载

    创建源码分析RISC-V Linux

    创建源码分析 RISC-V Linux启动,经历了两次页
    的头像 发表于 10-08 11:22 ?1212次阅读

    专家力荐|《嵌入式系统原理与开发——基于RISC-VLinux系统》新书发售

    当前,嵌入式系统已成为智能设备的核心之一,RISC-V+Linux的开源力量为嵌入式系统注入强大的创新动力。作为中国RISC-V软硬件生态领导者,赛昉科技与业界专家合作推出《嵌入式系统原理与开发
    的头像 发表于 07-24 08:20 ?1166次阅读
    专家力荐|《嵌入式系统原理与开发——基于<b class='flag-5'>RISC-V</b>和<b class='flag-5'>Linux</b>系统》新书发售

    SOPHGO RISC-V SoC Linux Kernel 社区邮件列表建立,欢迎加入开源社区为RISC-V生态完善添砖加瓦

    SOPHGO RISC-V SoC Linux Kernel 社区邮件列表建立,欢迎加入开源社区为RISC-V生态完善添砖加瓦
    的头像 发表于 02-14 08:34 ?488次阅读
    SOPHGO <b class='flag-5'>RISC-V</b> SoC <b class='flag-5'>Linux</b> Kernel 社区邮件列表建立,欢迎加入开源社区为<b class='flag-5'>RISC-V</b>生态完善添砖加瓦