uboot在nandflash存储时内存和NandFlash存储空间
硬件采用nandflash,nandflash为8位数据宽度,没有dataflash和norflash。
Nandflash空间分配为 bootstrap + u-boot + env + linux 。
|
| bootstrap | | u-boot | env | | linux |
|______________________________________________________________________________
0x0 0x1000 0x20000 0x60000 0x80000 0xA0000
0 4K 128K 384K 512K 640K
uboot的启动参数中定义linux内核镜像在Nandflash中的位置。
uboot的CFG_NAND_BASE定义Nand起始地址。(起始地址为0x40000000,结束地址0x4FFFFFFF,共256M)
uboot的CFG_NAND_DBW_8定义数据宽度。
CFG_ENV_OFFSET或CFG_ENV_OFFSET_REDUND定义env在NandFlash的起始地址,
当配置CFG_ENV_OFFSET_REDUND时,env存储在CFG_ENV_OFFSET_REDUND指定的位置(优先选择)。
CFG_ENV_SIZE定义env在Nandflash中的空间大小。
env的具体实现在env_nand.c中。
--------------------------------------------------------------------------------------------------------------------
内存空间分配(起始地址0x2000 0000,结束地址0x2400 0000,共64M)
|
| | linux | | env | | u-boot |
|
0x2000 0000 0x2040 0000 0x23F0 0000
0 63M
uboot中CFG_LOAD_ADDR定义RAM中linux的load address。
board/atmel/at91sam9260ek/config.mk定义TEXT_BASE,其为u-boot在内存中的起始地址。
------------------------------------------------------------------------------------------------------------------------------
待解决:env在内存中位置????
(board/atmel/at91sam9260ek/at91sam9260ek.c--àboot_params)
答:env在内存中的空间是由malloc分配的(env_common.c中的env_relocate()),因此其在内存中的位置是一直变化的。
每次系统启动时,env在内存中位置可能都不一样。
env malloc分配的空间位于gd结束至0x23f00000之间的CFG_MALLOC_LEN段内,具体实现在lib_arm/board.c中。
以现有产品为例,仅采用nandflash存储bootstrap+uboot+kernel+rootfs:
|
| | bd | gd | | uboot |
| sizeof(bd) sizeof(gd) CFG_MALLOC_LEN
0x20000000 0x23e7efb8 0x23e7efdc 0x23e7f000 0x23f00000 0x24000000
本例中CFG_MALLOC_LEN 为0x81000。
-----------------------------------------------------------------------------------------------------------------------------------
待解决:malloc分配地址为什么位于gd结束到0x23f00000之间???
在common/dlmalloc.c中有关于malloc的具体实现。
uboot实现了一种malloc机制。
-----------------------------------------------------------------------------------------------------------------------------------
K9F2G08U0B大小为256MB,2048块(0-2047),每块大小为128KB。
uboot在nandflash存储时内存和NandFlash存储空间的更多相关文章
- 求int型正整数在内存中存储时1的个数
题目描述: 输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数. 输入描述: 输入一个整数(int类型) 输出描述: 这个数转换成2进制后,输出1的个数 输入例子: 5 输出例子: ...
- 华为oj之求int型正整数在内存中存储时1的个数
题目: 求int型正整数在内存中存储时1的个数 热度指数:4427 时间限制:1秒 空间限制:32768K 题目描述 输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数. 输入描述: ...
- (一)求 int 型数据在内存中存储时 1 的个数
题目:求 int 型数据在内存中存储时 1 的个数 描述:输入一个 int 型数据,计算出该 int 型数据在内存中存储时 1 的个数 运行时间限制: 10 sec 内存限制:128 MByte 输入 ...
- 华为机试 求int型数据在内存中存储时1的个数
题目描述 输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数. 输入描述: 输入一个整数(int类型) 输出描述: 这个数转换成2进制后,输出1的个数 输入 5 输出 2 普通运算方 ...
- 求int型数据在内存中存储时1的个数
1.求int型数据在内存中存储时1的个数 输入一个int型数据,计算出该int型数据在内存中存储时1的个数. 我们非常easy想到例如以下方法: #include <iostream> u ...
- php实现 求int型数据在内存中存储时1的个数(函数都可自己实现)
php实现 求int型数据在内存中存储时1的个数(函数都可自己实现) 一.总结 一句话总结:函数我们自己都可以实现,尤其是很多基础函数,没有工具的时候自己写. 1.php进制转换函数? base_co ...
- 牛客网编程练习(华为机试在线训练)-----求int型正整数在内存中存储时1的个数
题目描述 输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数. 输入描述: 输入一个整数(int类型) 输出描述: 这个数转换成2进制后,输出1的个数 示例1 输入 5 输出 2 P ...
- java笔试之求int型正整数在内存中存储时1的个数
输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数. 关键点:n与二进制的1相与:判断最末位是否为1:向右移位. 类似题目是查找输入整数二进制中1的个数. package test; ...
- 求int型正整数在内存中存储时1的个数 && int型的数到底最大是多少?
输入一个int型的正整数(十位数之内!嘞!),计算出该int型数据在内存中存储时1的个数. #include<bits/stdc++.h> using namespace std; int ...
随机推荐
- HDUOJ----4509湫湫系列故事——减肥记II
湫湫系列故事——减肥记II Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Tot ...
- python练习笔记——用函数对列表奇偶分类,且过程不增加新列表
编写一个函数:函数接收一个列表,将列表中所有的奇数,放到偶数之前,要求过程中不增加新的列表 def fun(*args): # 因为奇数放在偶数之前,标记出奇数中的偶数 # 并将该偶数取出放在数列的最 ...
- Linux内核(1) - Kernel地图:Kconfig与Makefile
Makefile不是Make Love 从前在学校,混了四年,没有学到任何东西,每天就是逃课,上网,玩游戏,睡觉.毕业的时候,人家跟我说Makefile我完全不知,但是一说Make Love我就来劲了 ...
- Linux Shell之表达式
严格来说,shell中没有表达式的概念.Shell本身事实上仅仅是一堆命令的集合.当然也不是胡乱的堆在一起.而是有一定的组织.仅仅是这个组织不那么严谨.所以本文不是要真的总结所谓的表达式,而是把she ...
- C#--类成员
数据成员: 字段: 常量: 函数成员(执行代码): 方法: 属性 构造函数 析构函数 运算符 索引 事件 可以被声明为Static的类成员是:
- 从一到面试题了解js异步机制:setTimeout 和 Pronmise
1.毫无疑问setTimeout是最晚输出的 2.请无视undefined,这是浏览器的返回值. 3.new Promise中并不是异步,而.then()后才是异步.
- mod_fastcgi和mod_fcgid的区别
mod_fcgid是一个跟mod_fastcgi二进制兼容的Apache module. 原 来的mod_fastcgi因为实现方式的限制,所以可能会创建了很多不必要的进程,而实际上只需要更少的进程就 ...
- <图形图像,动画,多媒体> 读书笔记 --- AirPlay
AirPlay技术是之前一直没有接触过的技术,正好这次做一个笔记 共用: 1.能够通过AirPlay将iOS和MAC设备上的视频或音频输出到高清电视上或高保真音响 2.能够通过AirPlay将iOS和 ...
- 【Android】12.5 利用Intent读取和更新通讯录
分类:C#.Android.VS2015: 创建日期:2016-02-23 修改日期:2016-03-08更正了未关闭cursor的bug. 一.简介 本节演示如何在安卓系统中通过用户配置文件(us ...
- keepalived openssl 报错
configure: error: !!! OpenSSL is not properly installed on your system. !!! !!! Can not include Open ...