新闻  |   论坛  |   博客  |   在线研讨会
Linux用作嵌入式操作系统 (老文章)
shadowind | 2008-07-23 23:02:55    阅读:513   发布文章

Linux as an Embedded Operating System Linux有用作嵌入式操作系统的潜力吗?

本文讨论了Linux的特点、健壮 性、局限以及最重要的一点,它的实时特性。 近年来,PC硬件使用的增加是高端嵌入式系统最重要的发展之一。这种 趋势造成高端系统硬件造价的大大跌落,从而使那些以前由于使用非P C结构的嵌入式硬件价格过高而不能做的项目成为可行的。但是嵌入式 PC平台上可选择的软件并不像硬件那样有诱惑力。你可以选择DOS,有 众所周知的局限性;微软Windows,缺乏实时性能;或者某种高端实时 操作系统,昂贵、专用,大多是不可移植的。Linux操作系统提供了另 外的有吸引力的选择,并且没有上面那些缺陷。Linux先前只是狂热的 Unix迷们闲时专门在台式电脑上使用,后来发展成为必须认真对待的高 级的、稳定的操作系统。最近的发展之一是引入了实时性能,从而使L inux完成了重要的转变,即从爱好者的玩具成为适合嵌入式系统设计者 的有价值的工具。当然,其实时性能还没有那些高端RTOS那么高级,并 且Linux永远不会适合需要最小化RAM和ROM的系统。但是,对很多应用 来说,Linux的优势胜过了不足。

现在,大家都知道在嵌入式系统中使用PC硬件的好处。与很多专为嵌入 式市场设计的硬件比较,PC硬件是大规模生产的、容易获得并且便宜。 为VME总线设计的接口板价格是PC总线的两倍多,比如模拟和数字I/O板 、网络接口、图像采集与处理板等。随着高性能PCI总线应用的增加, 吞吐量不再是影响使用PC平台的问题。

但是操作系统功能上已经发生革命性的变化。在要求硬件价格降低的同 时,高端嵌入式系统要求更多高级的功能,如图形用户界面和网络支持 。很多高端RTOS供应商已经提供了这些功能,一般是作为花更高价钱才 能得到的可选件。微软Windows也有这些功能,却不具备大多数嵌入式 系统要求的实时性能。也许有人想以DOS为基础用单独的第三方工具拼 凑一个系统,但这种努力将是白费并且不存在对这种系统的技术支持。 现在需要的是一个便宜、成熟并且提供高端嵌入式系统所必须特性的操 作系统。

因此,Linux操作系统近来开始吸引大家的注意。许多台式PC用户被它 的特点和健壮性所吸引,并且获得它只需支付通过FTP下载的网络费用 。Linux带有Unix用户熟悉的完善的开发工具,几乎所有的Unix系统和 应用软件都已移植到了Linux上。Linux还提供了TCP/IP网络协议以及I nternet客户和服务器软件,还有可选择多种窗口管理器的X Windows。 C、C++、Java和其他语言的编译器也可得到。用户会发现这些比Windo ws提供的更成熟、更完善、更易于使用。许多公司至少会有一位Linux 的热衷者,当出现用Windows解决不了的问题时(比如设置一台PC为拨 号服务器)会说:“瞧,我们要是用Linux...”

现在,讨论Bill Gates是否有所担心是有些杂志的一个话题。重要的是 不属于任何一家公司的Linux开始被台式电脑用户接受,其中许多人并 不能被认为是电脑迷。这一方面是因为Linux的成熟,另一方面也因为 这几年Internet的盛行。Linux用户遇到问题时可以通过Internet新闻 组和邮件列表向网上成千上万的在线用户请教。你遇到的问题别人以前 肯定碰到过,一般他们都乐于帮忙。根据我的经验,通常使用网络资源 能比依赖RTOS技术支持部门更快地解决问题。你可能需要从十几条新闻 组其他成员回答的相关信息中搜寻,但至少有一个回答应该是有用的。 相比较而言,你从技术支持部门仅得到一个回答,如果是错的,你不得 不重新开始整个过程。另外,致力于提供Linux支持的公司也已经出现 ,给那些觉得传统的技术支持手段更舒服的用户一个选择。并且所有L inux是提供源代码的,这使最困难的问题也有办法解决。

某些嵌入式系统设计者会发现Linux本来的样子就很有用。对于没有实 时要求的应用,或者有实时要求但可以用一定的硬件或协处理器满足的 应用,Linux提供了Windows和DOS之外的选择。但是那样的应用几乎没 有。因此,用Linux实现一个实时操作系统才是真正需要的,并且为了 用它实现高端嵌入式应用已经做了充分的工作。总的来说,有两条途径 来实现实时Linux,在此称之为POSIX路线和低层路线。





POSIX和Linux POSIX是标准化类Unix操作系统必须具有的特征和接口的运动。POSIX的 思想是为了促进为Unix编写的软件的可移植性,使Unix程序员的工作更 容易。有些实时性的扩展,象POSIX.1b或IEEE 1003.1b已经加入到标准 中。这些扩展中包括一些工具,比如信号灯、内存锁定、时钟和计数器 、消息队列以及优先级抢先调度。

