内存大小问题

使用./Release_to_customer.sh -f nand -p ssd201编译并烧录镜像后,进入Linux系统,使用free -m 命令发现内存小于64M(SSD201的内存大小为64M):

了解到内存大小分配给了MMA、Linux系统和一部分reserved(这部分一般不用去修改),即:

DDR total memory = linux memory(cat /proc/meminfo的MemTotal) + mma(mma_heap_name0 + MMU_MMA) + kernel reserved

在Uboot中,可以看到MMA的大小默认设置为0x1a00000=26M:

因此通过减少MMA的大小来增加Linux系统可用内存,我们先在uboot下修改MMA大小,验证上面的公式:

可以看到MMA减小了16M后,Linux可用内存对应增加了16M。同时,可以了解到kernel reserved的大小为64M-44M-10M=10M。这一部分应该等于0x4000000(64M)- 0x3600000。根据以上信息,我得出以下结论:

地址范围 0x0-0x2C00000 0x2C00000-0x3600000 0x3600000-0x400000
作用 linux mma kernel resverved

通过修改MMA所分配内存的大小,可以调整Linux系统的可用内存。MMA的内存大小可通过project/configs/nvr/i2m/8.2.1/spinand.glibc.011a.64(如果是202则是.128)来修改:
为了把MMA设置默认为16M,我修改了project/configs/nvr/i2m/8.2.1/spinand.glibc.011a.64

# vi project/configs/nvr/i2m/8.2.1/spinand.glibc.011a.64


修改完后,重新编译并更新固件,MMA默认为0xa00000=16M了。

文档更新时间: 2021-08-17 14:45   作者:Aeeditor