WAP之家:为您提供最全最新的WAP技术,CP.SP.3G等行业资讯。 WAP之家交流论坛全新开放 点击进入>>
WAP资讯 | 3G动态 | SP动态 | 运营商动态 | 内容商动态 | 制造商动态 | 论坛讨论>> 每次自动访问
WAP技术 | WAP源码 | 手机编程 | 手机源码 | 无线技术 | J2ME技术 | 手机软件 添加到收藏夹
IVR技术 | SP资料 | SMS MMS技术 | 商业方案 | IVR下载 | 书籍教程 | 工具软件 语言:繁體中文

WAP之家技术文章手机编程Linux嵌入式Linux在Cyclades公司

嵌入式Linux在Cyclades公司
作者:pocketix  来源:pocketix.COM  发布时间:2005-12-21 3:58:07

1999年末的时候,我们使用传统的技术开发嵌入式网络产品(如路由器,终端服务器,远程访问服务器)。但是作为一家强烈建议在网络服务器上使用Linux的公司,并且于1994年在世界范围内率先对采用Linux驱动的硬件提供支持,所以这就与我们向来的做法自相矛盾了。


  我们本来打算要花几年的时间从我们的传统的嵌入式开发环境转向Linux。我们自己的Cyclades路由操作系统(CyROS,相当于系统的集成操作系统)已经用了超过十年的时间来发展、改进和不断优化。放弃CyROS选择另一种操作系统并不是一个微不足道的决定,因为尽管Linux操作系统在服务器上使用的非常好,但是却不一定具有我们需要的全部功能,也不一定适合于嵌入式系统。


  Linux在X86和其他的标准平台上运行的很好,但是一但使用到基于Flash存储的PowerPC结构的系统上会运行的怎么样?它要花多长的时间来写设备的驱动?它需要多少的存储空间?它在一个小的嵌入式处理机中会运行的足够快吗?如何来管理快速改变的软件版本?我们仍然需要实时性吗?可以获得相关的工具软件和专业的服务吗?

  在2000年初我们决定来寻找这些问题的答案。这篇文章正是关于一个嵌入式网络设备—TS2000终端服务器使用嵌入式Linux的发展过程。在那之后一年,最终产品获得了成功,而且应用到管理一些Internet上最大的服务器中心。

  我们同时使用传统软件和开放原码的软件来设计了一些相似的产品,这样我们可以进行一对一的比较。我希望这篇文章能够给你信心,使你能在你的嵌入式系统上使用和接受Linux。

为什么是Linux?

  在服务器市场上,使用Linux比使用一个传统的商业软件要便宜。通常来说,Linux不需要版权的费用,你不需要只固定与一个软件商合作。另一个优点是对于源代码没有使用限制,这对于嵌入式生产商尤其重要。
  但是这还不能使那些怀疑者信服,因为有一些相对便宜的商业性的实时操作系统。其中有一些是不要版权费的,也有很多你可以获得的源代码。这样,你有什么理由不去用那些你一直用得很好的东西呢?
我们知道,开放源代码一个主要的好处是可以参考开放源代码组织中的软件。这些软件大多数是发布在GNU组织中,不需要什么费用,这就很容易快速的在其中加入新的特性和功能。

  我们处于一个嵌入式网络市场中,对于我们来说要跟上不断加入的新的网络协议是很困难的。我们希望系统内部可供研究和发展的资源能使用尽可能长的时间。为此,我们通常不得不采取一些新的方式。Linux能够提供很好的网络支持,具有所有的现有协议而且能很快和将来的任何协议相融合,同时不需要我们再做什么附加的工作。我们可以花更多的时间来设计应用程序和产品,而花更少的时间来维护内核和协议栈。
开放源代码另一个重要的优点就是能够让别的人你的程序之上做些改动,成为他们自己的程序。使人们能够满足他们自己的需求,同时也扩展了你的产品的应用范围。

  这种可调节性对于终端服务器来说尤其的有用。在很多工业和商业自动控制应用中,需要通过局域网把多种串行设备联接在一起。用户有时不得不使用一个有连续多通道主板的服务器,来实现定制终端服务器的功能。现在他们能使用一个紧凑的、可信赖的嵌入式系统,同时可以自由的在上面加入他们自己的软件和创建客户化解决方案。

  同样,对于其它的嵌入式系统也有相同的优点。我们可以仅仅开发一个PDA系统,你可以在上面加入一些软件把它设置成一个游戏机,也可以加入控制软件和协调软件使其应用于商业控制方面。使用标准的软件体系为新的事物打开了大门。

