前面已经分析了内核页表的准备工作以及内核低端内存页表的建立,接着回到init_mem_mapping()中,低端内存页表建立后紧随着还有一个函数early_ioremap_page_table_range_init():
【file:/arch/x86/mm/init.c】 /* * Build a proper paget[......]
前面已经分析了内核页表的准备工作以及内核低端内存页表的建立,接着回到init_mem_mapping()中,低端内存页表建立后紧随着还有一个函数early_ioremap_page_table_range_init():
【file:/arch/x86/mm/init.c】 /* * Build a proper paget[......]
前面的前奏已经分析介绍了建立内核页表相关变量的设置准备,接下来转入正题分析内核页表的建立。
建立内核页表的关键函数init_mem_mapping():
【file:/arch/x86/mm/init.c】 void __init init_mem_mapping(void) { unsigne[......]
前面已经分析过了Intel的内存映射和linux的基本使用情况,已知head_32.S仅是建立临时页表,内核还是要建立内核页表,做到全面映射的。下面就基于RAM大于896MB,而小于4GB ,且CONFIG_HIGHMEM配置了高端内存的环境情况进行分析。
建立内核页表前奏,了解两个很关键的变量:
max_pf[……]