Boot Loader点点滴滴

http://tech.ddvip.com   2007年03月18日    社区交流

本文详细介绍Boot Loader点点滴滴

  MSDOS+Loadcepc

  这种方式非常简单,在MSDOS启动后再执行loadcepc.exe,让loadcepc加载nk.bin到内存后再把CPU控制权交给CE内核程序。loadcepc在前面的文章中已经讲过了。

  下面根据一般的Boot Loader源码来分析一下Boot Loader的组成:

  Boot Loader由两部分组成:OEM启动代码(OEM startup code)和主代码(main code)。OEM启动代码是最先执行的部分,它的功能是初始化内存寄存器、设置CPU频率、初始化高速缓存等。之后它跳转到主代码中执行。一般OEM启动代码都是用汇编编写。主代码一般用C语言编写,它负责其它所有任务,在执行的同时还能够将执行的相关信息显示在屏幕上。一般添加公司LOGO或者其它启动LOGO都在此修改。

  主代码主要由几个部分组成:镜像下载代码,通过并口或者网卡来实现从远程计算机下载nk.bin;串口调试代码,包含对串口的读写函数,用户调用这些函数就可以通过串口在远程计算机和本地计算机之间通信;写flash代码,包含写镜像到flash的函数;硬件监控代码。

  一般的Boot Loader的执行流程见下图:

  

  上图中每个函数的功能如下:

  StartUp() :CPU最先执行的函数。也就是启动代码。

  BootLoaderMain() :先后调用KernelRelocate、OEMDebugInit、OEMPlatformInit、OEMPreDownload等函数。此函数源码文件路径为%_WINCEROOT%publiccommonoakdriversethdbglcommon 。

  OEMDebugInit() :初始化串口。

  OEMPlatformInit() :执行特定平台的初始化工作,如时钟、一些驱动程序。

  OEMPreDownload() :做下载前的准备工作。一般用于反馈给用户一些信息。

  DownloadImage() :下载操作系统镜像到RAM或者Flash。

  OEMLaunch() :负责启动镜像。

  OEMReadData() :从远程计算机读取数据。

  OEMMapMemAddr() :专用于写Flash时使用。因为写flash的速度非常慢,所以此函数将Flash镜像临时缓冲到RAM中。

  OEMShowProgress() :从函数名就能看出。

  OEMIsFLashAddr() :判断一个地址是否是Flash的地址。

  OEMFinishEraseFlash() :判断是否完成了擦除Flash内容工作。

  OEMWriteFlash() :写镜像到Flash。

  OEMStartEraseFlash() :开始擦除Flash。

  OEMContinueEraseFlash() :继续擦除Flash工作。

作者:付林林    责编:豆豆技术应用

正在加载评论...