__start_xen
|
|____percpu_init_areas 初始化percup数据需要的内存,从全局变量__per_cpu_start开始,每个结构分配2的PERCPU_SHIFT(13)次方字节内存(8K)。
|
|____set_intr_gate 初始化TRAP_page_fault中断,early_page_fault在entry.S文件中定义, 中断门执行级别为0
|
|____cmdline_parse 保存到全局变量saved_cmdline中
|
|____parse_video_info 根据全局变量boot_vid_info初始化全局变量vga_console_info,怀疑boot_vid_info为bios内部的一块内存块,啥时候初始化的不知道???
RELOC_HIDE这个宏是啥意思???
|
|____set_current 设置地址0xfffff000为当前vcpu的地址
|
|____smp_prepare_boot_cpu 将当前cpu初始化到全局变量 cpu_online_map cpu_callout_map cpu_present_map cpu_possible_map中,并配置为在线状态
|
|____console_init_preirq 初始化串口
|
|____ print video system infomation about BIOS
|
|____ check the e820_raw_nr ,some multi boot info and lowmem_kb for boot information
|
|____init_e820
| |
| |__sanitize_e820_map 整理e820内存段
| |
| |
| |__copy_e820_map 拷贝e820内存段到全局结构体e820中
| |
| |
| |__clip_to_limit 缩小e820的区域大小,通过减去e820数组后面的项目。
| |
| |
| |__reserve_dmi_region 通过修改e820中项目的类型,来将具有标识符dmi的项的内存块变为保留模块
| |
| |
| |__mtrr_top_of_ram 通过查找MTRR的Write Block区域来判断 top-of-RAM
|
|____kexec_reserve_area 将e820涉及的内存地址作为保留地址
|
|____针对boot allocte 和 multi boot info等数据结构进行初始化 mbi参数有startxen的参数传入
|
|____bootstrap_map ensure mod[0] is mapped before parsing mod0是mbi的第一个模块,需要确保这个模块的内存已经映射完毕,且不需要使用pagetable
|
|____bzimage_headroom mod[0]的起始地址是setup_header结构。我觉得就是hvmloader
|
|____映射e820的内存到指定的位置 16MB to BOOTSTRAP_DIRECTMAP_END 这个地方就是在搬内存 map_pages_to_xen set_pdx_range&#