当前位置: 首页 > news >正文

linux 内存初始化过程

背景 工作中内存子系统相关的问题主要聚焦在内存分配、内存回收,本文记录内存初始化的学习过程,加深对linux内核子系统的理解。

源码版本 linux 5.10

架构 arm64

主要带着两个问题去学习:

1、内核是如何确认及获取物理内存大小的;

2、物理内存是如何被添加到buddy系统。

一、内核是如何确认及获取物理内存大小的

通过dts中配置的memory字段

内存 通过memblock_add添加到memblock中

start_kernel

setup_arch

setup_machine_fdt(__fdt_pointer)

early_init_dt_scan

early_init_dt_scan_nodes

early_init_dt_scan_memory

early_init_dt_add_memory_arch

memblock_add

memblock_add_range(&memblock.memory, base, size, MAX_NUMNODES, 0)

int __init early_init_dt_scan_memory(unsigned long node, const char *uname, int depth, void *data) { const char *type = of_get_flat_dt_prop(node, "device_type", NULL); const __be32 *reg, *endp; int l; bool hotpluggable; /* We are scanning "memory" nodes only */ if (type == NULL || strcmp(type, "memory") != 0) return 0; reg = of_get_flat_dt_prop(node, "linux,usable-memory", &l); if (reg == NULL) reg = of_get_flat_dt_prop(node, "reg", &l); if (reg == NULL) return 0; endp = reg + (l / sizeof(__be32)); hotpluggable = of_get_flat_dt_prop(node, "hotpluggable", NULL); pr_debug("memory scan node %s, reg size %d,\n", uname, l); while ((endp - reg) >= (dt_root_addr_cells + dt_root_size_cells)) { u64 base, size; base = dt_mem_next_cell(dt_root_addr_cells, &reg); size = dt_mem_next_cell(dt_root_size_cells, &reg); if (size == 0) continue; pr_debug(" - %llx , %llx\n", (unsigned long long)base, (unsigned long long)size); early_init_dt_add_memory_arch(base, size); if (!hotpluggable) continue; if (early_init_dt_mark_hotplug_memory_arch(base, size)) pr_warn("failed to mark hotplug range 0x%llx - 0x%llx\n", base, base + size); } return 0; }

struct memblock

struct memblock_type memory;

struct memblock_region *regions;

struct memblock_type memory;

struct memblock_region *regions;

二、内存如何添加到buddy子系统

http://www.gsyq.cn/news/1496787.html

相关文章:

  • serde_with深度解析:掌握DisplayFromStr和DurationSeconds转换器
  • 2026手把手教你用手机APP做无水印证件照,免费制作方法全攻略 - 办公小帮手
  • 2026股权管理咨询盘点:值得关注的专业服务商 - 远大方略管理咨询
  • imv键盘快捷键大全:掌握高效图像浏览的秘诀
  • 基于微信小程序实现家庭事务管理系统【附项目源码+论文说明】
  • 2026精密行星换向器厂家推荐:国产进口替代品牌实力解析 - 热点速览
  • 2026年天津必吃海鲜餐厅深度横评:滨江道排队王、平价海肠捞饭怎么选? - 精选优质企业推荐官
  • 上海黄金行情全复盘 930元以上卖金正当时 - 润富黄金回收
  • 哈尔滨黄金变现怎么选六大门店实测告诉你 - 余生黄金回收
  • 【MATLAB控制代码14】多无人机,集群多角度打击目标,时间与角度约束下的协同攻击算法
  • 2026 宁德厨卫屋面地下室漏水瓷砖空鼓测评:吉修匠 99.8 分五星榜首 - 吉修匠
  • 如何快速上手Polyglot-Ko-1.3B:5分钟搭建韩语AI对话系统
  • 伴热带生产厂家常见问题解答(2026最新专家版) - 热点速览
  • Joplin技术架构深度解析:如何构建注重隐私的跨平台笔记同步系统
  • Linux文件系统
  • 长沙市2026年黄金回收+白银回收+铂金回收+彩金回收品牌门店推荐及联系方式+地址+电话+靠谱店铺指南 - 盛世金银回收
  • 长治市2026年黄金回收+白银回收+铂金回收+彩金回收品牌门店推荐及联系方式+地址+电话+靠谱店铺指南 - 盛世金银回收
  • 完整指南:如何用epub.js在浏览器中构建专业电子书阅读器
  • 二硬脂酰基磷脂酰乙醇胺-聚乙二醇 DSPE-PEG 规格与选择指南
  • 项目实训个人博客:AI调用设计
  • 3、【AI产品经理概述】AI产品经理与传统产品经理的区别
  • 郑州大学考研辅导班正规机构,全维度榜单推荐 - 推荐评测师
  • 辨别专业的化妆学校——六个可以用来衡量培训机构的硬指标 - 深度智识库
  • AI工具概述
  • 对RDMA理解(2)
  • 盒马鲜生购物卡回收新玩法,轻松变废为宝! - 团团收购物卡回收
  • 西安市2026年黄金回收+白银回收+铂金回收+彩金回收品牌门店推荐及联系方式+地址+电话+靠谱店铺指南 - 盛世金银回收
  • 【JAVA毕设源码分享】基于springboot+vue的教师调停课管理系统的设计与实现(程序+文档+代码讲解+一条龙定制)
  • Java Programming Chapter 4——Inherited call
  • 永辉超市购物卡回收变现最快方式?实测分享靠谱平台 - 团团收购物卡回收