如何打印pmd和*pmd的值
在show_pte 中可以很容易的看出是如何打印pgd/pud/pmd/pte的
void show_pte(struct mm_struct *mm, unsigned long addr)
{
pgd_t *pgd;
if (!mm)
mm = &init_mm;
//打印指针直接有%p就可以了,具体可以看后面实际的效果
pr_alert("pgd = %p\n", mm->pgd);
pgd = pgd_offset(mm, addr);
pr_alert("[%08lx] *pgd=%016llx", addr, pgd_val(*pgd));
do {
pud_t *pud;
pmd_t *pmd;
pte_t *pte;
if (pgd_none(*pgd) || pgd_bad(*pgd))
break;
pud = pud_offset(pgd, addr);
打印64 bit的数据可以用%016llx
printk(", *pud=%016llx", pud_val(*pud));
if (pud_none(*pud) || pud_bad(*pud))
break;
pmd = pmd_offset(pud, addr);
printk(", *pmd=%016llx", pmd_val(*pmd));
if (pmd_none(*pmd) || pmd_bad(*pmd))
break;
pte = pte_offset_map(pmd, addr);
printk(", *pte=%016llx", pte_val(*pte));
pte_unmap(pte);
} while(0);
printk("\n");
}
从show_pte 函数可以看到,首先判断mm_struct *mm 是否为null,如果为null的话,说明是在kernel space,则将init_mm 赋值给mm,init_mm表示kernel space的memory分布。
得到mm_struct *mm 后,通过给定的虚拟地址就可以得到pgd的值
pr_alert("pgd = %p\n", mm->pgd);
pgd = pgd_offset(mm, addr);
pr_alert("[%08lx] *pgd=%016llx", addr, pgd_val(*pgd));
这里mm->pgd表示pgd的之,而pgd_val(*pgd)表示pgd这个指针指向的值
得到pgd后
pud = pud_offset(pgd, addr);
printk(", *pud=%016llx", pud_val(*pud));
if (pud_none(*pud) || pud_bad(*pud))
break;
就可以通过pud_offset的的pud的之,通过pud_val(*pud)可以得到pud这个指针指向的值
pmd和pte都是通过类似kernel已经提供好的函数pmd_offset和pte_offset_map来得到其值
但是在show_pte 中默认只打印了pmd/pud/pte指针指向的值,并没有打印其本身的值,说的有点绕,直接看下面的code
实际效果
得到pmd的虚拟地址是ffff842ffbffd000,减去ffff800000000000,就是对应的物理地址42ffbffd000
如何打印pmd和*pmd的值相关推荐
- 牛客网(剑指offer) 第三题 输入一个链表,从尾到头打印链表每个节点的值。
//输入一个链表,从尾到头打印链表每个节点的值. //解题思路:遍历每一个节点 并将节点放入数组中 最后翻转数组 function printListFromTailToHead($head) {$ ...
- JVM实用参数(三)打印所有XX参数及值
原文地址:https://blog.codecentric.de/en/2012/07/useful-jvm-flags-part-3-printing-all-xx-flags-and-their- ...
- 利用反射打印对象一般成员属性值
为什么80%的码农都做不了架构师?>>> 利用反射打印对象一般成员属性值 public static void printVoOrDtoVal(Object obj){ Str ...
- 一个简单的方式打印数组中的所有值
用简单的方式打印数组中的所有值,即利用 Arrays类的 tostring方法. 调用 Arrays.toString(a),返回一个包含数组元素的字符串,这些元素被放置在括号内,用逗号分隔. 要想打 ...
- Eclipse打印Java的char默认值,出现方框原因
众所周知,Java为char赋值默认值(只有成员变量才会赋值,对于局部变量,不会有默认值),默认值就是'\u0000'.但是,我在Eclipse打印char默认值时,Eclipse的console显示 ...
- python——生成带logo的二维码图片并且保存、控制打印机打印图片二维码、整合打印(获取输入框的值)、打包成exe文件
1.生成带logo的二维码图片并且保存 前提条件:在D盘里有logo.png的图片,生成的二维码图片在D盘里的111.png import qrcode from PIL import Image# ...
- 剑指offer66题 -- 输入一个链表,从尾到头打印链表每个节点的值
class Solution { public: vector<int> printListFromTailToHead(ListNode* head) { /* //变量定义 ...
- String类型的数组打印数组名默认打印出来的是地址值怎么办,怎样打印出数组的元素
String[] arr={"aa","dd"}; arr[0]="dd"; System.out.println(Arrays.toStr ...
- 静态分析工具PMD使用说明
静态分析工具PMD使用说明 目录 静态分析工具PMD使用说明... 1 目录... 2 1. 编写目的... 3 2. PMD简介... 4 3. ...
最新文章
- 用.net中的socket实现文件传输
- 使用容器的正确方式,Docker在雪球的技术实践
- mysql、clickhouse读写分离性能测试
- android数据持久化存储(2)
- C++11新特性之lambda表达式
- python 作用域从大到小排序_Python 内置函数、作用域、闭包、递归
- 安卓案例:注册用户免启动时的广告页面
- 微服务架构开发实战:如何实现微服务的自动扩展?
- stm32g474教程_(完整版)STM32F103通用教程
- Linux/Unix系统下nginx+php安装简明教程
- mac mysql配置jdk_mac开发环境搭建
- http之content-type
- 中国团队入选美国物理学会2018年度国际物理学十大进展
- 路由重分布 rip,eigrp,和ospf
- 【数字图像处理】霍夫(Hough)变换
- c语言编程中%d怎么运用的,C语言格式符%d与%D的区别
- 程序员联合开发网 程序员创业指导书
- mysql变量赋值加冒号,mysql 冒号
- beetl 获取html属性值,Beetl2.7.16中文文档(2)之高级功能
- linux运维实习报告,it运维实习报告.docx
热门文章
- Python+经济学:柯布道格拉斯生产函数相关
- 采样定理 ADC采样
- javaScript字符串比较
- 矩阵合同,相似与等价 以及初等变换矩阵
- cannot connect to 192.168.137.137:5555: 由于目标计算机积极拒绝,无法连接。
- 基于域控的SSO单点登录
- offsetParent与parentElement ,parentNode,parentElement,childNodes和children
- EPLAN_语言翻译工具的使用
- Android游戏源码合集(主要是AndEngine和Libgdx的)
- Lab 0: Setting up a productive workflow