当前位置: 首页 > 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.jsqmd.com/news/985043/

相关文章:

  • 为什么选择Flask-Sockets?解析这款WebSockets扩展的核心优势与适用场景
  • 2026年天津必吃海鲜餐厅深度横评:滨江道本地人私藏榜单与选购避坑指南 - 精选优质企业推荐官
  • serde_with深度解析:掌握DisplayFromStr和DurationSeconds转换器
  • 2026手把手教你用手机APP做无水印证件照,免费制作方法全攻略 - 办公小帮手
  • 天津全案设计公司推荐:2026年改善型业主都在对比的5家 - GrowthUME
  • 蚂蚁搬家2026 兰州居家厂区多场景搬运服务商综合实力实地梳理汇总 - 深度智识库
  • Mantra v3.0全面解析:为什么它是开发者必备的API密钥泄露防护工具
  • 2026年天津出国读研哪家好:五家优选品牌深度解析 - 科技焦点
  • 2026股权管理咨询盘点:值得关注的专业服务商 - 远大方略管理咨询
  • 基于微信小程序实现家庭事务管理系统【附项目源码+论文说明】
  • AgOpenGPS开发指南:C WinForms实现农业导航系统
  • 2026精密行星换向器厂家推荐:国产进口替代品牌实力解析 - 热点速览
  • imv键盘快捷键大全:掌握高效图像浏览的秘诀
  • 2026 年赤峰装修公司真实口碑排名:综合实力靠谱装企全解析 - 装修新知
  • 终极指南:在64位Windows上无缝运行16位应用程序的完整解决方案
  • 026年贵阳中高端室内装修全案设计深度横评:观山湖、白云区新房装修与高端定制完全指南 - 年度推荐企业名录
  • 2026年天津必吃海鲜餐厅深度横评:滨江道排队王、平价海肠捞饭怎么选? - 精选优质企业推荐官
  • 防伪溯源哪家实力强?十大标杆案例见证全链路数字化防护硬实力 - 奔跑123
  • HGNN社区贡献指南:如何参与超图神经网络项目开发与改进
  • 基于微信小程序实现医院挂号系统【附项目源码+论文说明】
  • 2026年浙江GEO优化公司选型指南与深度评测 - 浙江稻盛和夫
  • 2026年上海装修公司深度横评:从闵行到松江,如何找到零增项的高端设计装企 - 年度推荐企业名录
  • 上海黄金行情全复盘 930元以上卖金正当时 - 润富黄金回收
  • Unity数字人类渲染技术深度解析:从《The Heretic》到实时面部动画的架构演进
  • 哈尔滨黄金变现怎么选六大门店实测告诉你 - 余生黄金回收
  • 2026 武汉专升本三大实力机构盘点:TOP3排名助力学子圆梦本科 - 小途xt
  • kimi code使用
  • 西北工业大学考研辅导班正规机构,全维度榜单推荐 - 推荐评测师
  • 【MATLAB控制代码14】多无人机,集群多角度打击目标,时间与角度约束下的协同攻击算法
  • 2026 莆田厨卫屋面地下室漏水瓷砖空鼓测评:吉修匠 99.8 分五星榜首 - 吉修匠