原创 关于wince bootloader的一点分析

2009-8-3 19:46 2951 5 5 分类: MCU/ 嵌入式

这段时间的项目需要,使得我花了点时间分析了下wince6bootloader。这个东西还是有点复杂,真要用文字具体清晰的描述恐怕没有几十页是不成。下面我只根据我自己的理解简短的做个分析。


Bootloader要做的事情,这个大家应该很清楚,无外乎是下载内核,烧写Flash,启动OS。当然可以在里面实现其他功能,但不是必须的。


Wince6bootloader当然是烧写到Flash中,通过JTAG工具。如果板子上有nor flash,可以把bootloader烧写到nor flash上,这样可以上电XIP。但目前流行的趋势是采用大容量nand flash,很多设计上都只有nand flash,而nand flash是不能XIP的,因此bootloader放到那上面是无法直接执行的。办法是 CPU要内部集成nand flash控制器,这个控制器要支持boot from nand功能,其实说白了就是处理器内部的控制器能够上电直接把nand flash的前面一小块拷贝到sdram中去,相当于控制器内部有个小cpu+sram运行一段程序把nand flash中最前面那一段拷到内存中。


Wince6中微软提供了这么个bootloader的框架:


cf545f99-3bcf-4f57-9b60-8257a3a85d2a.jpg


<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


其中BLCommon是一个通用的bootloader库,实现的都是些与具体硬件无关的功能,但是它需要底层的OEM代码支持;EBOOT是微软提供的基于以太网的bootloader实现,它基本上也是通用的,当然它同样需要OEM代码支持,比如实现以太网控制器的驱动,这个常常需要用户自己实现;bootpart 这个东西就是实现在flash上分区的功能,它下面以来与具体flash的驱动。


Wince下现在最常用的bootloader大概就是eboot。上电后,首先执行的是startup()这个函数,它是汇编写的,这个函数干的事情就是初始化cpusdram控制器,包括关闭MMU,清TLB,cache,关中断。这样后续代码是在中断关闭的情况下,访问的地址全是物理地址,没有开启虚拟地址的情况下执行,这样的好处就是简单。Startup()完了后会跳入bootloadermain()函数,在这个函数里调用bootloadermain()函数,这个函数干以下事情:


1.       调用OEMDebugInit( ),初始化调试端口,以后可以输出调试信息了,通常都会选择一个串口,因为它简单


2.       调用OEMPlatformInit( ),初始化板子(所谓的platform),比如RTC,显示,flash控制器,以太网控制器等,通常还可以在这里实现显示bootloader的菜单。(当然并比一定要这么做,也可以把这个工作放在下面OEMPreDownload中做)。在这个函数里会打开MMU,启用虚拟内存。


3.       根据用户的选择分别执行,如果选择下载内核,则调用OEMPreDownload(),这个函数设置设备名,设置MAC地址,IP地址啊等,为下载内核做必要准备;然后调用DownloadImage()下载内核。如果选择直接启动OS,那么它会去读出存储在flash上的内核


4.       调用OEMLaunch()函数,这个函数负责启动OS,在启动前可能会传递一些参数给内核。一般的在启动内核前,bootloader会重新关闭MMU,跳到内核中的startup()执行。


 


Eboot中是通过bootmetftp协议来下载内核的,这部分协议的实现微软做好了。大概说来移植个bootloader,要做下面几件事情:


1.       实现用来下载内核的以太网控制器驱动,就是OEMReadDat()等几个函数


2.       实现读写擦除flash的功能,用于烧写flash


3.       实现那个g_oalAddressMap,定义好 SDRAM,各外设寄存器等的物理地址和虚拟地址对应关系


4.       实现调试串口的驱动,主要也就是实现OEMInitDebugSerial(),OEMWriteDebugString()等几个函数


5.       可能还要实现eboot输出的那个菜单功能。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
5
关闭 站长推荐上一条 /3 下一条