Chinaunix首页 | 论坛 | 博客
  • 博客访问: 192109
  • 博文数量: 33
  • 博客积分: 1460
  • 博客等级: 上尉
  • 技术积分: 500
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-24 18:08
文章分类

全部博文(33)

文章存档

2009年(4)

2008年(9)

2007年(20)

我的朋友

分类: LINUX

2007-12-16 07:59:38

想成为嵌入式软件工程师,总得把firmware、bootloader、OS以及芯片的体系结构作个较全面的了解。正是基于这种想法,在熟悉了51和ARM结构及其平台下的编程之后,便要来研究bootloader。

所谓bootloader,个人理解它是以加载OS为目的。和PC一样,嵌入式系统的OS,同样要在RAM上运行,这有别于一般的单片机编程:程序直接在ROM中运行,只将变量、堆栈等放在RAM中。所以把代码从存储器拷贝到RAM中,变成了bootloader的工作之一。一般的,嵌入式系统的存储器以Flash应用最广,Flash分为两种:norFlash和nandFlash,打个不恰当的比方,norFlash相当于ROM,程序可以直接在其上运行,nandFlash相当于硬盘,只负责存储程序。所以一般的bootloader代码都存储在norFlash中,上电后芯片可直接读取其上的代码来运行,而S3C2410芯片比较特别,以它为平台构建的系统可以用nandFlash来储存bootloader。因为它自带了4K的RAM,上电后通过硬件机制将存储器中的前4K代码拷贝到芯片自身的RAM里。

现成的bootloader,其架构基本分为两个部分,第一部分用汇编编写,与芯片体系结构密切相关,主要用于芯片的初始化、准备RAM空间以及加载第二部分C程序。以vivi bootloader用于S3C2410,并存储于nandFlash为例,arch/s3c2410/head.s便是其第一部分,用汇编编写,实现基本的初始化以及代码搬迁(从nandFlash拷贝到RAM),然后跳转到RAM里执行C程序;第二部分完全用C实现,完成目标板初始化和OS的加载,也可以直接在其上运行应用程序。当然还不止这些,第二部分还集成了很多命令,用于调试和下载等功能。具体的细节可以阅读其源码,推荐用windows下SourceInsight或Linux下LXR阅读,按照程序运行的顺序一步步来读,只要有C语言基础,读懂是没问题的。

剩下的就是代码的组织、编译,包括Makefile文件,Makefile文件是一个大问题,像普通的编程语言一样,有自己的一套规则,另外还设计到编译汇编工具:Gcc、as、ld等,这些都是GNU工具,每一个都需要专门研究,得慢慢来。

阅读(3234) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~