DiskOnChip (DOC) 是一种由M-Systems制造的闪存驱动器。闪存驱动器的使用正在兴起,作为嵌入式设备中硬盘的替代品。嵌入式 Linux 作为嵌入式系统社区首选的操作系统正变得越来越流行;因此,对可以从闪存驱动器启动到 Linux 的嵌入式系统的需求也在增加。
目前关于该主题的大部分文档要么不正确,要么不完整;这些文档提供的信息的呈现方式很可能会使新手用户感到困惑。
另一个根本问题是,大多数文档都假设 DiskOnChip 是一个 NFTL (NAND 闪存转换层) 设备,并继续描述 NFTL 设备的启动过程。DiskOnChip 架构有两种变体,每种变体都需要不同的启动程序:NFTL 和 INFTL (反向 NFTL)。编写了名为 DOCBoot 的引导加载程序的 Dan Brown 在 DOCBoot 软件包随附的 README 文档中解释了这些变体之间的差异:http://ftp.arm.linux.org.uk/pub/people/dwmw2/mtd/cvs/mtd/docboot/。
INFTL 设备的组织结构如下
IPL
介质头
分区 0 (BDK 或 BDTL)
(可选)分区 1(BDK 或 BDTL)
.. 最多到分区 3
在 Linux MTD 下,会为 INFTL 分区表中列出的每个分区创建分区。因此,最多会创建 5 个 MTD 设备。
相比之下,NFTL 设备的组织结构如下
固件
介质头
BDTL 数据
在 Linux 下,通常会创建两个 MTD 设备。
根据以上摘录,引导加载程序在为 INFTL 设备获取内核映像时使用的过程与 NFTL 设备使用的方法不同,因为这两种设备具有不同的物理布局。(重复)
对于 INFTL DiskOnChip 设备,使用 2.4.x 内核会变得复杂,因为 pre-2.6.x 内核中缺少原生支持(尽管存在原生 NFTL 支持)。这种功能只能通过修补内核来获得;这种方法是不明智的。
不鼓励使用外部 INFTL 支持修补内核;MTD 驱动程序的开发者,即 DiskOnChip 的开源驱动程序,也对这种方法感到担忧。有关此事的更多信息,请随时查阅邮件列表中的对话,网址为 http://lists.infradead.org/pipermail/linux-mtd/2004-August/010165.html。
在 2.6.x 内核中提供原生 INFTL 支持的驱动程序未能识别用于此练习的 DiskonChip 设备,系统报告了以下消息
INFTL no longer supports the old DiskOnChip drivers loaded via docprobe. Please use the new diskonchip driver under the NAND subsystem. |
因此,我们决定使用 M-Systems(DiskOnChip 制造商)提供的驱动程序。然而,根据供应商提供的关于这些驱动程序的文档,它们仅为 NFTL 设备设计。因此,我们决定编写这篇 HOWTO,以解决 INFTL 设备的使用问题。我们特别注意消除步骤中的任何歧义,并尝试给出特定步骤必要性的原因,以便使事情在逻辑上清晰。我们以这样一种方式解释了事情,即使是 Linux 经验较少的人也可以按照这些步骤进行操作。