![[linux内存管理] 第016篇 /proc/iomem的详细解析](https://hexoimg.oss-cn-shanghai.aliyuncs.com/blog/25/1/cover_linux_memory_management_016.png)
[linux内存管理] 第016篇 /proc/iomem的详细解析
本文详细介绍了Linux内核中`/proc/iomem`节点的构建与显示过程。文章首先指出`/proc/iomem`展示的是物理内存的使用情况,并通过`request_standard_resources`函数将内存区域挂载到资源树。文章进一步解析了`/proc/iomem`的注册过程,包括`ioresources_init`函数和`iomem_resource`资源树,以及数据来源和显示逻辑。最后总结,`/proc/iomem`通过遍历资源树和格式化输出,提供了系统物理内存布局的详细视图,对资源管理和调试具有重要作用。
![[linux内存管理] 第015篇 理解Linux内核中的memblock和ioremap机制](https://hexoimg.oss-cn-shanghai.aliyuncs.com/blog/25/1/cover_linux_memory_management_015.png)
[linux内存管理] 第015篇 理解Linux内核中的memblock和ioremap机制
Linux内核中,设备寄存器的物理地址管理涉及`memblock`和`ioremap`两个关键机制。`memblock`在内核启动阶段负责物理内存的分布记录和地址保留,确保设备寄存器不被误用。`ioremap`则将物理地址映射到内核虚拟地址空间,便于驱动程序访问寄存器。设备寄存器映射流程包括设备描述、物理地址保留、驱动加载和地址映射,最终驱动通过虚拟地址访问寄存器。这两者共同确保了设备寄存器的正确管理和高效访问。
![[linux内存管理] 第007篇 fixmap映射详解](https://hexoimg.oss-cn-shanghai.aliyuncs.com/blog/24/11/cover_linux_memory_management_007.png)
[linux内存管理] 第007篇 fixmap映射详解
您好,以下是对您提供的文章内容的100字左右摘要总结: 文章主要介绍了Linux内核中fixmap的概念、作用和实现。fixmap是内核预留的一段虚拟内存空间,用于早期固定映射,包括fdt、console、外设动态映射和paging_init()等。文章详细分析了fixmap的分布、初始化过程以及与设备树(dtb)的关系。fixmap的初始化涉及pgd、pud、pte等页表的创建和映射,而设备树dtb的映射则通过fixmap_remap_fdt()函数实现。此外,文章还介绍了early_ioremap_init()和setup_machine_fdt()等函数的作用,以及FDT调试方法。

linux源码解析05–ioremap原理
科学边界文章摘要:本文介绍了不同处理器架构对内存访问的方式,如x86架构通过I/O端口空间访问外设,而RISC架构如ARM/PowerPC则将I/O内存空间视为普通内存的一部分。文章重点讲解了ioremap映射函数,包括其定义和使用,以及如何通过ioremap_page_range函数将物理地址映射到虚拟地址,使应用程序能够通过虚拟地址访问寄存器地址。

linux内核源码解析02–启动代码分析之setup_arch详解
Linux内核在初始化过程中,通过建立页表映射,使得内核可以访问物理内存。在完成了恒等映射和粗粒度内核页表映射之后,为了能够访问bootloader传入的dtb和IO设备,Linux引入了fixmap映射。fixmap将一段固定虚拟地址映射到dtb和想要访问的IO设备地址,为后续的内存管理和设备驱动程序的初始化奠定了基础。 fixmap映射的基虚拟地址和大小由宏`FIXADDR_SIZE`和`FIXADDR_START`表示。`early_fixmap_init`函数负责初始化fixmap映射,它通过填充页表项,将fixmap区域的虚拟地址与dtb和IO设备的物理地址建立映射关系。 在初始化fixmap映射之后,Linux内核通过`ioremap`函数将IO设备的物理地址映射到内核空间的虚拟地址,使得内核可以访问IO设备。`early_ioremap_init`函数负责初始化ioremap映射,它通过计算虚拟地址和物理地址的偏移量,建立映射关系。 此外,Linux内核还通过`fixmap_remap_fdt`函数将dtb的物理地址映射到内核空间的虚拟地址,使得内核可以访问dtb中的内存信息和板级信息。`memblock_reserve`函数将dtb所占用的内存区域添加到memblock管理的reserve模块中,避免后续内存分配时使用到这部分内存。 最后,Linux内核通过`early_init_dt_scan`函数扫描和解析dtb,将内存布局信息填入memblock系统,并通过`arm64_memblock_init`函数整理内存区域,将一些特殊区域添加到memblock内存管理模块中。这些步骤为后续的内存管理和设备驱动程序的初始化提供了重要的基础。