mount /dev/fd0 /mnt
rm -rf /mnt/lost found
mkdir /mnt/{boot,dev}
再来,造出设备档 /dev/null 与 /dev/fd0 。不用寻找设备号码,你只要从你的硬碟上用 -R copy它们:
cp -R /dev/{null,fd0} /mnt/dev
LILO 需要一份它的 boot loader 的 copy , boot.b ,你可以从你的硬碟得到它。它通常是放在 /boot 目录内。
cp /boot/boot.b /mnt/boot
最後,随附你的 kernel , copy 你在上一节所编写的 LILO 组态档。它们两者可以被放在根目录下。
cp bdlilo.conf KERNEL /mnt
LILO 所需的每一项现在都在 kernel filesystem上,所以你已准备好去执行它。 LILO 的 -r 旗号(flag)被用作安装 boot loader 在某个其它的 root 上:
lilo -v -C bdlilo.conf -r /mnt
LILO 应该可以在无错的情况下执行,在此之後,你可以看看你的 kernel filesystem ,应该长得像这样:
--------------------------------------------------------------------------------
total 361
1 -rw-r--r-- 1 root root 176 Jan 10 07:22 bdlilo.conf
1 drwxr-xr-x 2 root root 1024 Jan 10 07:23 boot/
1 drwxr-xr-x 2 root root 1024 Jan 10 07:22 dev/
358 -rw-r--r-- 1 root root 362707 Jan 10 07:23 vmlinuz
boot:
total 8
4 -rw-r--r-- 1 root root 3708 Jan 10 07:22 boot.b
4 -rw------- 1 root root 3584 Jan 10 07:23 map
dev:
total 0
0 brw-r----- 1 root root 2, 0 Jan 10 07:22 fd0
0 crw-r--r-- 1 root root 1, 3 Jan 10 07:22 null
--------------------------------------------------------------------------------
如果档案 size 和你自己的 filesystem 有稍微不同,请不用担心。
现在请把磁片留在软碟机内,然後前进到 Setting the ramdisk word 这一节。
6.2 不使用 LILO 来传送 kernel -- Transferring the kernel without LILO
如果你 不 使用LILO,那麽就用 dd 指令来传送 kernel 给 bootdisk :
% dd if=KERNEL of=/dev/fd0 bs=1k
353 1 records in
353 1 records out
在这个例子中, dd 写入了 353 个完整记录(records) 1个partial record ,所以 kernel 占用了 354 个软碟片的 blocks 。这个数字称为 KERNEL_BLOCKS ,请记得它,这个数字要给下一节使用。
最後,请设定 root device 为软碟片自己,然後再设定 root 要被载入成 read/write :
rdev /dev/fd0 /dev/fd0
rdev -R /dev/fd0 0
在第二个 rdev 指令中,请小心地使用 -R 。
6.3 设定ramdisk -- Setting the ramdisk word
在 kernel image内的是 ramdisk word ,它伴随其它选项,指定了 root filesystem 应该在哪里被找到。这个 word 会被以 rdev 指令,来进行存取与设定,而它的内容被解释如下:
bits 0-10: Offset to start of ramdisk, in 1024 byte blocks
bits 11-13: unused
bit 14: Flag indicating that ramdisk is to be loaded
bit 15: Flag indicating to prompt before loading rootfs
如果 bit 15 被设定,在开机时 (boot-up) ,会提示你把一张新的软碟片放入软碟机中。这对一套双磁片的开机磁片组来说是必要的。
依据你是建造一张单一的 boot/root 磁片,还是两张 "boot root" 的磁片组,这里会产生两种情况。
如果你是建造一张单一磁片,压缩的 root filesystem 会被放置在 kernel 之後,所以 offset 会是第一块 free block (这个值应该会与 KERNEL_BLOCKS 相等) 。 Bit 14 会被设定为 1 ,而 bit 15 会被设定为 0 。 举例来说,假设你正建造一张单一磁片,而 root filesystem 将自 block 253 (10进位)开始。那麽, ramdisk word 值应该是 253 (10进位) , bit 14 设为 1 而 bit 15 设为 0 。要计算这个值,你可以简单地加一加这个 10 进位数字。 253 (2^14) = 253 16384 = 16637 。如果你并不十分了解这个数字从何而来,把这数字放到工程计算机上,然後把它转换为 2 进位,
如果你建造的是一套双磁片组,那麽 root filesystem 将自第二张磁片的 block 0 开始,所以 offset 为 0 。 Bit 14 设为 1 而 bit 15 设为 1 。在这个情况下, 10 进位值是 2^14 2^15 = 49152 。
在仔细地为 ramdisk word 计算後,请用 rdev -r 设定它。请注意要使用 10 进位 值。如果你使用 LILO ,传给 rdev 的引数在此应该是 mounted kernel path ,比如说 /mnt/vmlinuz;如果你用 dd 来 copy kernel ,替换成使用软碟机名称( 比如说 /dev/fd0)。
rdev -r KERNEL_OR_FLOPPY_DRIVE VALUE
如果你使用 LILO ,现在请把磁片 unmount 。
6.4 传送root filesystem -- Transferring the root filesystem
最後一步是要传送 root filesystem 。
如果 root filesystem 将被放置在做为 kernel 之 相同 磁片上,请使用 dd 指令及其 seek 选项传送它,这会指定要跳过多少个 blocks :
dd if=rootfs.gz of=/dev/fd0 bs=1k seek=KERNEL_BLOCKS
如果 root filesystem 会被放置在 第二张 磁片上,请自磁碟机中拿走第一张软碟片然後放入第二张磁碟片,接著将 root filesystem 传送到其上:
dd if=rootfs.gz of=/dev/fd0 bs=1k
恭喜你,已经完成了!
在把 bootdisk 挪为紧急使用之前,请记得先测试它 !如果你的成品不能执行,请继续读下去。
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
7. 问题解决 -- Troubleshooting, or The Agony of Defeat
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




