Chinaunix首页 | 论坛 | 博客
  • 博客访问: 12418
  • 博文数量: 6
  • 博客积分: 285
  • 博客等级: 二等列兵
  • 技术积分: 75
  • 用 户 组: 普通用户
  • 注册时间: 2010-09-27 10:37
文章分类

全部博文(6)

文章存档

2010年(6)

我的朋友
最近访客

分类: 嵌入式

2010-11-22 23:08:21

这些认识都是从对源代码的理解过程中得来的,我想将这些认识分为以下几个部分来叙述:
1:bootloader的结构和重载
2:uboot汇编代码中标号(lable)、变量和伪指令的理解
3:uboot是如何实现重载的
下面我将就这3个方面进行详细说明。
 
1  bootloader的结构和重载?
   嵌入式处理器一般支持多种存储器:SDRAM、NOR FLASH和NAND FLASH等,其中SDRAM运行速度最快,一般用来做内存;NOR FLASH是线性存储器,程序可以直接在里面运行,但是速度慢于SDRAM,一般在里面可以存储一些小程序如boot-loader;NAND FLASH是非线性存储器,程序不能直接在里面运行,但是NAND FLASH成本低、容量大,所以一般用来做类似硬盘的外存,存放应用程序和bootloader以及操作系统文件。
   如果开发板配置了NOR FLASH和NAND FLASH以及SDRAM,在bootloader的开发中,bootloader程序如果很小,那么可以将boot-loader二进制文件烧写到nor flash中,嵌入式处理上电复位后可以直接在里面运行,然后bootloader再将存储在NAND FLASH中的linux操作系统映像拷贝到SDRAM中,最后bootloader在进行一些C语言执行环境的准备工作之后,将直接跳到linux内核的入口运行。
   但是如果bootloader很大怎么办,例如U-BOOT,虽然开发板配置的NOR FLASH可能容量够大,能够存的下程序生成的可执行文件,但是程序比较大,运行速度还是很慢,现在就有种办法叫做程序重载来解决这个问题。所谓程序重载,以上面的NOR FLASH和U-BOOT为例,就是将UBOOT在设计上分成两部分,第一部分代码非常小,与位置无关,可以直接在NOR FLASH上运行,进行一些嵌入式处理的设置和SDRAM控制器的配置,为第2部分准备好条件,然后再将第二部分代码从NOR FLASH中复制到SDRAM中,第二部分就是运行SDRAM中的代码,负责开发板的初始化和内核启动。这样U-BOOT执行速度可以得到提高,而且由于在SDRAM中执行,设置好C语言的执行环境后,第二部分代码可以用C语言来完成,C语言相比汇编开发难度降低,而且可以增添更多USB下载和文件系统支持之类的复杂功能。不过稍有链接和编译知识的人都会注意到,实际上这两部分的代码都是在一个二进制文件中,并且存储在NOR FLASH中。
  如果UBOOT存储在NAND FLASH中呢,一般嵌入式处理器会自动采取一些方法将NAND FLASH中的开始小部分内容复制到特殊内存中,如S3C2410的SRAM,然后这部分程序在SRAM中执行,这时候SRAM就相当于NOR FLASH,此时在SRAM中的是第一部分代码,这部分代码会将存储在NAND FLASH的其他代码复制到SDRAM中,然后第一部分代码再跳到内存中的第二部分代码去运行。
  但如果在调试时,UBOOT直接下载到SDRAM中呢,此时UBOOT又该如何处理。此时UBOOT会自己判断是否在SDRAM中,由于前面讲过第一部分代码是与程序运行位置无关的,所以第一部分就算是直接在内存中了也可以继续运行(相关实现原理再第3部分中讲),进行处理器和内存的初步初始化,然后它会判断自己是在内存中还是在FLASH中,在SDRAM中则直接进行C语言执行环境的准备,然后不再复制第2部分代码,而是直接运行第2部分代码。
  因此在uboot中实际上有一段识别自己所在位置的代码,这段代码判断需不需要复制代码到SDRAM中,即需不需要重载。
2  uboot汇编代码中标号(lable)、变量和常量、表达式的理解
在第一块的讲解中,我们在逻辑上将UBOOT分为两部分,通常第一部分是用汇编编写的,因为此时没有C语言执行的条件,第2部分则是C语言编写的。由于讲到UBOOT中实现程序重载时,会涉及到一些汇编的知识,这里我们预先温习这方面的知识:http://student.csdn.net/space.php?uid=105001&do=blog&id=3861
阅读(546) | 评论(1) | 转发(0) |
0

上一篇:链接地址、加载地址和程序重载

下一篇:没有了

给主人留下些什么吧!~~

chinaunix网友2011-01-11 21:27:41

第三点什么时候更新出来 啊