[全志平台Android11]运行内存虚标的矫正方法

一、前言

在开发中经常会遇到运行内存虚标的情况,例如1G读出来是900多MB,但是客户要求第三方软件需要读出1G,这个时候可以在软件端做处理

二、核心代码处理路径

longan/kernel/linux-5.4/mm/page_alloc.c

三、调试与处理

void si_meminfo(struct sysinfo *val)
{
	val->totalram = totalram_pages();
printk("toalram = %d \n",totalram_pages());//在这里打印出实际值*4便为存储大小
	val->sharedram = global_node_page_state(NR_SHMEM);
	val->freeram = global_zone_page_state(NR_FREE_PAGES);
	val->bufferram = nr_blockdev_pages();
	val->totalhigh = totalhigh_pages;
	val->freehigh = nr_free_highpages();
	val->mem_unit = PAGE_SIZE;
}

打印出来的值进行判断,例如若大于1G小于2G,则显示2G,代码处理如下:

unsigned long get_total_virmem(void) {
//1GB=1048576KB temp=1048576KB/4-262144KB 2 = 2097152KB、 temp-2097152KB/4-524288KB.....786432-----n*262144
    unsigned long one_GB_value = 262144;
    unsigned long mem_group[] = (1*one_GB_value,2*one_GB_value,3*one_GB_value,4*one_GB_value,5*one_GB_value,6*one_GB_value,7*one_GB_value,8*one_GB_value);
    int i;
    for (i=0;i<sizeof(mem_group)/sizeof(mem_group[0]);i++){
        if (totalram_pages() <= mem_group[i])
            break;
        if (i == sizeof(mem_group)/sizeof(mem_group[0])-1)
            i--;
    }
//printk("zwh test mem group = %d \n",mem_group[i]);
    return mem_group[i];
}

将get_total_virmem()替换totalram_pages(),就能得出矫正后的值

四、总结

虽然这是在全志平台所作的修改,但在其他平台依旧行得通。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值