⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 linux

📁 嵌入式系统
💻
📖 第 1 页 / 共 2 页
字号:
      数新墨西哥技术学院的实时Linux(RT-Linux)项目。注意到Linux是一 个为台式电脑用户设计的操作系统,研究者们断定,要想把实时功能移 
      植到为分时设计的OS上是不会有好结果的。取而代之的是,他们在操作 系统的下面实现了一个简单的实时内核,而Linux本身也仅作为那个内 
      核上的一个任务来运行。Linux运行的优先级最低,随时可以被更高优 先级的任务抢先。</P>
      <P>RT-Linux的设计理念是,对Linux作最小的改动,仅提供为了实现实时 
      应用必不可少的东西。这样就使RT-Linux比较容易移植到新版本的Lin 
      ux上。同时,RT-Linux依赖于Linux来提供所需的几乎所有服务,而RT 
      -Linux仅提供低层任务创建、安装中断服务例程、并为低层任务、ISR 和Linux进程之间的通信排队。</P>
      <P>这种设计的结果之一是,一个RT-Linux应用可以看作有两个域:实时和 非实时。放在实时域的函数能满足其实时要求,但是它们必须比较简单 
      ,因为可用资源很受限制。另一方面,非实时功能可以利用整个Linux 资源,但不能有任何实时要求。两个域之间的通信工具已提供。但是使 
      用RT-Linux之前,嵌入式系统设计者必须确保所有需要实现的功能适合 两个域之一。使用RT-Linux并不能变戏法似的使已经存在的Linux功能 
      具有实时性。例如,假设设计者有一个串口的Linux驱动程序,当串口 接收一个字节序列之后,在一个固定时间内,由实时任务打开并口输出 
      一行。这个驱动程序不能用,因为在非实时域内你不知道什么时候串口 驱动程序会唤醒实时任务驱动并口完成工作。因此,串口和并口驱动都 
      必须在实时域内,这就要求重新设计串口驱动程序。</P>
      <P>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空则返 回一个错误。</P>
      <P>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简单、开放的设计允许用户相当容易地实现类似 的附加功能。</P>
      <P>&nbsp;</P>
      <P>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可以。</P>
      <P>RT-Linux很简单,只提供了实现一个实时系统所需的不能再少的功能。 但是系统设计者正是得益于这种简单性。大部分应用应该在Linux进程 
      中实现,因为Linux本身稳定可靠,并且为广大用户所熟悉,即使有了 麻烦也能找到帮助。实时任务只包括必要的功能来实现实时I/O,以及 
      从Linux进程接收或发送数据。RT-Linux的简单性有两个好处:第一, 简单所以不容易出错误;第二,即使真的出了错也容易找到并改正。这 
      些因素很重要,因为实时系统只是Linux应用的一小部分,有关用RT-L inux开发代码的帮助相当少。其实,如果用得好,当前RT-Linux已实现 
      的功能足够满足绝大多数实时系统的要求。 </P>
      <P>很明显,Linux并非适合所有嵌入式PC的最佳平台。因为它的大小,一 个完整的GUI系统必须以磁盘为基础,或者连接到网络使其能够引导。 
      大量嵌入式应用程序运行需要磁盘以及Linux内置的GUI和网络特性,并 且数量还在增长。例如,许多医疗设备必须使用有吸引力的用户界面才 
      有竞争力,工业机器控制必须既有GUI又有网络。如果愿意花大价钱购 买高端RTOS则是另一个问题,而Linux提供了获得这些特性的免费途径 
      。不但免费,Linux比那些RTOS供应商的产品更新更快,一般它们提供 的新特性都要在台式电脑OS有了之后。</P>
      <P>除了使Linux用在有磁盘的嵌入式系统之外,使它可以从EPROM引导的工 作也在进行。通过仅仅安装那些对特定应用必须的组件,很多情况下用 
      Linux可以构成无磁盘系统。例如,一个包括网络(但不包括X Window 
      s)的Linux系统已经成功地放置在仅2.7MB的EPROM上。因此,实践中独 
      立的无磁盘嵌入式系统也可以用Linux来开发。另外,Linux具有从网络 引导的能力,一个包括X Windows的整个系统可以从位于网络上某个位 
      置的磁盘引导。 </P>
      <P>展望未来 The Future Linux遵循GNU,能够通过上千程序员的共同努力制造高质量的软件。象 
      Linux一样,GNU早先只是软件无政府主义者和狂热分子空闲时间的玩意 儿。但是,如今那些怀疑者不得不承认,GNU已经制作了一批世界级的 
      软件,尤其值得注意的是gcc和g++编译器。这些编译器可以与最好的商 业编译器竞争,甚至高端RTOS产品如VxWorks和LynxOS采用它们。同样 
      的事情很可能发生在RTOS身上。以Linux为基础的RTOS产品将开始出现 ,同时供应商会强调附加的实时特性,当然还有他们的技术支持。结果 
      是,现在只有最贵的产品才有的特性,将来最便宜的RTOS产品也能提供 。</P>
      <P>&nbsp;</P></TD></TR></TBODY></TABLE></BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -