OK6410A 开发板 (八) 39 linux-5.11 OK6410A memblock 的 alloc 和 free

发布者:技术掌门最新更新时间:2022-09-07 来源: csdn关键字:OK6410A  开发板  11  alloc  free 手机看文章 扫描二维码
随时随地手机看文章

memlbock的初始化过程

第二阶段建立的是 memblock


memblock 的管理范围

ATAG_MEM 

ATAG_CMDLINE  mem=size@start


memblock 的管理范围 是 u-boot  决定的

u-boot 可以在这个过程中 预留内存


memblock 的使用期限

从 start_kernel->setup_arch->paging_init->bootmem_init->memblock_allow_resize 返回

到 kernel_init(进程1) -> free_initmem 


其实从 mem_init返回 -> free_initmem  ,memblock 其实只是能用而已

在这个阶段,已经存在一个buddy了, memblock 如果也使用的话,就会造成内存管理的混乱(两个内存管理器管理了大约相同的内存)


memblock 相关的函数 都是 用 __init 修饰的,

在 free_initmem 的时候会被释放掉

所以就再也不能用 memblock_alloc 来申请内存了.


实际上 mm_init 函数执行之前 , 就没有使用过 memblock_alloc 了


memblock 的使用方法

alloc memblock_alloc

alloc方法 是 memblock_alloc


memblock_alloc

memblock_alloc_try_nid

memblock_alloc_internal

phys_addr_t alloc = memblock_alloc_range_nid

// 1. 找到起始物理地址

phys_addr_t found = memblock_find_in_range_node

__memblock_find_range_bottom_up

for_each_free_mem_range round_up

// 2. reserve 这段地址

memblock_reserve(found, size);

return found;

return phys_to_virt(alloc);


free memblock_free

free方法 是 memblock_free

memblock_free

memblock_remove_range(&memblock.reserved, base, size);

// 如果该内存块在 memblock.reserved 成员 范围内,则需要先将其摘出来成为一个 memblock.reserved 成员(即 memblock.reserved)

// 例如 memblock.reserved 一个成员A 为 0x0000 0000 - 0x2000 0000 

// 而你要free 的 内存区域 为 0x1000 0000 - 0x2000 0000

// 就需要将 A 删掉

// 新增 B : 0x0000 0000 - 0x1000 0000

// 新增 C : 0x1000 0000 - 0x2000 0000

memblock_isolate_range(type, base, size, &start_rgn, &end_rgn); // 隔离

// 将 B 移除

memblock_remove_region(type, i);

1

2

3

4

5

6

7

8

9

10

11

12

13

其他

memblock_reserve

memblock_add_range(&memblock.reserved, base, size, MAX_NUMNODES, 0);

// 第一次 // memblock.reserved 的第一个成员

type->regions[0].base = base;

type->regions[0].size = size;

type->regions[0].flags = flags;

// 第(N>=2)次 // memblock.reserved 的 第二个成员

第一次循环 : 

// memblock.reserved 增加数组大小

memblock_double_array

insert = true;

第二次循环 :

// 先 插入

if (base < end) if (insert) memblock_insert_region(type, idx, base, end - base, nid, flags)

// 再 merge

memblock_merge_regions(type);

关键字:OK6410A  开发板  11  alloc  free 引用地址:OK6410A 开发板 (八) 39 linux-5.11 OK6410A memblock 的 alloc 和 free

上一篇:OK6410A 开发板 (八) 40 linux-5.11 OK6410A buddy 的 alloc 和 free
下一篇:OK6410A 开发板 (八) 38 linux-5.11 OK6410A 为什么需要这么多内存管理器

推荐阅读最新更新时间:2024-11-10 03:16