我们的项目

  我们想要设计一种新的访问控制器或者叫终端服务器。这是一种作为远程访问服务器控制端口的机器,提供在ISP环境下通过调制解调器拨号上网,或者使用于工业或商业应用中把串行设备连接到网络。

  硬件规格为一个32端口的RS-232串口,一个10/100兆的以太网端口,PowerQUICC (Motorola PowerPC MPC860T 芯片),Flash/RAM存储器(没有硬盘存储器),硬件系统集成化(只占到一个U)而且低损耗。当然,我们开始项目时我们并不知道我们需要多少Flash 和 RAM。

  PowerQUICC是Motorola公司生产的一种嵌入式网络应用芯片。它有两个中央处理器(一个PowerPC芯片运行客户程序,另一个则是精简指令集的I/O处理器)和一些内建的外设(包括串口控制器,多通路HDLC控制器,以太网控制器,存储控制器等等)。它是68360QUICC系列的最成功的一个芯片,是有史以来最成功的嵌入式网络应用芯片。

  我们的新产品(叫做TS2000)将是一个在硬件上比现有产品(PR3000)提高的版本(更快,更小,更便宜而且更可靠),但是它同时在软件上也是创新和具有革命性的。它会采用嵌入式Linux而且将开放全部源代码。

移植软件

  采用一种嵌入式Linux系统为我们节约了大量的工作。Hard Hat Linux 1.2是建立在Linux2.2.14内核之上而且已经提供对于PowerQUICC的支持(同时还有很多别的平台),具有大多数集成外设的驱动。

  我们有一个工程师全身心的投入这项工作,在两星期内完成从Flash上引导内核并且能在主板上运行。到第二个月时,所有的接口都已经能够工作同时驱动程序也调试好了。到第四个月时,我们完成了具有基本功能的终端服务器。在开始工作后的第六个月完成了产品。

  我想你肯定读过诸如“在两周内移植实时操作系统”之类的市场宣传材料,但我们都知道当真正在现实中,用六个标准工程师月生产一种产品是一个非常快的计划,尤其是当考虑到我们要熟悉一个完全陌生的软件平台的情况下。

  所以,这对我们实在是一个非常大的冲击。我们原来预期会有更多的问题出现,准备花更多的时间来推出这项产品。

标准Linux或嵌入式Linux?

  在传统的软件世界,你可以关着门自己设计所有的东西,或者买一个商业的实时操作系统(如VxWorks,Nucleus,PSOS,Lynx,QNX等等)。但是在今天,几乎所有的开发者都选择使用商业产品和从专业的公司获得技术支持,以专心于应用产品开发。

  同样的情况出现在Linux世界。有一些公司专门从事系统开发、技术支持工作,他们为嵌入式开发者使用Linux提供专门的服务。比如Lineo, LynuxWorks, MontaVista 和Red Hat。

  如果你的核心业务不是开发内核,我强烈的建议你使用Linux的发行版本,和这些专业公司中的一家和作。这肯定会缩减你的产品投入市场的时间,同时也比你从每一样细微处开始设计要花费更少投资。

  Linux具有很强的可升级性,但是它本不是为了嵌入式应用而设计的。所以,一个嵌入式Linux版本要做很多的工作,这些工作具有很大的价值。

  我们选择了MontaVista 公司的Hard Hat Linux。他们提供对于MPC860T的支持(包括对于大多数流行主板的支持包)。Hard Hat 版本是百分百的开放源代码(有一些公司对于工具软件和附加包是不开放原码的),同时它不但在适应新硬件时的需要的工作最少,而且还是标准的Linux内核。

  Lineo更多的关注于X86和基于Linux的应用程序,而不是真正的嵌入式系统。当我们作调查时LynuxWorks还只是刚宣布他们的BlueCat产品。Red Hat在桌面操作系统中有很大的成功,但是不是一个真正的应用于嵌入式的Linux。这方面的市场的变化很大,我说的情况是一年前的,所以你应该和所有的公司好好了解一下以决定哪个系统是最适合你的。

开发环境

  在此之前我们从没有在嵌入式Linux上工作过,但是我们不但有Linux内核的开发者而且还有一些自己设计嵌入式程序的研究人员(一些早已开始独立做这方面工作的人),所以把所有的东西集中起来相对较简单。因为这些背景,我们从MontaVista购买了一个标准的技术支持包,决定凭借曾有的独立工作的经验而面对挑战。当然如果你需要或想要额外的帮助,嵌入式Linux厂商也提供专门的培训核移植服务。

  我们的交互开发平台用的是Red Hat Linux操作系统和标准的X86 主机。开发环境用的是GNU编译环境。
