当前位置:Linux教程 - Linux综合 - 动手制作自己的启动盘

动手制作自己的启动盘

  (文:西电) 凡是接触计算机久的朋友肯定都使用过DOS启动软盘,至于启动软盘的重要性大家肯定也都 清楚。在Linux底下启动软盘同样重要,它不仅能测试新内核、恢复系统错误,而且能升级 重要的系统文件。但是在Linux下制做启动盘不象在DOS下那么容易,下面我就一步一步的 教大家制做自己系统的启动软盘。 1. Linux启动过程简介 一个启动盘实际上是一个完整系统的缩影,它能够执行一个完整系统的大部分功能。因此 ,如果想制做Linux启动盘,你必须了解Linux系统启动的基本过程。接下来我就先简要介 绍一下Linux的启动过程。 所有的PC机都是通过执行ROM中的代码加(ext2 filesystem) readonly. 之后,系统发现init程序并执行它,init程序寻找它的配置文件/etc/inittab,并开始执 行其中的脚本,这些脚本是一些SHELL命令的组合,用来执行如下命令,如加载所需模块、 装载SWAP、初始化网络、装载fstab中列出的所有驱动器等。最后启动一个叫getty的程序 ,它负责console和ttys之间的通信,它在显示器上打印login提示符并激活login程序, login处理登陆的有效性并建立与用户的对话。至此,启动过程完毕。 2. 制做启动盘 创建一个启动盘首先必须创建根文件系统,由于软盘容量有限,因此常采用压缩的根文件 系统。下面我就详细的介绍怎样创建压缩格式根文件系统。 2.1 准备 一个根文件系统必须包括支持完整Linux系统的全部东西,因此,它至少应包括以下几项: ?基本文件系统结构 ?至少含有以下目录:/dev, /proc, /bin, /etc, /lib, /usr, /tmp ?最基本的应用程序,如sh, ls, cp, mv等 ?最低限度的配置文件,如rc, inittab, fstab等 ?设备:/dev/hd*, /dev/tty*, /dev/fd0 ?基本程序运行所需的库函数 由于以上所需文件远超过1.44M,因此我们通常的做法是先准备好内容后再压缩到软盘中? 当用软盘启动时,再把文件解压到内存中,形成一个虚拟盘(RAMDISK),通过RAMDISK控 制系统启动。 为了能创建以上的根文件系统,你必须有一个空闲的能够放下大约4M文件的RAMDISK。 如果你使用LILO控制启动,先检查一下LILO的配置文件/etc/lilo.conf中定义的RAMDISK 的大小。/etc/lilo.conf 中有一行 RAMDISK_SIZE = nnn 它决定RAMDISK可使用的最大内存为nnn,缺省情况下为4096K,对我们来说够了,但是顺便 说一下,如果你的系统只有8M内存,千万不要使用4M的RAMDISK。再检查一下你的系统设备 中是否有一个叫/dev/ram0或/dev/ram的设备,这是RAMDISK的设备名,如果没有,用命令 mknod创建一个设备/dev/ram0。 2.2 创建根文件系统 Linux内核识别两种可以直接拷贝到RAMDISK的文件系统,它们是minix 和ext2,ext2性能更好。如果你使用ext2,你会发现使用-i选项定义比缺省更多的信息节 点非常有用。mke2fs缺省情况下在1.44M的软盘上产生360个信息节点,使用压缩格式的根 文件系统需要更多的信息节点,所以使用如下命令创建文件系统可以创建2000个信息节点 ,一般不会用光: mke2fs -m 0 -i 2000 /dev/ram0 mke2fs将会自动判断设备容量的大小并相应的配置自身,-m 0参数防止它给root保留空间 ,这样会腾出更多的有用空间。接着把虚拟盘挂在节点/mnt上: mount -t ext2 /dev/ram0 /mnt 如果没有节点/mnt,建一个。 接着是创建目录。根文件系统最少应该有如下8个目录: /dev ? 设备 /proc -- proc 文件系统所需目录 /etc ? 系统配置文件 /sbin ? 重要的系统程序 /bin ? 基本应用程序 /lib ? 共享函数库 /mnt ? 装载其他磁盘节点 /usr ? 附加应用程序 其中/proc,/mnt和/usr在此情况下都是空的,只需要用mkdir创建它们既可。其余的目录应 根据需要分别创建,下面我一个一个的详细叙述。 ?/dev:/dev中含有系统不可缺少的设备文件,虽然该目录很普通,可以用 mkdir创建, 然而目录中的设备文件必须用mknod创建,当然也有捷径,你可以把现有系统中/dev的文件
[1] [2] [3] [4] 下一页 

