cmdline:
BOARD_KERNEL_CMDLINE := console=ttyAMA0,115200 vmalloc=384M mem=1024m@0x100000 ......
解析:
static int __init early_mem(char *p)
{
static int usermem __initdata = 0;
phys_addr_t size;
phys_addr_t start;
char *endp;
/*
* If the user specifies memory size, we
* blow away any automatically generated
* size.
*/
if (usermem == 0) {
usermem = 1;
meminfo.nr_banks = 0;
}
start = PHYS_OFFSET;
size = memparse(p, &endp);
if (*endp == '@')
start = memparse(endp + 1, NULL);
arm_add_memory(start, size);
return 0;
}
early_param("mem", early_mem);
预留内存:
include/linux/memblock.h中声明了一些函数用于操作kernel可见的内存区域。
其中用于预留内存的如下两个。
int memblock_remove(phys_addr_t base, phys_addr_t size);
int memblock_reserve(phys_addr_t base, phys_addr_t size);
memblock_remove将内存移除,使kernel不可见。若要使用,需要通过ioremap映射。
memblock_reserve只是使kernel不使用这段内存。若要使用,通过kmap映射即可。
现在,arm和arm64都使用了dts。不久以后就可以通过dts实现预留内存了。