开发一个新的嵌入式硬件驱动通常来说是一个挑战,因为无法获得很多支持Linux 的专业调试工具(电路仿真,目标监控,硬件管理)。当嵌入式Linux逐渐在新的嵌入式设计中占主导地位时,生产商开始关注这些。但是你应该清楚这是一个相对较新的市场,所以并不是所有在VxWorks或PSOS上可获得的工具在Linux下也可获得。

  我们的策略是在使用Linux之前在我们现有的软件上验证硬件。当硬件被检验后,大概花一周的时间来理解如何从Flash上产生一个Linux引导区,使它在我们的硬件中运行起来。在几星期内,这确实解决了问题。
我们使用HMI和SDS硬件管理器协同PowerQUICC BDM调试端口工作,以确定硬件是否能够工作。我们是在我们旧的开发环境(Windows开发主机,DiabData C 编译器)中做这些工作的,当我们转向Linux平台之后,我们没有对硬件和软件的逐步调试工具。调试内核完全只基于分析和使用输出信息,以及一些自己编写的调试工具。KDB和GDB能够用来调试内核以及用户程序,但我们从不用他们。

理解GPL和开放源代码

  如果开发者不熟悉GPL,那么从传统的程序设计转变到开放源代码的程序设计对他将是非常大的文化冲击。如果你是开放源代码的新手,让我们来花一点时间理解它是怎么一回事。

  在传统的嵌入式开发环境中,开始写驱动的第一步通常是读硬件的功能手册。但是在开放源代码的情况下,第一步却是寻找所有可获得的驱动程序。在大多数情况下,你会发现相同的,或者至少是相似的驱动程序,能够用来参考以开始工作。

  在对这个驱动程序作相应的改动以适应你的硬件之后,别忘了把它贡献出来。因为你也是从别人的程序中获得了帮助,同时其实这对你的好处最大。如果你的程序非常的好,对于他人很有用,你会发现这个驱动很快会被改进而且也被提供出来,你可以获得大家的帮助,这样你就可以专注于应用程序。 开发和调试设备驱动

  在我们的例子中,我们的Hard Hat Linux已经包括PowerQUICC中外设的驱动程序。没有硬盘的情况下所必需的Ramdisk的驱动程序也已经提供了。除了一些小问题和I/O调节,这些驱动都工作的很好。为了支持RS-232串行端口,我们的产品使用了16654 方形UART芯片。正如前面提到的,大多数的设备驱动已经写好了也可以使用了。所以在花了几天来做基于标准Linux串行驱动后(支持16X5X系列的UARTs),我们可以在我们的系统中用/dev/tty目录看到串口数据的发送和接收。

   我们专门写了一个Flash驱动,这样应用程序可以在Flash中打开文件或写入数据。在传统的嵌入是开发中设备驱动程序通常是很大的一个部份。我非常抱歉用三个段落来叙述这些工作实在太少了,但是事实上就是这么简单。

移植应用程序

  一但硬件调试好了而且内核开始工作,现在开始到了提供系统所要具备的功能的应用软件的编写和移植的时候了。这里包含了传统的嵌入式系统和基于Linux的系统的另一个主要的不同之处。

   在传统的设计之中,应用程序的执行将会是和内核紧密结合的,管理资源会使用到低层的内核调用。
