A.3. 构建

A.3.1. 创建增强型启动盘

A.3.1.1. 构建新内核

bash# cd /usr/src/linux
bash# make menuconfig

请务必配置对以下内容的支持

  • 386 处理器

  • 软盘

  • RAM 磁盘

  • 第二扩展 (ext2) 文件系统

  • 虚拟控制台

  • 音频硬件

  • CD-ROM 硬件

  • ISO-9660 和 Joliet 文件系统

bash# make dep
bash# make clean
bash# make bzImage

A.3.1.2. 将内核复制到软盘

将启动盘放入驱动器 fd0

bash# mount /dev/fd0 /mnt
bash# cp /usr/src/linux/arch/i386/boot/bzImage /mnt/boot/vmlinuz

A.3.1.3. 卸载启动盘

bash# cd /
bash# umount /mnt

A.3.2. 创建增强型根磁盘

A.3.2.1. 创建额外的设备文件

A.3.2.1.1. IDE CD-ROM

bash# mknod -m640 ~/staging/dev/hdc b 22 0
bash# mknod -m640 ~/staging/dev/hdd b 22 64

可选地创建额外的 IDE 设备。

A.3.2.1.2. 内存盘

bash# mknod -m 640 ~/staging/dev/ram1 b 1 1
bash# mknod -m 640 ~/staging/dev/ram2 b 1 2 
bash# mknod -m 640 ~/staging/dev/ram3 b 1 3
bash# mknod -m 640 ~/staging/dev/ram4 b 1 4
bash# mknod -m 640 ~/staging/dev/ram5 b 1 5
bash# mknod -m 640 ~/staging/dev/ram6 b 1 6
bash# mknod -m 640 ~/staging/dev/ram7 b 1 7

A.3.2.1.3. 音频

bash# mknod -m664 ~/staging/dev/dsp c 14 3
bash# mknod -m664 ~/staging/dev/mixer c 14 0

A.3.2.2. 安装 gunzip 二进制文件

bash# cd /usr/src/gzip-1.2.4a
bash# export CC="gcc -mcpu=i386"
bash# ./configure --host=i386-pc-linux-gnu
bash# make
bash# strip gzip
bash# cp gzip ~/staging/bin
bash# ln -s gzip ~/staging/bin/gunzip

不要忘记验证库要求,检查所有权并检查 gzip 二进制文件的权限。

A.3.2.3. 编写启动脚本以挂载压缩软盘

使用文本编辑器创建以下脚本并将其保存为~/staging/etc/init.d/usr_image

#!/bin/sh
#
# usr_image - load compressed images from floppy into ramdisk and
#             mount on /usr.
#
echo -n "Is there a compressed diskette to load for /usr [y/N]? "
read REPLY
if [ "$REPLY" = "y" ] || [ "$REPLY" = "Y" ]; then
  echo -n "Please insert the /usr floppy into fd0 and press <ENTER>."
  read REPLY
  echo "Clearing /dev/ram1."
  dd if=/dev/zero of=/dev/ram1 bs=1k count=4096
  echo "Loading compressed image from /dev/fd0 into /dev/ram1..."
  (dd if=/dev/fd0 bs=1k | gunzip -cq) >/dev/ram1 2>/dev/null
  fsck -fp /dev/ram1
  if [ $? -gt 1 ]; then
    echo "Filesystem errors on /dev/ram1!  Manual intervention required."
  else
    echo "Mounting /usr."
    mount /dev/ram1 /usr
  fi
fi
#
# end of usr_image

配置脚本在 root 挂载后立即运行。

bash# ln -s ../init.d/usr_image ~/staging/etc/rcS.d/S21usr_image

A.3.2.4. 创建压缩根磁盘

bash# cd /
bash# dd if=/dev/zero of=/dev/ram7 bs=1k count=4096
bash# mke2fs -m0 /dev/ram7
bash# mount /dev/ram7 /mnt
bash# cp -dpR ~/staging/* /mnt
bash# umount /dev/ram7
bash# dd if=/dev/ram7 of=~/phase8-image bs=1k
bash# gzip -9 ~/phase8-image

将标有“root disk”的软盘插入驱动器 fd0。

bash# dd if=~/phase8-image.gz of=/dev/fd0 bs=1k

A.3.3. 为 mp3blaster 创建压缩的 /usr 磁盘

压缩的 /usr 软盘将使用与创建压缩根磁盘相同的过程创建。我们将文件复制到暂存区,将暂存区复制到内存盘,压缩内存盘并将其写入软盘。

A.3.3.1. 创建暂存区

bash# mkdir ~/usr-staging
bash# cd ~/usr-staging
bash# mkdir bin lib
bash# mkdir -p share/terminfo/l

A.3.3.2. 安装 mp3blaster 程序

从其主页 http://www.stack.nl/~brama/mp3blaster/ 下载最新版本的 mp3blaster 源代码。

bash# cd ~/usr/src/mp3blaster-3.2.0
bash# ./configure
bash# make
bash# cp src/mp3blaster ~/usr-staging/bin

A.3.3.3. 复制额外的库和 terminfo

使用 ldd 找出 mp3blaster 需要哪些库。

Note

以下是作者开发系统中的一个示例。不同的系统在库需求方面可能会产生略有不同的结果。

bash# cd ~/usr-staging/lib
bash# ldd ~/usr-staging/bin/mp3blaster
bash# cp /usr/lib/ncurses.so.5.0  .
bash# cp /usr/lib/stdc++.so.3 .
bash# cp /lib/libm.so.6 .
bash# cp /usr/lib/libgcc_s.so.1 .
bash# cd ~/usr-staging/share/terminfo/l
bash# cp /usr/share/terminfo/l/linux .

A.3.3.4. 创建压缩镜像并将其复制到软盘

bash# cd /
bash# dd if=/dev/zero of=/dev/ram7 bs=1k count=4096
bash# mke2fs -m0 /dev/ram7
bash# mount /dev/ram7 /mnt
bash# cp -dpR ~/usr-staging/* /mnt
bash# umount /dev/ram7
bash# dd if=/dev/ram7 of=~/mp3blaster-image bs=1k
bash# gzip -9 ~/mp3blaster-image

将标有“mp3blaster”的软盘插入驱动器 fd0。

bash# dd if=~/mp3blaster-image.gz of=/dev/fd0 bs=1k

A.3.4. 创建用于测试的数据软盘

访问互联网站点 http://www.paul.sladen.org 并下载 Linus Torvalds 发音 “Linux” 的 mp3 文件。直接链接是:http://www.paul.sladen.org/pronunciation/torvalds-says-linux.mp3。在软盘上创建第二扩展 (ext2) 文件系统,并将 mp3 文件复制到软盘。