5. 在DiskOnChip上安装Linux和LILO

在本节中,我们将学习如何在未格式化的DOC上安装Linux操作系统,并使用LILO作为引导加载程序从中启动。

为了达到这种状态,将讨论一个步骤。此步骤中的某些步骤类似于本文档前面讨论的步骤。即便如此,这应被视为一个单独的步骤,而不是第4节中步骤的延续。

一般来说,要使设备启动进入Linux,它应该具有以下组件

本节将基本上尝试满足以上三个要求。

应遵循以下步骤来实现本节的目标。

5.1. 步骤 1:将DOC固件复制到DiskOnChip上

我们将使用来自以下位置的 dformat 实用程序linux_binary.5_1_4/dformat_5_1_4_37.

M-Systems不提供在Linux平台上使用DOC的固件。我们通过将M-Systems dos实用程序附带的固件副本复制到此目录来解决此问题(“dos utilities” 是M-Systems人员使用的术语,因此我们也使用了这个名称)。在我们的系统中,我们通过挂载Windows分区并从中提取来复制它

mount-t auto/dev/hda5 /mnt/d

cp/mnt/d/dos\ utilities/doc514.exb linux_binary.5_1_4/dformat_5_1_4_37/

现在使用来自以下位置的 dtformat 格式化驱动器linux_binary.5_1_4/dformat_5_1_4_37/:

cdlinux_binary.5_1_4/dformat_5_1_4_37/

./dformat-WIN:D000 -S:doc514.exb

D000指定DiskOnChip在BIOS中的地址。

以下是我们系统上的BIOS(RTD Enhanced Phoenix - AwardBIOS CMOS Setup Utility (v6.00.04.1601))设置。

BIOS菜单的集成外围设备应具有

SSD Socket #1 to Bios Extension
Bios Ext. Window size 8k
Bios Ext. window [D000:0000]
Fail safe Boot ROM [Disabled]

Bios Ext. Window 表示您的DiskOnChip的地址。

NoteBIOSes
 

设置可能因您的BIOS版本而异。

现在关闭系统并启动进入Windows XP。

从现在开始,您将注意到TrueFFS消息以及Grub菜单出现之前的一些时间延迟。

5.2. 步骤 2:使用Dos实用程序格式化DiskOnChip

启动进入Windows XP。我们将使用M-Systems Dos实用程序来格式化DiskOnChip。Dos实用程序 dformat 会将固件复制到DOC,然后将其格式化为 fat16 设备。

使用命令提示符,从DOS实用程序文件夹运行以下命令(假设您已经下载了DOS实用程序)

dformat/WIN:D000 /S:doc514.exb

使用另一个名为 dinfo 的实用程序检查DOC分区。附录中给出了 dinfo 输出的示例。

再次关闭系统,现在启动进入Linux。

Note始终关闭
 

格式化后,您应始终执行完全关闭(断电),而不仅仅是重新启动。

即使步骤 1 和步骤 2 看起来相同,唯一的区别是步骤 1 是从Linux完成的,而步骤 2 是从Windows XP完成的,但它们都必须完成。

5.3. 步骤 3:修补和编译内核 2.4.18

这必须以与第 4.1 节第 4.2 节中描述的完全相同的方式执行。

还要在/boot/grub/menu.lst中为新内核添加条目,如第 4.4 节中所述。

5.4. 步骤 4:创建节点

这是使用与第 4.3 节中描述的相同步骤完成的。

5.5. 步骤 5:修改 /etc/module.conf 文件

文件/etc/modules.conf必须修改,在文件末尾添加此行

options doc major=62

这是必需的,因为我们的节点使用主设备号 62,而doc驱动程序模块使用主设备号 100。在创建initrd镜像时,如果您不编辑模块配置文件,驱动程序将加载主设备号值为 100(而不是 62)。这将使节点无法使用驱动程序。使用initrd镜像的原因将在下一步中解释。

来自linux_binary.5_1_4/doc-linux-5_1_4_20/drivermkinitrd_doc 脚本读取/etc/modules.conf文件,并查找DOC驱动程序关于主设备号的任何提及。默认情况下,mkinitrd_doc 将创建一个initrd镜像,该镜像加载主设备号为 100 的DOC模块。但是,通过我们对/etc/modules.conf文件的修改,initrd镜像将加载主设备号为 62 的模块。

5.6. 步骤 6:创建 initrd 镜像

运行来自linux_binary.5_1_4/doc-linux-5_1_4_20/driver/:

mkinitrd_doc 脚本

./mkinitrd_doc

  cp: cannot stat ./sbin/insmod.static.: No such file or directory
  cp: cannot stat ./dev/systty.: No such file or directory

这可能会给出类似于以下的警告消息,可以安全地忽略这些消息initrd检查新创建的镜像,initrd-2.4.18.img,在/boot