拷贝过来,然后删除不必要的文件。命令cp -dpR /dev /mnt会拷贝/dev整个目录但不拷贝文件内容,dp开关保证链结文件仍然不变,不会拷贝链 结所指原文件,而且属性不变。 必须注意的是,每一个设备文件占用一个信息节点,而软盘上节点数是有限的,因此有必 要删除没用的设备文件。例如,如果你没有SCSI设备,删除所有的以sd开头的文件。如果 你不想使用串口设备,删除所有以cua开头的文件。不过记住一定要保留console, kmem, mem, null, ram, tty1等文件。 ?/etc:这个目录中含有一些必不可少的系统配置文件,那么到底哪些文件是必需的,哪 些可有可无呢?告诉你一个小窍门,用命令ls ?ltru,该命令会根据最后使用日期反列 一下目录/etc中的文件,如果一些文件很长时间没有被进入过,基本上可以从你的启动盘 中删去。 我的启动盘中含有不到15个配置文件,大致可分为3部分: 启动盘中必须含有的文件 ?rc.d/* -- 系统启动脚本 ?fstab ? 列出要登陆的文件系统 ?inittab ? 包含启动过程参数 而且这些文件都是最简单的。rc应该包括: #!/bin/sh /bin/mount -av /bin/hostname yjy fstab应包括: /dev/ram0 / ext2 defaults /dev/fd0 / ext2 defaults /proc /proc proc defaults inittab包括: id:2:initdefault: si::sysinit:/etc/rc 1:2345:respawn:/sbin/getty 9600 tty1 2:23:respawn:/sbin/getty 9600 tty2 整理系统所需文件 ?passwd ? 用户名和目录. ?group ? 用户组 ?shadow ? 用户加密密码 如果你觉得这不安全,就把passwd和shadow删掉,这样只有root可以进入系统。 (3)偶尔使用的文件,可根据自己的实际情况选择。 ?/bin和/sbin:该目录中包含有必不可少的应用程序,如ls, mv, cat,你可以根据自己 的需要选择,不过一定要记住包括以下程序:init, getty,login, mount,运行你的rc的 外壳shell。 ?/lib: 该目录中包含有你的启动盘启动过程中所需要的共享函数库,如果缺少必须的函 数库,系统会停止启动或出现一大堆错误信息,所以一定要注意。 几乎所有的程序都需要libc库,列一下目录/lib中的libc: % ls -l /lib/libc* -rwxr-xr-x 1 root root 4016683 Apr 16 18:48 libc-2.1.1.so* lrwxrwxrwx 1 root root 13 Apr 10 12:25 libc.so.6 -> libc-2.1.1.so* libc.so.6的6表示版本号,它指向的文件才是你真正需要的。 查看每一个程序使用的函数库,用命令ldd,如: % ldd /sbin/mke2fs libext2fs.so.2 => /lib/libext2fs.so.2 (0x40014000) libcom_err.so.2 => /lib/libcom_err.so.2 (0x40026000) libuuid.so.1 => /lib/libuuid.so.1 (0x40028000) libc.so.6 => /lib/libc.so.6 (0x4002c000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000) 输出右边的库都是必须的,有的可能是链结文件。 在/lib目录下你还必须有函数库装载器,这个装载器或是ld.so (对 a.out 库) 或是 ld-linux.so (对 ELF 库)。新版本的ldd一般会告诉你所需库的加载器。 把装载器和库拷贝到/lib后,在仔细检查一遍,一定保证没有遗漏。 2.3 模块 如果你有一个模块化的内核,你还得必须考虑需要加载的模块,它们都位于/lib/modules, 你可以把不是很重要的模块放到别的盘上,当系统启动后在加载,这样会节省启动盘的空 间。 2.4 打包 一旦你完成了上述工作,卸下虚拟盘,拷贝到一个文件中,然后压缩。 umount /mnt dd if=/dev/ram0 bs=1k gzip -v9 > rootfs.gz 压缩结束后,你就拥有了一个压缩的根文件系统,不过你得检查它的大小,如果大了,你还得去掉一些东西。
上一页 [1] [2] [3] [4] 下一页 

3. 选择内核   在你完成了制做压缩的根文件系统后,下一步就是选择或自己创建一个内核。多数情 况下,你可以拷贝现有系统的内核,但是有些情况下,你不得不自己另外创建一个。最可 能出现的问题就是容量限制:如果你想做单张的启动盘,盘中最大的文件往往是内核,所 以你必须想方设法压缩 内核的体积。要想压缩内核体积,创建它时就得把不必要的功能去掉,如去掉对网络的支 持和对不必要设备的支持,但是一定要记住保留内核对RAMDISK和ext2的支持,否则你的启 动盘将不能工作。还有就是要记住把对你备份所用设备的支持加到内核中去,因为启动盘 的最大用处就是检测和修复损坏的系统,如果你没有把对备份设备的支持加到内核中去, 你将没有办法修复损坏的系统,只能再重装Linux。   创建新内核的方法我就不在此叙述了,如有问题,请查阅相关资料。重建完内核后记 住用“make zImage”压缩内核。 4. 整合   有了根文件系统和内核之后,最后的工作就是把它们整合在一起。   先检查总文件的大小,如果超出1.44M,就得考虑重新创建所需或用两张磁盘,即使用 两张磁盘,你的根文件系统也得小于1.44M。   接着就是确定是用LILO控制启动还是直接用拷贝到盘上的内核控制启动。用LILO的好 处是你能增加支持初始化硬件的参数到内核中,缺点是较复杂且占用珍贵的磁盘空间,不 过我还是建议使用LILO控制系统启动。下面我就介绍用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数据块中
上一页 [1] [2] [3] [4] 下一页 

  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永保青春。

(出处:http://www.sheup.com)


上一页 [1] [2] [3] [4] 

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

(出处:http://www.sheup.com)


上一页 [1] [2] [3] [4] [5] 

的情况。大家可以拿一张来慢慢研究,你会从中学到很多知识。   最后祝大家都能作出一张称心如意的启动盘,让你的linux永保青春。

(出处:http://www.sheup.com/)


上一页 [1] [2] [3] [4] [5] [6]