《early boot memory-memblock》中可以看到memblock中的region添加是由E820模块调用e820__memblock_setup()函数将e820_table 中的内存物理信息添加到memoryblock中。
E820由来
e820的由来得益与BIOS 15H的设置操作码AX=E820而得名。X86架构中,机器设备在上电后,首先是由BIOS进行基础的硬件初始化,并从CMOS中获取到内存相关信息,这些信息用于构建BIOS的BDA/EDA信息,以便BIOS构建自己的E820表,接着BIOS会将PC指针表跳转到特地位置以便引导内核启动,最后将执行权限交给操作系统内核。
BIOS通过设置相关的中断将物理内存信息通知给操作系统内核,内核根据相关信息建立e820_table,之后添加到memblock中,最终通过sparse、zone初始化等建立buddy内存管理系统。
INT 0x15/AX=E820H
INT 0x15/AX=E820H