参考。Linux 内核 ARM 转换表库(TTB0 和 TTB1)
我对上一个链接中讨论的主题有疑问/疑问:
- 0 到 0xbfffffff 是内存的较低部分(用于用户进程),由 TTB0 中的页表管理,它包含当前进程的页表
参考。arm/include/asm/pgtable-2level.h : PTRS_PER_PGD =2048, PTRS_PER_PMD =1, PTRS_PER_PTE =512
- 0xc0000000 到 0xffffffff 是由 TTBR1 中的页表管理/转换的地址空间的上部(操作系统和内存映射 I/O)。TTB1 表的大小和对齐方式是固定的(到 16k)。每个 1 级条目的大小为 32 位,代表 1MB 页面/段。这是
swapper_pg_dir
(参考System.map
)在实际文本地址下方放置 16K 的页表
swapper_pg_dir = 0
这是(0x0 到 0xbfffffff 用于用户进程)中的第一个 768 条目和从 768 到 1024(0xc0000000 到 0xffffffff 用于操作系统和内存映射 I/O)的有效条目吗?有人喜欢在内核空间(内核模块)中分享一些示例代码来浏览这个
swapper_pg_dir
PGD 吗?