由于嵌入式体系的环境要求,嵌入式操作体系一般需求供给可增加或可削减的内核及其他功用,以可以让用户依据需求进行装备。
现在,嵌入式微处理器品种许多,嵌入式操作体系要支撑尽可能多的处理器,这就要完结操作体系针对不同处理器的定制。
本文剖析了嵌入式操作体系Windows CE。NET的特色,并运用东西Platform Builder 4。2完结了其在以ARM920T为中心的S3C2410处理器上的定制。
1 Windows CE体系和Platform Builder 4.2
Windows CE是微软推出的一个32位、多线程、多任务的嵌入式操作体系,是微软专门为信息设备、移动运用、嵌入式运用等规划的嵌入式模块型操作体系。用户可挑选、组合和装备Windows CE。NET的模块和组件来创立用户版的操作体系。
Windows CE。NET是WindOWS CE 3。0的后继产品,其体系组成如图1所示。Windows CE。NET为快速树立下一代智能移动和小内存占用的设备供给了一个杰出的实时操作体系,它具有完好的操作体系特性集和针对端对端开发的环境,并包含了定制设备所需求的全部,例如,联网才能、实时性、小内存占用、多媒体以及Web阅读功用。
Platform Builder 4。2是微软供给给Windows CE。NET开发人员进行依据Windows CE。NET渠道下嵌入式操作体系定制的集成开发环境。它供给了一切进行规划、创立、编译、测验和调试Windows CE。NET操作体系渠道的东西,开发人员可以经过交互式的环境来规划和定制内核、挑选体系特性,然后进行编译和调试。一起开发人员还可以运用Platform Builder来进行驱动程序和运用程序项意图开发等。
2 硬件渠道
HHARM9-EDU开发渠道是由华恒公司开发的一套用于嵌入式体系教育的渠道,它由中心板和底板组成。中心板上集成了Samsung S3C2410处理器、16 M 的FLASH 和64 M SDRAM。Samsung的S3C2410处理器是一款高性价比、低功耗、体积小、高性能、高集成度的微处理器,它选用203 MHz的ARM920T内核,集成了16 KB指令缓存和16 KB数据缓存,并运用MMU完成对虚拟内存的办理,LCD控制器支撑STN屏或FTT屏,支撑NAND flash。中心板功用模块见图2。
3 Windows CE. NET体系移植
3.1 移植流程
从根本上说,Windows CE。NET的移植进程也便是改写BSP的进程。BSP又称板级支撑包,它是一个包含发动程序、OEM适配层程序(OAL)、规范开发板(SDB)和相关硬件设备的驱动程序的软件包。BSP是依据Windows CE。NET渠道体系的首要部分。操作体系移植进程为:
1)对操作体系进行削减,装备各个组件而且修正相关的装备文件;
2)开发方针设备体系上的设备驱动程序,树立定制的CE操作体系映像文件;
3)将方针文件下载到方针设备上进行调试;
4)定制操作体系内核后,导出渠道SDK,供在Embedded Visual C++中开发上层运用软件。
移植流程见图3
开发东西Platform Builder本身就供给了多种方针板的BSP。假如用户的方针板和Platform Builder供给的相同,那么只需求从头编译生成相应的体系镜像下载到方针板即可。可是实际情况更多的可能是处理器相同,而板上的外围设备接口不同,这时候只要修正Platform Builder中相同或附近的处理器的BSP来生成一个新的BSP,这样就可以大大削减BSP的研制周期。
3.2 依据S3C2410板的BSP开发
BSP的开发首要包含Bootloader、OAL、本地驱动程序的开发以及一些文件的装备 。
1)Bootloader便是在操作体系内核运转之前运转的一段小程序。经过这段小程序,可以初始化硬件设备、树立内存空间的映射图,从而将体系的软硬件环境带到一个适宜的状况,以便为终究调用操作体系内核准备好正确的环境。它存放于方针渠道的非易失性存储介质中,如ROM 或Flash。本文移植运用的是华恒公司供给的ppcboot。
2)OAL即设备商适配层中坐落Windows CE内核和方针硬件渠道之间的一个代码层。开发OAL的意图是为了完成Windows CE。NET内核和方针硬件之间的通讯,包含处理中止、定时器等。
3)Device Drivers(驱动程序)是指可以办理虚拟或许物理设备、协议、服务等的一段软件模块,操作体系经过驱动程序直接和硬件打交道。设备驱动规划的具体进程是经过Platform Builder创立一个新的渠道,然后依据硬件渠道的需求刺进和移除驱动,需求修正的文件有Platform。Bib,Platform。reg及驱动程序源代码等。下面以LCD驱动程序源码为例,依据华恒的参考资料,需求对PB的原有驱动进行如下修正:
WORD TempBuffer[241][320]; // 改后buffer的巨细
S3C2410DISP::S3C2410DISP(void)
{
RETAILMSG(0,(TEXT(++S3C2410DISP::S3C2410DISP )));
//setup up display mode related constants
m_nScreenWidth=240; //屏幕宽由本来的480改为240
m_nScreenHeight=320; //屏幕高由本来的640改为现在的320
m_colorDepth=16;
m_cbScanLineLength=m_nScreenWidth*2;
m_FrameBufferSize=m_nScreenHeight*m_cbScanLineLength;
//memory map register access window ,frame buffer,and program LCD controller InitializeHardware();
寄存器设置是由D:WINCE420PLATFORMsmdk2410KERNELHALcfw。c中的InitDisplay函数进行设置。驱动中经过读注册表中的相应键的值来取得framebuffer的地址。
[HKEY_LOCAL_MACHINEDriverS3C2410CONFIG]
DisplayDll=s3c2410disp。dll
LCDVirtualFrameBase=dword:ac100000