winCE之bootloader的学习

1、 bootloader的作用

bootloader是BSP的一部分,BSP除了bootloader还有driver以及OAL等。

很多嵌入式系统都会有bootloader的概念,想vxbox、嵌入式的linux等

最基本的作用就是把os的镜像文件读入到RAM中运行。什么意思呢?就是所有的系统都是从固定的地址开始启动,像arm就是从0x00000000开始执行;像X86就是从一个不为0的地址开始执行的。我们要是用bootloader的话,这部分地址放得就是bootloader。为什么说要用到bootloader的话呢?因为bootloader不是必须的。

有一种内存掉电不丢失,像norFlash(比较小,价格比较贵),可以自启动。我们可以将os镜像写到norFlash中,这样就不需要bootloader。

但是bootloader应用非常广泛。首先如果我们足够大的norFlash的话,我们可以将整个系统镜像放进去,但是norFlash比较小,比较贵,比dram的速度慢,所以这种架构不常用。

现在常用的架构师什么呢?就像我们的pc机,有一个类似ddr内存的ram,加上类似硬盘的NANDFlash。这样我们就需要某种方式将os镜像从nandFlash中读入到ram中运行。这个方式其实就是bootloader的功能,这也是bootloader的主要功能。(想想pc机,很容易明白啦,bios就是好比bootloader,bios将硬盘中的系统加载的ddr内存中,这样不就开启了系统吗?同理,嵌入式系统是bootloader讲nandflash中的os镜像加载到ram中,那么嵌入式系统就起来了)

bootloader还有其他的一些功能,如电源管理,系统升级。举个例子:现在嵌入式往往会提供升级的功能,比如系统有bug,但是产品已经发出去了,怎么办?那么我们可以发布一个os的镜像,放到sd卡中,让用户在开机的时候按某个键,然后直接从sd卡上读os镜像,并烧到nandflash上。这个过程就是bootloader在起作用。通过捕获按键消息,然后检测sd卡等。。。


bootloader的功能模块:

硬件平台初始化
 是bootloader里面最先执行的代码
 初始化寄存器
 设置cpu主频,初始化cache
 设置系统时钟
调试端口
 以太网
 串口
 usb接口
 debug led
下载image的代码
 下载算法,是否要压缩或解压
 下载接口 以太网,串口,usb
擦除或者写flash的代码
其他附加功能代码


bootloader流程

分两部分:

winCE之bootloader的学习_第1张图片
bootloader VS OS
os 是多任务的、能用win32API、能用中断
但是bootloader不是多任务,不能调用win32API、屏蔽所以中断


bootloader的调试
bootloader调试比较困难,调试工具比较少。如何来解决呢?
首先要确认bootloader烧录的地址时候正确,如果不正确,启动都会出问题。大部分cpu从地址0开始执行。


调试工具:
jtag
led
串口


wince提供的bootloader架构分析
bootloader代码:

winCE之bootloader的学习_第2张图片
bootloaderMain伪代码

 winCE之bootloader的学习_第3张图片

 

 

你可能感兴趣的:(api,OS,嵌入式,工具,任务,WinCE)