蜗窝科技

关于内存的一点疑问

蜗窝讨论区存档 · Linux kernel技术问答 · 楼主 bruno · 2016-04-25 · 2 帖

本文是原「蜗窝讨论区」的历史存档(2016-04-25),来自版块「Linux kernel技术问答」,共 2 帖。讨论区已停止服务,此处仅供查阅。

bruno · 2016-04-25 13:33

目前ARM开发板一般都是设备树,而内存地址一般在 memory节点表示, 而内核初始化函数 setup_arch(char cmdline_p) 调用 setup_machine_fdt(__atags_pointer) 匹配设备树 这个函数里面 调用 early_init_dt_scan_nodes( ** 里面有 / Setup memory, calling early_init_dt_add_memory_arch / of_scan_flat_dt(early_init_dt_scan_memory, NULL);

early_init_dt_scan_memory( 扫描memory节点将内存添加到内核, memblock_add(base, size); 那么请问在这之前内存是从哪里来的呢

wowo · 2016-04-25 17:02

bruno 写道: 目前ARM开发板一般都是设备树,而内存地址一般在 memory节点表示, 而内核初始化函数 setup_arch(char cmdline_p) 调用 setup_machine_fdt(__atags_pointer) 匹配设备树 这个函数里面 调用 early_init_dt_scan_nodes( ** 里面有 / Setup memory, calling early_init_dt_add_memory_arch / of_scan_flat_dt(early_init_dt_scan_memory, NULL);

early_init_dt_scan_memory( 扫描memory节点将内存添加到内核, memblock_add(base, size); 那么请问在这之前内存是从哪里来的呢

memblock_add添加的是memory region,并不是memory。 那什么是memory region呢?就是一个声明,声明这一段地址空间(可以理解为虚拟地址)属于我(这些内存对应的物理地址)的了,其它人不要用了。 因此,add与否,都不耽误kernel在启动的时候访问系统的内存。