2023年-如何选择ARM CPU的操作系统.docx
如何选择ARM CPU的操作系统从8位/16位单片机发展到以ARM CPU核为代表的32位嵌入式 处理器,嵌入式操作系统将替代传统的由手工编制的监控程序或调 度程序,成为重要的基础组件。更重要的是嵌入式操作系统对应用 程序可以起到屏蔽的作用,使应用程序员面向操作系统级开发应用 软件,并易于在不同的ARM核的嵌入式处理器上移植。嵌入式操 作系统都具有一定的实时性,易于裁剪和伸缩,可以适合于从ARM7 到Xscale各种ARM CPU和各种档次的应用,嵌入式操作系统可以 使用广泛流行的ARM开发工具,如ARM公司的SDT/ADS和 RealView等,也可以使用开发软件,如GCC/GDB、KDE或Eclipe 开发环境,市场上还有专用的开发工具,如Tornado、mC/View、 mC/KA、CODE/Lab> Metroworks 等。本文就目前国内在ARM CPU上广泛采用的三种嵌入式操作系 统(uCOS-H、uCLinux和嵌入式Linux)作分析。uCOS-H嵌入式实时内核全世界数百种设备已经在使用uCOS-II,包括手机、路由器、 不间断电源、飞行器、医疗设备和工业控制设备。uCOS-II已经 有 ARM7TDML arm9和 Strong arm等各种 arm cpu的移植, 支持包含 Atmek Hynix、Intel、Motorola、Philips、Samsung、 Sharp等公司的arm核的CPU。uCOS-II的移植也相当容易,与 cpu相关的代码包装在三个文件中,它们是os_cpu.h> os_cpu_a.asm 和 os_cpu_c.c0uCOS-H有60多个系统调用,覆盖任务、定时器、信号量、 事件标志、邮箱、队列和内存管理,已经包含了传统嵌入式操作系 统内核(如PSOS, VRTX)的功能,还支持互斥型信号量,这是90 年代的嵌入式操作系统内核,如VxWorks和VRTXsa才有的技术。uCOS-II因为是可抢占的实时内核,所以uCOS-II与商业 嵌入式实时内核在性能上没有什么差异,uCOS-II没有用户态和 内核态,任务(线程)或中断和任务切换的响应可以很快,主要是和 ARM CPU相关的。最新的2.7X版本还增加了算法以避免在移植中 修改堆栈指针,这样可以保证uCOS-II在不同的CPU上运行更稳 定,移植更方便。uCOS-II目前除了内核外还有商业化文件系统 mC/FS,图形系统uC/GUI以及任务调试工具uC/KA和 uC/View,但是uC/OS-H自己目前还没有TCP/IP协议系统。总的来说,ucos-n是一个非常容易学习,结构简单,功能 完备和实时性很强的嵌入式操作系统内核,适合于各种嵌入式应用 以及大专院校教学和科研。最后需要说明,ucos-n不是免费软 件,任何人学习使用uCOS-II需要购买嵌入式实时操作系统 uCOS-ID) 一书,使用uCOS-II的产品需要购买产品生产授权, 购买了此授权的还可以得到开发期间的技术支持和升级服务。分页uCLinux操作系统uCLinux是Linux小型化后,适合于没有MMU(内存管理单 元)的微处理器芯片而裁剪成的操作系统,如果ARM CPU系列中的 ARM7 TDML ARM940T等产品希望使用Linux操作系统,只能用 uCLinux,当然,uCLinux 也支持 Motorola Dragonball、 Coldfire等其它中低端嵌入式处理器。uCLinux保持了传统Linux操作系统的主要特性,包括稳定、 强大的网络和文件系统的支持,uCLinux裁剪了大量的Linux内 核以缩小尺寸,适合象512k/b RAM、lM/b Flash这样小容量、 低成本的嵌入式系统。uCLinux系统小型化的另一简化是采用了 uCLib库替代Linux的Glib库,使用uCLib可以大大减少应用程 序的代码尺寸,对于中小型嵌入式应用,uCLib功能可以满足需要, 所以目前即使是某些采用Linux 2.4内核的嵌入式Linux系统也 采用uCLib库的做法。uCLinux中,由于没有内存保护机制,应 用代码一般采用静态连接的方式,而且在uCLinux中采用Flat文 件执行格式(Linux是Coff或Elf格式),uCLinux和应用代码都可 以支持固化,存储在Flash存储介质中,不需象Linux需要经过 一次Flash到RAM的拷贝。所有这些,使得uCLinux更象传统 意义上的嵌入式操作系统。uCLinux是由内核开始移植的,目前已经有 2.4 Linux支持的一些移植的版本,如S3c2500、 44B0等arm 芯片,可以在uCLinux的官方网站上找到这 些版本,uCLinux近期主要是在发展各种版本的移植,以 期跟上Linux社会主流的发展趋势(因为今后Linux 2.6将开始成 为主流的内核)。uCLinux主要是针对没有MMU的嵌入式处理器开发设计, 那么它也失去了有MMU所带来的Linux操作系统的特色,比如, 上面已经提到的静态加载(Linux支持动态应用的加载),uCLinux 对内存操作是直接的物理内存,这样,任何程序的异常都可能导致 内核崩溃,uCLinux支持多线程,但需要父子线程协调同步, uCLinux的文件系统相对比较陈旧,支持的CPU和参考设计还比 较少,社区的发展和维护也相对缓慢。目前uCLinux官方网站还 很少看见象IBM、Intel这样的大型公司身影,只有23家小型 的硬件或方案提供商,这对于商业化的产品开发中采用是有一定的 风险。嵌入式Linux操作系统这里要讨论的是可以嵌入在ARM CPU上的,具有MMU功能 的Linux操作系统,也可以称是嵌入式Linux操作系统。与微软公司 的软件不一样,Linux不是由一家公司所拥有、维护开发的,Linux 在市场有多种发行版本,所有发行版本都包含一样的Linux内核、 基本工具和应用,不同的发行版本主要是在附加的工具链、应用、 配置以及各种内核补丁上有所不同。嵌入式Linux主要是在实时 性增强、内核精简和裁减、支持多种CPU结构(如ARM CPU)等方 面做了改进和提高。分页使用嵌入式Linux系统有两种途径:第一是用户自己装配(称为DIY内核),你可以在 找到全部Linux代码,或直接到arm cpu的源 代码树下找到所需要的Linux版本的移 植,或者某些半导体公司,如三星、Motorola在自己的网站或在 自己的arm评估板含有一个最小Linux内核系统。如果这个最小 内核没有包含GCC/GDB工具链,可能还要到GNU的网站下载全 部的源代码,然后再编译生成所需要版本的ARM工具链和应用程 序库,这个过程是相当耗时和困难的。还需要指出,这种DIY内 核的配置,添加应用和驱动程序也是不标准的和复杂的,这是嵌入 式系统的特殊性所在。第二是选择一个商业化的嵌入式Linux操作系统平台。商业化 的嵌入式Linux版本是针对嵌入式处理器,如arm所优化设计的, 支持各种半导体厂家的评估板和主要的设备驱动,商业化的嵌入式 Linux包含了文件系统、应用、实时性扩展和技术支持培训服务, 现今国外著名的商业化嵌入式Linux产品有:MontaVista Linux、 Bluecat Linux、Timesys Linux> Metrowork Linux、Vlinux 和Redhat Linux等,国内也有红旗、中软、新华嵌入式Linux。MontaVista Linux 是 MontaVista 软件公司于 1999 年推 出的,它是目前全球优秀的嵌入式Linux操作系统和工具供应商, MontaVista在嵌入式Linux的实时=叉开发工具、高可用性、 动态电源管理等Linux技术要点方面具有领先地位。MontaVista Linux 最版本是 3.1,采用 Linux 2.4.20,针对 8 种CPU系列(包含ARM和Xscale)优化定制的商业化版本。选择象MontaVista Linux这样商业化嵌入式Linux,可以 让用户把时间和资金放在应用软件和特定的硬件接口和设备驱动 程序,使用商业化嵌入式Linux可以得到一定时间(一般是1年) 的技术支持,升级和培训1(这很重要,因为Linux是每天都在变化 的)。商业化嵌入式Linux目前除国内的产品外,价格还是很昂贵 的,根据配置和服务时间,大约从几千到几万美元,多数国内用户 从资金和心理上还很难承受,商业化嵌入式Linux开发工具相对 于Microsoft AM Tornado/VxWork的开发工具,在易于使用和 丰富性方面还待于提高和改进。同样作为Linux操作系统,笔者推荐使用带有MMU的嵌入式 Linux,而不是mCLinux,因为绝大多数新的arm cpu都是AMR9 核,它们都带有MMU 了,无论是开放源码的Linux社区还是商业 化的嵌入式Linux公司的支持和维护都比mCLinux要好要快和丰 富得多。分页结语前面我们对三种在ARM CPU上较为流行的嵌入式操作系统作 了详细的分析,在进入一个总结之前,笔者还想提到几个在国际上 很有名气的嵌入式操作系统,它们是WindRiver公司的VxWorks> ATI的Nucleus、iTron和WinCE,但它们在arm CPU的应用不 多见,介绍从略。最后归纳一下选择一个合适的ARM CPU的嵌入 式操作系统的几个重要因素:第一是应用。如果你想开发的嵌入式设备是一个和网络应用 密切相关或者就是一个网络设备,那么你应该选择用嵌入式Linux 或者 uCLinux,而不是 uC/OS-H。第二是处理器。它可以适合于9095%的各种嵌入式系统 应用。当然,你如果希望更快的实时响应,如高速的A/D转换需 要几个微秒以内的中断延时,可能采用uC/OS-H是合适的。当然, 你采用象Vxworks这样传统的嵌入式操作系统也可以满足这样的 强实时性要求。第三是开发工具。显然,目前uC/OS-H、uCLinux和嵌入 式Linux的开发工具与商业嵌入式操作系统工具还有一些差距,目 前在ARM CPU上广泛流行和使用的是ARM公司SDT/ADS工具链, 产品无论在功能、稳定性和众多的第三方厂商支持方面都很好,唯 一不足的是缺少对嵌入式Linux操作系统的支持,SDT/ADS的升 级产品RealView计划支持GCC和嵌入式Linux,但目前还没有看到,uC/OS-H可以使用ARM SDT/ADS,但没有操作系统调试 功能。第四是所选择的ARM CPU和参考板,象ARM7TDMI和 ARM940T(如S3c2500/2510)核是不能使用嵌入式Linux的, 如果想用Linux,只能用uCLinux,如果想用VxWorks,需要了 解一下提供评估板的公司是否有BSP(板支持包),VxWorks自己 只有少数arm公司评估板的支持。最后是价格和技术服务。在考虑购买商业嵌入式操作系统时, 会遇到是买还是自己做的问题,这是很正常的,尤其是在采用开放 源代码技术时,这个问题就更加突出。有一点需要注意的是,有些 产品如VxWorks是既按用户数收取开发费,也按用户产品售出的 实际数量收取每个VxWorks软件运行的版税。uC/OS-II只是收 取每种产品一次性版税(不限数量)。Linux无论是uCLinux还是 嵌入式Linux(即使是商业版本象MontaVista Linux)是不收版税 的,商用嵌入式Linux是以服务费或订阅方式收取开发时的费用。 很明显,国外产品价格是贵一些,但不能不承认他们在嵌入式操作 系统的技术已经远远走在前方。