自己动手做一个迷你型Linux操作系统

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

自己动手做一个迷你型Linux操作系统

本文要构建的这个迷你型的Linux 系统只能在一台特定的单机上运行,如果读者朋友们有兴趣的话,在这个系统的基础上加以改良,是可以构建出通用的、可以在大多数常规PC 机上即插即用的系统来的。但是这已经不在本文的话题之内了,读者朋友们如果有兴趣,可以通过我的电子邮件和我讨论其中的细节疑问。我们的目标Linux 系统运行在一台普通的Intel 386 PC 机上,可以有硬盘,也可以不要硬盘,而用Flash Disk 来代替。如果是用Flash 盘的话,须要能够支持从Flash 盘启动,而且Flash 盘的大小要在16M 字节或者以上。我们希望用户一开机启动,就直接进入X Window 图形界面,运行事先指定好的程序。不须要用户输入用户名和密码执行登录。我们设定的这个目标有点像一个X Terminal 终端工作站。稍加改良,还可以做成干脆无盘的形式,也就是说,连16M 的Flash 盘也不要了。不过,这也超出了本文的话题了。读者朋友们如果有兴趣,可以来信和我执行讨论。系统启动因为我们要考虑从Flash 盘执行启动,所以我们选择用LILO 作为我们的Boot Loader,而不选用GRUB。这是考虑到GRUB 有较强的对硬盘和文件系统的识别能力,而Flash 盘到底不是标准的硬盘,并且我们选用的文件系统GRUB 又不一定认识,搞不好的话GRUB 反会弄巧成拙。而LILO 就基本的多了,它在硬盘开始的MBR 写入一个小程序,这个小程序不经过文件系统,直接从硬盘扇区号,读出Kernel Image 装入内存。这样,保险系数就大大添加。并且也给了我们自由选用文件系统的余地。那么,我们要如何安装LILO 呢?首先,我们要找一块普通的800M 左右的IDE 硬盘,连在目标机器的IDE 线上。这样在我们的目标机器上,IDE1 上挂的是Flash 盘,IDE2 上挂的是一块工作硬盘。我们用标准的步骤在IDE2 的标准硬盘上装上一个Debian GNU/Linux 系统。当然,如果读者朋友们手头没有Debian,也可以装Red Hat 系统。装好工作系统之后,要首先做一些裁减工作,把不必要的Service 和X Window 等等东西都删掉。这样做的目的是增进系统启动速度,因为我们在后面的工作中,肯定要不停的重新启动机器,所以启动速度对我们的工作效率是很关键的。装好工作系统之后,在Falsh 盘上做一个Ext2 文件系统,这个用mke2fs 这个命令就可以完成。由于Flash 盘是接在IDE1 上的,所以在Linux 里面,它的身份是/dev/hda。本文作者在操作的时候,把整个Flash 盘划分了一个整个的分区,所以,调用mke2fs 的时候,处理的是/dev/hda1。读者朋友们应该可以直接在/dev/hda 上做一个Ext2 文件系统,而不用事先分区。在Flash 盘上做好了文件系统之后,就可以把一个编译好的内核映像文件vmlinuz copy 到Flash 盘上了。留心,必须要先把这个vmlinuz 映像文件copy到Flash 盘上,然后才能在Flash 盘上安装LILO。不然的

话,LILO 到时候可是会LILILILI 打结巴的,因为它会找不到Kernel Image 在Flash 盘上的位置的,那样的话Flash 盘也就启动不起来了。还有,如果读者朋友们在Flash 盘上用的是一个压缩的文件系统的话,到时候LILO 也会出疑问,它虽然能正确的找到Kernel Image 在硬盘上的起始位置,但是它却没有办法处理被文件系统重新压缩过的这个Kernel Image,不知道该如何把它展开到内存中去。把Kernel Image copy 过去以后,我们就可以动手编辑一份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 主板上,把所有必要的功能都加进去,一般也不到800K 字节。所以,这个办法是可行的。而且减低了init scripts 的复杂程度。从运行方面来考虑,由于须要的kernel 代码反正是要装载到内存中的,所以并不会引起内存的浪费。在我们的目标平台上,我们希望运用USB 存储设备。还有一点要留心的,就是对Frame buffer 的支持。这主要是为了支持XFree86。一般说来,如果我们的显卡是XFree86 直接支持的,那当然最好,也就不须要frame buffer 的内核支

相关文档
最新文档