注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

Eboot调试(一)—基本框架流程  

2011-06-08 15:07:05|  分类: ARM学习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

一周来基本以调试EBOOT为主,从一开始满眼昏花无处下手,到昨天装备上SOURCEINSIGHT和ATMEL的

EBOOT开发文档,这才开始清楚起来,看样子,强大的工具是必不可少的,它可以让我们少走很多的弯

路。

我们学习EBOOT,首先要明白EBOOT的启动流程,也就是说启动的顺序,一如当初我们学习LINUX,要明

白LINUX的加载的顺序,先理清脉络,再加以学习,则事必成矣。
闲言少序,我们先有一个大概的流程图:

---------------------------------------------------------------------------------------
                              StartUp
                                 |
                              Main()
                                 |
                           BootLoaderMain()
                                 |
    --------------------------------------------------------------------
    |             |                      |                 |           |
OEMDebugInit()  OEMPlatformInit()    OEMPreDownLoad()  DownloadImage() OEMLaunch()
------------------------------------------|----------------------------------------------
BLCOMMON框架               --------------------------------
                           |                              |             
      DownloadFun ---OEMReadData()         FlashFun  ---OEMIsFlashAddr()
                  ---OEMMapMemAddr()                 ---OEMWriteFalsh()
                  ---OEMShowProgress()               ---OEMSatrtEraseFlash()
                                                     ---OEMFinishEraseFlase()
                                                     ---OEMContinueEraseFlash()

按照微软的框架思想,WINCE的启动分为四层:
BLCOMMON           ---------实现通用的BootLoader框架
OEM函数            ---------用户自己需要代码实现的必须的函数
BootPart           ---------主要提供对NandFlash的分区功能和对BinFS的支持。
EDBG驱动程序       ---------包括网络驱动和NAND Flash驱动。


BLCOMMON由微软提供,主要实现了Bootloader的基本框架,对应的源码存放在$(_WINCEROOT)

\PUBLIC\COMMON\OAK\DRIVERS\ETHDBG\BLCOMMON。
OEM函数由OEM厂商提供,存放在$(_WINCE600)\PLATFORM\$(_MyPlatform)\SRC\BOOTLOADER\EBOOT\
BootPart由微软提供,对应的源码存放在$(_WINCEROOT)

\PUBLIC\COMMON\OAK\DRIVERS\ETHDBG\BootPart
EDBG驱动存放在$(_WINCEROOT)\PUBLIC\COMMON\OAK\DRIVERS\ETHDBG目录下,包括大量的源代码,有

时间大家可以认真看看,受益良多。


 StartUp.s----->Main.c------->Blcommon.c
StartUp.s:初始化时钟、关中断、配置内存控制器、清空TLB和cache、设置EBOOT用的第一级页表、开

启MMU
BootloaderMain():此函数为微软提供,函数内部通过调用开发者实现的OEM函数实现bootloader的基

本流程的。它调用的4个OEM函数为:
OEMDebugInit:初始化bootloader调试功能串口。在它内部是通过调用在BSP目录OAL文件下的debug.c

里的OEMInitDebugSerial函数来初始化串口。
OEMPlatformInit :主要初始化目标板上的功能外设

启动过程函数调用的顺序和功能如下:
Startup( )            -----------------初始化CPU、内存控制器等
KernelRelocate( )     -------代码重定位至RAM
OEMDebugInit( )       -------初始化调试端口(一般为串口)
OEMPlatformInit( )    初始化板上设备(初始化显示、RTC、OAL与eboot共享参数、打印用户菜单、

网卡等)
OEMPreDownload( )     ---下载前准备(设置设备名、初始化MAC/IP参数)
DownloadImage( )      ------下载映像文件
OEMLaunch( )          -----------启动OS

各函数所在文件及位置:
1、在$(_WINCEROOT)\PLATFORM\MyPlatform\SRC\BOOTLOADER\EBOOT\下存在一个startup.s文件,。

Eboot从StartUp()函数开始执行,该函数在startup.s中实现。
2、$(_WINCEROOT)\PLATFORM\MyPlatform\SRC\BOOTLOADER\EBOOT\main.c,而目前用的ATMEL的在
$(_WINCEROOT)\PLATFORM\MyPlatform\SRC\soc\atmel\common\BOOTLOADER\GenericEBOOT\main.c
3、Main调用BootloaderMain()。BootloaderMain()函数属于BLCOMMON层,由微软官方实现,源代码存

放在$(_WINCEROOT)\PUBLIC\COMMON\OAK\DRIVERS\ETHDBG\BLCOMMON\blcommon.c
4、其它OEM函数主要在MAIN.C中实现。
了解一下基本流程,明天讲工作过程。

  评论这张
 
阅读(1038)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017