您的位置 首页 新品

根据S3C2410处理器对Windows CE 5.0操作系统完成BSP移植

基于S3C2410处理器对Windows CE 5.0操作系统实现BSP移植-移植基于S3C2410的Windows CE 5.0 BSP,需要分析Windows CE 5.0 及BSP结构。Windows CE 5.0是一款开放的、可升级的32位嵌入式操作系统,具有高可靠性,是一种硬实时嵌入式操作系统,它可以在多种处理器架构(如x86、MIPS、ARM和 SH4)上运行,Windows CE支持ARM体系结构,这是基于S3C2410 处理器进行BSP移植的前提条件。Windows CE 5.0 BSP通常包含以下几部分:Bootloader,OAL(OEM adaptation layer),设备驱动程序,配置文件等。

1、导言

在当往后PC年代,嵌入式体系运用得越来越广泛,嵌入式产品充满着许多范畴,日常日子的手机,MP4,PDA等都归于典型的嵌入式体系。在嵌入式体系中,微处理器和操作体系是进行运用开发的根底。在微处理器方面,S3C2410是Samsung公司推出的一款依据ARM920T内核的16/32位 RISC嵌入式CPU,首要面向手持设备以及高性价比、低功耗的运用。在操作体系方面,Windows CE 5.0是由微软供给的一款嵌入式操作体系,在Windows CE 4.2根底上,它又加入了一些新特性以满意市场需求。板级支撑包 (Board Support Package,BSP)是操作体系的一个组成部分,供给对硬件的支撑。BSP的开发在整个产品开发时刻上占了很大份额,快速的移植满意产品需求的BSP 在竞赛剧烈的市场环境里显得很重要。现在已有许多关于S3C2410、Windows CE以及BSP相关的研讨报导,文献[1]研讨依据s3c2410的GPS通讯技能及完结,文献[2]中翔实剖析Windows CE的结构,文献[3]中概括了Windows CE 4.2专用操作体系的定制和裁剪办法,文献[4]则讨论依据DSP嵌入式多媒体运用体系板级支撑包的开发。现在关于Windows CE的运用首要选用Windows CE 4.2及以下版别,本文研讨依据S3C2410的Windows CE 5.0 BSP移植技能。

2、 Windows CE 5.0及BSP结构剖析

移植依据S3C2410的Windows CE 5.0 BSP,需求剖析Windows CE 5.0 及BSP结构。Windows CE 5.0是一款敞开的、可晋级的32位嵌入式操作体系,具有高可靠性,是一种硬实时嵌入式操作体系,它可以在多种处理器架构(如x86、MIPS、ARM和 SH4)上运转,Windows CE支撑ARM体系结构,这是依据S3C2410 处理器进行BSP移植的前提条件。Windows CE 5.0 BSP一般包含以下几部分:Bootloader,OAL(OEM adaptation layer),设备驱动程序,装备文件等。

BootLoader是加电即运转的一段程序,它初始化硬件,树立体系的内存空间映射,为终究调用体系内核做准备。在Windows CE 5.0体系中,它首要用于下载和发动镜像nk.bin,也便是两种作业形式:发动加载形式:用户终究运用的产品即为该形式;下载形式:镜像首要被 bootloader下载到方针机的RAM中,然后被固化到Flash。

设备驱动程序依照导出的接口不同可分为:本机驱动程序以及流接口驱动程序。本机驱动程序有GEWS.exe加载的鼠标,键盘,接触屏,显现驱动等。而流接口驱动程序运用一组流函数来完结,一般由Device.exe加载,如网卡,声卡,USB等。

OAL是逻辑上驻留在Windows CE内核与方针设备之间的代码层,在物理上OAL与内核库衔接来发生内核可履行文件。OAL简化了操作体系与方针代码之间的通讯,OAL代码用来处理中止,记时器,电源办理,通用I/O操控等。

ConfiguraTIon File里边包含的是与生成的镜像相关的装备信息。

移植Windows CE下S3C2410对应的BSP,便是修正Windows CE自带的BSP或许修正硬件渠道曾经版别的BSP的几个首要组成部分,使得BSP能有用支撑硬件体系。

3 、BSP移植

假如从零开始开发Widows CE 5.0 BSP,则需求恰当长的时刻。一般的做法是:⑴将自己硬件渠道依据Windows CE 4.2及曾经版别的BSP移植到Windows CE 5.0体系上;⑵从Windows CE 5.0 BSP中寻觅与硬件渠道最接近的作为模板,然后再从自己的硬件渠道上下手做相应的修正,然后得到可以在自己体系上运用的BSP。本文讨论的BSP移植归于第一种状况。

本次移植渠道选用的是深圳英蓓特公司的EdukiTIII试验箱,微处理器是S3C2410,外带64M NAND Flash芯片等相关硬件资源。软件资源有:edukit2410包(Windows CE 4.2版别下的BSP)。

3.1 bootloader移植

bootloader的履行流程如下:

⑴ 履行startup.s:对CPU,内存操控器,Cache等做一些根本的初始化。

⑵ 初始化串口:调用函数OEMInitDebugSerial()来完结。

⑶ 初始化渠道:调用函数OEMPlatformInit(),首要对所需硬件资源进行初始化,一般包含:以太网操控器(CS8900A)、体系时钟存储设备以及其他一些外围设备。

⑷ 调用函数OEMPreDownload():做一些准备作业如获取IP地址,初始化TFTP衔接等。

⑸ 履行函数DownloadImage():下载镜像到SDRAM中。

⑹ 调用OEMLaunch()函数发动操作映像。

其间startup.s,OEMInitDebugSerial()可以与OAL同享运用,两函数的修正在OAL移植进程中叙说。

Bootloader移植首要进程有:

⑴ 修正相应的dir,source文件,下面列出部分库途径:

TARGETLIBS=

$(_TARGETPLATROOT)lib$(_CPUINDPATH)csp_arm.lib

$(_COMMONOAKROOT)lib$(_CPUDEPPATH)eboot.lib

$(_COMMONOAKROOT)lib$(_CPUINDPATH)cs8900dbg.lib

其间csp_arm.lib这个库只存在于Windows CE 4.2的$(_PUBLICOAKROOT),是ARM体系结构链接库之一,在Windows CE 4.2体系下坐落PUBLIC目录,而在Windows CE 5.0体系下存在于PLATFORM,导致编译体系找不到该库文件,因而,修正这个库的链接途径,使得Platform builder这个编译体系可以找到这个链接库。

⑵ 修正makefile.inc,由于该文件指定生成eboot.bin(Ethernet bootloader镜像)所需求的文件以及复制eboot.bin到releasedir目录,其间:

romimage $(_TARGETPLATROOT)ebootboot.bib

为生成生成eboot.bin所需求的装备文件,不然,体系经过编译却无法生成eboot.bin.

⑶ 修正boot.bib,使其不与config.bib中的内存分配形成抵触。

⑷ 改善eboot,由于eboot烧写NK.BIN(OS镜像)的时分会查找BINFS分区,然后把下载的image烧写到BINFS分区。假如没有找到现存的BINFS分区,eboot会低格NAND FLASH,并创立MBR(main boot record),在MBR中有分区表。现在最多支撑4个分区,而BINFS分区的巨细是以NK.BIN打开的巨细按block对齐,所以会呈现个问题,当修正过重新生成的NK.BIN比之前写进NAND FLASH的IMAGE大而且超出block对齐的时分,将会导致烧写新的NK.BIN失利,咱们可以经过每次下载烧写NK.BIN前先低格NAND FLASH来处理这个问题,但明显这不是妥善的处理办法,增加用户运用杂乱度,所以咱们可以把BINFS分区的巨细固定,而这个固定的巨细可以参阅生成 NK.BIN的config.bib中界说的ROMSIZE,这样不管NK怎样修正,BINFS一经创立无需更改,eboot把NK写进NAND FLASH之后,会把剩下的FREE空间创立一个FAT分区,假如咱们要完结HIVE REGISTRY就可以把这个分区mounts成MountAsBootable。

