2024-12-03
[linux 内存管理] 第010篇 paging_init详解
深入解析Linux内核启动过程中内存管理的关键环节——paging_init的实现与流程。从内核镜像与DTB映射完成、物理内存信息收集,到最终通过paging_init建立全局页表,实现物理内存与虚拟地址的完整线性映射。不仅详细拆解了pgd_set_fixmap与map_kernel等核心函数如何操作页表,确保各段内存安全可访问,还揭示了FIXMAP临时映射区的机制及内核空间各段映射权限的处理逻辑。整个过程展现内存状态由“黑暗”到“可控”转变,让内核具备正式使用和管理所有物理内存的能力。通过示意图与源码分析,读者能够系统理解内存初始化背后的技术细节与实际意义,为深入掌握Linux内存管理体系奠定基础。
2024-11-27
[linux内存管理] 第007篇 fixmap映射详解
文章主要介绍了Linux内核中fixmap的概念、作用和实现。fixmap是内核预留的一段虚拟内存空间,用于早期固定映射,包括fdt、console、外设动态映射和paging_init()等。文章详细分析了fixmap的分布、初始化过程以及与设备树(dtb)的关系。fixmap的初始化涉及pgd、pud、pte等页表的创建和映射,而设备树dtb的映射则通过fixmap_remap_fdt()函数实现。此外,文章还介绍了early_ioremap_init()和setup_machine_fdt()等函数的作用,以及FDT调试方法。
2024-11-20
linux内核源码解析02–启动代码分析之setup_arch详解
文章深入解析了 Linux 内核初始化过程中 fixmap 映射的原理与实现,阐述了为什么在内存管理子系统尚未建立时,必须通过固定虚拟地址访问如 dtb 和 IO 设备等关键资源。通过剖析 early_fixmap_init 函数及相关数据结构,揭示了页表分级、地址计算与内核早期资源访问的详细机制,