您的位置:首页 > 运维架构 > Linux

DIY:自己动手做一个迷你 Linux 系统(一)

2012-08-03 21:11 274 查看
本文将带领大家构建一个迷你型的 Linux[/u] 系统[/u]。它占用的硬盘空间远小于 16M 字节,但是却包括了 XFree86 的 X Window 窗口[/u]系统。
目标
本 文要构建的这个迷你型的 Linux 系统只能在一台特定的单机上运行,如果读者朋友们有兴趣的话,在这个系统的基础上加以改进,是可以构建出通用的、可以在大多数常规 PC 机上即插即用的系统来的。但是这已经不在本文的话题之内了,读者朋友们如果有兴趣,可以通过我的电子邮件和我讨论其中的细节问题。
我 们的目标 Linux 系统运行在一台普通的 Intel 386 PC 机上,可以有硬盘,也可以不要硬盘,而用 Flash Disk 来代替。如果是用 Flash 盘的话,需要能够支持从 Flash 盘启动,而且 Flash 盘的大小要在 16M 字节或者以上。我们希望用户一开机启动,就直接进入 X Window 图形[/u]界面,运行事先指定好的程序。不需要用户输入用户名和密码进行登录。
我们设定的这个目标有点像一个 X Terminal 终端工作站。稍加改进,还可以做成干脆无盘的形式,也就是说,连 16M 的 Flash 盘也不要了。不过,这也超出了本文的话题了。读者朋友们如果有兴趣,可以来信和我进行讨论。



系统启动
因 为我们要考虑从 Flash 盘进行启动,所以我们选择用 LILO 作为我们的 Boot Loader,而不选用 GRUB。这是考虑到 GRUB 有较强的对硬盘和文件系统的识别能力,而 Flash 盘到底不是标准的硬盘,并且我们选用的文件系统 GRUB 又不一定认识,搞不好的话 GRUB 反 会弄巧成拙。而 LILO 就简单的多了,它在硬盘开始的 MBR 写入一个小程序,这个小程序不经过文件系统,直接从硬盘扇区号,读出 Kernel Image 装入内存[/u]。这样,保险系数就大大增加。并且也给了我们自由选用文件系统的余地。那么,我们要如何安装 LILO 呢?
首 先,我们要找一块普通的 800M 左右的 IDE 硬盘,连在目标机器的 IDE 线上。这样在我们的目标机器上,IDE1 上挂的是 Flash 盘,IDE2 上挂的是一块工作硬盘。我们用标准的步骤在 IDE2 的标准硬盘上装上一个 Debian GNU/Linux 系统。当然,如果读者朋友们手头没有 Debian,也可以装 Red Hat 系统。装好工作系统之后,要首先做一些裁减工作,把不必要的 Service 和 X Window 等等东西都删掉。这样做的目的是增进系统启动速度,因为我们在后面的工作中,肯定要不停的重新启动机器,所以启动速度对我们的工作效率[/u]是很关键的。
装 好工作系统之后,在 Falsh 盘上做一个 Ext2 文件系统,这个用 mke2fs 这个命令就可以完成。由于 Flash 盘是接在 IDE1 上的,所以在 Linux 里面,它的身份是 /dev/hda。本文作者在操作的时候,把整个 Flash 盘划分了一个整个的分区,所以,调用 mke2fs 的时候,处理的是 /dev/hda1。读者朋友们应该可以直接在 /dev/hda 上做一个 Ext2 文件系统,而不用事先分区。
在 Flash 盘上做好了文件系统之后,就可以把一个编译好的内核映像文件 vmlinuz 拷贝到 Flash 盘上了。注意,必须要先把这个 vmlinuz 映像文件拷贝到 Flash 盘上,然后才能在 Flash 盘上安装 LILO。不然的话,LILO 到时候可是会 LILILILI 打结巴的,因为它会找不到 Kernel Image 在 Flash 盘上的位置的,那样的话 Flash 盘也就启动不起来了。还有,如果读者朋友们在 Flash 盘上用的是一个压缩的文件系统的话,到时候 LILO 也会出问题,它虽然能正确的找到 Kernel Image 在硬盘上的起始位置,但是它却没有办法处理被文件系统重新压缩过的这个 Kernel Image,不知道该如何把它展开到内存中去。
把 Kernel Image 拷贝过去以后,我们就可以动手编辑一份 lilo.conf 文件,这份文件可以就放在工作系统上就行了。但是注意在 lilo.conf 中索引的文件名的路径可要写对。这些路径名都是在工作系统上看上去的路径名。比如,如果 Flash 盘 Mount 在 /mnt 目录下面,那么,在 lilo.conf 中,vmlinuz 的路径名就是 /mnt/vmlinuz。注意这一点千万不要搞错。不然的话,如果一不小心把工作系统的 LILO 给破坏掉了,那就麻烦了。编辑好了 lilo.conf,然后再运行 lilo 命令,注意,要告诉它用这个新的 lilo.conf 文件,而不要用 /etc/lilo.conf。
安 装好 LILO 之后,我们可以立即重新启动,测试一下。首先在 BIOS 里面,设置成从 IDE1 开始启动,如果我们看到 LILO 的提示符,按回车后还能看到 Kernel 输出的消息,这就算是 LILO 的安装成功了。记得这个操作的方法,以后每次我们更新 Flash 盘上的 Kernel Image,都记得要更新 LILO。也就是说,要重新运行一遍 lilo 命令。