目录中。运行 mkinitrd_doc 脚本会生成此镜像。制作initrd镜像的原因是,提供的M-Systems驱动程序无法作为内置支持添加到内核中,这使得除了将其添加为可加载模块之外别无选择。如果我们想从DOC启动,内核应该知道如何在启动时访问DOC,以便在DOC上的根文件系统中搜索 /sbin/init (根文件系统对于启动Linux系统是必要的)。

在Linux的启动序列中, /sbin/init 是内核查找的文件(实际上是一个命令),以便启动各种服务,并最终为用户提供登录shell。下图说明了问题

图 1. 为什么我们需要 initrd 镜像

5.7. 步骤 7:将DOC驱动程序插入到新内核中

重新启动系统并启动进入新创建的内核。

现在插入doc模块

modprobedoc

这将给出以下消息

fl : Flash disk driver for DiskOnChip
fl: DOC devices(s) found: 1
fl: _init:registed device at major 62
.
.
.
.

要访问DOC,请确保分配给节点的主设备号为 62。

如果分配的主设备号为 100,请检查/etc/modules.conf是否已成功修改。如果未修改,则重复第 5.5 节。然后,您还必须重复第 5.6 节,因为initrd镜像依赖于/etc/modules.conf。如果此文件中的DOC条目不正确,则initrd镜像将毫无用处。

5.8. 步骤 8:在DiskOnChip上创建文件系统

执行第 4.6 节。这是在DOC上创建分区所必需的。

5.9. 步骤 9:在DiskOnChip上构建根文件系统

在开始此步骤之前,请确保您没有挂载/dev/msys/fla1在任何挂载点上,因为此步骤将涉及重新格式化DiskOnChip。

此外,为了理解根文件系统的详细信息,请参阅The Linux Bootdisk How To,可在http://www.tldp.org上找到。

我们将使用位于linux_binary.5_1_4/doc-linux-5_1_4_20/build.

中的 mkdocimg 脚本我们还将使用redhat-7.1.files目录,该目录位于同一目录中(即build

),其中包含将在DOC上创建的根文件系统中复制的文件列表。我们还将使用

./mkdocimg

此步骤将需要几分钟才能完成。/dev/msys/fla1现在将分区挂载到挂载点/mnt/doc

mount-t auto 并检查已创建的文件

cd分区挂载到挂载点

/dev/msys/fla1 /mnt/doc

以下目录是在DOC上创建的,作为运行脚本的结果

bin dev sbin etc lib usr home mnt tmp var boot最重要的是boot目录。这包含vmlinuz-2.4.18镜像,,在,它们从

目录复制而来。从DiskOnChip启动时,此目录是必需的。

boot.3E00

这两个文件稍后由LILO创建。我们还将使用目录包含在使用 mkdocimg 脚本时将创建的文件和目录列表。

此脚本不会创建在DOC上创建根文件系统所需的所有文件。因此,请将 mkdocimg 脚本创建的目录替换为/文件系统的目录(当前正在运行的根文件系统)。

下的目录/,例如etc, sbin, bin等等,包含许多无用的文件,理想情况下在为DOC构建根文件系统时不应复制这些文件。但是由于我们尚未讨论必要的文件和可以删除的文件,因此我们建议应复制目录的全部内容。我们知道这是一种笨拙的构建根文件系统的方式,并且会不必要地占用大量内存;请耐心等待,因为在下一节中,我们将解释如何在DOC上放置开发工具。然后,我们将从DOC的根文件系统中删除无用的文件。

如果您知道如何构建根文件系统,我们鼓励您仅复制必要的文件。

以下是我们用于修改根文件系统的命令集

rm-rf /mnt/doc/sbin

rm-rf /mnt/doc/etc

rm-rf /mnt/doc/lib

rm-rf /mnt/doc/dev

cp-rf /sbin /mnt/doc

cp-rf /etc /mnt/doc

cp-rf /dev /mnt/doc

cp-rf /lib /mnt/doc

rm-rf /mnt/doc/lib/modules

现在我们的文件系统已准备就绪。

此文件系统占用的总大小约为 35Mb。

5.10. 步骤 10:使用 rdev 指定内核镜像的DOC根文件系统位置

此步骤是必需的,用于向我们在步骤 3 中编译的内核指定DOC根文件系统的位置。可以通过在引导加载程序配置文件中提供根文件系统位置的详细信息来避免此步骤,但是我们在使内核在启动时定位根文件系统时遇到了一些问题,因此我们建议执行此命令

rdev/boot/vmlinuz-2.4.18 /dev/msys/fla1

5.11. 步骤 11:编译 lilo-22.3.2

我们将使用LILO作为引导加载程序,因为这是唯一可以在不进行太多更改的情况下读取INFTL设备的BootLoader。

有关LILO和其他引导加载程序如何运行的更多信息,请参阅。

我们需要编译 lilo-22-3.2 源代码以获取LILO的可执行文件。

我们将使用来自linux_binary.5_1_4/doc-linux-5_1_4_20/lilo/lilo-22.3.2.