给机器人行业的11句劝告
撰文 | 张浩程 从2013年成立至今,高工机器人已陪伴机器人行业同行了8年之久。这八年,高工机器人见证过行业的低落,也见证过行业的火热,见证过行业的艰辛,也见证过行业的腾飞。 在12月15日-17日举办的2021高工机器人年会上,高工咨询董事长张小飞博士分享了【高工机器人】作为行业旁观者、同行者,对行业的分析、判断以及劝告。 数据很好看,体感不温暖 纵观2021年全年局势,机器人行业发展的数据十分“风光”。在营收上,从各公司的半年度报表来看,众多机器人产业链上市企业的营业收入均保持着较高的增速,且有多家增速超100%。而在资本市场上,不管是一级市场还是二级市场,机器人行业均是资本青睐的重点领域。从工业机器人产量来看,20
[机器人]
给机器人行业的<font color='red'>11</font>句劝告
DSC打破固有架构,变身双核为工业控制“解忧”
在数字信号控制领域,单核似乎越来越难以满足客户设计的需求,尤其是对于那些集成来自多个团队的软件,其中一个团队专注于时间关键型控制代码,其他团队则专注于开发其他应用的情况。单核数字信号处理器难以应付两个团队的整合需求,多核似乎是一个不错的解决方案,有些数字信号控制器( DSC )设计团队多年前就开始探索多核异构解决方案, Microchip  最近带来了一款全新数字信号控制器 dsPIC33CH ,该控制器采用单芯片、双dsPIC DSC内核配置,这将为设计高端嵌入式控制应用的开发者带来诸多便利。   Microchip的MCU16业务部副总裁Joe Thomsen介绍,“dsPIC33CH的两个内核一个是主核,一个是副核。副核用于
[嵌入式]
通过物联网管理多台MQTT设备-基于米尔T527开发板
本篇测评由优秀测评者“JerryZhen”提供。 本文将介绍基于米尔电子MYD-LT527开发板的网关方案测试。 一、系统概述 基于米尔-全志 T527设计一个简易的物联网网关,该网关能够管理多台MQTT设备,通过MQTT协议对设备进行读写操作,同时提供HTTP接口,允许用户通过HTTP协议与网关进行交互,并对设备进行读写操作。 二、系统架构 1.网关服务:基于FastAPI框架构建的Web服务,提供HTTP接口。 2.MQTT客户端:负责与MQTT设备通信,管理设备连接、消息发布和订阅。 3.设备管理:维护一个设备列表,记录设备的基本信息和状态。 4.数据存储:使用内存或数据库存储设备数据,确保数据持久化。
[物联网]
通过物联网管理多台MQTT设备-基于米尔T527<font color='red'>开发板</font>
大立光11月营收52.44亿元新台币,同比减21%
据经济日报报道,光学镜头厂商大立光今日发布的财报显示,公司11月营收52.44亿元新台币(单位下同),环比增长2%,但同比减少21%。累计今年前十一个月合并营收为510.41亿元,同比减少8%。 从产品出货上来看,20M(百万画素)占大立光11月营收比重为10-20%,10M以上产品占60-70%,仍为出货主力,至于8M产品则占营收比重0-10%,其他产品则约占10-20%。 展望未来,大立光预估,12月拉货动能与11月差不多。美国商务部“制裁”华为导致大立光出货受阻,加之新冠疫情拉低民众的消费能力,但在苹果iPhone 12系列热卖下,大立光第4季表现表现仍能呈缓步月增趋势。 大立光CEO长林恩平在上个月的法说会上看淡本季展
[手机便携]
瑞萨电子推出基于ARM Cortex-A处理器的mbed微处理器开发板
瑞萨电子推出全球首个支持ARM® Cortex®-A处理器的ARM mbed™开发平台 — 采用了达1000 DMIPS的RZ/A1。 采用RZ/A1系列微处理器的瑞萨电子mbed板 2014年11月11日,日本东京讯—全球领先的半导体解决方案供应商瑞萨电子株式会社(TSE: 6723)将通过最新发布的ARM mbed IoT平台帮助工程师和开发人员简化嵌入式开发工作,助力产品制造和新兴应用开发。瑞萨利用RZ/A1微处理器产品开发出全球首个基于ARM Cortex-A9处理器的mbed微处理器开发板,该产品将方便互联设备设计人员更快地开发出高性能、高功能型嵌入式系统产品。 ARM mbed IoT设备平台提
[单片机]
瑞萨电子推出基于ARM Cortex-A处理器的mbed微处理器<font color='red'>开发板</font>
搭载AI智慧美颜 OPPO R11s开启美颜新时代
电子网消息,10月26日,期待已久的OPPO R11s有了新消息。OPPO官方微博发布最新预热海报,宣布R11s将搭载前置AI智慧美颜,让R11s成为用户的专业形象顾问。 据OPPO介绍,当用户自拍的时候,R11s会采集254个面部特征点,然后智能分析出用户的性别、年龄、肤色、肤质等信息,让美颜更智慧。通过多维度排列组合输出的美颜效果达200万种。由此也可以看出,OPPO R11s将为用户带来更精准、更个性的美颜。 从OPPO官微发布的R11s的自拍样张来看,人物面部轮廓清晰,肌肤纹理、眼部卧蚕、眼影都得到了保留,发丝、眉毛也根根分明,但是又处理了痘印、斑点等明显的瑕疵,整张照片没有涂抹痕迹,甚至墨镜留在面部的阴影都有明显
[手机便携]
OK6410A 开发板 (五) 1 OK6410A u-boot-2021.01 LCD RGB接口
u-boot 中的lcd驱动是 在 u-boot lcd驱动框架下的 lcd驱动,包括 lcd 框架 lcd 驱动 代码在 https://github.com/lisider/u-boot/tree/ok6410a 提交id: 54c4f9e1ec8017d51234e5909ca39662a257632d 总体概览 初始化的时候 drv_lcd_init 1. 调用 s3cfb 提供的接口函数 做 硬件初始化 2. 将 panel_info 的信息放到 cons 全局变量中 使用的时候 printf 1. 调用 cons 的 函数 处理 cons 的 成员变量 将 字符打印到屏幕上 /
[单片机]
OK6410A 开发板 (八) 31 linux-5.11 OK6410A 感知linux的内存管理
linux 内存管理 , 我们感知三类内存管理 系统内存管理 A 内核线程内存管理 A 用户进程内存管理 内核态 A 用户态 B 这几种应该分为两类 , A B A 类共用一个内存(虚拟和物理) B 类每个进程有一个内存(虚拟和物理) 另外,我们知道在硬件上 内存是 物理内存 但在 linux 里面, 内存 除了物理内存 还包括 swap空间代表的空间(这里是将硬盘当作内存) // 可以从 free 命令 分析出来 A 系统内存管理的感知 系统启动的时候,会打印如下的信息 Memory: 243936K/262144K available (5120K kernel code,
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved