全部博文(35)
2010年(35)
分类: 嵌入式
2010-06-21 21:44:34
bsp源文件为:AT91SAM9261EK_CE6.0_Source_BSP_v1.0.3(从官方网站下载)
Eboot的程序还是很复杂的,用了一天的时间整理整个Eboot的执行脉络。
主要的内容就是StartUp()和BootloaderMain()这两个函数,StartUp()已经在我的博客中说过了:
http://blog.chinaunix.net/u3/116083/showart_2257806.html
今天主要是讲讲BootloaderMain()和Eboot的执行脉络,以后再慢慢解析。
BootloaderMain()是BLCOMMON支持库中的接口函数。
BLCOMMON是一个库,其实现代码位于%_WINCEROOT%\Public\Common\Oak\Drivers\
Ethdbg\Blcommon目录下。它实现了Windows CE BootLoader的基本框架。这个库的工作为:将bootloader加载到RAM中执行、解压缩.bin文件、校验硬件平台的完整性、对加载的进度进行跟踪。在BLCOMMON阶段执行的过程中,主要使用OEM函数集。
BLCOMMON库的入口点为BootloaderMain函数,它有Startup汇编函数完成后跳转至该入口。BLCOMMON库将被BootLoader的程序链接在一起。在系统启动时,CPU首先执行StartUp函数,这是个由汇编实现的函数。StartUp函数主要的功能为:设置CPU工作频率、关闭看门狗、设置cache、设置RAM的刷新率、填写内存控制寄存器(通知CPU有效的数据总线引脚数)等。在StartUp完成任务后,就跳转到BootLoaderMain函数中。这个是由C语言编程实现的函数入口点。
关于BootloaderMain()的详细描述:我的博客会转载一篇文章来说明。
附件是EBOOT的执行脉络已经相关函数所在的文件的目录