📄 linux
字号:
<P align=left>4. 选 择 合 适 的 硬 件 平 台 选 择 硬 件 平 台 是 一 件 很 麻 烦 的 事,受 很 多 因 素 影
响, 比 如 公 司 的 指 导 原 则、 个 人 偏 见、 过 去 产 品 的 影 响 和 消 息 不 灵 通 等。 费 用 是 考 虑 的 主
要 因 素。 提 醒 你 考 虑 价 格 时 不 要 只 注 意CPU 的 价 钱, 要 对 整 个 系 统 进 行 考 虑。 但 是 如 果 你
是 系 统 设 计 师, 你 必 须 把 软 件 的 实 时 性 和 硬 件 结 合 起 来 考 虑。 首 先 考 虑 需 要 多 快 的CPU,
然 后 把 选 择 三 倍 化 的 结 果; 因 为 在 实 际 中应 用 程 序 会 使 用 一 些cache( 缓 冲), 所 以 理 论 上
速 度很 快 的CPU 的 实 际 速 度 会 降 低。 其 次 考 虑 选 择 多 快 的BUS( 总 线); 如 果 可 以 包 括 其 他 的
总 线, 比 如PCI, 就 加 上 它。 因 为 有 时 即 使 使 用DMA 方 式 传 输, 也 会 使 快 速CPU 变 得 象 蜗 牛 一
般。 选 用 集 成 外 设 的CPU 比 较 好,而 且 还 可 选 用 现 成的 外 设 驱 动 程 序 , 大 大 减 少 调 试 工 作,
实 际 上 有 些 芯 片 集 成 的 功 能 并 不 是 我 们 所 需 要 的, 所 以 也 不 要 认 为 凡 是 集 成 的 都 是 好 东
西。</P>
<P align=left>5. 压 缩 制 作 Linux 系 统 对Linux 的 通 常 感 觉 是 大, 似 乎 不 适 合 于 嵌 入 式
系 统。 事 实 并 非 如 此。 因 为典 型 的 发 行Linux 集 成 了 很 多 桌 面PC 机 需 要 而 嵌 入 式 系 统 并 不
需 要 的 功 能。 首 先 , 我 们 可 以 把 核 心(kernel) 从 其 他 任 务 中 分 离 出 来。 标 准 的Linux 核 心
总 是 贮 留 在 内 存 中 ; 当 需 要 应 用 程 序 时, 它 把 需 要 的 程 序 从 磁 盘 调 入 内 存 运 行。 程 序 运
行 完 毕, 内 存 清 空, 卸 载 程 序。 在 嵌 入 式 系 统 中 , 经 常 没 有 磁 盘 。 目 前 有 两 种 办 法 来 处 理
没 有 磁 盘 的 情 况。 对 于 比 较 简 单 的 系 统, 核 心(kernel) 和 应 用 程 序 同 时 贮 留 在 内 存 , 当
系 统 启 动 时, 就 启 动 应 用 程 序。 这 种 方 式 和 以 前 的 嵌 入 式 系 统 一 样 工 作。Linux 系 统 也 支
持 这 种 方 式。 第 二 种 方 式 是, 考 虑 到Linux 有load ( 装 载)和unload( 卸 载) 程 序 的 能 力, 嵌
入 式 系 统 也 可 以 使 用 这 一 特 点, 来 节 约 内 存。 假 如 有 一 个 典 型 的 嵌 入 式 系 统: 包 括8 到16
M 的Flash Memory 和8 到16 M 的RAM ;可 以 在Flash Memory上 建 立 文 件 系 统, 使 用Flash 的
驱 动 程 序 来 驱 动Flash Memory上 文 件 系 统 工 作。 另 外, 也 可 以 使 用Flash Didsk, 其 中 有 一
个 例 子 是M-system 的DiskOnChip, 它 可 以 支 持达160 M 的Flash Disk。 把 使 用 的 应 用 程 序
文 件 存 放 在Flash 文 件 系 统 上, 根 据 需 要 调 入 程 序。 这 种 动 态 装 入 方 法 有 很 多 优 点: (1)
因 为 在Linux 中 有 一 些 应 用 程 序 只 是 在 初 始 化 时 使 用 一 次, 然 后 就 没 有 用 处 了, 另 外 它 们
运 行 方 式 是 一 个 接 一 个, 顺 序 进 行 的 。可 以 允 许 初 始 化 程 序 的代 码 在 使 用 完 毕 后 被 废 弃,
不 必 永 远 存 放 在 内 存。因 此 相 同 内 存 可 以 运 行 不 同 的 程 序。 这 样 很 节 省 内 存 的。 (2) 软 件
更 新 比 较 容 易; 可 以 在 系 统 运 行 的 情 况 下 更 新 应 用 程 序 和 驱 动 程 序。</P>
<P align=left>6. 如 何 处 理 虚 拟 内 存 标 准 的Linux还 有 一 个 特 点 是 使 用 虚 拟 内 存,程 序 过
大, 可 以 交 换 到 虚 拟 存 储 器 上。 这 是 一 个 神 奇 的 功 能 , 它 使 得 程 序 有 很 大 的 运 行 空 间 。然
而 , 在 嵌 入 式 系 统 中, 这 个 功 能 似 乎 没 有 用 武 之 地, 因 为 没 有 磁 盘。 这 个 功 能 对 于 嵌 入 式
系 统 , 特 别 要 求 实 时 性 很 强 的 系 统来 说 的 确 不 那 么 重 要, 因 为 这 个 机 制 会 浪 花费 时 间, 所
以 , 嵌 入 式 系 统 的 应 用 程 序 还 是 在 固 定 的 地 方 运 行 比 较 好。 不 过 提 醒 你 重 注 意, 考 虑 到
一 些CPU 有 这 方 面 的 特 点, 建 议 保 留 虚 拟 存 储 器 的 代 码 。 不 仅 因 为 剔 除 这 部 分 代 码 很 费
事 , 如 果 剔 除 相 关 代 码 ,还 容 易 造 成 其 他 问 题。 更 主 要 的 是 这 保 留 了 这 部 分 功 能, 能 够 使
得 不 同 进 程 使 用 相 同 代 码 。 如 果 没 有 了 这 个 功 能, 每 个 程 序 都 需 要 自 己 的 运 行 库, 在 内
存 中 就 会 有 库 的 很 多 拷 贝。 其 实 只 需 把 交 换 空 间 的 长 度 设 置 为 零, 就 可 以 关 闭 虚 拟 内 存
的 页 面 换 入 和 换 出 功 能。 对 一 些CPU, 虚 拟 存 储 器 的 功 能 提 供 内 存 管 理, 防 止 不 同 程 序 占
用 相 同 的 地 址 空 间。 而 在 嵌 入 式 系 统 中, 使 用 简 单 、 绝 对 的 地 址 空 间, 因 此 这 种 功 能 也 不
会 起 作 用。 不 过 这 到 提 供 了 防 止 误 写 以 至 于 使 系 统 崩 溃 的 功 能。 很 多 嵌 入 式 系 统 习 惯 使
用“ 全 局 变 量”, 让 进 程 共 享 数 据 。 在Linux 系 统 中 提 供 共 享 内 存 方 法 让 进 程 共 享 数 据 信
息。 在RT-Linux 中 使 用FIFO 进 行 信 息 交 换。 </P>7. 处 理 文 件 系 统 很 多 嵌 入 式 系 统 没 有磁
盘 和文 件 系 统;Linux 也 可 以 在没 有 磁 盘 的 系 统 上 运 行。 正 如 上 面 提 到 的, 应 用 程 序 可 以 和
核 心 一 起 编 译, 在 启 动 时 一 起 装 入 运 行。 这 适 应 于 简 单 系 统, 但不 具 有 灵 活 性。 其 实, 许 多
商 业 的 嵌 入 式 系 统 都 提 供 文 件 系 统 的 选 择。 大 都 是 特 殊 的 文 件 系 统 或 者 兼 容MS-DOS 文 件
系 统。Linux 提 供 包 括MS-DOS 等许 多 选 择。 其 他 的 文 件 系 统 具 有 更 好 的 性 能。Linux 还 具 有
许 多 实 时商 业 操 作 系 统 所 不 具 备 的检 查 和 修 复 文 件 系 统 的 功 能。 这 种 功 能 对 于 通 过 网 络 更
新 的 系 统 尤 为 重 要。 Linux 的 文 件 系 统 可 以 建 立 在 传 统 的 磁 盘 上、Flash Memory、 或 其 他
载 体。 甚 至 可 以 用 RAM 磁 盘 存 放 临 时 文 件。 有 些 系 统 中 包 含 了 廉 价 的CD-ROM, 它 比Flash
Memory 更 便 宜, 更 新 升 级 更 容 易。Linux 系 统 可 以 从CD-ROM 中 启 动 以 及 运 行 程 序。 在 网 络
化 的 嵌 入 式 系 统 ,Linux 支 持NFS( 网 络 文 件 系 统)。 于 是 , 你 可 以 使 用 很 多 网 络 功 能。 首
先, 可 以 通 过 网 络 来 启 动 应 用 程 序。 因 为 通 过 服 务 器 来 启 动 应 用 程 序, 所 以 是 进 行 软 件 更
新 的 最 好 解 决 办 法。 其 次, 在 运 行 过 程 中, 可 以 很 方 便 地 导 入 和 导 出 数 据、 状 态 设 置 和 状
态 信 息 等。 这 个 功 能 很 适 合 用 于 远 程 监 视 和 控 制 应 用 系 统。 例 如, 在RAM 中 建 立 磁 盘, 保 存
各 种 需 要 的 重 要 数 据, 远 程 系 统 登 录 到 此RAM 文 件 系 统, 读 取 数 据, 然 后 在 操 作 者 的 机 器
上 用 图 形 界 面显 示 运 行状 态, 起 到 很 好 的 监 视 效 果。
<P align=left>8. 设 置 启 动-LILO 和BIOS 当 微 机 启 动 时, 它 运 行 预 定 地 址 的 代 码 ,那 地
址通 常 是 在 只 读 存 储 区, 存 放 有 启 动 代 码 。 在PC 中 , 即 BIOS, 它 执 行 底 层 的CPU 初 始 化 工
作 和 初 始 化 设 置 其 他 硬 件。BIOS 确 认 哪 个 硬 盘 存 放 操 作 系 统, 拷 贝 操 作 系 统 到RAM 中, 然
后 运 行 操 作 系 统。同 样,Linux 在PC 上 运 行, 依 靠PC 的BIOS 来 设 置 硬 件、 启 动OS。 在 嵌 入 式 系
统 中, 通 常 没 有BIOS, 因 此, 需 要 提 供 等 价 的 启 动 代 码。 嵌 入 式 系 统 并 不 需 要 象PC 那 样 灵
活 的BIOS 启 动 程 序, 它 初 始 化 的 硬 件 比 较 单 一。 这 段 代 码 其 实 很 简 单, 只 是 把 一 些 很 重
要, 而 且 还 要 特 殊 的 写 入 顺 序 要 求 的 数 据 写 入 硬 件 的 寄 存 器 。 另 外 必 须 具 备 的 功 能 有 内
存 检 测, 点 亮LED, 检 测 其 他 很 重 要 的 硬 件。 这 些 代 码 的 针 对 性 很 强, 不 需 要 很 好 的 移 植
性。 所 以 不 同 的 硬 件 环 境 需 要 不 同 的 启 动 代 码。 为 了 进 行 测 试, 可 以 使 用ICE( 在 线 仿 真
器) 或 其 他 的 设 备 来 调 试 这 部 分 代 码 。 这 部 分 代 码 总 是 运 行 在Flash 或EPROM 等 芯 片 上,
所 以, 需 要 把 它 们 写 入 这 些 芯 片。 如 何 写, 当 然 因 硬 件 的 不 同 而 不 同 了。 一 个 最 为 普 通 的
方 法 是 使 用EPROM 或Flash 烧 录 器, 把 程 序 烧 录 在 芯 片, 然 后 把 芯 片 插 入 板 上。 另 外 的 方 法
是 通 过JTAG 接 口 进 行。</P>
<P align=left>9. 嵌 入 式 的 Linux 同 样 健 壮 可 靠
和其他的运行于PC的系统相比,Linux是最可靠和最稳定的操作系统。而嵌入式的核心也是如此的。Linux的核心移植到新的微处理器上,基本不用什么修改。因此Linux可以使用许多计算机板。外设的驱动程序也多如牛毛,而且比其他的都稳定好用。但是,如果不是PC平台环境,那么你必需为特殊硬件编写驱动程序。对于各种硬件的相似驱动程序市面上随处可见,所以,你可以DOWN下来修改而成,所以安装新的或特殊
驱动器、网卡、串口、并口就不困难了。不过,我还是建议你在身边放一本Kernel的书比较好,以备查找。
在我的经验中,我觉得使用Linux的错误大都是对系统的了解不准确所至。况且,Linux的源代码随处可得、注释丰富、文档齐全,你完全可能自己去解决问题。</P>
<P align=left>10.结束语
嵌入式的Linux系统也有缺点。和某些商业操作系统一样,占用较大的内存。当然可以去掉部分无用的功能来减小使用的内存,但是,如果不仔细,将引起新的问题。
有些Linux的应用程序需要虚拟内存,而嵌入式系统中并没有或不需要虚拟内存,所以,并非所有的Linux应用程序可以在嵌入式系统运行。
核心的调试工具并非完尽人意,虽然可以使用kgdb,不过我们更多的是使用print语句来帮助调试。
在应用于嵌入式系统的主要问题是:Linux本身具有很大的灵活性,而嵌入式系统不具有灵活性,它们主要针对特殊的问题。这是问题的关键。
总之,Linux用于开发嵌入式系统的应用软件是可能的和可行的。
</P></TD></TR></TBODY></TABLE></DIV></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -