WinCE Bootloader

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

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

Wince6 bootloader 当然是烧写到 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 的框架:

 

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

Wince 下现在最常用的 bootloader 大概就是 eboot 。上电后,首先执行的是 startup() 这个函数,它是汇编写的,这个函数干的事情就是初始化 cpu sdram 控制器,包括关闭 MMU ,清 TLB,cache ,关中断。这样后续代码是在中断关闭的情况下,访问的地址全是物理地址,没有开启虚拟地址的情况下执行,这样的好处就是简单。 Startup() 完了后会跳入 bootloader main() 函数,在这个函数里调用 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 中是通过 bootme tftp 协议来下载内核的,这部分协议的实现微软做好了。大概说来移植个 bootloader ,要做下面几件事情:

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

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

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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值