openwrt mt7620 内存大小检测
单独编译内核: 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)
openwrt mt7620 内存大小检测的更多相关文章
- kmemleak的使用---内存泄露检测工具【转】
转自:http://blog.csdn.net/lishenglong666/article/details/8287783 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] ...
- C++中基于Crt的内存泄漏检测(重载new和delete,记录在Map里)
尽管这个概念已经让人说滥了 ,还是想简单记录一下, 以备以后查询. #ifdef _DEBUG#define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FIL ...
- Unix下C程序内存泄露检测工具:valgrind的安装使用
Valgrind是一款用于内存调试.内存泄漏检测以及性能分析的软件开发工具. Valgrind的最初作者是Julian Seward,他于2006年由于在开发Valgrind上的工作获得了第二届Goo ...
- vld(Visual Leak Detector) 内存泄露检测工具
初识Visual Leak Detector 灵活自由是C/C++语言的一大特色,而这也为C/C++程序员出了一个难题.当程序越来越复 杂时,内存的管理也会变得越加复杂,稍有不慎就会出现内存问题.内存 ...
- Windows平台下的内存泄漏检测
在C/C++中内存泄漏是一个不可避免的问题,很多新手甚至有许多老手也会犯这样的错误,下面说明一下在windows平台下如何检测内存泄漏. 在windows平台下内存泄漏检测的原理大致如下. 1. 在分 ...
- 计算Java对象内存大小
摘要 本文以如何计算Java对象占用内存大小为切入点,在讨论计算Java对象占用堆内存大小的方法的基础上,详细讨论了Java对象头格式并结合JDK源码对对象头中的协议字段做了介绍,涉及内存模型.锁原理 ...
- Android 性能优化之内存泄漏检测以及内存优化(中)
https://blog.csdn.net/self_study/article/details/66969064 上篇博客我们写到了 Java/Android 内存的分配以及相关 GC 的详细分析, ...
- C/C++的内存泄漏检测工具Valgrind memcheck的使用经历
Linux下的Valgrind真是利器啊(不知道Valgrind的请自觉查看参考文献(1)(2)),帮我找出了不少C++中的内存管理错误,前一阵子还在纠结为什么VS 2013下运行良好的程序到了Lin ...
- C的内存泄漏检测
一,Windows平台下的内存泄漏检测 检测是否存在内存泄漏问题 Windows平台下面Visual Studio 调试器和 C 运行时 (CRT) 库为我们提供了检测和识别内存泄漏的有效方法,原理大 ...
随机推荐
- C++类指针初始化
上面的代码会打印“A”. C++ 类指针定义的时候没有初始化的时候,居然可以安全的调用类内部的成员函数而不出错. 在网上查了一下: 初始化为NULL的类指针可以安全的调用不涉及类成员变量的类成员函 ...
- mysql无法创建外键问题
在阿里云上面安装配置了Mysql后,无法创建外键, 原因及解决方法: 选择InnoDB引擎,因为MyISAM引擎不支持外键,默默地说一句,MySQL真神奇
- 关于IOS项目QQ空间授权提示安装最新版本的QQ的解决方法!
- iOS学习笔记11-多线程入门
一.iOS多线程 iOS多线程开发有三种方式: NSThread NSOperation GCD iOS在每个进程启动后都会创建一个主线程,更新UI要在主线程上,所以也称为UI线程,是其他线程的父线程 ...
- 算法复习——平面分治(hud1007)
题目: 问题描述 : Have you ever played quoit in a playground? Quoit is a game in which flat rings are pitch ...
- 【2018.11.22】CTSC2018(模拟赛!)
太蠢了……$noip$ 后第一次模拟赛竟然是这样的……完全就是打击自信 / 降智…… 1. 假面 一道神仙概率 $dp$!第一次写…… 拿到题就发现血量 $m_i$ 的上限只有 $100$! 然后 $ ...
- noj 2069 赵信的往事 [yy题 无限gcd]
njczy2010 2069 Accepted 31MS 224K 1351Byte G++ 2014-11-13 13:32:56.0 坑爹的无限gcd,,,尼玛想好久,原来要x对y算一次,y再 ...
- css3的一些新属性及部分用法
CSS3是CSS(层叠样式表)技术的升级版本,增加了很多新属性,我们在web开发中采用css3技术可以提高程序的性能以及用户体验.而且一般面试中会问到知道哪些新增加的属性,我们不可能将所有东西一一复述 ...
- 二叉树的层次遍历 II
给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 例如:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 ...
- synchronized初识
作用域: 1.对象实例内--->People jack = new Jack(); ①此作用域内的synchronized锁 ,可以防止多个线程同时访问这个对象的synchronized方法 ② ...