内存大小问题
使用./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