cpu会自动从NAND flash 中读取前4KB的数据放置在片内SRAM里(s3c2440是soc),同时把这段片内SRAM映射到nGCS0片选的空间(即0x00000000)。
cpu是从0x00000000开始执行,也就是NAND flash里的前4KB内容。因为NAND FLASH连地址线都没有,不能直接把NAND映射到0x00000000,通过这个载
把nandflash中大代码复制到RAM(一般是SDRAM)中去执行。SDRAM挂接在S3C2440的BANK6 (nGCS6),即地址从0x30000000开始。

///////////////////////////////////////////////////////////////////////////////////////////

U-boot,除非在RAM中调试,一般情况下都是从flash中执行一段代码,然后将flash中储存的代码和数据搬移到ram中,然后跳转到ram中执行。当然这应该也是一般的bootloader的执行方式,大家都差不多,但是各个bootloader的内存规划(栈,堆之类的)也 不太一样,而且u-boot还在内存空间中规划了一些用于存放环境变量和一些数据结构的空间,所以如果不了解一下的话,直接看代码的话就会有一点迷糊。有必要先介绍一下。关于u-boot的内存分布,或者说内存映射,网上有人画了一幅图,比较的清晰,如下:

U-boot映像:U-boot烧写进flash的映像,在uboot的术语中,这部分的大小叫做monitor_size。所以在uboot中,这个二进制文件就叫做monitor。这个U-boot映像会被运送到RAM中,从图中也可以看见RAM中有一块也是U-boot映像。
环境变量区域:环境变量存放在flash和RAM中各一份,在flash中一般存放在紧随Monitor也即U-boot映像的下一个sector中,存储一些诸如IP地址等信息,在程序被拷贝到RAM中时,环境变量也同时被拷贝到RAM中。
CFG_MALLOC_LEN:这个区域是用来存放堆数据和环境变量的,这个区域是紧接着RAM中的U-boot镜像的,从图中也可以看出,在U-boot的基地址往下开辟了这一段区域。环境变量本来保存在FLASH中,在系统初始化的时候,flash中的这些环境变量也同样被复制到RAM中,在系统运行的时候,可以修改RAM中的值来改变系统的环境变量,但是掉电重启后,还是用的FLASH中的设定值,当然也可以写flash来改变默认的环境变量。
GBL_DATA_SIZE:这个区域是紧接着CFG_MALLOC_LEN数据段的,从图上也可以看出来,这一段是用来存放一个gd_t数据结构的,这个数据是一个uboot中用到的数据结构,用来存放系统的一些信息,在下面会列出这个数据结构。
另外,在SDRAM_BASE开始的地址上,一般存放着二级跳转中断向量,这些中断向量一般是用来为uclinux等操作系统用的。
其他的如栈的分布如上图所示。

