历史上的今天
返回首页

历史上的今天

今天是:2024年08月31日(星期六)

2020年08月31日 | WINCE在ARM平台的移植及驱动技术详解

2020-08-31 来源:elecfans  WINCE操作系统简介   WinCE操作系统是通用型的嵌入式操作系统,它是一个开放的、可升级的32位嵌入式操作系统,是基于掌上型电脑类的电子设备操作系统,它是精简的Windows

  WINCE操作系统简介

  WinCE操作系统是通用型的嵌入式操作系统,它是一个开放的、可升级的32位嵌入式操作系统,是基于掌上型电脑类的电子设备操作系统,它是精简的Windows 95,WindowsCE的图形用户界面相当出色。它1996年开始发布Windows CE 1.0版本,2004年7月发布了Windows CE .NET 5.0版本,目前用得最多的是WindowsCE .NET 4.2版本,其发展速度也是很快的,功能_上自不必描述,它的主要应用领域有PDA市场、PPC、Smartphone、 工业控制、医疗等。


  操作系统移植的原因

  为了更快的适应市场需求,在实际开发过程中,我们更倾向于移植操作系统而不是重新开发操作系统。这样不但可以节省时间,还能大大提高开发效率。


  由于嵌入式系统是一个软硬件紧密结合的系统,因此操作系统移植包含两个层面上的工作:一个层面是CPU级的,另一个层面是板级的。由于WinCE操作系统几乎完全是用C语言编写的,所以可移植到众多的32位微处理器。上。这其中包括ARM、x86、MIPS 和SH等, 而且CPU级的移植通常由微软或芯片制造商来完成,这会极大地减轻OEM厂商开发过程中移植操作系统的工作量,但板级层面的移植则还是需要由OEM厂商来完成的。


  一般来说,一个WinCE系统包括四层结构:应用程序、WinCE内核映像、板级支持包(BSP)、硬件平台。而基本软件平台则主要由WinCE系统内核映像(OS Image)和板卡支持包(BSP) 两部分组成。因为WinCE系统是一个软硬件紧密结合的系统,因此即使CPU处理器相同,但是如果开发板上的外围硬件不相同, 这个时候还是需要修改BSP来完成一个新的BSP。 因此换句话说,就是WinCE 的移植过程主要是改写BSP的过程。


  嵌入式OS负责嵌入式系统全部软、硬件资源的分配、调度,控制和协调各部件的工作,与普通OS相比,嵌入式OS在系统实时高效性、硬件依赖性、软件固化及应用的专用性方面具有较为突出的特点。

  WINCE在ARM平台的移植及驱动技术详解

  WINCE在ARM平台的移植及驱动技术

  1、启励程序Bootloader的移植步骤

  BootLoader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序(有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。

  WINCE在ARM平台的移植及驱动技术详解

  修改Bootloader是移植WinCE系统第一步,也是关键的一步。只有得到一个稳定工作的启动程序,才能够进-步完成WinCE BSP的移植。Bootloader主要用来管理目标平台的启动过程,它是一段单独的程序代码,通过这段小程序可以初始化硬件设备、建立内存空间的映射图和下载操作系统的映像文件等,从而将系统的软硬件环境带到一个合适的状态,它- -般存放于目标平台的非易失存储介质中, 如ROM或Flash。


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

  WINCE在ARM平台的移植及驱动技术详解

  根据我在这次项目移植得到的经验,Bootloader 的移植步骤主要是:①是修改相应的dir、source 文件;②是修改makefile.inc;③是修改boot.bib,使其不与config.bib中的内存分配造成冲突;④是改进eboot, 因为eboot烧写NK.BIN的时候会查找BINFS分区,然后把下载的image烧写到BINFS分区。


  2、OAL的移植步骤

  OAL的全称是OEMAdaption Layer,即原始设备制造商适配层。它是位于Windows CE内核和目标硬件平台之间的一个代码层,OAL主要负责WindowsCE与硬件通信,它与CPU、中断、内存、时钟和调试口等核心设备相关,也是OAL各个模块代码被编译后(.lib) 和其它内核库链接到一一起形成Windows CE的内核可执行文档NK.EXE的关键。简单的说,OAL就是用来屏蔽CPU平台的细节和抽象硬件功能,以实现操作系统内核的可移植性。


  从逻辑结构上看,OAL位于WinCE操作系统的内核与硬件之间,是连接WinCE系统与硬件的枢纽;从功能上看,OAL颇似桌面PC.上的BIOS,具有初始化设备、引导操作系统以及抽象硬件功能等作用。但与B10S不同的是,0AL隶属于操作系统,是操作系统的一部分。在WinCE6.0中,OAL首先起了穿针引线的作用,这一点可从其启动代码看出来。第二个作用,暴露一些OEM函数供Kerel调用,具体哪些函数由OEMGLOBAL决定。为了方便BSP的升级,6.0基本保留了原来的函数结构。所以,我们可以选择5.0的BSP为参考,将其移植到6.0上来。PB6.0 的安装目录中也包涵一些BSP,其中DeviceEmulator就是模拟S3C2410平台。所以,我们也可以此为参考。总之,OAL代码的来源不是问题。问题是如何快速编译这些代码,并验证其正确性。


  下面将介绍快速调试OAL的方法。

  首先Clone一个BSP,命名为2410Tiny。如果从5.0的BSP移植,需要修改相应的目录结构,在6.0中不存在CEC文件,需要做转换。Clone完成后的BSP如下图所示:

  WINCE在ARM平台的移植及驱动技术详解

  其中CATALOG目录中存放的是2410Tiny.pbcxml,它是CE6.0中BSP的组织文件,类似5.0中的CEC文件。CESYSGEN存放了一个Makefile文件。


  FILES目录存放了平台对应的配置文件如BIB、REG等。这里我们将platform.bib和platform.reg中的内容清空,注意是清空! Config.bib 的内容确保准确。


  删除SRC目录下的Drivers目录,并修改dirs文件,去掉Drivers行。如下图所示:

  WINCE在ARM平台的移植及驱动技术详解

  至此,2410Tiny的BSP准备完成,用此BSP定制一个OSDesign。在选择模板时选CustomDevice (第二项),然后直接点击完成,结束向导。进入平台属性页进行设置,如下图所示:

  WINCE在ARM平台的移植及驱动技术详解

  完成后,在Catalog Items中选中CEDB Database Engine项(我开始没选择该项,结果编译出了一堆错误,将该项选中后,重新编译,就顺利通过了。)点击编译按钮开始编译系统。


  等它编译着吧,我们继续往下看。之所以能把SRC目录下的Drivers删除,是因为我们现在还处于调试OAL的阶段,可以暂时不考虑Drivers。只要有OAL和KERNEL,WinCE 就能跑起来。从这个角度来说,我觉得OAL用来抹平MCU的差异,而Drivers则是抹平外围设备的差异。


  大概10分钟后,编译完成了,最终生成的NK.bin文件有3M多,如下图所示:

  WINCE在ARM平台的移植及驱动技术详解

  这时,我们可以启动BOOTLOADER,完成相关配置后下载该NK.bin文件,如下图所示:

  WINCE在ARM平台的移植及驱动技术详解

  3M多的NK,下载需要14秒左右。由于启用了KITL,所以最终在DebugOutput中看到WinCE启动的相关信息,如下图所示:

  WINCE在ARM平台的移植及驱动技术详解

  现在我们可以用PB6.0的Debug工具进行简单调试。先用Target Control查看系统运行的进程:

  WINCE在ARM平台的移植及驱动技术详解

  可以看到,目前WinCE6.0只运行了两个进程,NK.exe对应的就是我们的OAL.exe!再看看线程和模块的情况:

  WINCE在ARM平台的移植及驱动技术详解

  至此,可以认为WinCE6.0 的OAL已经可以正常工作。

  从我在这次项目中得到的经验来看, Windows CE安装目录的子目录中都包含有OAL的部分源码。OAL的移植实现应是在fwxsc1.s. main.c、 Flash.c、Edeviceinit.c等文件中, 可根据实际需要修改相应的代码。在OAL移植过程中,主要是修改这几个函数:修改Startup.s函数、修改串口调试函数、修改OEMInit函数、修改系统时钟函数和修改中断处理函数等。实际上,大多数情况下开发工程师对OAL只要修改即可,甚至无需修改。


  3、驱动程序的移植和开发

  驱动程序(Device Drivers)是指能够管理虚拟或者物理设备、协议、服务等的一段软件模块,操作系统是通过驱动程序直接和硬件打交道的。设备驱动程序能为WinCE提供设备控制功能, 包括: LCD/LED/VGA/SVGA显示设备、鼠标、键盘和触摸屏等。根据我在这次项目移植得到的经验,建议设备驱动程序的移植可通过Platform Builder创建一一个新的平台,然后再根据硬件平台的需要插入和移除驱动。一般来说,需要修改的文件有Plaform. Bib、Platform. reg及驱动程序源代码等。


  4、平台文件配置的修改

  平台配置文件包括源代码配置文件和操作系统镜像配置文件。源代码配置文件主要是告诉Build工具需要用到的路径,包括Dirs文件、Sources 文件和Makefile文件等。操作系统镜像配置文件则主要用于给Makeimag工具生成操作系统镜像,包括.bib、.reg、 .dat、 .db等文件。因此,在进行BSP移植的时候,也需要对这些平台配置文件进行适当的修改和变更。


  5、移植时需特别注意的地方

  很多嵌入式开发实践都证明BSP移植是一个挺复杂、烦琐的过程。因为WinCE不同版本的BSP包的组织结构是不同的,所以会导致很多链接库无法找到或者是这些库已经被替换、删除,唯一的方法是只有耐心的根据错误提示来一一定位修改。


  例如,在移植Bootloader时因为Bootloader的下载、烧写、启动镜像过程会涉及到内存地址,所以在处理各种入口地址时应该要避免出现差错或内存超出范围,尤其是处理地址冲突时需要特别小心。还有在移植OAL时, startup.s以及OEMInitDebugSerial两个函数需要特别注意,因为它们主要是初始化硬件及串口,系统运行及驱动调试的基础,如果硬件配置以及调试串口有改变,则需要适当的修改

推荐阅读

史海拾趣

ACEINNA公司的发展小趣事

ACEINNA是一家专注于研发和生产惯性传感器和解决方案的公司,以下是该公司发展的五个相关故事:

  1. 公司成立和起步阶段: ACEINNA公司成立于2017年,总部位于美国马萨诸塞州。公司由来自微机电系统(MEMS)领域的资深专家和工程师共同创立,致力于开发高性能的惯性传感器和智能控制系统。起步阶段,ACEINNA主要专注于磁性惯性测量单元(IMU)和导航解决方案的研发。

  2. 技术创新和产品拓展: 随着技术的不断进步和市场需求的增长,ACEINNA不断进行技术创新,并逐步拓展产品线。公司推出了包括惯性测量单元(IMU)、惯性导航系统(INS)、车载导航系统等在内的多种惯性传感器和解决方案,广泛应用于汽车、工业、军事等领域。

  3. 市场拓展和国际合作: ACEINNA积极拓展国内外市场,并与全球各地的客户建立了合作关系。公司的产品被广泛应用于车辆动态控制、无人驾驶、精准农业等领域,赢得了客户的认可。同时,ACEINNA还与国际知名汽车制造商、工业企业展开合作,共同推动技术进步和市场发展。

  4. 持续投入研发和创新: ACEINNA不断加大研发投入,致力于技术创新和产品升级。公司设立了专门的研发团队和实验室,拥有一系列专利技术,致力于开发新产品和解决方案,满足客户不断变化的需求。

  5. 未来发展展望: ACEINNA将继续致力于惯性传感器和智能控制系统的研发和应用,不断推出更先进、更可靠的产品和解决方案,满足客户在各个领域的需求。公司将加强国际市场拓展,提升自身在全球市场的竞争力,为行业的发展做出更大的贡献。

BAE Systems公司的发展小趣事

作为一个大型企业,BAE Systems公司不仅关注经济效益,也积极履行社会责任,推动可持续发展。公司注重环境保护和安全生产,严格遵守相关法律法规和行业标准。同时,公司也积极参与社会公益事业,为社区发展和员工福利做出了贡献。此外,公司还注重员工的培训和发展,为员工提供了广阔的职业发展空间和良好的工作环境。这些举措不仅提升了公司的社会形象,也为公司的可持续发展奠定了坚实的基础。

这五个故事只是BAE Systems公司在电子行业发展历程中的一部分,它们展示了公司的成长、创新、合作、应对挑战以及履行社会责任等方面的努力和成果。这些故事也充分说明了BAE Systems公司在电子行业中的重要地位和影响力。

安谱隆(Ampleon)公司的发展小趣事

2015年,随着恩智浦和飞思卡尔的合并,恩智浦决定将其射频业务剥离出来。这一决策旨在使两家公司能够更专注于各自的核心业务,同时也为射频业务的发展打开新的篇章。安谱隆作为这一剥离业务的承接者,应运而生。此次剥离不仅为安谱隆带来了丰富的技术资源和市场基础,也为其未来的发展奠定了坚实的基础。

Global Mixed-Mode Technology Inc公司的发展小趣事
报警灯的颜色和数量可以根据实际需求来设定。通常,为了区分不同的缺相情况,可以使用不同颜色的报警灯来对应不同的缺相相别。例如,黄色灯表示L1相缺相,绿色灯表示L2相缺相,红色灯表示L3相缺相。数量上,一般至少需要一个报警灯来指示缺相状态,但也可以设置多个报警灯以增加冗余或提供额外的视觉提示。
Abilis Systems公司的发展小趣事
三相缺相报警灯电路可以与其他电气保护设备配合使用,共同保障电气系统的安全稳定运行。例如,当三相缺相报警灯电路检测到缺相情况时,可以发出警报信号给操作人员或监控系统;同时,断路器或过载保护器等设备也可以根据设定的保护参数来切断故障电路或降低负载功率等措施来防止设备损坏或生产事故的发生。这些设备之间通过电气信号或控制逻辑相互关联和配合工作。
顺芯(Everest-semi)公司的发展小趣事

随着技术的不断进步,顺芯公司意识到只有不断创新才能在激烈的市场竞争中立于不败之地。因此,公司加大了在研发方面的投入,积极引进高端人才,并与国内外知名高校和研究机构建立了合作关系。在XXXX年,顺芯公司成功研发出了一款具有自主知识产权的高性能数模混合芯片,填补了国内市场的空白,并获得了多项专利。

问答坊 | AI 解惑

大家一起818 arm技术方面实用的网址吧

专业arm技术论坛 http://www.armjishu.com 嵌入式开源社区 http://www.oschina.net/project/tag/41 arm9开发社区   http://www.arm9bbs.com/ arm开发者论坛  http://www.armforum.cn/ FPGA/CPLD综合  http://www ...…

查看全部问答>

一种新型螺旋滤波器

一种新型螺旋滤波器…

查看全部问答>

求个 .NET Compact Framework 2.0 for CE5.0 的下载地址

求个 .NET Compact Framework 2.0 for CE5.0 的下载地址就是能放到 CE 系统里。然后能安装的那个。我只下到WM5版的。。下不到CE版的 …

查看全部问答>

有人做过6410的板子吗?

1.引脚如何引出,需要多层板吗? 2.部高频信号线时需要注意什么? 3.需要和驱动工程师沟通吗?要注意哪些方面。…

查看全部问答>

新手咨询关于WinCE如何从存储卡上读取excel文件?

新手咨询关于WinCE如何从存储卡上读取并打开excel文件?能给一个用C语言或者java语言的示例代码吗?谢谢了。…

查看全部问答>

新手问个关于用手机定位的问题?

    打听下关于手机定位,看到类似谷歌纵横的应用软件,想问下是如何实现定位的(不是用GPS),用GPS的一般好象容易点,软件好象可以根据基站来确定经纬度,原理是不是这样的:手机里的软件根据收到的基站数据(是不是类似GPS定位的原理 ...…

查看全部问答>

共同学习TMS320F28027

最近刚开始学习TMS320F28027,不过它的中文学习资料不多! 希望大家多多在论坛里交流啊 发个自己做的TMS320F28027代码生成器,不过只是GPIO部分,不知道有没有问题,请大家口下留情啊…

查看全部问答>

STM32F103VCFSMC驱动ILI9325问题

求STM32F103VC FSMC驱动ILI9325的代码 自己弄了下没成功 PD0-15 --->D0-15 NOE ------>RD NWE ------>WR NE1 ------>CS A23 ------>RS PC12 ----->RESET #define RST_PIN (*((volatile unsigned int *) 0x422201B ...…

查看全部问答>

关于C6711的电源模块

在开发板上1.8v和3.3v的电源模块比较复杂。请问有没有简单一点就能够实现的方法?并且tps56100等芯片比较难买。我手头只有TPS75833KTTT。有没有方法就用这个芯片实现电源呢?谢谢大家啊…

查看全部问答>

关于C语言地址指针的问题

比如C51可作如下定义:  code uchar x[4]={ //x定义在代码区 0x01,0x02, 0x03,0x04, }; uchar xdata *p   ...…

查看全部问答>