保留内存(PMEM/ION)申请

chipset: msm8x25

codebase: android4.1


PMEM是高通使用的固定内存分配机制,ION是Google为了使各家厂商使用同一种固定内存分配机制而出现的产物。

当然在ION使用的情况下,PMEM也是可以被定义使用的,主要看用户空间选择哪个了,不过两者并存实在没这个必要,毕竟很浪费内存。

先看下kernel在开机的时候是如何申请这部分内存作为PMEM使用的。

万事从start_kernel开始:

asmlinkage void __init start_kernel(void)
{
	char * command_line;
	extern const struct kernel_param __start___param[], __stop___param[];
//snip
	setup_arch(&command_line);
//snip

}

void __init setup_arch(char **cmdline_p)
{
	struct machine_desc *mdesc;

	setup_processor();
	mdesc = setup_machine_fdt(__atags_pointer);
	if (!mdesc)
		mdesc = setup_machine_tags(machine_arch_type);
	machine_desc = mdesc;
	machine_name = mdesc->name;

//snip
	arm_memblock_init(&meminfo, mdesc);

	paging_init(mdesc);
//snip

	if (mdesc->init_early)
		mdesc->init_early();
}

void __init arm_memblock_init(struct meminfo *mi, struct machine_desc *mdesc)
{
//snip

	/* reserve any platform specific memblock areas */
	/*调用平台相关函数指针,这里为board-msm7x27.c中的
msm7x27a_reserve_info 的msm7x27a_calculate_reserve_size函数。
*/
	if (mdesc->reserve)
		mdesc->reserve();
//snip
}

mdesc结构为struct machine_desc,不了解的可以学习下这个结构体的用法,网上一搜一大把,这里直接转到

我们对应的地方去:

MACHINE_START(MSM7X27A_SURF, "QCT MSM7x27a SURF")
	.atag_offset	= 0x100,
	.map_io		= msm_common_io_init,
	.reserve	= msm7x27a_reserve,
	.init_irq	= msm_init_irq,
	.init_machine	= msm7x2x_init,
	.timer		= &msm_timer,
	.init_early     = msm7x2x_init_early,
	.handle_irq	= vic_handle_irq,
MACHINE_END

static void __init msm7x27a_reserve(void)
{
	reserve_info = &msm7x27a_reserve_info;
	msm_reserve();
}

void __init msm_reserve(void)
{
	unsigned long msm_fixed_area_size;
	unsigned long msm_fixed_area_start;

	/*初始化内存池相关结构,看来它想讲申请的内存
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值