3.2 OAL移植

OAL的移植进程中,OEM首要完结以下几个函数:Startup.s,调试串口函数,OEMInit函数,体系时钟函数,中止处理函数等。

⑴ 修正Startup.s,此函数为OS发动时第一个要调用的函数,也是OEM要完结的重要函数之一,首要完结的功用是:将CPU初试化到一种已知的状况;并调用内核初始化函数kernelstart。Startup.s需求修正,修正后的部分代码如下:

依据S3C2410处理器对Windows CE 5.0操作体系完结BSP移植

⑵ 修正串口调试函数。履行完Startup.s,体系就跳转到Kernelstart函数,坐落private目录,该函数第一个使命便是初始化串调试口,不然,就无法进行后边的调试作业。其间OEMReadDebugByte, OEMWriteDebugByte, OEMWriteDebugString不用做修正,需求留意的是OEMInitDebugSerial,选UART0,UART1的寄存器装备不一样,若选用UART0,运用装备:

s2410IOP-》rGPHCON = ~((3 4) | (3 6));

s2410IOP-》rGPHCON |= ((2 4) | (2 6));

而挑选UART1,则运用装备的是:

s2410IOP-》rGPHCON = ~((3 8) | (3 10));

s2410IOP-》rGPHCON |= ((2 8) | (2 10));

⑶ 完结OEMInit(),该函数将调用以下函数:OALCacheGlobalsInit(),OALIntrInit(),OALTImerInit(),OALKitlStart()来初始化Cache Global,中止,时钟,发动KITL,完结代码如下:

void OEMInit()

{

OALCacheGlobalsInit();// 初试化cache globals

if (!OALIntrInit()) {

OALMSG(OAL_ERROR, (

LERROR: OEMInit: failed to iniTIalize interruptsrn

));

} // 初试化中止

OALTimerInit(1, S3C2410X_PCLK/2000, 0); // 初始化时钟

OALKitlStart();// 初始化KITL

}

⑷ 完结OALTimerInit(),该函数用于初始化OS TIMER,设置每毫秒发生一个System tick,为体系计数,触发进程调度。由CPU的运转主频和硬件定时器资源来确认,履行进程有:初始化时钟状况全局变量,初始化高分辨率时钟函数指针,使能TIMER。

⑸ 完结中止处理处理函数:OALIntrInit(),该函数一般先初始化中止映射表,由于WINCE为了模块化,把渠道相关物理中止号和体系中止号树立映射。然后铲除外部中止,内部中止等。

3.3 驱动移植

以接触屏为例,来讨论Windows CE 5.0体系驱动程序移植。这儿以三星公司ARM9内核芯片S3C2410接触屏接口为根底,经过外接4线电阻式接触屏构成硬件根底,整个接触屏由横向电阻线和纵向电阻线组成。接触屏驱动的首要函数组成有:

TSP_Poweron 该函数将履行接触屏的一些初始化,首要是寄存器的装备。

DdsiTouchPanelEnable:使能DDSI接口,使得硬件能将流数据供给给DDSI接口,就可以完结接触的操作了。

DdsiTouchPanelSetMode:形式设置函数,设置接触屏是高采样率仍是低采样率

DdsiTouchPanelGetPoint :接触屏进行采样函数

TSP_CalibrationPointGet:坐标转化函数,该函数完结将从AD采样植转化成坐标。

移植首要进程:

⑴ 修正source文件,要增加如下库文件:

TARGETLIBS=$(_COMMONSDKROOT)lib$(_CPUINDPATH)coredll.lib

SOURCELIBS=

$(_COMMONOAKROOT)lib$(_CPUINDPATH)tch_cal.lib

$(_COMMONOAKROOT)lib$(_CPUINDPATH)tchmdd.lib

由于这个驱动在Windows CE 4.2下面是在Public目录,而这儿将该接触屏移到了Platform下面,在Windows CE4.2下面是没有以上三条链接库,但Platform,Public编译途径,先决条件都不同。因而引证的库不一样。

⑵ 删去如下库文件:

$(_TARGETPLATROOT)lib$(_CPUINDPATH)drvlib.lib

该库在Windows CE 4.2体系下为接触屏与音频共用库,但在Windows CE5.0体系下,这个库现已不是必要的而且现已不存在了,所以删去掉,不然体系会出编译过错。

⑶修正platform.bib,将咱们移植过来的驱动dll包含到nk.bin中

⑷修正platform.reg,其间CalibrationData是接触屏的一个参数:

[HKEY_LOCAL_MACHINEHARDWAREDEVICEMAPTOUCH]

MaxCalError=dword:7

portrait

CalibrationData=517,610 897,934 142,936 129,290 891,285

其他驱动的进程与接触屏相似。

3.4 移植小结

此次移植是晋级BSP,而硬件上根本没有改动,因而许多代码不需做修正即可运用,经过以上移植,不难发现此类移植BSP进程中所要做的作业首要在以下几个方面:

⑴ 修正dir文件,在dir文件中指定了当时目录哪些文件夹被体系编译,编译器依据dir层层查找,而移植BSP不可避免的带来了目录的改动,经过修正dir来指定新的编译途径。

⑵ 修正sources文件,在sources文件中,指定了编译类型有PLATFORM,OAK;编译的时分引证的库 sourcelib,targetlib不一样,移植的时分必定得留意。方针文件类型有Library,Dynlink,program;include 字段包含的则是编译时分所需求的头文件目录。有个比较特别的sources是坐落Platform(例如smdk2410)下的sources.cmn,它包含了该渠道的通用库,头文件途径,这个文件在移植进程中需求修正的,不然,编译犯错。

⑶ 修正platform.bib,platform.reg等文件,由于这两个文件决议了镜像中包含哪些模块(dll)以及注册表相关信息,驱动移植的进程中,每个模块的改动都需求修正这两个装备文件。

⑷ 驱动源文件中的头文件的修正以及函数,变量修正等,这些依据编译时分呈现的过错来确认。

除此之外,各部分的移植还需特别留意的当地有:

Bootloader部分:由于bootloader下载,烧写,发动镜像进程会涉及到内存地址的问题,各种进口地址不能出过错,以及内存超出范围,抵触都需求特别当心。尤其是g_oalAddressTable这个表,这个表界说了物理地址虚拟地址之间的转化以及内存的巨细,假如设置不正确,将呈现校验过错,下载失利或许镜像无法发动等过错。

OAL部分:startup.s以及OEMInitDebugSerial两函数需求特别留意,这两个首要是初始化硬件及串口,这是体系运转及驱动调试的根底,假如硬件装备以及调试串口有改动,则需求恰当的修正。此次BSP移植,因硬件渠道没有改动,因而OAL部分许多代码无须修正即可运用。

驱动部分:Windows CE4.2与Windows CE5.0的结构,库有了很大的改动,因而需求修正引证库途径,以及头文件的引证途径,大部分驱动都将会遇到这样的问题。

4 、结束语

本文立异点:经过对BSP结构剖析,将详细渠道的Windows CE 4.2 BSP移植到Windows CE 5.0版别,包含移植bootloader,OAL,驱动程序,使之可以经过编译并生成镜像,现已能在渠道上成功运转。经过这次移植,使笔者体会到BSP 移植是一个挺杂乱,烦琐的进程,因Windows CE 5.0跟Windows CE 4.2 BSP包的安排结构不同,导致许多链接库无法找到或许是这些库现已被替换,删去,只要耐性的依据这些过错提示来定位,有时分也需求去makefile里去找答案。不过移植BSP比重新开发BSP愈加节约开发时刻,然后缩短产品的研制。

责任编辑:gt

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/96318.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部