单独编译内核: make V=s target/linux/install

相调函数调用流程:

init/main.c : start_kernel() -> setup_arch(&command_line)
arch/mips/kernel/setup.c:
setup_arch()-> cpu_probe()-> prom_init()-> arch_mem_init() -> plat_mem_setup() -> detect_memory_region()

prom_init()

arch/mips/ralink/prom.c 读寄存器收集CPU信息

void __init prom_init(void)
{int argc;char **argv;prom_soc_init(&soc_info);pr_info("SoC Type: %s\n", get_system_type());prom_init_cmdline(argc, argv);
}

prom_soc_init(&soc_info) 在 arch/mips/ralink/mt7620.c

其中从寄存器读得系统信息,填充到sock_info中。

prom.c 中定义了 struct ralink_soc sock_info结构体:

struct ralink_soc_info {unsigned char sys_type[RAMIPS_SYS_TYPE_LEN];unsigned char *compatible;unsigned long mem_base;unsigned long mem_size;unsigned long mem_size_min;unsigned long mem_size_max;
};

开机内核打印信息中有如下打印:

[    0.000000] Board has DDR2
[    0.000000] Analog PMU set to hw control
[    0.000000] Digital PMU set to hw control
[    0.000000] SoC Type: Ralink MT7620A ver:2 eco:3

sock_info 填充的值为:

soc_info->compatible = "ralink,mt7620a-soc";
sock->sys_type = "Ralink MT7620A ver:2 eco:3";
soc_info->mem_base = MT7620_DRAM_BASE;         // 0x0
soc_info->mem_size_min = MT7620_DDR2_SIZE_MIN; // 32
soc_info->mem_size_max = MT7620_DDR2_SIZE_MAX; // 256

最后到detect_memory_region()中检测内存大小:

void __init detect_memory_region(phys_t start, phys_t sz_min, phys_t sz_max)
{void *dm = &detect_magic;phys_t size;for (size = sz_min; size < sz_max; size <<= 1) {pr_info("%s: dm %p, size 0x%x, sizeof 0x%x\n", __func__,dm, (uint32_t)size, sizeof(detect_magic));if (!memcmp(dm, dm + size, sizeof(detect_magic)))break;}pr_info("Memory: %lluMB of RAM detected at 0x%llx (min: %lluMB, max: %lluMB)\n",((unsigned long long) size) / SZ_1M,(unsigned long long) start,((unsigned long long) sz_min) / SZ_1M,((unsigned long long) sz_max) / SZ_1M);add_memory_region(start, size, BOOT_MEM_RAM);
}

打印值如下:

[    0.000000] detect_memory_region: dm 8030e9cc, size 0x2000000, sizeof 0x4
[    0.000000] detect_memory_region: dm 8030e9cc, size 0x4000000, sizeof 0x4
[    0.000000] detect_memory_region: dm 8030e9cc, size 0x8000000, sizeof 0x4
[    0.000000] Memory: 128MB of RAM detected at 0x0 (min: 32MB, max: 256MB)

转载于:https://www.cnblogs.com/sammei/p/3964450.html

openwrt mt7620 内存大小检测相关推荐

  1. Ubuntu下内存泄露检测工具Valgrind的使用

    在VS中可以用VLD检测是否有内存泄露,可以参考http://blog.csdn.net/fengbingchun/article/details/44195959,下面介绍下Ubuntu中内存泄露检 ...

  2. OpenCV中的内存泄漏检测

    转自:http://chaishushan.blog.163.com/blog/static/130192897200911685559809/ 内存泄漏时程序开发中经常遇到的问题. 而且出现内存泄漏 ...

  3. android native堆内存泄露,Android Native内存泄露检测

    Android Studio没有提供直接的Native层的内存泄露检测工具,但我们仍可以通过开源工具进行动态检测和静态检测 动态检测 在APP运行时进行检测,就像LeakCanary Update: ...

  4. vs内存泄露检测方法

    方法一. 1.头文件: #define _CRTDBG_MAP_ALLOC #include <stdlib.h> #include <crtdbg.h>  注意  #incl ...

  5. kmemleak的使用---内存泄露检测工具【转】

    转自:http://blog.csdn.net/lishenglong666/article/details/8287783 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 内 ...

  6. C++内存泄露检测原理

    转自:http://hi.baidu.com/jasonlyy/item/9ca0cecf2c8f113a99b4981c 本文针对 linux 下的 C++ 程序的内存泄漏的检测方法及其实现进行探讨 ...

  7. 基于Android Studio的内存泄漏检测与解决全攻略

    自从Google在2013年发布了Android Studio后,Android Studio凭借着自己良好的内存优化,酷炫的UI主题,强大的自动补全提示以及Gradle的编译支持正逐步取代Eclip ...

  8. 服务器怎么虚拟化内存,服务器虚拟化内存大小

    服务器虚拟化内存大小 内容精选 换一换 当前已支持将源端服务器迁移到"包年/包月"和"按需计费"这两种计费模式的弹性云服务器,您可根据需求选择对应计费模式的弹性 ...

  9. 内存泄漏检测工具(转载)

    内存泄漏检测工具2007年08月08日 1.     ccmalloc-Linux和Solaris下对C和C++程序的简单的使用内存泄漏和malloc调试库. 2.     Dmalloc-Debug ...

最新文章

  1. openmv4闪灯说明_OpenMV Cam
  2. java设计模式---构建者模式
  3. 微软商店安装包_搞定你的数学问题:微软发布新APP可以手写或扫描数学题进行解答...
  4. 从Python的turtle绘图开始学习图形化程序设计
  5. jvm - 垃圾回收 gc
  6. 中国AI论文,爆了!
  7. 是什么让南浔银行动了心?“高端存储+双活”
  8. java selenium click_按钮单击selenium java
  9. MySQL之limit使用
  10. webpack创建library及从零开始发布一个npm包
  11. flask的各种装饰器
  12. html2canvas 如何去掉空白区域_在Ai中,如何快速制作牛奶字效果
  13. 苏州旅游网站的设计与实现 毕业论文+Html静态源码
  14. Linux 部署 Nexus (下载、安装、使用)
  15. 黄健计算机科学与技术学院,计算机科学与技术学院研究生学业奖学金初评结果汇总表...
  16. 郑立:一个80后神话的倒掉
  17. IOS代理协议与委托
  18. CC2530+ESP8266使用MQTT协议上传阿里云的问题
  19. STM32F103C8T6引脚功能图
  20. java 网上医院预约系统_基于java web的医院网上预约挂号系统 代码+数据库文件 齐全...

热门文章

  1. VB.NET 中的ref 和C#中的ref 格式区别
  2. 运营商市场经营方向及趋势
  3. 配合OAuth2进行单设备登录拦截
  4. JsRender 前端渲染模板常用API学习
  5. 音视频播放、录音、拍照
  6. BZOJ2683 简单题(CDQ分治)
  7. python-多继承
  8. 实现每个点赞用户点击的带属性的字符串
  9. 进程同步与互斥的区别
  10. Flask项目--预防csrf攻击原理