巧手定制Windows CE系统

2024-02-12 13:32
文章标签 定制 系统 windows ce 巧手

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

 

这篇关于巧手定制Windows CE系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/702679

相关文章

JWT + 拦截器实现无状态登录系统

《JWT+拦截器实现无状态登录系统》JWT(JSONWebToken)提供了一种无状态的解决方案:用户登录后,服务器返回一个Token,后续请求携带该Token即可完成身份验证,无需服务器存储会话... 目录✅ 引言 一、JWT 是什么? 二、技术选型 三、项目结构 四、核心代码实现4.1 添加依赖(pom

基于Python实现自动化邮件发送系统的完整指南

《基于Python实现自动化邮件发送系统的完整指南》在现代软件开发和自动化流程中,邮件通知是一个常见且实用的功能,无论是用于发送报告、告警信息还是用户提醒,通过Python实现自动化的邮件发送功能都能... 目录一、前言:二、项目概述三、配置文件 `.env` 解析四、代码结构解析1. 导入模块2. 加载环

linux系统上安装JDK8全过程

《linux系统上安装JDK8全过程》文章介绍安装JDK的必要性及Linux下JDK8的安装步骤,包括卸载旧版本、下载解压、配置环境变量等,强调开发需JDK,运行可选JRE,现JDK已集成JRE... 目录为什么要安装jdk?1.查看linux系统是否有自带的jdk:2.下载jdk压缩包2.解压3.配置环境

Linux查询服务器系统版本号的多种方法

《Linux查询服务器系统版本号的多种方法》在Linux系统管理和维护工作中,了解当前操作系统的版本信息是最基础也是最重要的操作之一,系统版本不仅关系到软件兼容性、安全更新策略,还直接影响到故障排查和... 目录一、引言:系统版本查询的重要性二、基础命令解析:cat /etc/Centos-release详

更改linux系统的默认Python版本方式

《更改linux系统的默认Python版本方式》通过删除原Python软链接并创建指向python3.6的新链接,可切换系统默认Python版本,需注意版本冲突、环境混乱及维护问题,建议使用pyenv... 目录更改系统的默认python版本软链接软链接的特点创建软链接的命令使用场景注意事项总结更改系统的默

在Linux系统上连接GitHub的方法步骤(适用2025年)

《在Linux系统上连接GitHub的方法步骤(适用2025年)》在2025年,使用Linux系统连接GitHub的推荐方式是通过SSH(SecureShell)协议进行身份验证,这种方式不仅安全,还... 目录步骤一:检查并安装 Git步骤二:生成 SSH 密钥步骤三:将 SSH 公钥添加到 github

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