1、嵌入式LinuxN(美)伦巴多 著中国电力出版社书 名:嵌入式Linux,) 作 者:(美)伦巴多译 者:吴雨浓,)出版社: 中国电力出版社,) 出版时间 :2001 ,)字 数:217.0 开本:16,) ISBN :7-5083-1402-6,)定 价: 28.00前言关于作者John Lombardo 从 “0.9”天 开 始 从 事 嵌 入 式 Linux 的 工 作 。 他 的 ShareTheNet 软件帮助初学 者 在 老 式 的 X86 计 算 机 上 迅 速 构 建 高 性 能 路 由 器 。 随 后 , 他 做 了 几 个 嵌 入 式 Linux 工程, 包括 easy-t
2、o-use IPSec 路由器,基于 ARM7 的 NAT 路 由 器 和 这 本 书 。 John 拥有计算机科学 学士学位。关 于 本 书 的 技 术 监 督 人这些本书的技术监督人把他们自己在嵌入式 Linux 开发过程中的实际经验都融合到本书中 来了。 在本书的 写作过程 中, 他们对于 本书涉及 到技 术的内容, 本书 的组织结 构都提出 了宝 贵 的 意 见 。 他 们 的 反 馈 保 证 了 读 者 所 看 到 信 息 是 高 质 量 的 技 术 信 息 。Erik Andersen毕业于 Brigham Young 大学, 拥有学士学位 , 主 攻机 械工 程 (m echan
3、ical engineering) , 辅修 数 学 。 他 也 完 成 了 BYU 大 学 制 造 工 程 ( manufacturing engineering) 硕 士 学 位 所 需 要 的 全 部 课 程 。 但 是 由 于 他 的 女 儿 Jessika 的 降 生 , 他 最 终 还 没 有 取 得 学 位 就 开 始 为 一 家 机 器 人 专 家 公司工作。Erik 从 1994 年开始使用 linux, 并 于 1996 年成为 Debian 的程序员。1996 年到 1998 年之间 他还是 Linux 内核对于 CD-ROM 子 系 统 驱 动 支 持 部 分 代 码
4、的 维 护 者 。 在 这 段 时 间 中 他 定 义 了 CD-ROM 的 接 口 并 在 内 核 中 增 加 了 对 于 IDE-CD 的 支 持 , 升 级 了 内 核 CD-ROM 的 接 口 , 移 植 了 很 多 旧 的 但 是 很 有 用 的 CD-ROM 驱 动 程 序 到 新 的 接 口 下 , 并 把 这 个 新 的 接 口 命 名 为 “统一 CD-ROM 驱动 ”(U niform CD-ROM driver) 。Erik 是 Lineo 公司雇佣的第一个 Linux 工程师。 他曾经 是 Embedix Linux1.0 开发小组的组长, 把 uCLinux 的 内
5、核 移 植 到 了 Atmel AT91 系 列 CPU 上 , 并 维 护 了 合 作 开 发 网 站 http:/ 和 http:/cvs.uclinux.org/ 。Erik 还维护一些被广泛使用的嵌入式 Linux 软件,例如 BusyBox 和 uClibc 等。两 年 前 他 还 是 盐 湖 城 Linux 用 户 协 会 的 主 席 , 他 跟 夫 人 和 两 个 孩 子 都 住 在 那 里 。Ingo Cyliax他毕业于 Purdue 大 学 , 拥 有 计 算 机 和 电 子 工 程 学 位 , 并 一 直 为 很 多 大 学 和 公 司 提 供 硬 件 和 软 件 工 程
6、 的 咨 询 。他在 Indiana 大 学 的 回 旋 加 速 器 实 验 室 ( INFC) 工 作 , 他 的 主 要 工 作 是 设 计 实 用 的 电 子 检 测器 。 IUFC 的 主 要 工 作 方 向 是 癌 症 护 理 和 电 子 影 响 测 试 。在他的空闲 时间中, 他 写过关于 Circuit Cellar INK 的 文章, 也写过 各种关于 嵌入式应 用的文 章 , 例 如 机 器 人 控 制 等 。 他 还 与 别 人 合 写 过 Real-Time Programming: A Guide to 32-Bit Embedded Developoment感谢写一本
7、书需 要做大量 的工作。 如果 没有如下 的朋友的 帮助, 本书的出 版是不可 能的, 因此本 书在很大的 程度上要 归功于他 们的辛勤 努力。 但是 请 注意, 任何错 误和疏漏 都是本书 作者的 责 任 请 给 我 写 电 子 邮 件 而 不 是 他 们 。Erik Andersen 帮我修正了一些技术问题 , 其中包 括我 对于 “实时” 的错误描 述。 同时 非常感 谢 Ingo Cyliax 和 Mark Whitley 提 供 的 反 馈 和 修 改 意 见 。我 还 要 感 谢 如 下 的 朋 友 :Robin Drake 为 本 书 的 出 版 做 了 大 量 的 幕 后 工
8、作 。John Keefe 为 本 书 做 了 一 步 一 步 的 详 细 检 查 。Laurie Petrycki, 本 书 的 早 期 读 者 , 为 本 书 提 了 很 多 有 价 值 的 意 见 。Bill Shields 提供了 Rick Lehrbaum 的 文 章 Doctor Dobbs Journal 并 为 本 书 写 了 有 关 硬 件 的章节。Ann Quinn, 本 书 的 编 辑 。 他 给 予 了 我 大 量 的 支 持 和 鼓 励 。我 还 想 感 谢 我 的 妻 子 Dena 和我的孩子 Andrew, Cameron 和 Zachary, 在 我 利 用 所
9、 有 的 时 间 间 隙 写 作 的 一 年 中 一 直 坚 持 与 我 在 一 起 。最 后 我 要 感 谢 主 耶 苏 基 督 。 “因 为 万 有 都 是 靠 他 造 的 , 无 论 是 天 上 的 、 地 上 的 、 能 看 见 的 , 不 能 看 见 的 , 或 是 有 位 的 、 主治的、执 政的、掌 权的,一 概都是藉 着他造的 ,又 是为他造的” (哥罗西 书 1:1 6) 。告 诉 我 们 你 的 想 法作为本书的 读者, 您是本 书最重要 的评论员。 我 们重 视您的观点 和您所做 的事情, 请告 诉我 们, 您认为我们 怎样做得 更好, 您认为 我们出版 那些 领域的图书
10、 会更有用, 以 及任何您 认为 需要告诉我 们的东西 。作为 New Riders 出 版 社 的 执 行 编 辑 , 我 们 欢 迎 您 与 我 们 联 系 , 您 可 以 通 过 电 子 邮 件 , 传 真 或者直接写 信给我们, 告诉我们 您喜欢或 者不喜欢 本 书, 以及给我 们把本书 做得更好 的建议。 但是请您注 意, 我们不能 帮助您解 决与本书 有关的技 术问题, 面对大 量的邮件, 我 们很抱歉 可 能 不 能 一 一 回 复 。 在 您 给 我 们 写 邮 件 的 时 候 请 注 意 包 括 本 书 的 名 字 , 作 者 以 及 您 的 名 字 、 电 话 或 者 传
11、真 号 码 。 我 们 将 仔 细 的 阅 读 您 的 邮 件 并 与 本 书 的 作 者 和 编 辑 一 起 分 享 您 的 邮 件 。传真: 3 17-581-4663Email: 地址: S tephanie WallExecutive EditorNew Riders Publishing 201 West 103rd StreetIndianapolis, IN 46290 USA简 介辛 苦 了 一 天 , 你 轻 松 地 回 到 家 , 把 钥 匙 扔 到 电 视 前 面 的 桌 子 上 , 几 秒 钟 以 后 , 用 遥 控 器 打 开 电 视 , 收 看 你 喜 欢 的 I
12、Love Lucy 马 拉 松 节 目 。 这 个 可 以 自 动 记 录 电 视 节 目 的产 品是 TiVo,T iVo 的核 心 就是 Linux。我 们 生 活 在 一 个 迅 速 自 动 化 的 世 界 中 。 我 们 的 桌 面 上 有 计 算 机 , 但 是 更 多 的 时 间 我 们 还 是 处 在 墙 壁 、 家 具 和 衣 服 的 质 感 中 间 。 它 们 是 那 样 容 易 使 用 , 所 以 我 们 不 会 感 到 无 从 入 手 , 从 它 们 的 物 理 设 计 上 我 们 就 可 以 轻 易 地 发 现 它 们 的 使 用 方 法 。 其 实 , 其 中很多设备
13、的核心就是 Linux 操作系统。Linux 是 一 个 叫 做 Linus Torvalds 的 刚 毕 业 的 大 学 生 在 1990 年 发 明 的 。 Linux 现 在 已 经 成 为 一 种 主 要 的 操 作 系 统 , 它 的 影 响 迅 速 地 从 黑 客 爱 好 者 开 始 , 遍 及 全 球 的 IT 部 门 , 直到 现 在 遍 及 普 通 大 众 。 实 际 上 , VA Linux 公 司 的 股 票 在 交 易 第 一 天 就 上 长了 733%金 融 界 的 新 记 录 !为 什 么 是 Linux?为 什 么 Linux 如此流行?为什么是它驱动嵌入式计算机
14、应用风靡全球?我们可以 找出很多的原因,其中最重要的是: Linux 是一个开放式的操作系统Linux 与 其 他 操 作 系 统 相 比 , 具 有 一 个 怎 么 强 调 也 不 过 分 的 特 性 , 那 就 是 它 的 开 放 本 质 。 在 操 作 系 统 市 场 , Linux 的 主 要 竞 争 对 手 是 微 软 的 Windows 操 作 系 统 家 族 。 其 他 很 多 基 础 很 好 的 公 司 也 提 供 一 些 操 作 系 统 产 品 在 市 场 上 与 微 软 竞 争 , 在 很 多 时 候 这 些 产 品 的 技 术 是 很 优 秀 的 , 但 是 它 们 都
15、没 有 成 功 地 取 得 预 期 的 市 场份 额 。 因 为 与 Windows 一 样 , 所 有 这 些 产 品 都 具 有 专 利 权 , 它 们 的 源 代 码 也 是 不 公 开 的 。但是 与之 相 反, Linux 的 源 代 码却 是 完 全公 开 的, 任何人都 可以 任 意修 改它们。 你 可以自己建立一个 Linux 版本,并把它销售给任何人,而不需要支付任何版税。你也 可 以 对 Linux 做一些必要的修改以便其在市场竞争中取胜。惟一的要求是你必须把你 对于内核的全部修改也公开给其他人。“开 源 ”概 念 实 实 在 在 地 改 变 了 计 算 机 工 程 特 别
16、 是 在 价 值 链 的 顶 端 和 底端可 以 怎 样 设 计 和 应 该 怎 样 设 计 的 思 路 。 如 果 你 正 在 设 计 一 个 大 型 的 多 用 户 的 计算 机系 统 , 也 许是 一 个 大 型 网 站, 却 没 有 考 虑 把 Linux 作 为 一个 适合 的 解决 方案 , 那将 是 非 常 遗 憾 的 。 最 后 也 许 你 并 没 有 选 择 Linux, 但 是 你 至 少 应 当 考 虑 Linux。 对 于 价 值 链 的 另 外 一 端 那 些 非 常 小 的 计 算 机 系 统 , 例 如 嵌 入 式 设 备 也 是 一 样 的 , 也 许最 后你
17、由 于 某 种 原 因 选 择 了 其 他 的 操 作 系统 , 但 是 你 还 是 应 该 主 要 考 虑 Linux 的 开 放 源 代 码 的 本 质 和 它 带 给 桌 面 系 统 的 好 处 。 Linux 的高程度的知识共享是一种动力实 际 上 存 在 着 另 外 一 种 比 较 老 的 , 但 是 从 某 种 角 度 来 说 技 术 上 非 常 先 进 的 开 放 源 代码的操作系统,叫做 FreeBSD。有很多讨论,为什么 Linux 可以在程序员社区获得 如此巨大的成功,但是 FreeBSD 却不能获得同样的认同呢?但是无论是什么原因,在 过 去 的 几 年 中 Linux
18、都获得了广泛的认可和接受。这种“接受”转化为一种知识的共 享 , 这 种 “知 识 共 享 ”又 转 化 为 一 种 动 力 , 这 种 “动 力 ”反 馈 回 来 的 是 更 高 程 度 的 对 于 Linux 的接受。这种良性循环使得 Linux 增长越来越快,同时市场回报也越来越高, 这是 Linux 在今天如此流行的主要原因。什 么 是 嵌 入 式 系 统 ?好,现在我们已经知道了为什么 Linux 是一种优秀的操作系统的原因了,过一会 我 们 再 就 这 个 主 题 讨 论 更 多 的 细 节 , 目 前 还 有 一 件 重 要 的 事 情 , 那 就 是 我 们 需 要 准 确 地
19、理解什么是“嵌入式”系统。用户 界面也 许 一 种 简 单 的 区 分 嵌入 式 系 统 与通 用计 算 机系 统 不同 的方 法 就 是 用 户 界 面 。 通用 计 算 机 的 用 户 界 面 通 常 包 括 监 视 器 、 键 盘 、 一 个 鼠 标 和 一 些 与 它 接 驳 的 打 印 设 备 。 而 嵌 入 式 也 许 根 本 就 没 有 用 户 界 面 , 或 者 是 有 一 些 很 特 殊 的 主 界 面 , 例 如 按 钮 触 摸 屏 , 或者 一 个 大 的 控 制 面 板 。 缺少 用 户 界 面 的 嵌 入 式 系 统 通 常 只是 监听 网 络或 者传 感 器收 集的
20、 数 据 , 或 者 发 送 和 接 收 命 令 。 你 也 许 可 以 在 一 个 嵌 入 式系 统上 接 上一 个监 视 器或 者一 个 键 盘 , 但 是 这 不 是 操 作 的 正 常 模 式 。 通 常 只 有 在 调 试或 者配 置 的时 候才 把 它们 插 上 。那么 是不 是 那 些你 的 ISP 摆 在架 子 上 的, 没 有 监 视器 和 键 盘的 PC 也 是嵌 入 式系 统呢? 恐怕 不 是 看 来 我们的定 义还 需 要更 精 确 一点。有限 任务多 数 情 况 下 , 要 确 定 一 个 计 算 机 系 统 适 合 普 通 的 计 算 机 系 统 还 是 嵌 入 式
21、 系 统 , 需 要 对 系 统 生 命 周 期 内 的 任 务 做 一 个 考 察 。 嵌 入 式 系 统 是 针 对 一 定 的 问 题 或 者 特 定 的 设 备 的 、 基 于 成 本 考 虑 的 解 决 方 案 。 而 通 用 的 计 算 机 系 统 则 更 像 是 瑞 士 军 刀 , 它 们 在 出 厂 的 时 候 就 被 预 先 安 装 在 计 算 机 上 , 并 没 有 明 确 的 任 务 。 瑞 士 军 刀 可 以 砍 、 剪 、 刮 、 削 、 钻 等 等 , 与 此 类 似 , 通 用 系 统 可 以 处 理 工 资 单 、 玩 Quake 游 戏 、 上 网 冲 浪 等
22、 等 。嵌入式系统是具有有限任务的系统,它也许可以做 10 件事情,而且只能做这 10 件 事 情 。 例 如 , 安 装 在 你 的 汽 车 上 的 计 算 机 , 它 可 以 检 测 你 的 燃 料 状 况 , 收 集 危 险 的 发 动 机 遥 感 信 号 , 同 时 等 待 为 特 定 命 令 服 务 等 等 , 它 不 停 地 只 是 做 这 些 事 情 不论 它多么强大,你也不能在它上面玩 Quake。虽然 嵌入 式 系 统是 有 限 任务 系 统, 但 是 并不 意味着任务不 能增 加 。 例 如 , Cisco 的 路 由 器 就 可 以 由 用 户 升 级 到 最 近 的 软
23、 件 版 本 。 新 的 软 件 不 仅 可 以 修 复 旧 的 软 件 中 的 错 误, 也可 以 增 加新 的 功能 这 意味 着 嵌入 式 系 统被扩 展 了。另 外 一 个 关 于 嵌 入 式 系统 任 务 扩 展的 有趣 例 子是 NASA(美 国宇 航 局 ) 的 航 海 者 1 号 和 2 号 宇 宙 飞 船 的 故 事( 参 见 www.jpl.nasa.gov/releases/97/vgrani97. html) 。航海者 2 号 是 这 两 艘 飞 船 中 首 先 被 发 射 的 一艘 , 发射 的 时 间 是 1977 年 8 月 20 日。 几 个星期以 后 , 也
24、就 是 9 月 5 日, 航海 者 1 号 也 发 射 了。 开 始 的 时候 两艘 飞 船都 只支 持 两个 任 务 木 星 和 土 星 探 险 。 但 是 人 们 不 能 相 信 , 在 完 成 对 于 木 星 和 土 星 的 探 险 以 后, 两 艘 飞 船 的 状 况 还 非 常 好 , 于 是 NASA 决 定 扩 展 其 中 航 海 者 2 号 飞 船 的 任 务 , 去 探索 天 王 星 和 海 王 星 。 由 于 飞 船 要 飞 越 太 阳 系 , 远 程 控 制 给 飞 船 提 供 了 比 在 地 球 上 更强 大 的 能 力 。任 何 对 于 该 嵌 入 式 计 算 机 感
25、 兴 趣 的 读 者 都 可 以 访 问 NASA 的 站 点 , 查 看 “ Computers On Board Unmanned Spacecraft ”, 网 址 为 : http:/www.hq.nasa.gov/ office/pao/History/computers/contents.html。硬 件 成 本 与 软 件 弹 性 之 间 的 比 率我们生活在这样的一个时代,嵌入式计算机的硬件部分,例如 CPU、内存、闪存 的 价 格 大 跳 楼 , 与 之 相 适 应 的 , 对 于 需 要 在 嵌 入 式 环 境 下 运 行 的 软 件 的 需 求 则 呈 现 爆 炸 状 态
26、 。 综 合 以 上 这 两 点 , 这 两 个 趋 势 改 变 了 嵌 入 式 工 程 师 的 规 则 。 过 去 工 程 师 们 总 是 在 考 虑 如 何 利 用 计 算 机 内 存 和 外 存 中 宝 贵 的 最 后 一 位 空 间 , 而 现 在 工 程 师 则 把 主 要 的精力放在考察如何提供更多的新的软件满足市场需求上。这 个 市 场 中 开 放 源 代 码 的 嵌 入 式 Linux 意 义 重 大 。 嵌 入 式 Linux 的 解 决 方 案 可 以 比 其 他 操 作 系 统 更 快 速 地 被 拿 到 市 场 上 来 , 因 为 Linux 的 源 代 码 是 公 开
27、 的 , 有 比 其 他 操 作 系 统 更 多 的 人 在 Linux 上 开 发 。 有 一 种 观 念 认 为 那 些 嵌 入 式 Linux 的 开 发 人 员 是 最 糟 糕 的 黑 客 , 他 们 不 知 道 怎 样 去 开 发 程 序 , 这 种 观 念 是 完 全 错 误 而 不 符 合 现 实 的 。 像 Red Hat 和 VA Linux 这 样 的 公 司 会 花 费 大 量 的 金 钱 , 请 来 最 好 的 技 术 人 员 , 把 Linux 完 善 到 最 好 。软 件 成 本最明 显的 但是 不 一 定是最重 要的 优势 是 , Linux 不 需要 你 支付
28、任 何 许可 证 费用、版税,或者源代码许可证费用。事实上在你为私人目的使用 Linux 的时候不需 要向 任何 人 支 付任 何 费 用。 但 商 业化 的嵌入式 操作 系 统 , 像 WindRiver 公 司 和 QNX 公 司 的 产 品 , 从 开 发 一 开 始 你 就 需 要 支 付 上 万 美 元 , 而 你 的 产 品 做 好 以 后 , 每 销 售 一 个 产 品 还 需 要 向 他 们 支 付 版 税 。当然,对于厂商来说,嵌入式 Linux 操作系统从开发成本、维护成本,甚至从很 长时期的逐步升级的角度来看,成本都近似于 0。稳 定 性很多人都听说过这样一种说法,就是
29、Linux 的稳定性非常好,尤其是在与微软公 司的 Windows NT 产品比较时。那么有没有办法把这个问题量化呢?有人长时间地计 算过 Windows NT 蓝 屏 的 频 率 和 Linux 出 现 Oop 的频率吗?有一个好消息,一个叫做 Uptimes 的项目 ( ) 做 了 一些 了 不 起的工作 来回 答 这个 问题 。 他 们 的调 查数 据显 示 , Linux 作 为 第二 稳 定的 操 作 系统, 仅 排 在 NetBSD 和 FreeBSD 后面。 到 2000 年 3 月 底 , Windows NT 在列表中最长的稳定运行时间排第 277,达到 76 天。如 果 你
30、 运 行 过 Windows NT 的话,你会认为这已经是一个非常好的成绩了,但是同样的 环 境 下 , 最 好 的 Linux 已 经 稳 定 运 行 了 575 天 , 而 BSD 稳 定 运 行 的 天 数 则 高 达 1411 天,这完全没法比较!可 移 植 性Linux 已 经被移植 到了 多 种不 同 的 硬件 结 构 上 。 主 流 的 Linux 源 代 码与 下面所有 的 CPU 结 构 都 兼 容 : DEC Alpha(AXP ) www.alphalinux.org ARM 和 StrongARM 处 理 器 www.arm.linux.org.uk www.uclin
31、ux.org Hitachi SuperH www.m17n.org/linux-sh IA-64www.linuxia64.org i386 Motorola 68K 系 列 www.linux-m68k.org www.uclinux.org MIPS 处 理 器 Motorola PowerPC www.linuxppc.org S Sparc(32 和 64 位)www.ultralinux.org进 入 市 场 时 间在过 去的 50 年 当中, 技术进步 的速 度 越来 越 快 , 毫 不 停 歇, 特 别 是在计算 机应用领 域 , 有 人 甚 至 用 “Internet tim
32、e( 因 特 网 时 间 ) ”来 形 容 这 种现 象 。一 方 面 像 Intel 和 Motorola 这样的大公司以极快的速度推出新的计算机芯片集与对 手 竞 争 ; 另 外 一 方 面 , 成 百 上 千 的 软 件 与 因 特 网 公 司 制 定 了 新 的 协 议 和 方 法 加 强 计 算 机与 人之 间 的 互动 。 这 使 得嵌 入 式操 作 系 统公 司 , 像 WindRiver 和 QNX 都 面临 巨大的 压 力 。 它 们 必 须 第 一 时 间 或 者 稍 晚 一 点 就 支 持 新 出 现 的 硬 件 技 术 , 而 且 它 们 不 得 不 一 直 坚 持 支
33、 持 这 种 技 术 。 但 是 对 于 嵌 入 式 操 作 系 统 来 说 , 真 正 的 问 题 却 应 该 是 如 何 支 持 软件。它们不得不在软件方面经常打补丁。最新的软件技术很多都是使用 Linux 开 发 得到的,因此它们首先在 Linux 上 可 以 应 用 。 而 非 Linux 上的技术通常就是建构在微 软的 Windows 系统上。因为 Linux 拥 有 大 量 的 开 发 团 队 , 因 此 , Windows 下 的 技 术 也 被 很 快 地 移 植 到 Linux 上 来 。Linux 可 以 快 速 进 入 市 场 的 另 外 一 个 原 因 是 你 可 以
34、使 开 发 主 机 与 目 标 主 机 使 用 相同的 操作 系 统 。开 放 源 代 码除 了 成 本 , 首 先 需 要 考 虑 的 问 题 就 是 技 术 。 例 如 , Linux 非 常 稳 定 , 其 他 商 业 化 的操 作 系 统 也 是 如 此。 让 Linux 脱 颖而 出 的是 它 开 放 源代 码的 特 性。 实 际上 在 考 虑 所 有 的 技 术 问 题 以 前 就 首 先 应 该 将 Linux 作为 操作 系统 的 可 选 方 案 , 除 非 因 为 某 些 特 殊 原 因 将 之 删 除 。那么开放源代码是什么意思呢?开放源代码定义的 1.7 版 ( )免 费
35、 再 发 布如 果 被 发 布 的 软 件 由 不 同 来 源 的 程 序 组 成 , 那 么 许 可 证 不 得 限 制 任 何 当 事 人 或 组 织 销 售 或 赠 送 作 为 被 发 布 软 件 成 分 之 一 的 开 放 源 码 软 件 。 许 可 证 不 得 从 此 项 销 售 中 索 取 使 用 费 或 其 他 任 何 费 用 。源 代 码 程 序 必 须 包 括 源 代 码 , 必 须 允 许 以 源 代 码 方 式 和 编 译 后 的 形 式 发 布 。 如果 产 品 的 某 个 部 分 没 有 与 源 代 码 一 同 发 布 , 那 么 必 须 提 供 通 行 的 、 不
36、需 要 支 付 合 理 范 围 之 外 的 任 何 费 用 的 手 段 以 获 得 源 代 码 从 网 络 上 免 费 下 载 是一 种 可 取 的 方 式 。 源 代 码 必 须 是 程 序 员 对 其 进 行 修 改 的 最 佳 形 式 。 故 意 地 使 源 代 码 变 得 含 混 晦 涩 是 不 允 许 的 。 也 不 允 许 给 出 预 处 理 器 或 翻 译 器 处 理 的 中 间 结 果 。派生 作品许 可 证 必 须 允 许 修 改 软 件 和 派 生 软 件 , 并 且 必 须 允 许 它 们 按 照 原 软 件 的 许可证条款进行发布。作者的源代码的完整性只 有 在 许 可
37、 证 允 许 与 源 代 码一同 发 布 “补丁文 件 ”( 该 “补丁文 件 ”以 在 创 建 时 对 程 序 进 行 修 改 为 目 的 ) 时 , 许 可 证 才 能 对 修 改 形 式 的 源 代 码 的 发 布 进 行 限 制 。 许 可 证 必 须 明 确 地 允 许 发 布 由 修 改 后 的 源 代 码 生 成 的 程 序 。 许 可 证 可 以 要 求 派 生 的 作 品 采 用 不 同 的 名 称 或 不 同 的 版 本 号 以 区 别 于 原 来 的 软 件。不得歧视任何个人和团体许可证不得歧视任何个人或者由多人组成的团体。不得歧视任何应用领域许 可 证 不 得 限 制
38、任 何 人 把 程 序 应 用 于 任 何 领 域 。 例 如 , 不 得 规 定 程 序 不能应用于商业领域或基因研究领域。许可证的发布与 程 序 有 关 的 权 利 必 须 适 用 于 该 程 序 的 任 何 使 用 者 , 并 且 程 序 的 使 用 者也不需要为了使用该程序而获得其他许可证的许可。 许 可 证 不 能 针 对 于 一 个 产 品与 程 序 有 关 的 权 利 不 能 由 该 程 序 是 否 作 为 某 个 软 件 产 品 的 一 部 分 来 决 定 。 如 果 程 序 从 那 个 发 布 中 被 抽 出 来 , 并 且 按 照 程 序 的 许 可 证 条 款 进 行 使
39、 用 和 发 布 , 那 么 得 到 该 程 序 的 当 事 人 或 组 织 将 获 得 与 得 到 原 程 序 的 使 用 者 相 同 的 权 利 。许可证不能影响其他软件 许 可 证 不 得 向 与 它 的 软 件 一 同 发 布 的 其 他 软 件 提 出 任 何 限 制 。 例 如 , 许可证不能坚持要求在同一媒体上发布的其他程序都是开放源代码软件。开 放 源 代 码 的 好 处 如果你拥有源代码你可以找出所有的 bug对 于 程 序 员 来 说 , 没 有 什 么 比 调 试 代 码 的 时 候 进 入 死 胡 同 更 让 人 沮 丧 的 了 , 更 糟 糕 的 是 , 这 时 你
40、正 在 调 试 客 户 出 现 的 问 题 。 进 入 死 胡 同 意 味 着 你 跟 踪 你 的 代 码 , 进 入 一 段 你 没 有 源 代 码 的 程 序 , 因 此 你 不 能 跟 踪 发 生 了 什 么 , 但 是问题 恰 恰 出 现 在 这 一 段 。 一 些 时 候 问 题 出 现 在 你 没 有 源 代 码 的 程 序 中 , 但 是 更 多 的 情 况 是 出 现 在 你 自 己 的 代 码 中 也 许 是 你 没 有 正 确 地 运 用 那 些 你 没 有 源 代 码 的 程 序 。 但 是 没 有 关 系 你 可 以 花 费 几 个 小 时 或 者 几 天 的 时 间
41、在 你 没 有 源 代 码 的 部 分 , 可 是 还 是 可 能 没 有 发 现 任 何 问 题 。 如 果 你 有 被 调 用 的 函 数 的 源 代 码 , 就 可 以 快 速 地 找 出 问 题 所 在 , 并 花 费 几 分 钟 把 问 题 解决 ; 或 者也许 你 调 用 的 函 数 中 真 的存在 bug你 可 以 修 正 这 个 错 误 , 或 者 继 续你的工作把它留给这个函数的维护人员去修改。 一 些 程 序 员 拒 绝 看 他 们 使 用 的 软 件 的 源 代 码 , 他 们 认 为 软 件 中 的 问 题 只 是 他 们 选择 的 职 业 生 命 中 的 一 种 事
42、实 。 但 是 这 不 是 真 的 。 那 些 聪 明 到 可 以 深 入 到 软 件 的 下 一 层 的 开 放 源 代 码 软 件 程 序 员 ( 必 要 的 时 候 , 甚 至 可 以 深 入 到 内 核 ) , 几乎从 来 都不会 在 调 试 中 进 入 死 胡 同 , 他 们 几 乎 可 以 调 试 任 何 问 题 。 事 实 上 , 如 果 出 现 了 不 能 被 调 试 的 问 题,那么这些问题几乎一定是硬件的问题。 你可以让别人帮助你修正代码在 1999 年, 我 为 一 个应 用 软 件项 目 工作 , 这 个 软件 的 用 户对 于应用有 丰富 的 经验 , 但 是 对 于
43、 Linux 几乎没有什么经验。因此我们必须制作出完整的软件包,其中包括针 对用户拥有的硬件设备的安装程序。几星期以后我们进入了 beta 测 试 周 期 , 一 个 用 户 发 现 了 一 个 系 统 板 的 问 题 。 我 们 不 仅 调 试 了 这 个 在 驱 动 程 序 层 的 问 题 , 还 把 这 个 问 题 以 及 解 决 方 法 提 交 给 了 这 个 驱 动 程 序 的 维 护 人 。 他 发 现 我 们 的 这 种 解 决 方 法 只 适 合 我 们 特 定 的 用 户 环 境 , 更 好 的 解 决 方 法 可 能 会 牵 扯 到 一 系 列 的 问 题 。 最 后 他
44、们 完 全 修 复 了 这 个 问 题 并 把 新 的 驱 动 程 序 的 源 代 码 提 交 给 我 们 。 如 果 我 们 没 有 工 作 在 开 放 源 代 码 的 操 作 系 统 上 , 我 们 就 不 可 能 找 出 这 个 问 题 并 自 己 解 决 这 个 问 题 。 如 果 我 们 工 作 在 一 个 非 开 放 源 代 码 的 操 作 系 统 上 , 也许我们要花费大量的时间做艰苦的工作,最后问题依然无法解决。 你可以了解软件是怎样工作的在 Linux 下拥有所有驱动程序的源代码写新的驱动程序就变得简单多了。如果代 码 编 写 人 需 要 一 些 特 性 , 他 可 以 参
45、考 其 他 的 驱 动 程 序 , 看 这 些 驱 动 程 序 是 如 何 实 现 这 些 特 性 的 。 实 际 上 写 一 个 新 的 驱 动 程 序 的 第 一 步 通 常 是 寻 找 一 个 跟 你 要 写 的 类 似 的 驱 动程序,复制它,然后在它的基础上根据你自己的实际需要做一些修改。 完善的文档一 些 开 放 源 代 码 软 件 没 有 完 备 的 文 档 。 但 是 另 一 方 面 , Linux 却 有 非 常 完 善 的 文 档 。 Linux Documnt Project 提 供 了 很 多 的 自 由 文 档 以 及 十 几 本 书 。 当 然 , 软 件 包 如
46、何 工 作 的 最 终 权 威 还 是 源 代 码 本 身 , 而 这 对 于 所 有 的 开 放 源 代 码 产 品 都 是 可 以 完 全 得 到 的 。开 放 源 代 码 的 缺 点 保护智力成果很困难有 很 多 的 市 场 原 因 可 以 让 你 不 能 或 者 不 想 公 开 你 的 智 力 成 果 : 你 想 在 竞 争 中 保持 领 先 地 位 , 你 的 智 力 成 果 基 于 一 些 不 全 属 于 你 的 代 码 等 等 。 如 果 你 有 一 项 智 力 成 果是 你 不 想 跟 自 己 身 外 的 世 界 分 享 的 , 那 么 你 要 小 心 这 其 中 不 能 包
47、含 任 何 一 点 其 他 的 开放 源 代 码 项 目 的 代 码 , 即 使 为 此 你 不 得 不 牺 牲 一 些 时 间 而 耽 搁 产 品 进 入 市 场 。 如 果 你使 用 了 开 放 源 代 码 软 件 项 目 中 的 代 码 , 你 的 软 件 按 照 GPL 就 必 须 开 放 源 代 码 , 成 为 一 个 开 放 源 代 码 的 项 目 这 对 于 那 些 想 保 护 自 己 智 力 成 果 的 人 来 说 可 不 是 一 件 好 事 情。对 于 应 用 程 序 代 码 来 说 , Linux 下 也 有 很 多 非 源 代 码 开 放 程 序 ( 最 典 型 的 就
48、是 Netscape) , 在 内 核 空 间 中 , 有 很 多 只 有 二 进 制 代 码 的 内 核 模 块 的 例 子 ( 例 如 本 书 后 面 会 提 到 的 DiskOnChip) 。 在 内 核 空 间 中 维 护 工 作 的 负 担 意 味 着 高 昂 的 代 价 , 因 为 内 核的 很 多 选 项 都 会 改 变 模 块 的 接 口 ( 例如 SMP 与 UP, 大 的 内 存模 式与 小 的内 存模 式 , 等 ) , 甚 至一 个 内核 版 本 需 要 为 每 一 个 平 台 编 译 几 次 , 更 严 重 的 是内 核 接口 改 变会 导 致 只 有 二 进 制 代
49、 码 的 内 核 模 块 中 的 专 利 代 码 破 坏 而 不 得 不 经 常 维 修 , 当 出 现 bug 的时 候 , 标 准 内核 开 发 人 员可 能 会 拒 绝 帮 助 他 们 使 用 二 进 制内 核模 块 而要 他们 参 考模 块 的 专 利 技 术 。 内核发布速度很快,变化很大Linux 内 核变化 非 常 快 , 不 同 的 版 本 之 间 可 能 存 在巨大 的 差异 。 如 果 你 一 定 要 把你 的程序运行在最新的版本上,这实在是一种苛求。 内 核 并 不 总 是 能 在 你 期 待 的 时 间 内 发 布如果你想基于最新的内核提供的新特性发布你的产品,而又不打算发布 beta 测 试版 本 , 那 么 是 非 常 困 难 的 。 很难确定你所做的修改是不是能跟系统很好地协调工作 如 果 你 修 改 了 内 核 代 码 , 你 就 很 难 保 证 它 可 以 与 其