init_pg_dir 的大小及作用

news2024/12/28 19:05:05

init_pg_dir 的大小

vmlinux.lds.S 中

在vmlinux.lds.S 中,有

init_pg_dir = .;
. += INIT_DIR_SIZE;
init_pg_end = .;

/*include/asm/kernel-pgtable.h*/
#define EARLY_ENTRIES(vstart, vend, shift) \                                     
    ((((vend) - 1) >> (shift)) - ((vstart) >> (shift)) + 1 + EARLY_KASLR)

#define EARLY_PGDS(vstart, vend) (EARLY_ENTRIES(vstart, vend, PGDIR_SHIFT))
#define EARLY_PUDS(vstart, vend) (0)
#define EARLY_PMDS(vstart, vend) (EARLY_ENTRIES(vstart, vend, SWAPPER_TABLE_SHIFT))

#define EARLY_PAGES(vstart, vend) ( 1           /* PGDIR page */                \
            + EARLY_PGDS((vstart), (vend))  /* each PGDIR needs a next level page table */  \
            + EARLY_PUDS((vstart), (vend))  /* each PUD needs a next level page table */    \
            + EARLY_PMDS((vstart), (vend))) /* each PMD needs a next level page table */

#define INIT_DIR_SIZE (PAGE_SIZE * EARLY_PAGES(KIMAGE_VADDR + TEXT_OFFSET, _end))
假设 vstart= 0xffff800010000000, vend= 0xffff80001210a000
EARLY_PGDS = ((0xffff80001210a000 - 1) >> 39)  -  (0xffff800010c94000 >> 39) + 1 + 1 = 2
EARLY_PUDS = 0
EARLY_PMDS = ((0xffff80001210a000 - 1) >> 30)  -  (0xffff800010c94000 >> 30) + 1 + 1 = 2

INIT_DIR_SIZE = 0x1000 * (1 + 2 + 0 + 2) = 0x5000 # 这里为啥和System.map 中的不一样?

从System.map 中可以看到

127291 ffff800012105000 B init_pg_dir                                                                                                                                                                           
127292 ffff80001210a000 B _end                                                          
127293 ffff80001210a000 B init_pg_end 

INIT_DIR_SIZE = 0x5000 = 20480

pgtable.h 中

在 arch/arm64/include/asm/pgtable.h 中

extern pgd_t init_pg_dir[PTRS_PER_PGD];

#define PTRS_PER_PGD        (1 << (MAX_USER_VA_BITS - PGDIR_SHIFT)) /* MAX_USER_VA_BITS = 48 */
#define PGDIR_SHIFT     ARM64_HW_PGTABLE_LEVEL_SHIFT(4 - CONFIG_PGTABLE_LEVELS) /* CONFIG_PGTABLE_LEVELS = 4,为页表级数*/

其中,ARM64_HW_PGTABLE_LEVEL_SHIFT(4 - CONFIG_PGTABLE_LEVELS) 得到的是PGD, L0页表索引在64bit 虚拟地址所处的偏移量,即39。详见这里
图一

PTRS_PER_PGD = (1 << (MAX_USER_VA_BITS - PGDIR_SHIFT))
    = pow (2, 48-39)
    = 512

因此 PTRS_PER_PGD 为512,表示PGD 页表中页表项的个数。

至此可以看到在 arch/arm64/include/asm/pgtable.h 中 PTRS_PER_PGD = 0x200 的大小与lds 中的 INIT_DIR_SIZE=0x5000 并不一致。这里值得留意

init_pg_dir 的作用

init_pg_dir 貌似只在head.S 和mmu.c 中有使用。
head.S 做了一些页表映射的工作,mmu.c 中只有对这块内存的释放。
由此看来,应该可以只关注head.S 中的使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/846790.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Zebec Protocol 将进军尼泊尔市场,通过 Zebec Card 推动该地区金融平等

流支付正在成为一种全新的支付形态&#xff0c;Zebec Protocol作为流支付的主要推崇者&#xff0c;正在积极的推动该支付方案向更广泛的应用场景拓展。目前&#xff0c;Zebec Protocol成功的将流支付应用在薪酬支付领域&#xff0c;并通过收购WageLink将其纳入旗下&#xff0c;…

3.7v升压5v4A芯片用什么型号

问&#xff1a;我需要一个能够将3.7V锂电池的电压升压到5V&#xff0c;并且能够提供4A的电流输出的芯片。请问有什么推荐的型号吗&#xff1f; 答&#xff1a;小编为您推荐AH6922B芯片&#xff0c;它具备以下特点来满足您的需求&#xff1a; 1. 输入电压范围适配&#xff1a;…

SAP 计划独立需求屏幕增强(MD61/MD62/MD63)

需求&#xff1a;在计划独立需求界面新增一列自定义字段 效果如下&#xff1a; MD63&#xff1a;显示:&#xff08;注&#xff1a;客户字段在显示界面不可以编辑&#xff09; MD61&#xff1a;创建/MD62&#xff1a;修改&#xff08;注&#xff1a;创建和修改的时候客户字段可…

C语言学习笔记 vscode使用外部console-11

前言 在默认情况下&#xff0c;我们运行C语言程序都是在vscode终端的&#xff0c;在小程序运行时这个是没有问题的&#xff0c;但是当程序变得复杂它就不好用了&#xff0c;这时我们可以将这个终端设置为外部console&#xff0c;这样方便处理更多、更复杂的程序。 步骤 1.点击…

4基础篇:自定义日志

前言 在所有的后端服务中,日志是必不可少的一个关键环节,毕竟日常中我们不可能随时盯着控制台,问题的出现也会有随机性、不可预见性。一旦出现问题,要追踪错误以及解决,需要知道错误发生的原因、时间等细节信息。 之前的需求分析部分,在网关基础代理的服务中,网关作为…

