由于在android上层中如果去不断的申请内存,会被kill调,无奈只能在kernel中申请。
在kernel-3.10.14/kernel/power/main.c中添加如下代码
static ssize_t get_memory_store(struct kobject *kobj,
struct kobj_attribute *attr,const char *buf, size_t n)
{
unsigned long vaddr = 0;
vaddr = __get_free_page(GFP_KERNEL | __GFP_ZERO);//申请4k物理空间
}
static ssize_t get_memory_show(struct kobject *kobj,
struct kobj_attribute *attr, char *buf)
{
return 0;
}
power_attr(get_memory);
#ifdef CONFIG_PM_WAKELOCKS
&wake_lock_attr.attr,
&wake_unlock_attr.attr,
+ &get_memory_attr.attr,
这样在文件系统中的/sys/power/ 下生成get_memory 节点
写一个shell脚本加入的android自启动服务中。
1 #!/system/bin/sh
2 while :
3
4 do
5 echo 0 > /sys/power/get_memory
6 done
死循环,每echo一个就申请4k内存。这样就可以不断的申请内存,当内存不够用时,android会kill掉相关进程来获取空间。最终android会重新启动。然后申请完,依次循环。获取kmsg信息
1 #!/system/bin/sh
2 cat /proc/kmsg >> /sdcard/Movies/diff