源码基于:Linux 5.4
约定:
芯片架构:ARM64
CONFIG_ARM64_VA_BITS:39
CONFIG_ARM64_PAGE_SHIFT:12
0. 前言
内核启动首先会进入汇编阶段,mmu已经启动 (也就是说,当前SOC只能使用虚拟地址访问RAM),paging_init还没有完成调用,在内核启动过程需要访问某些特定的内核模块 (例如 dtb)时,就需要将虚拟地址和物理地址进行映射。这就是fixmap 机制产生的原因。
fixmap 理解为固定映射,其虚拟地址空间是为了早期 fdt、console、外设动态映射、paging_init()使用。需要注意的是,不能完全认为 fixmap 都是固定映射,fixmap 的详细分布可以查看第 2 节。
1. 内核的内存布局
按照 VA_BITS=39,PAGE_SHIFT=12(4K) 来看下ARM64内存的内存布局:
fixmap的区域在编译阶段就