kenrel: 5.10
arch: aarch64
启动阶段经过arm64_memblock_init之后,通过gdb可以查看到memblock布局如下,此处的memblock可以理解为在线的memory
(gdb) p/x memblock
$5 = {
bottom_up = 0x0,
current_limit = 0xffffffffffffffff,
memory = {
cnt = 0x1,
max = 0x80,
total_size = 0x40000000,
regions = 0xffff8000120a8848,
name = 0xffff80001139cc28
},
reserved = {
cnt = 0x5,
max = 0x181,
total_size = 0x58a20c4,
regions = 0xffff8000120a9448,
name = 0xffff80001127e258
}
}
其中memblock.memory如下:
(gdb) p/x *(struct memblock_region *)0xffff8000120a8848
$6 = {
base = 0x40000000,
size = 0x40000000,
flags = 0x0,
nid = 0x10
}
memblock.reserved如下:
(gdb) p/x *(struct memblock_region *)0xffff8000120a9448@5
$9 = {

本文详细解析了ARM64架构中memblock的数据结构,展示了如何通过GDB工具观察内存布局,并介绍了`__next_mem_pfn_range`函数的工作原理,用于遍历内存区域并筛选指定节点的范围。关键概念包括memblock_region、memory和reserved区域的管理。
最低0.47元/天 解锁文章
1259

被折叠的 条评论
为什么被折叠?



