Windows CE嵌入式开发入门——基于Xscale架构(1)

1.BootLoader的构成组件
BootLoader主要由以下两部分组成。
(1)OEM startup code
这部分代码是在BootLoader中最先被执行的。它的主要功能是初始化最小范围的硬件设备,比如设置CPU工作频率、关闭看门狗、设置cache、设置RAM的刷新率、填写内存控制寄存器(通知CPU有效的数据总线引脚数)等。由于系统刚刚启动,不适合使用复杂的高级语言,因此这部分代码主要由汇编程序完成。在汇编程序段设置完堆栈后,就跳转到C语言的Main函数入口(位于<PLATNAME>/eboot/main.c);
(2)Main code
这部分代码由 C 语言实现,是 BLCOMMON 代码的一部分,它可以用来执行比较复杂的操作。比如检测内存和 Flash 的有效性、检测外部设备接口、检测串口并且向已经连接的主机发送调试信息、通过串口等待命令、启动网络接口、建立内存映射等汇编无法完成的工作。
Main code包含以下代码段:
Image download代码段
Image的下载可以通过以下接口。
① A. Parallel port I/O接口。这是通过主机和目标机的并口之间的数据传输来完成下载工作。具体实现代码,读者可以参考/kernel/hal/mdppfs.c文件;
Ethernet port I/O 接口。这是通过主机和目标机的网络接口之间的数据传输来完成下载工作。具体实现代码,读者可以参考 WINCE420/public/common/oak/DRIVE|RS/ETHDBG/EBOOT 文件夹;
③ Debug serial I/O接口。这是通过主机和目标机的串口之间的数据传输来完成下载工作。利用串口来传输的缺点非常明显,那就是速度太慢;
通过事先 Flash write代码将镜像文件固化入 Flash。只要BootLoader被设计成能从Flash加载镜像文件,本选项就可以使用。
2.BootLoader控制流函数Control Flow Functions
图9-5为Windows CE.NET的BootLoader的整体架构。其中列出了各种控制流函数。
图9-5  Boot Loader的整体架构
下面,我们来看以下Windows CE.NET的BootLoader在系统启动时所执行的函数。
图9-5中的所有函数分为3个模块:BLCOMMON、Download Function、FLASH Function。其中BLCOMMON模块是由微软公司提供的,执行一些逻辑上的功能,因此建议开发人员不要对其进行修改。而Download Function、FLASH Function中的函数与硬件平台息息相关,因此对于每种硬件平台都要将函数的实现进行修改。
BLCOMMON模块的功能解释。
BLCOMMON 是一个库,其实现代码位于 %_WINCEROOT%/Public/Common/Oak/Drivers/
Ethdbg/Blcommon目录下。它实现了Windows CE.NET BootLoader的基本框架。这个库的工作为:将bootloader加载到RAM中执行、解压缩.bin文件、校验硬件平台的完整性、对加载的进度进行跟踪。在BLCOMMON阶段执行的过程中,主要使用OEM函数集。
BLCOMMON库的入口点为 BootloaderMain函数,它有Startup汇编函数完成后跳转至该入口。BLCOMMON库将被BootLoader的程序链接在一起。
在系统启动时,CPU首先执行StartUp函数,这是个由汇编实现的函数。StartUp函数主要的功能为:设置CPU工作频率、关闭看门狗、设置cache、设置RAM的刷新率、填写内存控制寄存器(通知CPU有效的数据总线引脚数)等。在StartUp完成任务后,就跳转到BootLoaderMain函数中。这个是由C语言编程实现的函数入口点。
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值