以下是为此目的执行的步骤。
从 https://linuxkernel.org.cn/pub/linux/kernel/v2.4 下载 Kernel 2.4.18 的全新副本。
从该站点下载的内核不支持 M-Systems 驱动程序,因此我们需要添加此功能。这通过向内核添加补丁来完成。
进行修补的步骤如下
解压内核源文件和 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
这将导致创建两个目录linux和linux_binary.5_1_4.
TrueFFS Linux 驱动程序包包含三个不同的文件夹
Documentation:这包含一个 PDF 文档,描述了 TrueFFS 的各种功能。
dformat_5_1_4_37:这包含一个实用程序 dformat,用于更新 DiskOnChip (DOC) 上的固件并在 DOC 上创建低级分区。
doc-linux-5_1_4_20:这包含补丁,initrd脚本和其他实用程序。
现在将补丁应用于内核。我们将使用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目录中。
该补丁创建了doc目录,但没有将构建驱动程序所需的 M-Systems 驱动程序的源文件复制到此目录中。因此,执行以下命令
cplinux_binary.5_1_4/doc-linux-5_1_4_20/driver/doc/* /usr/src/linux/drivers/block/doc
![]() | 内核版本 |
---|---|
对于 2.4.18 以外的内核,该补丁将失败,因为应用补丁的源文件在不同的内核中可能有所不同。该补丁专门为内核 2.4.18 提供。 |
在继续步骤 2 之前,请执行以下操作
以 root 用户身份登录。
确保 gcc 版本为 2.95.3,否则构建将失败。使用 gcc --version 检查这一点。如果您的 gcc 版本不同,请编译 gcc-2.95.3。有关此目的,请参阅 http://xlife.zuarvra.net.columns/20020316。
完成以下任务以编译内核
cdlinux
makemenuconfig
检查以下选项
在 “块设备菜单” 中,选择
M-Systems 驱动程序作为模块,即 (M)
Loopback 设备支持作为内置,即 (*)
RAM 磁盘支持作为内置,即 (*)
初始 RAM 磁盘 (initrd) 支持作为内置,即 (*)
在 “处理器类型和特性菜单” 中,选择 “禁用对称多处理器支持”。
在 “文件系统菜单” 中,选择
Ext3 日志文件系统支持作为内置
DOS FAT fs 支持作为内置a
MSDOS fs 支持作为内置b
VFAT (Windows-95) fs 支持作为内置c
![]() | 文件系统菜单 |
---|---|
如果您想挂载 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 |
makedep
makebzImage
makemodules
makemodules_install
复制新创建的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 驱动程序。
现在我们将创建访问 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 |
为了使 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 中编译的内核)以启动到新内核。
默认情况下,M-Systems 驱动程序加载的主设备号为 100,但我们新创建的节点(参见 第 4.3 节)的主设备号为 62。因此,我们需要插入此模块,主设备号为 62。这可以通过以下两种方式之一完成
在使用 insmod 插入模块时,还要提及需要分配给模块的主设备号,否则它将采用默认的主设备号 100
insmoddoc major=62
将以下行添加到/etc/modules.conf:
options doc major=62 |
然后使用 modprobe doc 插入模块。
使用不带选项的 lsmod 命令检查模块是否正确加载。
在我们开始使用 DiskOnChip 之前,我们需要在它上面创建一个文件系统。我们将创建一个 ext2 文件系统,因为它体积小。
这涉及使用 fdisk 在 DOC 上制作分区的隐藏步骤。实际步骤如下
fdisk/dev/msys/fla
此命令将要求创建分区。创建一个主分区,分区号为 1,起始柱面为 1,最终柱面为 1002。
检查分区表,它应该如下所示
Device Boot Start End Blocks ID System /dev/msys/fla1 1 1002 255984 83 Linux |
在/dev/msys/fla1上创建文件系统,使用命令
mke2fs-c /dev/msys/fla1
其中fla1是 DOC 上的第一个主分区。(我们只创建了一个分区,以避免不必要的复杂性。)
在/mnt目录中为 DiskOnChip 创建一个新的挂载点
mkdir/mnt/doc
将 DOC 分区挂载到新创建的目录
mount-t auto /dev/msys/fla1 /mnt/doc
您现在将能够像额外的存储驱动器一样读取和写入 DOC。
当您重新启动系统时,通过将驱动程序插入内核(参见 第 4.5 节)并挂载设备来使 DOC 可用。