当然你在Linux中也可以这样做,但是如果你在Linux系统环境中开发应用程序将会更容易,而且更快。因用程序将只运行在用户层,却完全获得了执行环境的便利,它可以仅仅使用高层的Linux系统调用来打开文件和管理资源。

  这样,任何对于硬件和软件环境没有专门知识的人都可以在一个标准的Linux保护环境下设计、执行和调试一个新的功能或应用程序。它在嵌入式系统中也将做同样的工作。在很多情况下,一些新的功能甚至不需要用C语言编程序,仅仅只要一些Shell描述就能实现。

   为了创建访问控制器和终端服务器所需要的功能,在传统的方式中这些任务是运行在内和空间的,但是在Linux系统中,我们则以块的形式获取一些可获得的用户空间,然后把他们修改、合并、优化。在嵌入式中空间的大小有很大的关系,很多项目的开放源代码使Linux嵌入式系统中的应用成为可能。在网络领域,Linux路由器项目(http: //www. linuxrouter. rog /)中的工作对我们是非常有用的,我们为此非常的感谢他们。也许,除了贡献你的源代码之外,你也会想要成为你所相关领域中开放源代码运动的发起人。

结论:Linux与传统实时系统的比较

  在嵌入式市场中的最大问题是每一个项目都是不同的。仅仅基于别人的经验来回答如“我们需要多少存储空间”之类的问题是非常的困难的。尽管我们不能给你具体的回答,我们从另一方面解决这个问题,我们会给你相比较的参数。(见表一)



  当我们的程序移植到一个使用高度统一标准的应用程序接口APIs,同时提供应用程序执行保护环境的体系时,我们预计将要使用更多的存储和Flash。结果我们虽然证实了这种预计,但是与获得的可适应性和功能相比,RAM和Flash使用的花费要小得多。

  除此之外我们要为了很好的定义应用程序环境和接口付出更多,一个用户程序需要花费RAM空间而且当它装载的时候需要另外的存储空间。

  我们的系统配置了必需的驱动和完全的TCP/IP协议栈。在用户空间中,我们有bash(也就是shell),vi(文本编辑器,用来配置),BusyBox(一个小的Linux/Unix交替窗口)和所有的使系统正常工作的基本的工具。

  这个完全的系统包含有完整的路由和网络工作能力,却运行在只有6MB这么小的RAM上。内核本身花费了2MB;最小的ramdisk,包含用户程序空间和完全Linux文件系统功能,花费大约3MB;然后你还需要一些缓冲空间使内核装载和运行用户程序。

  因为我们在设计一个终端服务器,所以我们还需要运行pppd(ppp需求)和修改Portslave,Sredird,TinyLogin和OpenSSH的版本,以控制串行口和终端服务以及TCP socket功能。

  每个串口大约需要额外的300k的空间,这样32个串口总共加起来就很多。只要做一些额外的工作,我们可以彻底的削减这种空间需求,但是我们宁愿多花费一点RAM而使用已有的包,这样维护和将来升级都只要做最小的变动。

  要说出与传统的嵌入式设计相比数据和代码要花费多少Flash存储是非常困难的。在传统的设计中,大多数的源程序是以二进制文件存储在Flash文件系统中,会在用户空间中执行。

  但是,在Linux中系统内核,基础的文件系统,配置文件,用户文件和初始化导入程序都使用数据压缩存储在Flash中(压缩比率大约为2.5:1)。我们的机器有4MB的Flash,但是我们目前止使用了2到2.5MB。
在PowerQUICC中的两个运行在50MHz的CPU,这对于一个嵌入式系统来说是很快的,但是对于一个典型的奔腾处理机是慢多了。一方面CPU的使用率比我们目前传统的操作系统要高多了(正如预计Linux比做过整合和优化的传统设计的效率要低),但是这个机器能够运行所有的串行端口而不发生瓶颈现象。对于我们专门的应用,我们发现CPU使用率提升了20~30%(如果我们有CPU使用瓶颈,它将表现为效率的下降)。

嵌入式网络工作的未来

  我们预计在将来的网络应用市场会有越来越多的设备生产厂商,这时要保持竞争力则软件和硬件的技术的商品化将会起到关键的作用。

  随着硬件的商品化以及软件的开放源代码,这种每个公司都设计和维护自己的网络操作系统、TCP/IP栈、从每个细微的硬件生产主板的模式不会存在多久了。厂商需要模块化和功能化,他们从提高销售量和扩大市场占有率来获得经济效益。技术人员的时间和研发资源应该投资进每一个芯片,增加其技术价值。我们的精力应该调整到创新中,而不是去做什么已有东西的新版本上。

  这正是开放源代码的核心思想。它对于广泛使用的应用的程序有帮助,对于嵌入式市场则更有冲击。这将一场变革的开端,Linux将成为未来标准嵌入式平台。

  我们希望这篇文章能够促使你考虑使用Linux进行嵌入式设计。这不是一个微不足道的决定,我保证你在初期的实践中就一定会很快获益。 作者:Marcio Saito,Edson Seabra 和Nei Chiaradia 是Cyclades公司R&D小组的成员。Marcio写了这篇文章,但是Edsom和Nei做了大量的移植Linux的实际工作,在市场上第一个实现了基于嵌入式Linux的终端服务器的功能。

陈玮译

[] [返回上一页] [打 印]
文章评论

用户名: 查看更多评论

分 值:100分 85分 70分 55分 40分 25分 10分 0分

内 容:

         (注“”为必填内容。) 验证码: 验证码,看不清楚?请点击刷新验证码