设备树节点是如何转换成platform_device设备的呢? 2024-12-05 评论
设备树节点是如何转换成platform_device设备的呢?

本文详细介绍了Linux内核中设备树dtb文件转换为platform_device的过程。首先,设备树中的各个节点会转换为device_node结构,然后通过of_platform_populate函数遍历这些节点,并根据节点的compatible属性创建对应的platform_device。对于包含特定compatible属性的节点,其子节点也会被转换为platform_device。此外,设备树中的reg和interrupt属性会被转换为platform_device中的resource结构,而其他属性则通过device_node结构传递给驱动开发者。

[linux 内存管理] 第010篇 paging_init详解 2024-12-03 评论
[linux 内存管理] 第010篇 paging_init详解

深入解析Linux内核启动过程中内存管理的关键环节——paging_init的实现与流程。从内核镜像与DTB映射完成、物理内存信息收集,到最终通过paging_init建立全局页表,实现物理内存与虚拟地址的完整线性映射。不仅详细拆解了pgd_set_fixmap与map_kernel等核心函数如何操作页表,确保各段内存安全可访问,还揭示了FIXMAP临时映射区的机制及内核空间各段映射权限的处理逻辑。整个过程展现内存状态由“黑暗”到“可控”转变,让内核具备正式使用和管理所有物理内存的能力。通过示意图与源码分析,读者能够系统理解内存初始化背后的技术细节与实际意义,为深入掌握Linux内存管理体系奠定基础。

[linux内存管理] 第009篇 reserved-memory详解 2024-11-29 评论
[linux内存管理] 第009篇 reserved-memory详解

随着内核运行,物理内存碎片化问题会影响设备使用。为此,内核提供 reserved memory 机制,为特定设备预留内存,提高内存利用率。本文分析了 reserved memory 的配置和解析过程,包括 DTS 中的属性、静态/动态预留、no-map 和 reusable 等概念。内核解析 reserved memory 节点时,会根据属性值确定内存的 base 和 size,并进行相应的初始化操作。

[linux内存管理] 第007篇 fixmap映射详解 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调试方法。

linux内存管理] 第006篇 start_kernel全局简述 2024-11-27 评论
linux内存管理] 第006篇 start_kernel全局简述

本文简要介绍了Linux内核启动过程中`start_kernel`函数的内存管理代码流程。文章首先概述了`start_kernel`的功能,然后详细解析了其中的`setup_arch`函数及其关键步骤,包括内存映射、设备树解析、页表建立等。接着,文章总结了`bootmem_init`函数的初始化流程,涉及物理内存的页帧号确定、sparse内存模型的初始化以及内存区域的标记等。整体而言,文章提供了Linux内存管理初始化过程的清晰概述。

[linux内存管理] 第005篇 启动代码分析之汇编部分 2024-11-26 评论
[linux内存管理] 第005篇 启动代码分析之汇编部分

本文详细分析了Linux内核启动阶段的引导程序、内核起始地址、head.S、内存映射和__cpu_setup函数。引导程序负责初始化物理内存、设置设备树、解压缩内核映像并将其加载到内核运行地址,然后跳转到内核入口地址。内核起始地址在arch/arm64/kernel/vmlinux.lds.S文件中定义,并使用readelf工具读取vmlinux文件进行验证。head.S文件包含内核启动汇编代码,主要完成切换到EL1模式、创建恒等映射页表、为打开MMU做处理器相关初始化、启动MMU并跳转到start_kernel()函数等任务。内存映射部分分析了恒等映射和粗粒度内核镜像映射的原理和实现,以及map_memory宏、compute_indices宏和populate_entries宏的作用。__cpu_setup函数负责为打开MMU做一些处理器相关初始化,包括清除本地TLB、启用FP/ASIMD、设置TCR寄存器、设置SCTLR_EL1寄存器等。__primary_switch函数启动MMU,并跳转到start_kernel()函数进入内核的C语言部分。

简述
在万物之间穿行,也在自我之间渡过。
生涯
  • 行业嵌入式
  • 职业Linux/Android内核工程师
  • 人生
  • 生活角色浪子、父母的娃、我夫人的老公
  • 社会角色公司职员、中华人民共和国公民
  • 类型
  • 星座 双子座
  • 生肖
  • 血型O
  • 数据
  • 发表文章171篇
  • 发表评论51个
  • 星球加热28565度
  • 最近的心情能量
  • 地图数据来源于高德地图
  • intj 建筑师
    intj 建筑师
    • 外向内向
    • 远见现实
    • 理性感受
    • 评判展望
    • 坚决起伏
  • 了解更多信息