WinCE6.0的EBOOT概要
为一个新的硬件设备定制WinCE6.0操作系统,一般需要完成以下几个主要步骤:
1. 针对特定的硬件设备创建板级支持包(Board Support Package缩写为BSP),BSP必须包括BOOTLOADER、OEM适配层(OEM Adaptation Layer缩写为OAL)和一些必要的驱动。
2. 利用创建的BSP,定制一个系统设计(OS Design)。即通过VS2005创建一个Platform Builder的工程。该工程可编译产生最终的运行时映像文件(Rum-time Image)。
3. 针对板上的外围设备创建相关驱动,并添加到BSP中。
4. 通过创建子工程和Catalog Items的方式,修改OS Design。
5. 编译OS Design,下载编译得到的运行时映像文件到目标设备。此时,可通过远程调试工具进行调试。
6. 在完成所有的调试工作之后,导出该运行时映像对应的SDK(Software Development Kit),应用程序的开发人员可基于此SDK编写该设备的应用程序。
可以看出,在整个WinCE操作系统的移植过程中,BSP的移植是最基础也是最关键的一步。而创建BSP的过程主要包括以下几个内容:
1. 创建BOOTLOADER。BOOTLOADER在开发的过程中用于下载操作系统映像文件。
2. 创建OAL。OAL最终被链接到内核映像文件,它主要完成硬件的初始化和管理。
3. 创建设备驱动。设备驱动是板上外围设备的软件支持。
4. 修改运行时映像的配置文件。配置文件主要包括BIB、REG等文件。
BOOTLOADER的主要作用是将操作系统运行时映像加载到内存,并跳转到OS的启动程序处。它的这一作用跟前一篇介绍的NBOOT的作用完全一致。BOOTLOADER获取运行时映像(一般对应的文件名为NK)一般有两种方法。它可以通过有线连接的方式象网络(Ethernet)、USB或串口从外部下载NK。它也可以从本地的存储器(Flash、Hard Disk)中加载NK。通常,BOOTLOADER通过Ethernet下载操作系统映像故将其称为EBOOT。在开发的过程中使用EBOOT,可以提高开发效率。通过使用EBOOT,你可以很快速的下载NK到目标设备中。而利用Flash编程工具或者是通过JTAG下载则很慢。在一些产品最终发布时,EBOOT是可以去掉的,但也有一些则必须包括BOOTLOADER,像X86的平台就是如此。
至此,我们已经了解了EBOOT的主要功能,为了实现这些功能,EBOOT必须完成以下工作:
1. 初始化MCU。包括初始化MCU的相关寄存器、中断、看门狗、系统时钟、内存和MMU。前面几项跟NBOOT基本一致,但这里增加了对MMU的初始化。
2. 在完成所有的初始化工作之后,调用BootloaderMain()。这个函数的定义在WinCE6.0中对应的文件是C:"WINCE600"PLATFORM"COMMON"SRC"COMMON"BOOT"BLCOMMON"blcommon.c
3. BootloaderMain()主要依次调用以下几个函数,OEMDebugInit()、OEMPlatformInit()、OEMPreDownload()、OEMLaunch(),而这些函数必须由EBOOT的代码来实现。
4. 最终跳转到OAL.exe的StartUp处,进而启动WinCE操作系统。
整个流程如下图所示:
EBOOT的代码可参考C:"WINCE600"PLATFORM"DEVICEEMULATOR"SRC"BOOTLOADER"EBOOT目录。这里针对S3C2410的EBOOT做几点说明。前一篇介绍NBOOT加载EBOOT的方法时提到,NBOOT必须将EBOOT放在内存中指定的位置,这个位置是由EBOOT的来决定的。具体的,在EBOOT中的体现是boot.bib里的内存配置,如下图所示。
NBOOT加载EBOOT到内存的地址必须与此地址对应。由于在NBOOT中没有使用MMU,所以NBOOT使用的实际地址应该为0x30021000,否则系统将不能正常启动。第二点,如果没有采用NBOOT加载EBOOT的方法,而是将EBOOT直接存储在NOR Flash中,此时必须在EBOOT的代码中实现自加载的过程,即将NOR Flash中的EBOOT全部加载到RAM中,并执行,实现代码如下:
![](/assets/blank.gif)
;------------------------------------------------------------------------------
; Copy boot loader to memory
ands r9, pc, #0xFF000000 ; see if we are in flash or in ram
bne %f20 ; go ahead if we are already in ram
; This is the loop that perform copying.
ldr r0, = 0x21000 ; offset into the RAM
add r0, r0, #PHYBASE ; add physical base
mov r1, r0 ; (r1) copy destination
ldr r2, =0x0 ; (r2) flash started at physical address 0
ldr r3, =0x10000 ; counter (0x40000/4)
10 ldr r4, [r2], #4
str r4, [r1], #4
subs r3, r3, #1
bne %b10
; Restart from the RAM position after copying.
mov pc, r0
nop
nop
nop
; Shouldn't get here.
b .
WinCE6.0的EBOOT概要相关推荐
- WinCE6.0 修改开机Logo方法集锦(二)
中秋假期已过,回来继续该博文主题.今天讲解第二种方法,将Logo图片的数据写入到Nand Flash中,在启动初始化LCD的时候,从固定的地址将数据读出并填充到显示缓存中.<?xml:na ...
- 基于WINCE6.0下载multiple XIP镜像文件
********************************LoongEmbedded******************************** 作者:LoongEmbedded(kandi ...
- WINCE6.0 chain.bin和xipkernel.bin解析
********************************LoongEmbedded******************************** 作者:LoongEmbedded(kandi ...
- WINCE6.0文件系统及存储管理器
*******************************LoongEmbedded******************************** 作者:LoongEmbedded 时间:201 ...
- WINCE6.0+S3C2443的启动过程---内核启动
********************************LoongEmbedded******************************** 作者:LoongEmbedded(kandi ...
- WINCE6.0 + S3C2443的启动过程---nboot篇
WINCE6.0 + S3C2443的启动过程---nboot篇 我们启动WINCE6.0的方式是:nboot+eboot+NK.那么是如何启动WINCE6.0系统映像的呢?首先是nboot把eboo ...
- WINCE6.0+S3C2443的启动过程---eboot1
WINCE6.0+S3C2443的启动过程---eboot 我们知道从nboot把eboot从nandflash中拷贝到内存指定的地址后,就接着在这个地址处开始运行eboot了,之后,nboot的工作 ...
- WINCE6.0+S3C2443的RTC初始化及存在的问题
1.系统启动过程中RTC初始化 在WINCE6.0中,我们知道是通过OALIoCtlHalInitRTC()函数来设置RTC的时间的,但是如何调用到这个函数的呢?我们就从NKStartup()函数开始 ...
- WinCE6.0 修改开机Logo方法
中秋假期已过,回来继续该博文主题.今天讲解第二种方法,将 Logo 图片的数据写入到 Nand Flash 中,在启动初始化 LCD 的时候,从固定的地址将数据读出并填充到显示缓存中. 实 ...
最新文章
- Cisco ××× 完全配置指南-连载-PIX和ASA连接的故障诊断与排除
- Java中关于==和equal的区别 以及equals()方法重写
- 使用Mybatis的Generator可能导致的一个错误
- 面试官系统精讲Java源码及大厂真题 - 04 Arrays、Collections、Objects 常用方法源码解析
- php的header()函数前有echo输出情况分析
- 三、synchronized同步锁
- 结对编程之求首尾相连数组中最大子数组的和
- angular自带的一些api_在Angular软件中执行API请求的正确方式,了解一下
- HTML,CSS,font-family:中文字体的英文名称 (宋体 微软雅黑)
- OPPOA83_OPPOA83T_官方线刷包_救砖包_解账户锁
- ABBYY FineReader15最新免费下载安装地址激活2020注册机教程
- 晶体三极管共射放大电路(共射基本放大电路)的研究与设计
- 计算机桌面文字重影,电脑桌面图标有重影是什么问题?
- 前有标兵,后有追兵,自热老兵莫小仙胜算还剩几成?
- 寒假集训难题(四)QWQ和神奇的传送器nefu1608
- 村路安防工程建设展开 未来投入将进一步加大
- nagios之nsca被动监控
- python十字坐标轴绘制_matplotlib画十字坐标图
- arcgis安装后重启提示 flexnet vendor daemon 交互式服务检测
- c fread 快读 详解_万事开头难,手把手教你搭建Appium自动化测试环境,实践案例详解...
热门文章
- 1025 反转链表 (25分)
- x86从实模式到保护模式实验说明
- C语言基础之数据结构
- (JAVA)Integer类之基本数据类型之间的转换
- 潭州课堂25班:Ph201805201 爬虫基础 第九课 图像处理- PIL (课堂笔记)
- [NOI2014] 起床困难综合症
- PCL—关键点检测(rangeImage)低层次点云处理
- 《JavaWeb从入门到改行》注册时向指定邮箱发送邮件激活
- 刷题向》一道逆向思维题(BZOJ1046)(NORMAL)
- [密码学基础][每个信息安全博士生应该知道的52件事][Bristol Cryptography][第37篇]The Number Field Sieve