以POSIX为基础来标准化实时操作系统已经受到指责。这个标准又大又 笨,包含了许多适合台式Unix工作站但无助于嵌入式系统的特征,因而 显得很臃肿。标准制定群体被工作站制造商控制,他们不愿对RTOS供应 商和用户让步。还有,POSIX系统调用反映了Unix系统调用的复杂和笨 重,在VxWorks或pSOS+中仅需一两个调用即可完成的操作可能需要十几 个POSIX调用。Unix程序员已经习惯了这种麻烦事,但是嵌入式系统程 序员却觉得很难受。

许多Linux开发者正在为了在Linux中实现POSIX.1b的特征工作。这个活 动已经初见成效并且仍在继续。POSIX内存锁定工具和决定调度算法的 函数已经实现。另外,计数器函数和POSIX.1b信号仍未完成。也许最糟 糕的是,对任何真正的RTOS都至关重要的信号灯和消息队列也未实现。

定义于POSIX.1c(或IEEE 1003.1C)中的POSIX线程保证会为POSIX路线 的Linux开发实现。一个进程内可以有多个线程,共享相同的地址空间 。这很符合我们熟悉的嵌入式系统中任务的概念。Linux已经部分实现 了POSIX线程。

虽然POSIX路线对实现一个实时Linux做了保证,当前和可预见的将来只 有“软”实时的应用能用POSIX.1b函数来实现。移植POSIX.1b函数到L inux上时要面对的根本问题是Linux的内核是不可抢先的。因此,要想 不对内核大动干戈而实现“硬”实时特性恐怕是不可能的。 通向实时Linux的低层路线 Low-level Approach to Real-time Linux

比POSIX路线更有意思的是实现硬实时Linux的努力,其中最有前途的要 数新墨西哥技术学院的实时Linux(RT-Linux)项目。注意到Linux是一 个为台式电脑用户设计的操作系统,研究者们断定,要想把实时功能移 植到为分时设计的OS上是不会有好结果的。取而代之的是,他们在操作 系统的下面实现了一个简单的实时内核,而Linux本身也仅作为那个内 核上的一个任务来运行。Linux运行的优先级最低,随时可以被更高优 先级的任务抢先。

RT-Linux的设计理念是,对Linux作最小的改动,仅提供为了实现实时 应用必不可少的东西。这样就使RT-Linux比较容易移植到新版本的Lin ux上。同时,RT-Linux依赖于Linux来提供所需的几乎所有服务,而RT -Linux仅提供低层任务创建、安装中断服务例程、并为低层任务、ISR 和Linux进程之间的通信排队。

这种设计的结果之一是,一个RT-Linux应用可以看作有两个域:实时和 非实时。放在实时域的函数能满足其实时要求,但是它们必须比较简单 ,因为可用资源很受限制。另一方面,非实时功能可以利用整个Linux 资源,但不能有任何实时要求。两个域之间的通信工具已提供。但是使 用RT-Linux之前,嵌入式系统设计者必须确保所有需要实现的功能适合 两个域之一。使用RT-Linux并不能变戏法似的使已经存在的Linux功能 具有实时性。例如,假设设计者有一个串口的Linux驱动程序,当串口 接收一个字节序列之后,在一个固定时间内,由实时任务打开并口输出 一行。这个驱动程序不能用,因为在非实时域内你不知道什么时候串口 驱动程序会唤醒实时任务驱动并口完成工作。因此,串口和并口驱动都 必须在实时域内,这就要求重新设计串口驱动程序。

RT-Linux的任务处理工具是基本的。rt_task_init()用来创建并开始一 个任务,能指定堆栈的大小和优先级。Linux本身以一个最低优先级的 实时任务运行。rt_task_make_periodic()以一定间隔周期性地设置任 务运行。rt_task_wait()阻塞任务。使用简单的抢先调度运行任务。 实时任务与Linux进程之间通信的主要方法是FIFO。rtf_create()创建 一个一定大小的FIFO。用rtf_put()将数据送入FIFO,如果FIFO满则返 回一个错误。类似地,rtf_get()从FIFO中取出数据,如果FIFO空则返 回一个错误。

FIFO最显著的应用是数据流。例如,在一个数据采集应用中,可以用r t_task_init()和rt_task_make_periodic()设置实时任务使其以固定的 间隔从I/O板采样。这个任务用rtf_put()将数据发送到Linux进程。该 Linux进程应该是一个循环,不断从FIFO读出数据,也许还要写数据到 磁盘、或者通过网络发送、或者显示在一个X窗口中。FIFO象一个缓冲 ,因此Linux进程不必非有实时性不可。 实现数据流系统看起来成为RT-Linux设计者的主要动机。但是FIFO机制 提供了一个实现信号灯的很好方法。两态信号灯可以通过创建一个大小 为1的FIFO来实现,V操作即为rtf_put(),数据内容无所谓,同时忽略 返回的错误。P操作为rtf_get()。计数信号灯可以通过创建大小足够容 纳所期望V操作个数的FIFO简单地实现。由此可见,FIFO机制提供了实 时应用中任务同步所需的大部分功能。当前的实现在RTOS用户习惯的某 些功能上仍有欠缺,比如优先级禁止(防止优先级反转)和任务安全删 除。但是仔细设计几乎总能避免这些问题。此外,虽然FIFO操作可以在 没有数据(读FIFO)或没有空间(写FIFO)时阻塞,语法却相当复杂, 阻塞能力看来不是设计的重点。然而,至少有一个提供FIFO阻塞操作简 单语法的努力正在进行,同时还实现了阻塞超时,这是许多嵌入式应用 的重要特征。RT-Linux简单、开放的设计允许用户相当容易地实现类似 的附加功能。



