版权声明:
本文档能够在网络上在非商业范围内自由转载,转载请注明出处
假如转载版面包含商业广告,请向作者支付至少每千字100园的稿费
以书面,书籍形式转载和出版请按至少每千字100园人民币的标准向作者支付稿费
BabyLinux制作过程详解
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.linuxfans.org/nuke/modules.php?name=News&file=print&sid=2573
一,什么是BabyLinux
二,为什么要做这样一个linux
三,什么人适合读这篇文档
四,应该具备的知识
五,linux系统引导过程简介
六,编译内核
七,编译busybox
八,制作根文档系统
九,制作ramdisk映象文档
十,内核和busybox的整合
十一,安装测试和内容调整
十二,babylinux中的BUG
十三,接下来要做的事情
十四,参考文献
一,什么是BabyLinux
BabyLinux不是个完整的发行版,他是利用原有的一套完整的linux系统的内核原代码和编译工具,利用busybox内建的强大功能,在一张软
盘上做的一个很小的linux系统.他具备一个linux系统的基本特征,支持linux系统最常用的一百多个命令,支持多种文档系统,支持网络等等,您
能够把他当做一张linux起动盘和修复盘来用,您也能够把他当做一个静态路由的路由器软件,当然,您也能够把他当做一个linux玩具,向您的朋友炫耀
linux能够做的多么小.我把他叫做BabyLinux因为他很小巧,小的很可爱,像一个刚刚出生的小baby.
二,为什么要作这样一个linux
先说说我一开始的想法,当我一开始接触linux的时候,看到书上说,linux通常安装只需要60M左右的空间,但是我发现装在我硬盘上的
Redhat 6.0确要占据好几百M的空间.为什么我的linux这么大呢?
后来我发现,装在我机器上的那么多东西只有不到30%是我平时常用的,更有30%是我极少用到的,另外的40%基本上是不用的.于是,我和大多数初学者一
样,开始抱怨,为什么linux不能做的精简一点呢?于是,我萌发了自己裁减系统的想法.可惜那个时候我还没有听说过有LFS和Debain.等到我积累
了足够的linux知识后,我开始制作这样一个小系统.
制作这样一个小系统最大的意义在于,您能够通过制作系统了解linux的启动过程,学会ramdisk的使用,让您在短时间内学到更多的
linux知识.当然,您会得到很大的乐趣.这个项目只是做一个具备基本特征的linux系统,假如您想自己做一个具备完整功能的linux,请阅读
Linux From Scratch (LFS)文档.
三,什么人适合读这篇文档
假如您是个linux爱好者,并且很想了解linux的启动过程和系统的基本结构,而且是个喜欢动手研究小玩意的人,那么这个文档能够满足您
的需求.假如您仅仅是用linux来做一些普通的日常工作,而不在乎您的linux到底怎么工作,那么这份文档也许不太适合您.另外,假如您是linux
爱好者,但是现在还是个刚刚入门的newbi,我建议您先把linux命令学好.但是我想我会尽可能的把这份文档写周详一些,假如您有足够的毅力,或许
一个newbi也能成功做一个babylinux.或,您碰到一件很不巧的事情,比如您的老婆来例假了,您的这个周末就泡汤了,那么阅读这篇文档并做一
个linux小玩具能够打发您的时间.
四,应该具备的知识
在做一个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文档
中描述的指令,对系统的各种软件和硬件环境做最初化设定.最后运行mingetty等待用户输入用户名登录系统.任何的工作就这么简单,虽然linux启动的
时候有很多内容,看上去十分高深,但是都但是是对这个过程的扩充.明白了这个道理,您能够写一些脚本程式让他在系统启动的特定时间运行完成任务.事实上系
统内核并不关心/sbin下的init是不是真的init,只要是放在/sbin下名叫init的可执行程式他都能够执行.能够做以下实验:
编写一个很简单的C程式:
main()
{
printf(“hello,world!
”);
}
保存后以init.c保存他,并用gcc编译.
#gcc –-static -o init init.c
这里的--static 参数告诉gcc把这个程式静态联接,这样这个程式不倚赖任何库就能运行.把编译好的init程式拷贝到/sbin下,备份好原来的那个.重新启动系统最后系统的输出结果是: hello,world!
然后停在那里.做这个实验以前先确定您知道如何把系统恢复到原来的状态,有一个简单的方法,在内核启动前给他加上init=参数,比如您原先的
init被您改成了init.bak 只要在启动的时候给内核加上init=/sbin/init.bak就能够用原来的init程式启动系统.
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




