WinCE 的设备驱动程序
设备驱动程序是嵌入式操作系统中一个重要部分,它是外设和应用软件的接口,追随了微软的一贯风格。
WinCE的设备驱动程序规范和丰富,需要特别指出的是,WinCE 5.0所有的驱动程序全部是采用动态加载方式,即在操作系统内核启动以后对硬件外设(如USB、LCD) 加载,驱动程序依然运行在内核空间。简单来讲,这种驱动程序是在用户态和我们熟悉的Windows 系统的DLL方式没有区别,其好处是程序员调试一个驱动的时候会很方便,和应用程序的调试没有差异,可以使用正常的函数调用,把驱动的动作和数据显示在屏幕上;再有,相对用户自己开发的驱动程序,可能有不稳定和可靠的地方,运行在用户态,整个系统将会更稳定些。
但是问题和缺陷也显而易见,就是因为驱动的动态加载和内核的切换代表性能的损失,对于桌面系统这可能没有太大的影响,但是在嵌入式系统,用户对实时性能的要求要严格得多。为了解决这个问题,在新的WinCE6.0里面的驱动程序将分为内核模式和用户模式两种,内核模式侧重效率,用户模式侧重稳健和可靠。微软力求保证驱动程序的主体结构没有大的变化,微软资料显示大约有几天的时间可以完成一个一般规模的驱动的移植过程,微软公司和微软的增值代理都提供了相应的课程。
WinCE开发工具
微软工具新的策略是使用一个标准的Visual Studio 2005平台支持全部的微软嵌入式操作系统系列的开发,历史上支持过WinCE和Windows Mobile 开发的工具有:
*操作系统开发-Platform Builder,它的作用是构建操作系统,设有配置和调试工具,CE6.0以后这个工具就不单独存在,而是合并到Visual Studio 作为它的一个插件。
*应用程序开发-eMbedded Visual C++,支持本地应用程序开发C, C++, MFC(微软基础类), ATL(COM的目标和Active X 控制),这个工具在CE5.0版本以后已经合并到Visual Studio 2005里面。
*Visual Studio 2005-微软全新的开发工具已经包含了Platform Builder, 值得特别提到的是Visual Studio 2005支持微软托管的应用代码编写和调试,即.NET Compact Framework,它是NET Framework专门针对WinCE优化后的一个简化版本。在嵌入式设备上可以大幅提高软件开发生产力,对于软件越来越成为嵌入式设备的主要成本之一将会起到积极的作用,是一次编程多次使用的软件重用理想的实现。Visual Studio 2005为了方便嵌入式系统应用软件开发而设计的支持不同硬件平台的“软仿真器”也给用户留下很深的印象。
图3 基于NET Compact Framework的汽车外接显示装置
面向微型设备的.Net Micro Framework
前面提到的.NET Compact Framework虽好,但因为依托WinCE平台要求的硬件资源比较大,微软的 .NET Micro Framework 是微软面向嵌入式系统中微型设备和单片机(MCU)市场的一个新的产品,是WinCE, Windows Mobile和Windows XP Embedded 在嵌入式市场的一个补充。.NET Micro Framework应用可能是小型工业网关、家庭能源管理装置、遥控器,也可以是Windows Vista PC 的sideshow(枝节)设备,如笔记本电脑的副屏(可以播放MP3、显示日历、行程等)等,如图3所示。微软.NET Micro Framework 目前支持基于32位微处理器ARM7和9的硬件平台,已经移植好的参考硬件平台有飞思卡尔iMXS、DIGi Connet ME和EmbeddedFusion。
.NET Micro Framework 把通用的I/O设备,如UI、GPIO、SPI、Comm等做好一个类库(见图4),其他和应用相关的硬件设备由合作伙伴(如DIGi)完成,值得注意的是,.NET Micro Framework还可以运行在一个小RTOS(实时操作系统)上,如DIGI平台运行的是Threadx RTOS, 微软认证的合作伙伴使用微软提供的porting kit把这些设备类库移植好,这样使得嵌入式工程师能在不了解单片机硬件的前提下开发单片机的应用。.NET Micro Framework 里面有一个重要的部件叫CLR—可以理解为是个运行代理,它的作用是个实时的编译器,负责执行被用户提交的管理代码,CLR还负责内存和线程管理,如图4所示类库以上的应用层都是被管理代码(managed code),下面还是C/C++本地代码(native code),这样整个.NET Micro Framework代码非常的小,大约是250~500K。(WinCE 大约是1~12M左右)。需要指出的是,.NET Compact Framework不是一个传统意义的实时多线程操作系统,但是它可以支持多线程的操作,可以满足一定范围上实时要求,如通过设置UI是主线程满足一定的显示面板输入响应的要求,通过看门狗定时器和中断方式满足和实时设备接口数据通讯的要求。.NET Compact Framework的编程方式更接近微软的桌面图形编程界面,如,同样使用delegate、callback处理外部事件。
.NET Micro Framework的SDK是开放给所有用户的,但是要得到porting kit需要得到微软的认证。信息产业部集成电路和软件促进中心(CSIP)是微软授权的.NET Micro Framework在中国的技术培训和合作伙伴。
.NET Micro Framework面向的是一个对于微软来讲全新的市场,可以说这种开发方式是对这个市场久已习惯的嵌入式软件开发方式的一次革命性的改变,从技术发展趋势看,无疑是一个正确的方向。在最近的技术大会上,微软.NET Micro Framework产品经理和主要设计者Colin Miller非常有信心的给大家分享了微软.NET Micro Framework下个版本开发计划,比如支持TCP/IP、USB、 BT/ZIGBEE、CAN总线和文件系统等等。但是应该看到,由于嵌入式系统的特殊性和多样性,微软目前支持的平台还比较少,合作伙伴的设计和应用还待成熟和完善,.NET Micro Framework在国内的发展还需要一定的时间。
图4 .NET Micro Framework的结构图
微软产品和其他RTOS比较
嵌入式系统毕竟不是桌面系统,用户需求的差异和环境差异很大,平台的变化也多,用户的选择余地就大。为了方便用户比较和选择一个合适的嵌入式操作系统,微软官方网站上提供了第三方的评测报告供用户阅读和分析;国内外基于微软的嵌入式成熟应用也可以供参考;微软中国的市场和教育普及工作也对用户了解微软嵌入式操作系统大有帮助。下面仅对目前国内嵌入式系统比较流行的嵌入Linux 和VxWorks 进行分析,比较他们和微软嵌入式操作系统的差异和各自特色。
嵌入式Linux
最近结束的LinuxWorld China 2007 大会上,Linux基金会执行总监Jim Zemlin展望未来时再次强调,嵌入式和移动应用是除标准、虚拟计算和桌面外的一个重要的发展领域。比较微软和其他的嵌入式操作系统,Linux和嵌入式Linux(经过嵌入式优化的Linux商业和非商业版本)的优势在于:1,开放性,Linux100%源代码公开;2,广泛性和成功的开发模式,全球化的社区开发和维护方式已经被验证是一种高效率和成功的软件开发模式;3,各种CPU和最新的硬件器件和系统的支持;4,丰富的开源资源和第三方应用软件。
Linux的缺点是,第一,实时性。Linux本身并不是为嵌入式系统而设计的,从操作系统系统结构设计偏重于可靠性和网络的效率,虽然商业嵌入式Linux公司如MontaVista 在2.4内核上实现了可抢占的实时调度,开源社区也有了2.6 RT补丁,但是比较WinCE 和VxWorks 实时性都略逊一筹,来自南京大学的文章中有一个可以参考数据表格,见表1。
第二,开发工具。Linux的开发工具一直是一个软肋,从开源社区分工讲。内核和工具链是两个完全独立的部分,内核的开发和维护人员主要依赖于命令行工具。可喜的是,开源的Eclipse框架已经成为包括嵌入式Linux 在内的传统嵌入式操作系统的集成开发环境(IDE),基于Eclipse的商业嵌入式软件如DevRocket、Workbench和Linuxscope也正在成熟。但是相对微软的Visual Studio 2005,应该说中国的用户更加熟悉微软的开发工具。
第三,完整应用软件方案,嵌入式系统要求的是有针对性的应用软件方案,嵌入式Linux虽然已经有完整的操作系统组件,但是缺少针对具体应用的软件方案,举个智能手机的例子,微软的 Windows Mobile for SmartPhone基本含有了手机硬件驱动(BSP)、内核、TCP/IP、文件系统基本组件、手机软件和多媒体办公软件等丰富的应用软件,这些基本涵盖了整个智能手机所需要的全部软件。但是相比较而言,嵌入式Linux的方案就显得单薄多,虽然借助于包括Trolltech(奇趣) 的qtopia在内的手机应用软件或者Access 的整套手机Linux软件方案,Linux手机软件仍缺少完整性和成熟性,这点对于包括中国手机企业在内的2~3线的手机制造和设计公司带来一定的压力。
第四,商业化产品和服务。比较微软,Linux和嵌入式Linux的商业公司规模小而且没有标准化,虽然社区具有丰富的开发和创意的资源,但是社区没有义务提供商业的服务和承诺。
风河的VxWorks
VxWorks是传统嵌入式操作系统中的佼佼者,特别是在通信、国防和工业控制领域具有较强的优势。VxWorks是基于微内核技术的实时内核,从设计和实际的使用情况看,完全可以满足硬实时性的要求,这点较Linux有较强的优势。相较于WinCE,VxWorks的实时性要更好一点,设备管理和驱动要简练和高效些。VxWorks6.1的版本之后还提供基于MMU内存保护和错误管理的机制(目前CE和.NET MicroFramework 还不支持),使系统的可靠性更有保证。VxWorks系统的配置灵活,代码尺寸相较于WinCE和Linux要小得多,基本系统甚至比.NET Micro Framework还要小,这样适合更低配置和成本要求的嵌入式设备。
VxWorks的网络功能强大,风河公司和第三方都有大量的网络协议和应用软件支撑,VxWorks的API 是POSIX 兼容,这样通信行业的标准代码就很容易移植进来了(Linux 有相同的特点),这可以说是WinCE的一个弱点。
但是,VxWorks 在消费电子和手持移动设备方面应用比较微软操作系统甚至Linux都相对少得多,从技术和商业层面看,笔者认为主要是这样几个原因:1,VxWorks是从内核发展成为一个比较完整的嵌入式OS,但是API和图形系统并不是十分标准和流行,单靠VxWorks自己的产品和松散的第三方资源还很难形成完整和公认的消费电子中间件。2,VxWorks早期是采用开发授权加上版税的方式收取费用,这种方式不能为强调成本控制的OEM/ODM(委托制造/委托设计)厂商所接受,比如在过去的5年里,中国台湾OEM/ODM生产的家用无线网络产品多数都转到Linux平台,手机和GPS转到上市比较快的WinCE和Window Mobile平台。OEM/ODM不能接受为售价只有15~25美元的无线路由器再支付哪怕是1美元(甚至更少)的版税了。
当然,风河公司已经充分意识到这个问题,并在过去几年改变了商业模式,比如以收取年费的方式取代版税模式,同时风河正式采用双OS的策略,进军嵌入式Linux 市场,推出风河通信和消费电子用Linux 平台,以期和微软抗衡,这是因为它的实质也是一个基于开源的嵌入式Linux版本。
结语
从前面的分析我们不难看出,微软嵌入式操作系统产品线完整,开发工具成熟,产品的市场定位明确,可以为OEM/ODM提供从操作系统到应用的全面解决方案和到后台服务器的无缝连接方案。面对强手如林、需求独特的嵌入式世界,微软面临的挑战和困难要比其他领域大得多。中国是世界消费电子产品的生产和消费大国,手机、GPS、多媒体移动终端、电视、机顶盒这些嵌入式装置都是微软嵌入式操作系统的重要目标市场。最近,“2007 Windows 硬件工程大会”及“2007 移动与嵌入式开发者大会”和.NET Micro Framework大会在北京召开,说明了微软对中国嵌入式市场的重视,以及中国用户对微软嵌入式操作系统的关注。微软的嵌入式操作系统将为绚丽多彩的嵌入式世界增添一朵奇葩。