龙芯开源社区

 找回密码
 注册新用户(newuser)
查看: 1656|回复: 1

给智龙平台释放2M可用内存

  [复制链接]
发表于 2016-4-12 23:04:06 | 显示全部楼层 |阅读模式
一、问题
智龙开发板的内存只有32M,而内核就要占用掉6~8M(取决于config),这样实质可用的内存就只有24~26M了。
于是就考虑如何减小一点内存占用,给用户态多留点。

二、现象
注意到dmesg中内存的信息:
  1. Memory: 26776k/32768k available (2418k kernel code, 5992k reserved, 656k data, 1                                                                             60k init, 0k highmem)
复制代码
内核一共预留了近6M。刨去内核代码和数据约3.3M,还有2.7M,不太合理。

三、分析
阅读内核arch/mips/setup.c,发现初始预留的内存是从0~PFN_UP(_end),其中_end是内核映像长度。
但是内核载入地址是0x80200000,也就是物理内存2M开始的地方。2M之前保留给PMON。
也就是说,系统启动以后,0~2M这部分的内存应该是可以释放出来的。这样就能释放出2M额外的空间。

四、修改
将arch/mips/loongson/ls1x/prom.c 中 prom_free_prom_memory()加入:
  1. free_init_pages("prom memory", 0x280, 2 << 20);
复制代码
注意0~0x280(vec4入口0x200加上128bytes)是保留给异常向量的,不能释放,否则会死机。

五、结果
编译后重新启动可以看到
  1. Freeing prom memory: 2047k freed
复制代码

cat /proc/meminfo:
  1.              MemTotal:          28980 kB
  2. ......
复制代码

成功!

改好的源码在:
https://github.com/hchunhui/loongson1-linux-3.0

发表于 2016-11-15 10:07:49 | 显示全部楼层
这个要赞一个!

本版积分规则

小黑屋|手机版|Archiver|Lemote Inc.  

GMT+8, 2019-8-26 17:56 , Processed in 0.182715 second(s), 19 queries .

快速回复 返回顶部 返回列表