RT-Linux的一个有趣的方面是设计者使Linux内核可抢先的方法。象其 他Unix类型的操作系统一样,Linux内核能长时间地屏蔽中断。当然, 正是这一点使Linux成为非实时操作系统。解决这个问题有两种途径。 一是重新设计内核使之可抢先。但是Linux内核又大又复杂,不便于经 常修改。设计它的程序员头脑中根本没有实时应用的概念。因此,把实 时性强加到已存在的代码上是不可行的。于是RT-Linux设计者用另一种 途径来使Linux可抢先。他们将中断分为两组:由Linux控制的为一组, 另一组由RT-Linux控制。RT-Linux中断象RT-Linux任务一样受到约束, 它们不能进行Linux调用。所以没有理由使它们不能中断Linux内核。毕 竟,如果不改变内核也就别指望影响内核里的任何东西。另一方面,L inux中断不允许中断内核。因此RT-Linux形成了一个虚拟中断机制,使 Linux本身永远不能屏蔽中断。Linux用“cli”和“sti”宏指令来屏蔽 和使能中断。在标准Linux里,这些宏只是简单地执行相应的x86处理器 指令。RT-Linux修改了这些宏,执行cli时不是屏蔽中断,而是简单地 重定向到某些RT-Linux代码。如果这是一个RT-Linux中断,允许它继续 ;如果是一个Linux中断,则只是设置一个标准位。然后当执行了sti开 中断后,那些悬而未决的Linux中断才继续执行。这样,Linux仍然不能 中断它自己,但是RT-Linux可以。

RT-Linux很简单,只提供了实现一个实时系统所需的不能再少的功能。 但是系统设计者正是得益于这种简单性。大部分应用应该在Linux进程 中实现,因为Linux本身稳定可靠,并且为广大用户所熟悉,即使有了 麻烦也能找到帮助。实时任务只包括必要的功能来实现实时I/O,以及 从Linux进程接收或发送数据。RT-Linux的简单性有两个好处:第一, 简单所以不容易出错误;第二,即使真的出了错也容易找到并改正。这 些因素很重要,因为实时系统只是Linux应用的一小部分,有关用RT-L inux开发代码的帮助相当少。其实,如果用得好,当前RT-Linux已实现 的功能足够满足绝大多数实时系统的要求。

很明显,Linux并非适合所有嵌入式PC的最佳平台。因为它的大小,一 个完整的GUI系统必须以磁盘为基础,或者连接到网络使其能够引导。 大量嵌入式应用程序运行需要磁盘以及Linux内置的GUI和网络特性,并 且数量还在增长。例如,许多医疗设备必须使用有吸引力的用户界面才 有竞争力,工业机器控制必须既有GUI又有网络。如果愿意花大价钱购 买高端RTOS则是另一个问题,而Linux提供了获得这些特性的免费途径 。不但免费,Linux比那些RTOS供应商的产品更新更快,一般它们提供 的新特性都要在台式电脑OS有了之后。

除了使Linux用在有磁盘的嵌入式系统之外,使它可以从EPROM引导的工 作也在进行。通过仅仅安装那些对特定应用必须的组件,很多情况下用 Linux可以构成无磁盘系统。例如,一个包括网络(但不包括X Window s)的Linux系统已经成功地放置在仅2.7MB的EPROM上。因此,实践中独 立的无磁盘嵌入式系统也可以用Linux来开发。另外,Linux具有从网络 引导的能力,一个包括X Windows的整个系统可以从位于网络上某个位 置的磁盘引导。

展望未来 The Future Linux遵循GNU,能够通过上千程序员的共同努力制造高质量的软件。象 Linux一样,GNU早先只是软件无政府主义者和狂热分子空闲时间的玩意 儿。但是,如今那些怀疑者不得不承认,GNU已经制作了一批世界级的 软件,尤其值得注意的是gcc和g++编译器。这些编译器可以与最好的商 业编译器竞争,甚至高端RTOS产品如VxWorks和LynxOS采用它们。同样 的事情很可能发生在RTOS身上。以Linux为基础的RTOS产品将开始出现 ,同时供应商会强调附加的实时特性,当然还有他们的技术支持。结果 是,现在只有最贵的产品才有的特性,将来最便宜的RTOS产品也能提供 。

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客