当前位置:Linux教程 - Linux - 动手制做自己的一张软盘大小的Linux(2)

动手制做自己的一张软盘大小的Linux(2)

3. 选择内核

  在你完成了制做压缩的根文件系统后,下一步就是选择或自己创建一个内核。多数情况下,你可以拷贝现有系统的内核,但是有些情况下,你不得不自己另外创建一个。最可能出现的问题就是容量限制:如果你想做单张的启动盘,盘中最大的文件往往是内核,所以你必须想方设法压缩内核的体积。要想压缩内核体积,创建它时就得把不必要的功能去掉,如去掉对网络的支持和对不必要设备的支持,但是一定要记住保留内核对R AMDISK和ext2的支持,否则你的启动盘将不能工作。还有就是要记住把对你备份所用设备的支持加到内核中去,因为启动盘的最大用处就是检测和修复损坏的系统,如果你没有把对备份设备的支持加到内核中去,你将没有办法修复损坏的系统,只能再重装L inux。
  创建新内核的方法我就不在此叙述了,如有问题,请查阅相关资料。重建完内核后记住用“make zImage”压缩内核。

4. 整合

  有了根文件系统和内核之后,最后的工作就是把它们整合在一起。
  先检查总文件的大小,如果超出1.44M,就得考虑重新创建所需或用两张磁盘,即使用两张磁盘,你的根文件系统也得小于1.44M。
  接着就是确定是用LILO控制启动还是直接用拷贝到盘上的内核控制启动。用LILO的好处是你能增加支持初始化硬件的参数到内核中,缺点是较复杂且占用珍贵的磁盘空间,不过我还是建议使用L ILO控制系统启动。下面我就介绍用LILO的过程,直接用拷贝到盘上的内核控制启动的方法就不作叙述了。
  用LILO控制启动首先就得写一个LILO配置文件,以下是一个最简单的配置文件,但是已经够用了。
  boot =/dev/fd0
  install =/boot/boot.b
  map =/boot/map
  read-write
  backup =/dev/null
  compact
  image = KERNEL
  label = Bootdisk
  root =/dev/fd0
  参数说明见相关资料。然后把它命名为bdlilo.conf。 
  接下来就是创建一个内核文件系统。把一张干净的软盘插入软驱,在上面创建ext2文件系统。
  mke2fs -i 8192 -m 0 /dev/fd0 50
  “-i 8192”表示每8192位创建一个信息节点。接着登陆系统:
  mount /dev/fd0 /mnt
  rm -rf /mnt/lost+found
  mkdir /mnt/{boot,dev}
  删去目录/ lost+found,创建两个目录/boot和/dev。
  再拷贝现有系统中的到目录/dev中,
  cp -R /dev/{null,fd0} /mnt/dev
  接着拷贝启动加载器boot.b到目录/boot中,
  cp /boot/boot.b /mnt/boot
  最后,拷贝你创建的配置文件bdlilo.conf和内核到内核文件系统的根目录下,
  cp bdlilo.conf KERNEL /mnt
  现在,根文件系统所需所有文件都准备就绪了,你可以运行它了,运行结果应该没有错误,否则就应该仔细检查一下。最终的文件目录应该如下所示:
--------------------------------------------------------------------------------
  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

  接着设置内核镜像文件中的ramdisk的偏移量以指出如何确定定位根文件系统。该指示词可以通过命令rdev来设置,它的内容含义如下所示:
  bits 0-10: ramdisk开始的偏移量, 在1024 byte数据块中
  bits 11-13: 不用
  bit 14: ramdisk加载的提示标记
  bit 15: 加载根文件系统之前提示标记
  如果位15被设置,当系统盘启动时将会提示你准备好另一张软盘,如果你的启动盘是两张的话,这个设置很有用。
  对于使用单张和两张启动盘的用户,ramdisk的偏移量是不同的:

如果你的启动盘只有一张,那么压缩的根文件系统会被放置在内核之后,因此偏移量将会是第一个空闲的数据块,bit 14 应设置为1,bit 15设置为0。例如,如果你的启动盘根文件系统起始于数据块253(十进制),你的ramdisk偏移量应该是253 + 214 = 253 + 16384 = 16637。

如果你的启动盘有两张,那么你的根文件系统起始于第二张盘的0数据块,所以偏移量是0,bit 14 应设置为1,bit 15应设置为1,最终值为
214 + 215 = 49152。
  计算好偏移量后,用命令rdev –r进行设置,记住用十进制:
  rdev -r /mnt/vmlinuz 偏移量
  设置完后,从/mnt卸下软盘。

  最后一步是传输根文件系统,分两种情况:
·如果你的内核于根文件系统在同一张软盘上,用加选项seek的命令dd传输,dd if=rootfs.gz of=/dev/fd0 bs=1k seek=内核数据块数。
·如果根文件系统位于第二张软盘上,移走第一张软盘,插入第二张盘,然后传输根文件系统dd if=rootfs.gz of=/dev/fd0 bs=1k。

  祝贺你,你的系统启动盘已经做好了,剩下的就是测试你的启动盘的正确性了,如果有问题,对不起,你还得从头再来。
  现在许多Linux的发行套件中都有厂家做好的启动盘,它们的制做原理和以上我介绍的大同小异,但是它们常常用许多不同的技巧,因为它们要面对更多的硬件和各种可能发生的情况。大家可以拿一张来慢慢研究,你会从中学到很多知识。
  最后祝大家都能作出一张称心如意的启动盘,让你的linux永保青春。