的源代码。在开始构建之前,我们需要执行以下操作

  1. 为kernel-2.4.18源代码创建一个软链接,名称为linux.

    当您解压文件linux-2.4.18.tar.gz时,它将创建一个目录linux。因此,我们需要重命名目录linuxlinux-2.4.18,然后再创建同名的软链接

    mvlinux linux-2.4.18

    ln-s linux-2.4.18 linux

    如果未完成上述步骤,则构建可能会失败。

  2. 补丁文件linux_binary.5_1_4/doc-linux-5_1_4_20/lilo/lilo-22.3.2/common.h:

    M-Systems附带的 lilo-22.3.2 源代码linux_binary.5_1_4.tgz存在错误,因为其中一个变量PAGE_SIZE未定义。我们需要按如下方式修补LILO源代码

    common.h中的行 "#include .lilo.h." 之后添加以下行。

    + #ifndef PAGE_SIZE
    + #define PAGE_SIZE 4096U
    + #endif
    #define 0_NACCESS 3
    

    其中 "+" 表示要添加的行。

  3. 通过使用 gcc --version 确保 gcc 版本为 2.95.3。

现在我们可以开始构建过程。运行

makeclean&& make

这将创建一个新的LILO可执行文件,linux_binary.5_1_4/doc-linux-5_1_4_20/lilo/lilo-22.3.2/lilo。将此LILO可执行文件复制到/sbin/lilovmlinuz-2.4.18/mnt/doc/sbin/lilo:

cplinux_binary.5_1_4/doc-linux-5_1_4_20/lilo/lilo-22.3.2/lilo /sbin/lilo

cplinux_binary.5_1_4/doc-linux-5_1_4_20/lilo/lilo-22.3.2/lilo /mnt/doc/sbin/lilo

5.12. 步骤 12:将 boot.b 文件复制到DOC的boot目录中

我们需要复制文件boot.blinux_binary.5_1_4/doc-linux-5_1_4_20/lilo/.

/mnt/doc/boot

该文件包含LILO引导加载程序的必要stage1stage2

5.13. 步骤 13:修改 /etc/lilo.conf 文件首先,删除现有的:

rm-rf 首先,删除现有的

/etc/lilo.conf首先,删除现有的现在,使用文本编辑器创建一个新的

boot=/dev/msys/fla
compact
install=/boot/boot.b
map=/boot/System.map
disk=/dev/msys/fla
bios=0x80
prompt
delay=50
timeout=50
image=/boot/vmlinuz
label=linux
root=/dev/msys/fla1
initrd=/boot/initrd.img
read-only

,并将以下行添加到其中首先,删除现有的根据添加到最重要的是boot目录。这包含vmlinuz-2.4.18镜像,的上述行,需要为:

cd

ln-s 创建软链接

ln-s vmlinuz-2.4.18 vmlinuz

initrd-2.4.18.img initrd.img首先,删除现有的复制新创建的.

mnt/doc/etc/lilo.conf

5.14. 步骤 14:将新的LILO配置存储在DiskOnChip上

此步骤将在DiskOnChip的MBR中配置LILO,从而使DiskOnChip可引导。/dev/msys/fla1确保分区挂载到挂载点.

(DOC的根文件系统分区)挂载在挂载点

上。执行以下命令以将LILO配置存储在DOC上lilo 首先,删除现有的 -v -C 分区挂载到挂载点

分区挂载到挂载点-r分区挂载到挂载点表示BootLoader将被安装的位置,因此它安装在DiskOnChip上,因为

是配置LILO的DOC主分区的挂载点。它将在DOC的boot目录中创建以下两个文件(即):

  1. 除了这些文件外,还有一些其他文件必须删除

  2. System.map-2.4.18

现在,您应该备份整个DiskOnChip,以便轻松恢复可能因致命错误而损坏的文件

cd/home

tar-cvzf docimg.tgz /mnt/doc

这将创建一个名为docimg.tgz的上述行,需要为/home.

5.15. 步骤 15:修改DiskOnChip根文件系统的 etc/fstab

打开/mnt/doc/etc/fstab文件并编辑挂载点为/的行。将该行更改为

/dev/msys/fla1  /  ext2  rw.noauto 0 1

5.16. 步骤16:更新固件

此步骤是更新DiskOnChip固件所必需的。我们将使用来自linux_binary.5_1_4/dformat_5_1_4_37:

./dformat-W:D000 -S:doc514.exb -Y -NOFORMAT

Warning不要格式化!
 

这两个文件稍后由LILO创建。NOFORMAT标志很重要,否则它将重新格式化DiskOnChip设备,并且内容将丢失。

上述命令将导致DiskOnChip在没有任何其他可引导设备的情况下启动。因此,我们需要移除硬盘,以便允许DOC启动。

5.17. 步骤17:从DiskOnChip启动

查看您的BIOS手册,了解如何启用从BIOS扩展设备(即DiskOnChip)启动。在我们的系统上,我们必须禁用硬盘和CDROM,并将第一个可引导设备设置为HDD-0。

在BIOS中进行必要的更改后,重新启动系统。

您将获得LILO菜单,按Enter键后,Linux将从DiskOnChip启动。