arm64查看内核页表的映射信息

476 阅读2分钟

在操作page的时候,可能需要查看当前内核页表的映射信息,例如被映射的虚拟地址的范围、大小以及该段内存所具备的属性。

1、内核配置

首先配置内核,使其支持导出内核页表到debugfs下面:

在arm64上make ARCH=arm64 defconfig menuconfig,选择Kernel hacking,然后选择[*] Export kernel pagetable layout to userspace via debugfs即可。会出现以下两行CONFIG:

CONFIG_ARM64_PTDUMP_CORE=y
CONFIG_ARM64_PTDUMP_DEBUGFS=y

配置完后,重新编译内核,并用新内核启动,就会在/sys/kernel/debug下看到kernel_page_tables文件:

image.png

2、kernel_page_tables文件含义

---[ Linear Mapping start ]---
0xffff000000000000-0xffff000000080000         512K PTE       RW NX SHD AF    CON     UXN MEM/NORMAL
0xffff000000080000-0xffff000000200000        1536K PTE       ro NX SHD AF            UXN MEM/NORMAL
0xffff000000200000-0xffff000001200000          16M PMD       ro NX SHD AF        BLK UXN MEM/NORMAL
......
0xffff00007e000000-0xffff000080000000          32M PMD       RW NX SHD AF    CON BLK UXN MEM/NORMAL
---[ Linear Mapping end ]---
---[ Modules start ]---
---[ Modules end ]---
---[ vmalloc() area ]---
0xffff800010000000-0xffff800010004000          16K PTE       RW NX SHD AF            UXN MEM/NORMAL
0xffff800010005000-0xffff800010006000           4K PTE       RW NX SHD AF            UXN DEVICE/nGnRE
......
0xfffffdffbffc4000-0xfffffdffbffc7000          12K PTE       RW NX SHD AF            UXN MEM/NORMAL
0xfffffdffbffda000-0xfffffdffbffdd000          12K PTE       RW NX SHD AF            UXN MEM/NORMAL
---[ vmalloc() end ]---
---[ Fixmap start ]---
0xfffffdfffe5fa000-0xfffffdfffe5fb000           4K PTE       RW x  SHD AF            UXN MEM/NORMAL
0xfffffdfffe5fb000-0xfffffdfffe5fc000           4K PTE       ro NX SHD AF            UXN MEM/NORMAL
0xfffffdfffe600000-0xfffffdfffe800000           2M PMD       ro NX SHD AF        BLK UXN MEM/NORMAL
---[ Fixmap end ]---
---[ PCI I/O start ]---
0xfffffdfffec00000-0xfffffdfffec10000          64K PTE       RW NX SHD AF            UXN DEVICE/nGnRE
---[ PCI I/O end ]---
---[ vmemmap start ]---
0xfffffdffffe00000-0xfffffe0001e00000          32M PMD       RW NX SHD AF        BLK UXN MEM/NORMAL