4. 在 Linux 中使用 M-Systems DiskOnChip 2000 TSOP 作为额外的存储驱动器

以下是为此目的执行的步骤。

4.1. 步骤 1:修补内核

https://linuxkernel.org.cn/pub/linux/kernel/v2.4 下载 Kernel 2.4.18 的全新副本。

从该站点下载的内核不支持 M-Systems 驱动程序,因此我们需要添加此功能。这通过向内核添加补丁来完成。

进行修补的步骤如下

  1. 解压内核源文件和 M-systems TrueFFS Linux 驱动程序版本 5.14。如果源代码在.tar.gz格式中,请使用

    tar-xvzf linux-2.4.18.tar.gz

    如果源代码在.tar.bz2格式中,请使用

    bunzip2linux-2.4.18.tar.bz2

    使用 bunzip2 后,您将得到一个名为linux-2.4.18.tar的文件。使用命令解压它

    tar-xvf linux-2.4.18.tar

    驱动程序的解压使用命令完成

    tar-xvzf linux_binary.5_1_4.tgz

    这将导致创建两个目录linuxlinux_binary.5_1_4.

  2. TrueFFS Linux 驱动程序包包含三个不同的文件夹

    • Documentation:这包含一个 PDF 文档,描述了 TrueFFS 的各种功能。

    • dformat_5_1_4_37:这包含一个实用程序 dformat,用于更新 DiskOnChip (DOC) 上的固件并在 DOC 上创建低级分区。

    • doc-linux-5_1_4_20:这包含补丁,initrd脚本和其他实用程序。

  3. 现在将补丁应用于内核。我们将使用linux-2_4_7-patch文件,该文件位于linux_binary.5_1_4/doc-linux-5_1_4_20/driver中。以下命令用于此目的

    cdlinux_binary.5_1_4/doc-linux-5_1_4_20/driver

    patch-p1 -d /usr/src/linux < linux-2_4_7-patch

    这将创建一个名为doc的目录,在linux/drivers/block目录中。

  4. 该补丁创建了doc目录,但没有将构建驱动程序所需的 M-Systems 驱动程序的源文件复制到此目录中。因此,执行以下命令

    cplinux_binary.5_1_4/doc-linux-5_1_4_20/driver/doc/* /usr/src/linux/drivers/block/doc

Warning内核版本
 

对于 2.4.18 以外的内核,该补丁将失败,因为应用补丁的源文件在不同的内核中可能有所不同。该补丁专门为内核 2.4.18 提供。

在继续步骤 2 之前,请执行以下操作

4.2. 步骤 2:编译内核

完成以下任务以编译内核

  1. cdlinux

  2. makemenuconfig

    检查以下选项

    • “块设备菜单” 中,选择

      • M-Systems 驱动程序作为模块,即 (M)

      • Loopback 设备支持作为内置,即 (*)

      • RAM 磁盘支持作为内置,即 (*)

      • 初始 RAM 磁盘 (initrd) 支持作为内置,即 (*)

    • “处理器类型和特性菜单” 中,选择 “禁用对称多处理器支持”

    • “文件系统菜单” 中,选择

      • Ext3 日志文件系统支持作为内置

      • DOS FAT fs 支持作为内置a

      • MSDOS fs 支持作为内置b

      • VFAT (Windows-95) fs 支持作为内置c

    Note文件系统菜单
     

    如果您想挂载 MS Windows 分区,则应激活 a,b,c 选项,否则可以忽略它们。但是,通常建议使用它们。

    关于内核编译的优秀资源是 内核重建指南

    配置文件,linux/.config应主要包含以下行(仅给出了配置文件的一部分)

    #
    # Loadable module support
    #
    CONFIG_MODULES=y
    CONFIG_MODVERSIONS=y
    CONFIG_KMOD=y
    
    #
    # Processor type and features
    #
    
    # CONFIG_SMP is not set
    
    
    #
    # Memory Technology Devices (MTD)
    #
    # CONFIG_MTD is not set
    
    #
    # Block devices
    #
    # CONFIG_BLK_DEV_FD is not set
    # CONFIG_BLK_DEV_XD is not set
    # CONFIG_PARIDE is not set
    # CONFIG_BLK_CPQ_DA is not set
    # CONFIG_BLK_CPQ_CISS_DA is not set
    # CONFIG_BLK_DEV_DAC960 is not set
    CONFIG_BLK_DEV_LOOP=y
    # CONFIG_BLK_DEV_NBD is not set
    CONFIG_BLK_DEV_RAM=y
    CONFIG_BLK_DEV_RAM_SIZE=4096
    CONFIG_BLK_DEV_INITRD=y
    CONFIG_BLK_DEV_MSYS_DOC=m
    
    #
    # File systems
    #
    # CONFIG_QUOTA is not set
    # CONFIG_AUTOFS_FS is not set
    # CONFIG_AUTOFS4_FS is not set
    CONFIG_EXT3_FS=y
    CONFIG_FAT_FS=y
    CONFIG_MSDOS_FS=y
    # CONFIG_UMSDOS_FS is not set
    CONFIG_VFAT_FS=y
    # CONFIG_EFS_FS is not set
    # CONFIG_JFFS_FS is not set
    # CONFIG_JFFS2_FS is not set
    # CONFIG_CRAMFS is not set
    CONFIG_TMPFS=y
    # CONFIG_RAMFS is not set
    CONFIG_ISO9660_FS=y
    # CONFIG_JOLIET is not set
    # CONFIG_HPFS_FS is not set
    CONFIG_PROC_FS=y
    # CONFIG_DEVFS_FS is not set
    # CONFIG_DEVFS_MOUNT is not set
    # CONFIG_DEVFS_DEBUG is not set
    CONFIG_DEVPTS_FS=y
    # CONFIG_QNX4FS_FS is not set
    # CONFIG_QNX4FS_RW is not set
    # CONFIG_ROMFS_FS is not set
    CONFIG_EXT2_FS=y
    
  3. makedep

  4. makebzImage

  5. makemodules

  6. makemodules_install

  7. 复制新创建的bzImage/bott目录并将其命名为vmlinuz-2.4.18,使用此命令

    cp/arch/i386/boot/bzImage /boot/vmlinuz-2.4.18

检查lib/modules/2.4.18/kernel/drivers/block/doc.o。这是我们访问 DiskOnChip 所需的 M-Systems 驱动程序。

4.3. 步骤 3:创建节点

现在我们将创建访问 DOC 所需的块设备。这些块设备将使用在 第 4.2 节 中构建的 M-Systems 驱动程序来访问 DOC。 mknod_fl 脚本在linux_binary.5_1_4/doc-linux-5_1_4_20/driver中用于此目的。

我们需要创建主设备号为 62 的块设备。为此,我们将在创建节点时传递参数 62

./mknod_fl62

这将在/dev/msys中创建以下设备,主设备号为 62

fla...fla4
flb...flb4
flc...flc4
fld...fld4

4.4. 步骤 4:使用新内核重新启动

为了使 DiskOnChip 被 Linux 操作系统识别,我们需要将 DOC 驱动程序模块插入内核。由于当前运行的内核不支持 M-Systems 驱动程序,我们需要启动到我们在 中刚刚编译的新内核。

为此,我们需要在/boot/grub/menu.lst文件中添加以下条目

title Debian GNU/Linux,Kernel 2.4.18
root (hd0,7)
kernel /boot/vmlinuz-2.4.18 root=/dev/hda8
safedefault
boot

其中 (hd0,7) 是保存内核映像的分区vmlinuz-2.4.18/dev/hda8是保存根文件系统的分区。这些分区可能因系统而异。现在重新启动并在 grub 菜单中选择内核 2.4.18 选项(在步骤 2 中编译的内核)以启动到新内核。

4.5. 步骤 5:在新内核中插入 M-Systems 驱动程序/模块

默认情况下,M-Systems 驱动程序加载的主设备号为 100,但我们新创建的节点(参见 第 4.3 节)的主设备号为 62。因此,我们需要插入此模块,主设备号为 62。这可以通过以下两种方式之一完成

  1. 在使用 insmod 插入模块时,还要提及需要分配给模块的主设备号,否则它将采用默认的主设备号 100

    insmoddoc major=62

  2. 将以下行添加到/etc/modules.conf:

    options doc major=62

    然后使用 modprobe doc 插入模块。

使用不带选项的 lsmod 命令检查模块是否正确加载。

4.6. 步骤 6:在 DiskOnChip 上创建文件系统

在我们开始使用 DiskOnChip 之前,我们需要在它上面创建一个文件系统。我们将创建一个 ext2 文件系统,因为它体积小。

这涉及使用 fdisk 在 DOC 上制作分区的隐藏步骤。实际步骤如下

  1. fdisk/dev/msys/fla

    此命令将要求创建分区。创建一个主分区,分区号为 1,起始柱面为 1,最终柱面为 1002。

    检查分区表,它应该如下所示

    Device             Boot  Start      End        Blocks    ID     System
    /dev/msys/fla1            1         1002        255984   83     Linux
    
  2. /dev/msys/fla1上创建文件系统,使用命令

    mke2fs-c /dev/msys/fla1

    其中fla1是 DOC 上的第一个主分区。(我们只创建了一个分区,以避免不必要的复杂性。)

4.7. 步骤 7:挂载新创建的分区以开始访问 DOC

/mnt目录中为 DiskOnChip 创建一个新的挂载点

mkdir/mnt/doc

将 DOC 分区挂载到新创建的目录

mount-t auto /dev/msys/fla1 /mnt/doc

您现在将能够像额外的存储驱动器一样读取和写入 DOC。

当您重新启动系统时,通过将驱动程序插入内核(参见 第 4.5 节)并挂载设备来使 DOC 可用。