Linux内存管理(七):fixmap详解

源码基于: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内存的内存布局: 

Linux内存管理(七):fixmap详解_第1张图片 VA_BITS=39, PAGE_SHIFT=12(4K页表)

fixmap的区域在编译阶段就

你可能感兴趣的:(Linux,内存管理,linux,fixmap,early_fixmap_,__pgd_populate)