即使你没有在设备树 memreserver 指定保留内存
内核也会把DTB所占据域保留下来,既调用memblock_reserve
调用过程:
start_kernel //init /main.c
setup_arch(&command_line);//arch/arm/kernel/setup.c
arm_memblock_init(mdesc) ; //arch/arm/kernel/setup.c
early_init_fdt_reserve_self();
这个函数最终会调用到memblock_reserve 把dtb文件所占据的内存保留下来,以后的内核和应用程序都不会占用那块内存
dtb内存,也就是文件,会在内存一直保留着。
early_init_fdt_scan_reserved_mem(); //根据dtb中的memreserve信息,调用memblock_reserve内存区域保留下来,不占用它;
unflatten_device_tree();
为DTB里面的所有节点,包括根节点 ,构造一个device_node结构体
根节点没有名字,所有full_name为空
对与根节点,它有4个属性