硬件采用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存储空间的更多相关文章

  1. 求int型正整数在内存中存储时1的个数

    题目描述: 输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数. 输入描述: 输入一个整数(int类型) 输出描述: 这个数转换成2进制后,输出1的个数 输入例子: 5 输出例子: ...

  2. 华为oj之求int型正整数在内存中存储时1的个数

    题目: 求int型正整数在内存中存储时1的个数 热度指数:4427 时间限制:1秒 空间限制:32768K 题目描述 输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数. 输入描述: ...

  3. (一)求 int 型数据在内存中存储时 1 的个数

    题目:求 int 型数据在内存中存储时 1 的个数 描述:输入一个 int 型数据,计算出该 int 型数据在内存中存储时 1 的个数 运行时间限制: 10 sec 内存限制:128 MByte 输入 ...

  4. 华为机试 求int型数据在内存中存储时1的个数

    题目描述 输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数. 输入描述: 输入一个整数(int类型) 输出描述: 这个数转换成2进制后,输出1的个数 输入 5 输出 2 普通运算方 ...

  5. 求int型数据在内存中存储时1的个数

    1.求int型数据在内存中存储时1的个数 输入一个int型数据,计算出该int型数据在内存中存储时1的个数. 我们非常easy想到例如以下方法: #include <iostream> u ...

  6. php实现 求int型数据在内存中存储时1的个数(函数都可自己实现)

    php实现 求int型数据在内存中存储时1的个数(函数都可自己实现) 一.总结 一句话总结:函数我们自己都可以实现,尤其是很多基础函数,没有工具的时候自己写. 1.php进制转换函数? base_co ...

  7. 牛客网编程练习(华为机试在线训练)-----求int型正整数在内存中存储时1的个数

    题目描述 输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数. 输入描述: 输入一个整数(int类型) 输出描述: 这个数转换成2进制后,输出1的个数 示例1 输入 5 输出 2 P ...

  8. java笔试之求int型正整数在内存中存储时1的个数

    输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数. 关键点:n与二进制的1相与:判断最末位是否为1:向右移位. 类似题目是查找输入整数二进制中1的个数. package test; ...

  9. 求int型正整数在内存中存储时1的个数 && int型的数到底最大是多少?

    输入一个int型的正整数(十位数之内!嘞!),计算出该int型数据在内存中存储时1的个数. #include<bits/stdc++.h> using namespace std; int ...

随机推荐

  1. springmvc异常统一处理

    http://www.cnblogs.com/xd502djj/archive/2012/09/24/2700490.html

  2. PyCharm 默认运行 unittest

    若文件里面有某个函数名称或模块名称以test为前缀,Pycharm的话,就会自动认为是单元测试: 报错信息:test_file() missing 1 required positional argu ...

  3. C# 小叙 Encoding (一)

    前言 众所周知计算机只能识别二进制数字,如1010,1001.我们屏幕所看到的文字,字符都是和二进制转换后的结果.将我们的文字按照某种规则转换二进制存储在计算机上,这一个过程叫字符编码,反之就是解码. ...

  4. AME_Oracle自带AME审批链详解AME Standard Handler(概念)

    2014-05-30 Created By BaoXinJian Oracle 自带了3大类,13个子类的审批链Action Type, 对应了13个标准的AME Standard Handler

  5. Java实现文件自动打包成zip并下载的代码

      import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java. ...

  6. socket概述和字节序、地址转换函数

    一.什么是socket socket可以看成是用户进程与内核网络协议栈的编程接口. socket不仅可以用于本机的进程间通信,还可以用于网络上不同主机的进程间通信. socket API是一层抽象的网 ...

  7. Linux进程概述

    一.介绍 当linux系统中的一个进程运行起来的时候,总是要访问系统的资源,访问文件或者向其他的进程发送信号.系统是否允许其进行这些操作?系统是根据什么来判断该进程的权限?这些问题是和进程信任状(pr ...

  8. Linux内核(2) - 分析内核源码如何入手(上)

    透过现象看本质,兽兽们无非就是一些人体艺术展示.同样往本质里看过去,学习内核,就是学习内核的源代码,任何内核有关的书籍都是基于内核,而又不高于内核的. 既然要学习内核源码,就要经常对内核代码进行分析, ...

  9. NRF24L01

    转http://blog.csdn.net/wangshenzhen123/article/details/47207837 1.一个发送通道,6个接收通道.发送端发送通道地址寄存器中的地址指向的就是 ...

  10. mysql (已解决p)MYSQL5.7启动不了,本地计算机上的 MySQL57 服务启动后停止。

    找到目录E:\AppServ\MySQL\data 备份data中的数据,然后删除掉data中所有的东西(如果删除不掉请在进程中找到mysqld.exe并且关闭) 打开CMD cd E:\AppSer ...