局域网内共享打印机遇到的一些问题

局域网内共享打印机遇到的一些问题 常规共享步骤主机关机后开机&#xff0c;打印机用不起了报错&#xff1a;没有权限使用报错&#xff1a;Windows无法连接到打印机报错&#xff1a;0x0000011b报错&#xff1a;0x00000709 常规共享步骤 win7作为主机使用USB连接打印机&#xf…

Python AI 绘画

Python AI 绘画 本文我们将为大家介绍如何基于一些开源的库来搭建一套自己的 AI 作图工具。 需要使用的开源库为 Stable Diffusion web UI&#xff0c;它是基于 Gradio 库的 Stable Diffusion 浏览器界面 Stable Diffusion web UI GitHub 地址&#xff1a;GitHub - AUTOMATI…

【Git】Git切换地址

如何切换git代码地址&#xff1f; 1、查看当前远程 url git remote -v执行命令后&#xff0c;可以看见当前有2个URL。 远程 URL 在一般情况下有两个&#xff0c;分别是 fetch 和 push。 fetch URL 是用于从远程仓库获取最新版本的数据。当您运行 git fetch 命令时&#xf…

【福建事业单位-数学运算】01 数学推理-基础-特征-非特征数列

【福建事业单位-数学运算】01 数学推理-基础-特征-非特征数列 一、基础数列总结 二、特征数列2.1 多重数列项数多&#xff0c;多于7项总结 2.2机械划分①小数;ab②大数字多&#xff08;三位数、四位数&#xff09;&#xff0c;达到一半或者以上总结 2.3分数数列大通分总结 2.4幂…

成品短视频App源码开发:一步步教你搭建短视频平台

近年来&#xff0c;短视频平台的兴起迅速改变了人们对视频内容的获取方式&#xff0c;成品短视频App源码的开发也因此备受瞩目。对于希望快速搭建短视频平台的创业者来说&#xff0c;使用成品短视频App源码是一个明智的选择。 成品短视频App源码为您提供了一个基于现有技术和功…

ifengDRF版本控制(源码分析)

DRF中版本控制的五种情况(源码分析) 在restful规范中要去&#xff0c;后端的API中需要体现版本。 drf框架中支持5种版本的设置。 1. URL的GET参数传递&#xff08;*&#xff09; 示例: user/?versionv1 # settings.pyREST_FRAMEWORK {"VERSION_PARAM": "…

【vue3】vue3和vue2的区别:

文章目录 Vue3框架的优点特点:一、生命周期:二、组合式api&#xff08;Composition API&#xff09;三、setup函数四、响应式原理1. 原理2. Object.defineProperty的缺陷3.proxy的优势 五、reactive函数和ref函数1. reactive函数》通常使用它复杂类型的响应式数据2. ref函数》使…

ResNet50卷积神经网络输出数据形参分析-笔记

ResNet50卷积神经网络输出数据形参分析-笔记 ResNet50包含多个模块&#xff0c;其中第2到第5个模块分别包含3、4、6、3个残差块 5049个卷积&#xff08;3463)*31和一个全连接层 分析结果为&#xff1a; 输入数据形状:[10, 3, 224, 224] 最后输出结果&#xff1a;linear_0 [10,…

Verilog求log10和log2近似

Verilog求log10和log2近似 Verilog求10对数近似方法&#xff0c;整数部分用位置index代替&#xff0c;小数部分用查找表实现 参考&#xff1a; Verilog写一个对数计算模块Log2(x) FPGA实现对数log2和10*log10

【C++】function包装器

function包装器的使用 function包装器的使用格式 function<返回类型(参数)> #include<iostream> #include<functional> using namespace std;class test { public:static void func1(int a,int b){cout << a b << endl;}void func2(int a, int …

机器学习、深度学习项目开发业务数据场景梳理汇总记录

本文的主要作用是对历史项目开发过程中接触到的业务数据进行整体的汇总梳理&#xff0c;文章会随着项目的开发推进不断更新。 一、MSTAR雷达影像数据 MSTAR&#xff08;Moving and Stationary Target Acquisition and Recognition&#xff09;雷达影像数据集是一种常用的合成…

PowerDesigner数据库设计工具使用笔记

简单记录下这个数据库设计工具的使用&#xff0c;在开发中设计数据库过程用得上&#xff0c;好记性不如烂笔头Q 显示窗口 工具类View >ToolBox 即可 选择数据库SQL语句类型是MySQL还是Orale以及版本 顶部栏中的Database 选中 第一个选项 change current DBMS 更改SQL…

HTML+CSS 改进前端简易响应式登录界面

day5 改进上次的项目 HTMLCSS前端 动态响应用户登录界面_一只名叫Me的猫的博客-CSDN博客 emmet自动创建html模板 在vscode中&#xff0c;空白html文件打入一个感叹号&#xff0c;可以自动创建html模板&#xff0c;避免手搓&#xff08;悲&#xff09;。 上次就是因为手搓导致漏…

基于vant的密码输入框,数字键盘,及金额输入

<template><div><el-button click"showPopup">余额支付</el-button><!--以下是密码输入--><van-popup v-model"passshow"closeableclose-icon-position"top-left"position"bottom":style"{ hei…

情感书单素材库大全,好的文案试试做成视频吧

当我们沉浸在热爱的小说或故事中时&#xff0c;我们会被情感所吸引&#xff0c;感受到其中所包含的情感&#xff0c;这些情感会在我们的内心深处留下印记。情感书单素材库是一个非常棒的资源&#xff0c;可以帮助我们发现那些让我们心动的故事和情感&#xff0c;从而创作出有意…