编译内核
试 验成功 LILO 的安装以后,我们开始考虑编译一个新的内核。当然,要编译新的内核,我们首先要进入我们的工作系统。这里有两个办法进入工作系统,一是在 BIOS 里面设置从 IDE2 启动,当然,这就要求当初安装工作系统的时候,要把 LILO 安装在 /dev/hdb 上;另一个办法是还是从 IDE1 启动,不改变 BIOS 的设置,但是在看到 LILO 的提示符的时候,要键入 linux root=/dev/hdb1,最前面的 linux 是在 lilo.conf 里面定义的一个 entry,我们只采用这个 entry 所指定的 Kernel Image,但是用 /dev/hdb1 作为 root 文件系统。两个办法可能有的时候一个比另一个好,更方便一些。这就要看具体的情况了。不过,它们的设置并不是互相冲突的。
在 编译内核的时候,由于我们的内核是只有一台机器使用的,所以我们应该对它的情况了如指掌;另外一方面,为了减低不必要的复杂性,我们决定不用 kernel module 的支持,而把所有需要的东西直接编译到内核的里面。这样编译出来的内核,在一台普通的 586 主板上,把所有必要的功能[/u]都加进去,一般也不到 800K 字节。所以,这个办法是可行的。而且减低了 init scripts 的复杂程度。从运行方面来考虑,由于需要的 kernel 代码反正是要装载到内存中的,所以并不会引起内存的浪费。
在我们 的目标平台[/u]上,我们希望使用 USB 存储设备。还有一点要注意的,就是对 Frame buffer 的支持。这主要是为了支持 XFree86。一般说来,如果我们的显卡是 XFree86 直接支持的,那当然最好,也就不需要 frame buffer 的内核支持。但是如果 XFree86 不支持我们的显卡,我们可以考虑用 VESA 模式。但是 XFree86 的 VESA 卡支持运行起来不太漂亮,还有安全方面的问题,有时在启动和退出 X Window 的时候会出现花屏。所以我们可以采用 kernel 的 vesa 模式的 frame buffer,然后用 xfree86 的 linux frame buffer 的驱动程序。这样一般就看不到花屏的现象了,而且安全方面也没有任何问题。
devfs 也是我们感兴趣的话题。如果 kernel 不使用 devfs,那么系统上的 root 文件系统就要有 /dev 目录下面的所有内容。这些内容可以用 /dev/MAKEDEV 脚本来建立,也可以用 mknod 手工一个一个来建。这个方法有其自身的好处。但是它的缺点是麻烦,而且和 kernel 的状态又并不一致。相反的,如果使用了 devfs,我们就再也不用担心 /dev 目录下面的任何事情了。/dev 目录下面的项目会有 kernel 的代码自己负责。实际使用起来的效果,对内存的消耗并不明显。所以我们选择 devfs。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: