巧手定制Windows CE系统

嵌入式系统正在日益广泛的应用于各个方面,嵌入式系统的最大特点在于其精简和实时性。公司近期委派我负责一个新的嵌入式系统项目,因为是小型设备,所以我面临的第一个难题是需要找一个体积少,但非常灵活添加外围接口的嵌入式系统。

  最初提出了两种方案,第一种是在完整的系统上进行裁剪,第二种是在磁盘上直接安装内核、启动脚本等文件来实现最小系统。经过再三思考,在众多的嵌入式操作系统中,我选择了Windows CE作为操作系统平台,通过对Windows CE进行裁剪以定制一个适合需求的嵌入式系统。

  一.什么是Windows CE裁剪与定制?

  (1)嵌入式系统发展的瓶颈

  嵌入式系统一般包括硬件和软件两部分。硬件平台包括CPU、存储器、I/O端口等。软件部分包括支持实时和多任务操作的嵌入式操作系统和应用程序,应用程序控制着系统的运作和行为,而操作系统控制着应用程序与硬件的交互作用。

  随着价格低廉、结构小巧的CPU和连接稳定可靠的外设硬件大量使用,限制嵌入式系统发展的瓶颈就突出表现在软件方面。对上层应用开发者而言,嵌入式系统需要的是一套高度简练、界面友善、质量可靠、易开发、多任务,并且价格低廉的操作系统。因此,一旦嵌入式处理器和外围硬件选定了,那么工作最多的就集中在嵌入式软件的选择和研发。而嵌入式软件的嵌入式操作系统和应用软件就成了重中之中。嵌入式操作系统是与应用环境密切相关的,从应用范围大致可以分为通用型和专用型两种嵌入式操作系统。

  (2)什么是WINDOWS CE .NET定制系统?

  从原理上说,嵌入式操作系统仍旧是一种操作系统,因此它同样具有操作系统在进程管理、存储管理、设备管理、处理器管理和输入输出管理几方面的基本功能。由于硬件平台和应用环境与一般桌面操作系统的不同,它最大的特点是可裁剪和可定制,也就是它能够提供可配置或可剪裁的内核功能和其它功能,可以根据应用的需要有选择的提供或不提供某些功能以减少系统开销。

  嵌入式操作系统和嵌入式操作系统定制或配置工具紧密联系,构成了嵌入式操作系统的集成开发环境。就WINDOWS CE来说,我们无法买到WINDOWS CE这个操作系统,买到的是Platform Builder for CE.NET的集成开发环境,简称为PB,利用它可以剪裁和定制出一个符合需要的WINDOWS CE.NET操作系统。所以,WINDOWS CE .NET操作系统一般需要经过裁剪与定制开发,包括高级创建、系统调试、创建板支持包、驱动程序开发等内容。因此,我们说的WINDOWS CE系统实际上完全是由自己定制出来的,这就是嵌入式操作系统最大的特点。

  对于嵌入式的应用软件,通常是指运行在嵌入式操作系统之上的软件。这种软件由于不是针对常规的操作系统进行开发,因此很多如VB、VC++等开发工具就不方便使用了,于是就有专门的SDK或集成开发环境来提供这种开发需要。对Windows CE的应用软件开发,微软提供Embedded Visual Basic(EVB)、Embedded VisualC++( EVC)、Visual Studio.NET等专门针对嵌入式操作系统的开发工具。

  (3)Windows CE定制平台Platform Builder

  一个嵌入式系统包括四层结构,他们是应用程序、嵌入式操作系统映像(OS Image)、板级支持包(BSP)、硬件平台组成。Windows CE的定制过程也可以说是针对不同的CPU、不同的目标板编写BSP的过程。在硬件平台上,Windows CE支持多种处理器家庭,包括x86、Xscale、arm、MIPS和SH等系列,它允许开发人员选择最理想的硬件。在操作系统映像(OS Image)方面,Windows CE.NET 是由 Platform Builder来定制的,Platform Builder提供多种配置文件和调试工具,可以将嵌入式操作系统和应用程序一起生成内核,也可以只生成Windows CE.NET操作系统,并可根据功能要求裁剪相关模块。

  Windows CE具有一个很小的核心内核包,基本上只包含排程、内存管理和kernel API,它们构成了一个完整个体,其余大部分功能都在单独的模块中完成。系统的裁剪和配置是在Platform Builder中完成,配置文件包括4种文件类型:二进制映像生成文件.BIB、注册表文件.REG、目录和文件配表文件.DAT、数据库文件.DB。通过修改这些配置文件可以裁剪优化Windows CE。灵活运用Platform Builder的配置文件.REG、.BIB、.DAT、.DB是定制适合目标平台Windows CE操作系统的关键。

  另外,所有.DAT文件合并在修改配置文件时,一定要注意CE.BIB、REGINIT.INI、INITOBJ.DAT、INITDB.INI是中间文件,修改这些文件并不能配置Windows CE。而可配置的秘密是隐藏在建构操作系统映像文件的过程当中,这个映像文件包括操作系统的kernel,内存中的档案系统,储存的程序和文件,系统配置文件,注册表数据库等。整个建构过程可以分成四个阶段:CESYSGEN、BSP、BUILDREL、MAKEIMG。

二.Windows CE内核定制过程

  嵌入式开发涉及到的问题很多,其中最主要有操作系统内核的定制,驱动程序的编写,和应用程序的研发。对我们开发程序员来说,熟练的掌控嵌入式内核的定制有利于提高效率。Windows CE内核定制是研发的一个重点,它不同于一般应用程序的研发,因为它涉及到硬件。内核定制包括定制板级支持包BSP、定制系统模块、定制原始设备商适配层( OAL)及设备驱动等程序。Windows CE内核定制是在Platform Builder内完成的,它是微软提供的专业软件,能够从官方网站得到评估板。

  (1)搭建Platform Builder环境

  微软的Platform Builder集成研发环境包含一系列研发工具,利用它提供的配置文档和调试工具能够快速定制适合目标平台的Windows CE操作系统,只要适当修改和配置Platform Builder的配置文档就能够裁剪和添加相关组件,和配置各种设备驱动程序。

  Platform Builder提供了创建和调试Windows CE映射NK.BIN的集成开发环境,如向导和工具栏,支持活动模板库(ATL)、微软基本类库(MFC)和Visual Basic,为支持的处理器家庭提供编译器、内核调试器以及各种远程调试工具。通过网络通信我们可以将Windows CE操作系统映像文件NK.BIN下载到目标平台,然后让Windows CE在目标平台启动,这时也可通过Platform Builder提供的调试工具查看Windows CE的运行情况。

  (2)板级支持包(BSP)的定制

  BSP主要包括BootLoader的研发和OAL的研发。编写BootLoader是定制Windows CE系统第一步,也是关键的一步。只有得到一个稳定工作的Loader程序,才能够更进一步研发Windows CE的BSP。BootLoader是一段单独的程序代码,它存放于目标平台的非易失存储介质中,如ROM或Flash。它主要用于启动硬件和下载NK.bin到目标板上,并有一定的监控作用。

   一般来说,对于BootLoader的功能需要并不是严格定义的,不同的场合区别很大。比如,在PC的硬件平台上,由于硬件启动根本就不是通过BootLoader(而是通过BIOS),所以BootLoader就无需对CPU加电后的初始化做任何工作;而一般的嵌入式研发平台上,BootLoader是最先被执行的程序,所以就必须包括加电初始化程序。通常,BootLoader必须包含下载CE映像文档的功能。由于BootLoader涉及到基本的硬件操作,如CPU的结构、指令等,同时又涉及到以太网下载协议和映像文档格式。因此,从零实现的话,会需要相当长的过程,通常的做法是利用微软为每种类型的CPU提供的某种标准研发板的BootLoader例程。

  OAL(OEM Adaptation Layer)是OEM 适配层,是位于Windows CE内核和硬件之间,是OAL各个模块代码被编译后(.lib)和其它内核库链接到一起形成Windows CE的内核可执行文档NK.EXE。Windows CE内核在OAL层可使用大量的函数和全局变量,利用这些函数和全局变量OEM能够编写中断处理、RTC、电源管理、调试端口、通用I/O控制代码等。一般来说,Windows CE安装目录的子目录中包含了OAL的部分源码,大多数情况下开发工程师对OAL只要修改即可,甚至无需修改。

  (3)驱动程序的开发及平台文档的配置

  在Windows CE中,任何的驱动程序都以Dll形式存在。Dll文档能够用EVC来研发,也能够使用PB来研发。平台文档配置包括4种文档类型:二进制映像生成文档.BIB、注册表文档.REG、目录和文档分配表文档.DAT、数据库文档.DB。通过修改这些配置文档能够裁剪优化Windows CE,用户根据需要来创建自己的配置文档。

  (4)SDK导出及内核下载

  BootLoader的研发会生成Eboot.nb0等文档,内核编译会生成NK.nb0和NK.bin等文档。Makeimg.exe用全部配置文件把目标模块和文件合并成一个唯一的Windows CE映像文件NK.BIN。内核下载是先通过JFlash.exe向Flash中写入Eboot.nb0文档,上电运行之后,再通过Eshell.exe来下载NK.bin。然后重起系统,定制的Windows CE就能够运行了。生成映像文件NK.BIN是平台创建过程的最后一步,也是配置Windows CE的最终目标。内核编译完成后,还可以导出一个平台SDK,供在 EVC或VS.net中开发上层软件使用。


  三. 定制Windows CE的几点小技巧分享

  (1)选择合适的硬件平台

  Windows CE.NET支持多种微处理器家族以及仿真技术,选择合适需求的CPU和标准开发主板(SDB)可以更高效的节省开发时间,这也是定制Windows CE的第一步。

  (2)巧用系统提供的BSP包

   Windows CE的移植过程基本上是针对不同的硬件平台CPU,不同的目标板编写BSP的过程。开发工具Platform Builder本身就提供了多种目标板的BSP,如果目标板和Platform Builder提供的相同,那么只需要重新编译生成相应的系统即可。但是实际情况是一般处理器是相同的,但开发板上的外围硬件接口不相同,这时候可以通过修改Platform Builder中相同或相近处理器的BSP来完成一个新的BSP。因此,嵌入系统的开发人员应要多使用Windows CE.NET包括的主板支持包(BSP),从而缩短在硬件开发上所需的时间。

  (3)借鉴标本程序加快驱动程序开发

  定制Windows CE系统还有一个非常重要的步骤,就是为外围设备开发驱动程序。通常的做法是从这些外围驱动例程中寻找和硬件平台最接近的作为标本程序,然后再从所选择的硬件平台上做相应的改变,一些新的外围设备应使用由第三方厂商来提供驱动程序,以加快完成开发,使嵌入式产品尽快上市。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/435797.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【转】vscode配置C/C++环境

转自:vscode配置C/C环境 - 知乎 VS Code配置作者:谭九鼎 链接:Visual Studio Code 如何编写运行 C、C 程序? - 知乎 有改动。个人按照步骤后,做到复制上三个json那一步,就可以运行了。 我将settings.json…

Boot Loader的启动流程和开发经验总结

Windows CE最大程度继承了桌面版Windows的丰富功能,但是Windows CE并不是一个通用的安装版操作系统。在形形色色的嵌入式设备世界里,一款CE系统通常只会针对某一种硬件平台生成。 一般来说,Windows CE的开发过程可以分为:0AL…

c# 相对路径的一些文献

1.获取和设置当前目录的完全限定路径。string str System.Environment.CurrentDirectory;Result: C:\xxx\xxx2.获取启动了应用程序的可执行文件的路径,不包括可执行文件的名称。string str System. Windows .Forms.Application.StartupPath;Result: C:\xxx\xxx3.获…

【转】dicom网络通讯入门(1)

转自:dicom网络通讯入门(1) - assassinx - 博客园 如果只看标准就会越看越糊涂,根本原因就是因为dicom抽象得太严重,是“专家”弄的。没办法。 那么到底服务类是什么?sop 又是什么?&#xff0…

三种嵌入式操作系统的分析与比析

1.1 嵌入式系统 嵌入式系统是以嵌入式计算机为技术核心,面向用户、面向产品、面向应用,软硬件可裁减的,适用于对功能、可靠性、成本、体积、功耗等综合性能有严格要求的专用计算机系统。 嵌入式系统应具有的特点是:高可靠性&#…

用WebORB实现flex + .net后台的Remoting

实现flex与后台通信最简单的方式是采用httpServic的方式,或webservice。但这两种方式都是基于文本的传输,传输效率低,采用RemoteObject的方式,传输的内容采用AMF3格式的二进制编码,效率较高,并且能实现远程…

【转】dicom网络通讯入门(2)

转自:dicom网络通讯入门(2) - assassinx - 博客园 首先我们现一个echo响应测试工具,也就是echo 的scu,不是实现打印作业管理么。同学我告诉你还早着呢。本来标题取的就是《dicomviewer 第二弹 之 实现打印管理》名字多…

基于WINCE6.0下载multiple XIP镜像文件

备注:基于usb下载的方式,MLC nand flash为K9G8G08U 1. Multiple XIP模式的文件说明 Multiple XIP模式下生成的文件有chain.bin、chain.lst、NK.bin、xip.bin和xipkernel.bin,如下图所示: 图1 2. Eboot下载Multiple XI…

Final Michael Scofield

转载于:https://www.cnblogs.com/andrewx/archive/2009/08/16/1547738.html

【转】dicom网络通讯入门(3)

转自: dicom网络通讯入门(3) - assassinx - 博客园 接下来可以进行消息传递了 ,也就是dimse ,再来复习下 什么是dimse 。n-set n-create c-echo 这些都是dimse 他们都是属于一种结构的pdu 那就是tf-pdu(传…

从零开始学习jQuery (三) 管理jQuery包装集【转】

一.摘要 在使用jQuery选择器获取到jQuery包装集后, 我们需要对其进行操作. 本章首先讲解如何动态的创建元素, 接着学习如何管理jQuery包装集, 比如添加,删除,切片等. 二.前言 本系列的2,3篇上面列举了太多的API相信大家看着眼晕. 不过这些基础还必须要讲, 基础要扎实.其实对于…

【转】ubuntu 下 VNCview 远程桌面无法传输文件问题

转自:ubuntu18.04VNCview文件传输问题_gsls200808的专栏-CSDN博客_vnc传输文件按钮不可用 很多文章说VNCview不能传输文件,实际上这是一个误区。 以ubuntu为例,默认使用 sudo apt-get vnc4server 这个命令安装上的vncserver实际是tigerVNC…

在何时该用什么方式编译WinCE

这是一篇很好的文章,很多开发者其实并没有搞清楚这个问题:在何时该用什么方式编译WinCE 导致走了很多弯路,也包括我自己 感谢作者写了这篇文章 这么好的文章,我想应该翻译过来给大家 在何时该用什么方式编译WinCE 在新闻组里&…

public protect private继承

引自原来在CGD讨论的几点总结:1. public继承被称为类型继承(type inheritance)。往往反映is-a关系。2. protected继承基类的所有公有成员都成为派生类的protected成员。这意味着它们可以被后来从该类派生的类访问,但不能在层次结构…

【转】Ubuntu 16.04 安装 CUDA10.1 (解决循环登陆的问题)

转自:Ubuntu 16.04 安装 CUDA10.1 (解决循环登陆的问题) - Hongkai_Ding - 博客园 0. 前言 这里直接用 cuda安装文件同时安装 NVIDIA 驱动和 CUDA,没有单独安装更高版本的 NVIDIA 驱动;此安装是在 Intel 集显下的图形…

一面微创题--字符串逆序输出

最近一直在等面试消息,都有点着急了,的确,还有太多不足,笔面之后的一面技术面,幸运地是在三个面试者中面试官留下了我,可是一句话又搞的我一点底都没了:“你别以为你通过了就怎么着,…

返回北京

6点15做311新街口转800到光明桥转800到医院7:40挂上号9:30叫到号,护士站调病例分诊大屏幕显示叫号,可到挂号处缴费。到一层影象预约中心预约,相同检查可合并。胸片预约可当时等候检查。一层牌号抽血。乘434方庄环岛南下,王沛肿瘤科…

C++中的强制转换

标准c中主要有四种强制转换类型运算符&#xff1a; const_cast&#xff0c;reinterpret_cast&#xff0c;static_cast&#xff0c;dynamic_cast等等。 1&#xff09;static_cast<T*>&#xff08;a&#xff09; 将地址a转换成类型T&#xff0c;T和a必须是指针、引用、算术…

SQL_经验碎片

这个帖子主要记录一些sql的学习经验转载于:https://www.cnblogs.com/SDJL/archive/2009/09/08/1562607.html

【转】Ubuntu 16.04 Nvidia驱动安装(run方式)

转自&#xff1a;Ubuntu 16.04 Nvidia驱动安装(run方式)_lihe的博客-CSDN博客 1.下载驱动程序 Nvidia驱动下载 https://www.geforce.cn/drivers/beta-legacy http://www.nvidia.cn/Download/index.aspx 根据显卡选择适用的驱动版本&#xff0c;下载完之后是一个名称为 NVIDIA…