Linux内核启动参数“mem=xxx”的处理
Linux内核启动参数“mem=xxx”的处理
对于一个这样的参数memsize=128M mem=151M mem=118M@768M
内核是怎么处理的呢?
- Arch/mips/kernel/setup.c:
- early_param("mem", early_parse_mem);
这里说明mem参数由early_parse_mem函数处理。该函数调用memparse处理每一个mem=size@addr格式的参数,表示从addr地址(物理地址)开始的size大小的内存区域。如果没有”@addr”则默认起始地址为零。
TODO:研究宏early_param的具体实现
对于每一个mem参数,都会调用add_memory_region(start, size, BOOT_MEM_RAM); 把指定的内存区域信息写到boot_mem_map数组中。该数组定义为:
- arch/mips/include/asm/bootinfo.h:
- /*
- * A memory map that's built upon what was determined
- * or specified on the command line.
- */
- struct boot_mem_map {
- int nr_map;
- struct boot_mem_map_entry {
- phys_t addr; /* start of memory segment */
- phys_t size; /* size of memory segment */
- long type; /* type of memory segment */
- } map[BOOT_MEM_MAP_MAX];
- };
- Nr_map =2;
- Map[0].addr=0
- Map[0].size=151M, map[0].type=RAM
- Map[1].addr=768M
- Map[1].size=118M, map[1].type=RAM
- /*
- * If a user specifies memory size, we
- * blow away any automatically generated
- * size.
- */
Memsize=128M的处理:
在内核代码中没有找到处理memsize参数的地方。
评论暂时关闭