1. 简介

1.1. 为什么撰写本文档?

DiskOnChip (DOC) 是一种由M-Systems制造的闪存驱动器。闪存驱动器的使用正在兴起,作为嵌入式设备中硬盘的替代品。嵌入式 Linux 作为嵌入式系统社区首选的操作系统正变得越来越流行;因此,对可以从闪存驱动器启动到 Linux 的嵌入式系统的需求也在增加。

目前关于该主题的大部分文档要么不正确,要么不完整;这些文档提供的信息的呈现方式很可能会使新手用户感到困惑。

1.2. NFTL vs. INFTL

另一个根本问题是,大多数文档都假设 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 经验较少的人也可以按照这些步骤进行操作。

1.3. 实际目标

本文档旨在作为以下方面的指南:

此处描述的方法已针对 DiskOnChip 2000 TSOP 256MB 和 DiskOnChip 2000 TSOP 384MB 进行了测试。