分类: LINUX
2015-03-04 10:24:00
笔者应该可以算作国内第一批玩Linux的IT人,最早在Linux上做开发的时候,电脑市场的高端配置还是486。随着项目经验的增加,我深深的感到,在国内,对Linux还有很多误解,尤其是嵌入式开发上面,Linux往往不但不是最好的选择,在很多时候甚至是下策。
除了Linux,你还有很多选择:
现在流行的操作系统五花八门,下面我来分们别类的说说:
随着IC业的发展,出现了越来越多的价格低廉、结构小巧的CPU和外设。限制嵌入式系统发展的瓶颈就突出表现在了软件方面。尽管从八十年代末开始,陆续出现了一些嵌入式操作系统,比较著名的有Vxwork、pSOS(已被收购)、QNX、Neculeus、Windows CE、PALM、SmartPhone等。但这些专用操作系统都是商业化产品,其高昂的价格使许多低端产品的小公司望而却步;而且,源代码封闭性也大大限制了开发者的积极性。
另一个方面,这些商用的操作系统往往有非常完善的技术支持和丰富的软件包,以WinCE为例,他的PlatForm Bulider安装光盘有7张,容纳了大量的应用框架,用户只需要做很少的改动就能生成一个应用程序。工作强度和普通PC机上开发没有太大的区别。
目前,以Linux为首的开源嵌入式系统发展势头强劲,比较有代表的有Linux(包括uClinux,RtLinux等),RTEMS,eCos,uCOSII等。国内的用户大多使用Linux和uCOSII。但是我认为各种系统有自己存在的理由,我从事的大多数项目中,向客户推荐的不是Linux和uCOSII,而是RTEMS和eCos。理由很简单,Linux过为复杂,速度慢,实时性差;而uCOSII又过于简单。
Linux本来就不是为嵌入式系统设计的,现在Linux2.6的kernel source压缩包大小更是有30多兆。Linux源代码解析那种大部头的书又有多少人从头到尾看过。这导致很多问题无法解决。以前,某客户要求使用Linux给他们做底端路由器,我们使用了一套比较成熟的ARM+uClinux系统,结果,该系统会不定期的死机,调试了很久也没有结果。过了几个月,发现是uCLinux的一个bug。期间,该客户由于系统不够稳定,错过了几个大单。此后,另外一个Linux的系统,用于VoIP网关,结果,运行速度非常慢,资源消耗也很大。几乎没有办法达到设计要求。后来,改用eCos,不但能达到编解码速度要求,而且无论是对内存还是对Flash,占用都大为减少。这样的项目举不胜举,后来总结出一条经验,Linux用来做Demo版本,商业版本用其他RTOS。
实际上,这样的例子还很多,现在,很多嵌入式系统设计服务提供商动不动就是Linux,好像将Linux和嵌入式系统划上了等号。为什么? 无非是因为下面的原因:
操作系统源代码开放
网上资源丰富,很可能可以找到开放源码的整套环境,可以大大缩短开发周期
编程接口方便,熟悉,跟台上机上开发几乎没有什么区别
上层应用丰富,而且也开放源码
低层接口统一
TCP/IP等协议自带
但是我认为这是站不住脚的。我们一个一个来看Linux的所谓优势:
1. “开放源码”很多嵌入式系统都是开放源码的如:eCos,RTEMS,NetBSD等等。这些系统都比Linux简单易懂。此外值得提出的是。Linux是GPL协议的,也就是说,你对Linux的任何修改,都必须公开。而NetBSD等系统就不是,他们是遵循更为开放的BSD协议,你对系统的任何修改,都有权保密。这对于商用系统来说,是非常重要的。
2. “网上资源丰富” 这个……我只能说其他系统应用资源也很丰富。但是总体上,Linux资源比其他系统丰富,主要体现在桌面系统上,在嵌入式领域的应用软件,Linux并没有明显的优势。
3. “编程接口方便,熟悉,跟台上机上开发几乎没有什么区别”编程接口上来说eCos,RTEMS和NetBSD都提供POSIX的API,这意味这,在Linux上面的代码,几乎不用做修改就可以移植到上面的系统中。
4. “上层应用丰富,而且也开放源码”嵌入式系统大多是用于专业用途的,很多上层应用比如GNOM,在嵌入式领域,并没有太大用途
5. “低层接口统一。TCP/IP自带” 一方面,Linux底层十分复杂,其接口也非常复杂,这导致给Linux制作驱动需要大量的时间(当然,也有不少驱动是现成的),同时复杂的层次结构导致驱动的效率底下。
6. “TCP/IP等协议自带”几乎所有的嵌入式系统都提供TCP/IP,这个不是Linux的专利。
不用uCOSII也很简单,他不是想大多数人想的那样是免费的,他的免费只表现在他的教育版本。如果你用uCOSII作出了东西要出口到欧盟,很可能被kaka。而且uCOSII免费的地方也很少,需要TCP/IP?掏钱,需要文件支持?掏钱......这导致uCOSII的免费版本只能算作一个玩具。
真正好的嵌入式系统应该满足1-6,此外还应有下面几点,注意,这些一直都是Linux没有完全做到的
1 实时性支持
2 资源占用小
3 支持低功耗
……
总之,Linux只适合高端嵌入式系统中(如商用路由器等),如果CPU< 100MIPS, 最好还是不用Linux为妙。