一文了解Linux下ARM64内核空间分布及页表查询

2022.1月更新,此模块只适用于linux-5.5以下版本,在linux-5.10内核布局空间已发生较大变化。

页表查询模块说明

下面的ko模块可用于查询内核空间及用户程序空间虚拟地址分布及属性,以及查询对应虚拟地址的物理地址。

github地址pid_page_tables

在git根目录Makefile中将KDIR指向自己的linux内核代码目录即可,使用make编译出pid_page_tables.ko。注意此ko适用于arm64架构。

一. 打印内核空间地址分布

使用命令echo kernel > /sys/kernel/debug/pid_page_tables,部分打印如下:

root@xxxxx:~# insmod pid_page_tables.ko 
root@xxxxx:~# echo kernel > /sys/kernel/debug/pid_page_tables
root@xxxxx:~# cat /sys/kernel/debug/pid_page_tables 
-----[Kernel space]-----
---[ Modules start ]---
0xffff000000d40000-0xffff000000d41000           4K PTE       ro x  SHD AF NG         UXN MEM/NORMAL
0xffff000000d41000-0xffff000000d42000           4K PTE       ro NX SHD AF NG         UXN MEM/NORMAL
0xffff000000d42000-0xffff000000d44000           8K PTE       RW NX SHD AF NG         UXN MEM/NORMAL
---[ Modules end ]---
---[ vmalloc() Area ]---
0xffff000008000000-0xffff000008001000           4K PTE       RW NX SHD AF NG         UXN DEVICE/nGnRE
0xffff000008002000-0xffff000008004000           8K PTE       RW NX SHD AF NG         UXN DEVICE/nGnRE
0xffff000008005000-0xffff000008006000           4K PTE       RW NX SHD AF NG         UXN DEVICE/nGnRE
0xffff000008007000-0xffff000008008000           4K PTE       RW NX SHD AF NG         UXN DEVICE/nGnRE
...
0xffff7dfffee00000-0xffff7dfffee10000          64K PTE       RW NX SHD AF NG         UXN DEVICE/nGnRE
---[ PCI I/O end ]---
---[ vmemmap start ]---
0xffff7e0000000000-0xffff7e0001000000          16M PMD       RW NX SHD AF NG     BLK UXN MEM/NORMAL
0xffff7e0002000000-0xffff7e0004000000          32M PMD       RW NX SHD AF NG     BLK UXN MEM/NORMAL
0xffff7e0006000000-0xffff7e0008000000          32M PMD       RW NX SHD AF NG     BLK UXN MEM/NORMAL
---[ vmemmap end ]---
---[ Linear Mapping ]---
0xffff800018000000-0xffff800018100000           1M PTE       RW NX SHD AF NG CON     UXN MEM/NORMAL
0xffff800080000000-0xffff800084000000          64M PMD       RW NX SHD AF NG CON BLK UXN MEM/NORMAL
0xffff800084000000-0xffff800084e00000          14M PMD       ro NX SHD AF NG     BLK UXN MEM/NORMAL
0xffff800084e00000-0xffff800084f00000           1M PTE       ro NX SHD AF NG         UXN MEM/NORMA

如上,使用echo设置了/sys/kernel/debug/pid_page_tables后cat /sys/kernel/debug/pid_page_tables将会显示所有地址空间映射属性。

内核地址空间分布说明

  • [Modules start] - [Modules end]

模块加载使用到的内核空间,现在只加载了pid_page_tables.ko故只显示了三行映射数据。

  • [vmalloc() Area] - [vmalloc() End]

所有vmalloc申请的,内核本身代码,mmap,ioremap等申请的地址空间在这一个区域。

  • [Fixmap start] - [Fixmap end]

arm64内核启动后为了能够读取设备树所做的一段Fixmap,用于前期映射使用其中包括了设备树映射,early ioremap,fix pgd,fix pud,fix pm

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值