u-boot的内存分布的更多相关文章

  1. u-boot的内存分布和全局数据结构

    U-boot,除非在RAM中调试,一般情况下都是从flash中执行一段代码,然后将flash中储存的代码和数据搬移到ram中,然后跳转到ram中执行.当然这应该也是一般的bootloader的执行方式 ...

  2. C++类内存分布

    http://www.cnblogs.com/jerry19880126/p/3616999.html#undefined 书上类继承相关章节到这里就结束了,这里不妨说下C++内存分布结构,我们来看看 ...

  3. C++ 类的内存分布

    C++类内存分布 转自:http://www.cnblogs.com/jerry19880126/p/3616999.html   先写下总结,通过总结下面的例子,你就会明白总结了. 下面总结一下: ...

  4. C++ 继承之虚继承与普通继承的内存分布

    仅供互相学习,请勿喷,有观点欢迎指出~ class A { virtual void aa(){}; }; class B : public virtual A { ]; //加入一个变量是为了看清楚 ...

  5. C++多重继承虚表的内存分布

    接前面虚表的内存分布,今天重点看多重继承的虚表内存分布,简单的说,继承几个类便有几个虚表,如下代码 class Drive : public Base1, public Base2, public B ...

  6. VC++中的类的内存分布(上)

    0.序 目前正在学习C++中,对于C++的类及其类的实现原理也挺感兴趣.于是打算通过观察类在内存中的分布更好地理解类的实现.因为其实类的分布是由编译器决定的,而本次试验使用的编译器为VS2015 RC ...

  7. VC++中的类的内存分布(上)(通过强制转换,观察地址,以及地址里的值来判断)

    0.序 目前正在学习C++中,对于C++的类及其类的实现原理也挺感兴趣.于是打算通过观察类在内存中的分布更好地理解类的实现.因为其实类的分布是由编译器决定的,而本次试验使用的编译器为VS2015 RC ...

  8. 【转】C++类-内存分布

    C++类内存分布 - 转载自Jerry19880126 - 博客园 的文章 在上面这篇文章的基础上做了些整理. 主要讨论了C++类对象的内存分布结构. 来看看编译器是怎么处理类成员内存分布的,特别是在 ...

  9. 记录:C++类内存分布(虚继承与虚函数)

    工具:VS2013 先说一下VS环境下查看类内存分布的方法: 先选择左侧的C/C++->命令行,然后在其他选项这里写上/d1 reportAllClassLayout,它可以看到所有相关类的内存 ...

  10. day01 进制转换与内存分布

    今日重点: 1.进制之间的转换 进制:指的是进位的制度.进制主要有二进制.八进制.十六进制等,计算机底层运用的是二进制,为了方便阅读,通常会使用八进制或十六进制进行表示.在32位系统中,通常使用八进制 ...

随机推荐

  1. Python Scrapy 爬取煎蛋网妹子图实例(二)

    上篇已经介绍了 图片的爬取,后来觉得不太好,每次爬取的图片 都在一个文件下,不方便区分,且数据库中没有爬取的时间标识,不方便后续查看 数据时何时爬取的,所以这里进行了局部修改 修改一:修改爬虫执行方式 ...

  2. Python全栈开发-执行字符串形式的语句和字符串形式的表达式方法(即exec和eval方法)

    Python有时需要动态的创造Python代码,然后将其作为语句执行  或  作为表达式计算. exec用于执行存储在字符串中的Python代码.   1. 语句与表达式的区别:表达式是 某事,语句是 ...

  3. 有效利用1 on 1

    2019-01-08 16:32:13 感觉1 on 1是浪费时间? 感觉1 on 1时没啥好说? 感觉老板总是不想1 on 1? 怎样才能 升职加薪? 一切都从有效的1 on 1开始!! 什么是1 ...

  4. python中的面向对象学习以及类的多态

    接下来类的第三个重要的特性:多态(一种接口,多种实现) 多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特 ...

  5. ThinkPHP表单自动验证(注册功能)

    控制器中: 模型中: 视图中:

  6. PHP里面增加写日志功能

    配置项中:

  7. Processing 与 C 相同和不同的地方

    Processing 与 C Processing 语言和其他语言有很多相似之处,这是它作为一种计算机语言的特征,同时,Processing 用于艺术创作,所以也有一些专用的函数. 相同的几点: 作为 ...

  8. 【源码分析】FastJson全局配置日期格式导致@JSONField(format = "yyyy-MM-dd")注解失效

    出现的问题 我全局配置的时间格式是:yyyy-MM-dd HH:mm:ss @JSONField注解配置的时间格式是:yyyy-MM-dd 最终的返回结果是:yyyy-MM-dd HH:mm:ss 问 ...

  9. 01Flask基础

    简介 Flask诞生于2010年,是Armin ronacher(人名)用 Python 语言基于 Werkzeug 工具箱编写的轻量级Web开发框架. Flask 本身相当于一个内核,其他几乎所有的 ...

  10. raw_input 和input 区别

    raw_input() 直接读取控制台的输入(任何类型的输入它都可以接收).而对于 input() ,它希望能够读取一个合法的 python 表达式,即你输入字符串的时候必须使用引号将它括起来,否则它 ...