硬件采用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. 照片管家iOS-实现本地相册、视频、安全保护、社交分享源码下载Demo

    <照片管家> APP功能: 1.本地照片批量导入与编辑 2.本地视频存储与播放 3.手势密码.数字密码.TouchID安全保护 4.QQ.微信.微博.空间社交分享 5.其他细节功能. 运用 ...

  2. 【LeetCode】80. Remove Duplicates from Sorted Array II (2 solutions)

    Remove Duplicates from Sorted Array II Follow up for "Remove Duplicates":What if duplicate ...

  3. linux系统新建用户ssh远程登陆显示-bash-4.1$解决方法,ssh-bash-4.1

    linux系统新建的用户用ssh远程登陆显示-bash-4.1$,不显示用户名路径 网络上好多解决办法,大多是新建.bash_profile文件然后输入XXXXX....然而并没有什么用没有用.... ...

  4. JS阻止冒泡方法(转)

    S事件流其中一种是冒泡事件,当一个元素被触发一个事件时,该目标元素的事件会优先被执行,然后向外传播到每个祖先元素,恰如水里的一个泡泡似的,从产生就一直往上浮,到在水平面时,它才消失.在这个过程中,如果 ...

  5. 《TCP/IP具体解释卷2:实现》笔记--选路请求和选路消息

    内核的各种协议并不直接使用前面提供的函数来訪问选路树,而是调用几个函数:rtalloc和rtallocl是完毕路由表查询的两个 函数:rtrequest函数用于加入和删除路由表项:另外大多数接口在接口 ...

  6. Jvisualvm监控远程linux下Tomcat

    Jvisualvm监控远程linux下Tomcat 1.编辑tomcat/bin/catalina.sh 加入下面这段代码,中间无换行: CATALINA_OPTS="$CATALINA_O ...

  7. DevExpress下拉多选框 CheckComboboxEdit、CheckedListBoxControl

    CheckComboboxEdit //清空项            checkedComboBoxEdit1.Properties.Items.Clear(); //自定义数组            ...

  8. nodejs request gb2312乱码的问题

    http://www.cnblogs.com/linka/p/6658055.html https://cnodejs.org/topic/53142ef833dbcb076d007230 // np ...

  9. ECSHOP后台权限分配原理分析

    1.在权限管理->管理员列表,中添加一名管理员 2.在admin\includes\inc_menu.php $modules['02_cat_and_goods']['01_goods_lis ...

  10. Redis(二十):Redis数据过期和淘汰策略详解(转)

    原文地址:https://yq.aliyun.com/articles/257459# 背景 Redis作为一个高性能的内存NoSQL数据库,其容量受到最大内存限制的限制. 用户在使用Redis时,除 ...