一、什么是BabyLinux
BabyLinux不是个完整的发行版,他是利用原有的一套完整的Linux系统的内核原代码和编译工具,利用busybox内建的强大功能,在一张软盘上做的一个很小的Linux系统。他具备一个Linux系统的基本特征,支持Linux系统最常用的一百多个命令,支持多种文档系统,支持网络等等,您能够把他当做一张Linux起动盘和修复盘来用,您也能够把他当做一个静态路由的路由器软件,当然,您也能够把他当做一个Linux玩具,向您的朋友炫耀Linux能够做的多么小。我把他叫做BabyLinux因为他很小巧,小的很可爱,像一个刚刚出生的小baby。
二、为什么要作这样一个Linux
先说说我一开始的想法,当我一开始接触Linux的时候,看到书上说,Linux通常安装只需要60MB左右的空间,但是我发现装在我硬盘上的Redhat 6.0确要占据好几百MB的空间。为什么我的Linux这么大呢? 后来我发现,装在我机器上的那么多东西只有不到30%是我平时常用的,更有30%是我极少用到的,另外的40%基本上是不用的。于是,我和大多数初学者相同,开始抱怨,为什么Linux不能做的精简一点呢?于是,我萌发了自己裁减系统的想法。可惜那个时候我还没有听说过有LFS和Debain。等到我积累了足够的Linux知识后,我开始制作这样一个小系统。
制作这样一个小系统最大的意义在于,您能够通过制作系统了解Linux的启动过程,学会raMBdisKB的使用,让您在短时间内学到更多的Linux知识。当然,您会得到很大的乐趣。这个项目只是做一个具备基本特征的Linux系统,假如您想自己做一个具备完整功能的Linux,请阅读Linux From Scratch (LFS)文档。
三、什么人适合读这篇文档
假如您是个Linux爱好者,并且很想了解Linux的启动过程和系统的基本结构,而且是个喜欢动手研究小玩意的人,那么这个文档能够满足您的需求。假如您仅仅是用Linux来做一些普通的日常工作,而不在乎您的Linux到底怎么工作,那么这份文档也许不太适合您。另外,假如您是Linux爱好者,但是现在还是个刚刚入门的newbi,我建议您先把Linux命令学好。但是我想我会尽可能的把这份文档写周详一些,假如您有足够的毅力,或许一个newbi也能成功做一个babyLinux。
四、应该具备的知识
在做一个babyLinux之前,您应当已会应用Linux最常用的命令。并且至少有一次成功编译并安装系统内核的经历,会通过编译源代码来安装软件。假如您具备了这些条件,那么做这样一个小系统会很顺利,假如您还没有掌控这些知识,您可能会碰到一些困难。但是只要有毅力,也能够成功。您无需具备编程的知识,因为我的目标是:让具备中等以上Linux水平的爱好者能够通过阅读文档轻松完成这个项目。关于一张软盘上的Linux更有一个很著名的Linux叫LOAP (Linux On A Floppy) 但是他是由比较专业的人员需要编写很多程式完成的。而且没有关于他制作过程的文档。
五、Linux系统引导过程简介
首先,主板的BIOS会读取硬盘的主引导记录(MBR),MBR中存放的是一段很小的程式,他的功能是从硬盘读取操作系统核心文档并运行,因为这个小程式太小了,因此通常这个小程式不具备直接引导系统内核的能力,他先去引导另一个稍微大一点的小程式,再由这个大一点的小程式去引导系统内核。在Linux系统中这样的小程式有LILO和GRUB。在这个项目中,我决定用LILO来做系统引导程式。在软盘上启动Linux系统的过程和在硬盘上启动的过程相似。
Linux系统内核被引导程式装入内核并运行后,Linux内核会检测系统中的各种硬件。并做好各种硬件的初始化工作,使他们在系统正式运行后能正常工作。之后内核做的最后一个工作是运行
/sbin下的init程式,init是英文单词initialization(初始化)的简称,init程式的工作是读取/etc/inittab文档中描述的指令,对系统的各种软件和硬件环境做最初化设定。最后运行MBingetty等待用户输入用户名登录系统。任何的工作就这么简单,虽然Linux启动的时候有很多内容,看上去十分高深,但是都但是是对这个过程的扩充。明白了这个道理,您能够写一些脚本程式让他在系统启动的特定时间运行完成任务。事实上系统内核并不关心/sbin下的init是不是真的init,只要是放在/sbin下名叫init的可执行程式他都能够执行。能够做以下实验:
编写一个很简单的C程式:
|
保存后以init.c保存他,并用gcc编译。
|
这里的--static 参数告诉gcc把这个程式静态联接,这样这个程式不倚赖任何库就能运行。把编译好的init程式拷贝到/sbin下,备份好原来的那个。重新启动系统最后系统的输出结果是: hello,world!
然后停在那里。做这个实验以前先确定您知道如何把系统恢复到原来的状态,有一个简单的方法,在内核启动前给他加上init=参数,比如您原先的init被您改成了init。baKB 只要在启动的时候给内核加上init=/sbin/init。baKB就能够用原来的init程式启动系统。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!



