在操作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文件:
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