1、 嵌入式 Linux 概述 摘要 本文我将 论述一下 嵌入式 Linux 目前的 发展趋势( 状况 ) 。我将概述 Linux 是什么 ,嵌入式 Linux 系统与桌面系统有什么不同的特点 。然后,我 将详细地论述 六个关键领域: 配置 实时性 图形用户界面 开发工具支持 经济 性 技术支持选项 下面,我将比较嵌入式 Linux 与 Windows CE 的实时性,操作系统映像大小和内存 需求 。然后我会讨论一些基于嵌入式 Linux 的 零售设备 并与大家讨论一下关于嵌入式 Linux 一些大概的评论 。 简介 除非你在过去的几 年里 一直与世隔绝 , 否则 毫无疑问 你一定 听说过 Lin
2、ux 操作系统。 作 为微软的 Windows NT 在软件开源中的 竞争对手,它已经 在 软件开发和系统管理社区,以及主流 的 非技术性新闻媒体 上被广泛宣传和激烈的讨论 。 当 Linux 系统首次推出 的时候,它 是专门针对运行 在 英特尔 80x86 或兼容的微处理器 上 台式电脑。 引用 Linux 操作系统的 创始 Linus Torvalds 说 过的一句话 : “ 从 Linux 操作系统 诞生之日起,它将只会 运行在 拥有一块 IDE 硬盘 的 PC上 ” 。回首 至今为止的 21 世纪, 这句话显得非常滑稽 。如今的 Linux 已经被移植到许多不同的微处理器 上并运行在许
3、多并不含有硬盘的平台上 。这些 设备 甚至没有通用 的 计算机系统, 也没有 如网络路由器, 核心监控程序和用来 跟踪 旋风管的 数据收集单位。正是这些类型的系统, 被统称 为 “ 嵌入式 Linux” 。 在下一节我会 关注 嵌入式 Linux 系统 和它的 堂兄弟 桌面 Linux 系统之间的区别 。然后,我要 回详细描述 嵌入式 Linux 在:配置,实时性, GUIs ,开发工具的支持,经济 性 ,和技术支持 这 六个方面 的特点 。然后,我将比较 一下基于同样配置的嵌入式 Linux 内核 与 Windows CE 内核 的大小 和 实时 性特征 。 然后,我将讨论三个基于嵌入式 L
4、inux 的 有趣的设备:光学遥测系统, NetTel路由器和 IBM 公司的掌上电脑研究项目 “ itsy ” 。我会再总结了一些一般性意见的作用和未来的嵌入式 Linux 。 是什么让 Linux 成为“嵌入式” ? 迄今为止在这 篇文章里 我已经 多次 使用了 “ 嵌入式 Linux” ,但我还没有真正确 定这 个词的含义 。 是不是如果系统不是从硬盘上启动的就可以被称为嵌入式系统?是不是所有从硬盘上启动的系统都不是嵌入式系统 ?本节将列出五个 不同的 嵌入式系统, 来 解答这类问题。注意, 这些设备都 不是专用于 Linux 的 ,但都具有 嵌入式系统 的普遍特征 。 从历史上看,嵌入
5、式系统 的界定 已 经成为 一个 巨大 的,有争议的灰色地带。许多激烈的讨论 已经 涉及到某一特定系统是 不 是 “ 嵌入式 ” -尤其是在各方自由酗酒和大量的怪胎参加。 我即将论述的这些属性特点 肯定 不能让 所有人都满意 ,但它 是一 个通则 ,也足以明确区分所有的嵌入式系统 ,更加全面的描述是没有必要的。 这五个嵌入式系统通常 都有的 属性是: 无盘启动和储存 无 BIOS 空间占用 和运行内存 有限 内存管理 针对少量特定的应用 当你第一次启动和运 行嵌入式系统 时 自举是第一个 需要 解决 的问题 。 当给 硬件供电时首先会发生什么事? 那些 只 关注 桌面电脑系统 的 用户和开发
6、者 很少考虑在嵌入式系统 中 至关重要 的 议题。 大多数嵌入式系统 都是从非硬盘类媒体启动的 。 这些媒体 可 能是 Flash 存储器 ,或 是读 /写或只读存储器如 EEPROM。另外, 这种设备 可能 不是从内部存储介质上启动的 ,而是 在启动时从网络上 下载操作系统映像。内存可 以在系统运行时存储数据 , 非易失性存储器 如 Flash 存储器 可 在 系统关机 时 存储数据。 嵌入式系统通常不使用磁盘 类存储器, 原因是硬盘驱动器 的 能耗 和 速度 方面不符合要求。与 Flash 存储器相比硬盘需要消耗更多的能源,速度也很慢 。在经济上, 在 每字节成本 上 硬盘当然 比 闪存
7、低 ,但今天的嵌入式系统很少需要 几个 GB的 存储 ,只有 几百个字节的 Flash 存储器 是一个更好的解决办法。 基本输入 /输出系统( BIOS ) 是 电脑 中 一个重要的软件, 尽管它被大多数人所忽略 。它的 作用 是初始化 PC 的 内置硬件,并提供 基本的硬件操作手段 。一个典型的桌面操作系统 , 包括 Linux ,是建立在 BIOS 之上的,需要 充分利用它。在嵌入式系统 中 你没有 奢侈 的 BIOS,在 操作系统内核启动运行 之前,你 必须手动初始 化 你 的硬件 到一个可以运行的状态。 它似乎不是 一个 大问题。很少有嵌入式硬件平台 会拥有一个和 PC 一样复杂的主板
8、架构, 它们通常更容易配置。 通常 硬件制造商 们都会 提供示例代码 让你能 很快适应 并 让系统启动和运行 起来 。 正如我们前面提到的,嵌入式系统并不需要目前大多数台式机 那样的 大 容 量内存和存储 器 。一些嵌入式系统只 需要 几百字节的 RAM 和 ROM 就能运行 ,最 大不 超过 几 兆字节。这 与一个拥有 看似无限资源的桌面系统相去甚远, 也 是一个程序员从 桌面 系统 过渡到嵌入式系统最大的绊脚石。 内存管理是嵌入式系统另一个 巨大的区别 。由于 储存要求严格, 而且 没有 存放 交换文件通常需要的虚拟内存系统。此外,嵌入式系统上运行的各种微处理器,其中一些不具备虚拟内存 所
9、 必须 的 内存管理单元。 另外 ,值得注意的是,嵌入式 Linux 可 同时 满足这些要求。任何 Linux 系统 都 可以 在编译操作系统映像的时候 将 虚拟内存 大小设置为 0 来 消除交换文件。此外, 改良后的 Linux 系统不需要 MMU 。 uCLinux 操作系统运行 在 多种 32 位微处理器上 , 它 没有 MMU 并且 只使用物理内存处理。 最后,嵌入式系统通常是针对一系列专门任务 而设计的 。他们可能没有任何用户界面 ,只拥有 几个 指示灯。用户无法安装和运行 除了 定制软件以外的 任何东西,该系统的最初目的 只 是 为了 运行 这几个特定的软件 。 与之对比 的 是
10、桌面计算机系统,用户 通常可以 安装和运行的自定义软件包 ,并能 完成系统设计 者 从来没有考虑 过 的任务。 很明显我们不能忘了实时性这方面的问题 。虽然在世界上这是一个热门的话题 ,但是对 嵌入式系统 来说 它 并 不是一个 普遍 的要求。许多嵌入式系统没有任何硬 件或软 件上的 实时要求,是 能 完全 满足大部分用户 的操作系统。嵌入式 Linux 有 实时子系统 的选项 ,我们将在 下面的章节里 讨论。 嵌入式 Linux 详情 在未来数节, 我们将在六个具体领域 里讨论 嵌入式 Linux 的细节 。 这些领域 涵盖了 Linux 在嵌入式系统 中的各个方面的作用 。目标是解决系统从
11、规 约到 维修的 整个 生命周期 内各个阶段的 问题。其中的一些问题,如经济 性 和技术支持, 在整个系统开发过程中,是 非技术性 的却又 很重要的 问题, 配置 能够 针对特定设备 定制操作系统是 嵌入式系统 一个非常重要的 特征 。你 一定 不想你的系统映像中 包 含一个你不需要的几 兆字节的图形用户界面支持代码。 将内核裁剪到能够满足所有需求的尽可能小的体积,这 将是 每一个设计师在硬件能够启动和运行以后所要面临的 第一个任务, 它 将 是一个非常艰难的 任务 。 配置嵌入式 Linux 系统 与 配置桌面 Linux 系统并无太大的区别。系统 构建过程中使用简单的文本文件 来 选择 包含的组件 。安装模块用于在系统启动时装载所选子系统。还可以在运行时动态加载和卸载模块, 来定制必要的可选组件 。 这种 灵活的配置方式对 嵌入式系统是非常有益的。它不仅可以 让你 动态 地 添加和