您的位置 首页 IC

最小的Linux体系制造进程详解

一,什么是BabyLinux二,为什么要做这样一个linux三,什么人适合读这篇文档四,应该具备的知识五,linux系统引导过程简介六,编译内核七,编译busybox八,制作根文

一,什么是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!\n”);

}

保存后以init.c保存他,并用gcc编译.

#gcc –-static -o init init.c

这儿的–static 参数告知gcc把这个程序静态联接,这样这个程序不倚赖任何库就能运转.把编译好的init程序拷贝到/sbin下,备份好本来的那个.重新发动体系最终体系的输出结果是: hello,world!

然后停在那里.做这个试验以前先确认你知道怎么把体系康复到本来的状况,有一个简略的办法,在内核发动前给他加上init=参数,比方你原先的init被你改成了init.bak 只需在发动的时分给内核加上init=/sbin/init.bak就能够用本来的init程序发动体系.

做完以上试验,就理解了内核和init程序之间的联系.此外,init程序纷歧定是一个二进制可履行程序,他能够是一个bash脚本,一个指向另一个程序的联接,他的方位也并纷歧定要在/sbin下,只需在发动内核时,给内核加上init参数就能被运转,比方,开端时给内核加上init= /bin/bash参数,内核在最终一步就直接运转bash给出提示符,不必登录体系就能够输入指令了.其功用相似单用户形式发动体系. /sbin/init 程序仅仅内核默许运转的第一个程序.

六,编译一个linux体系内核

1,编译前的规划和预备

在编译内核前,请先确认你的需求,把你的需求罗列成一张具体的表格.你需求让内核支撑什么硬件,支撑多少种分区类型和文件体系,支撑哪些网卡,支撑哪些网络协议.等等.请尽或许具体的罗列这些内容,可是你也不要太贪心,由于你一切能运用的空间只需1440K,假如你编译出一个大于1440K或很挨近这个数字的内核,你的这个项目就不能完结了,你现已没有空间再放ramdisk映象文件,除非你本意再多出一张软盘,做一个两张软盘的小linux体系.关于声卡驱动之类,我劝你仍是抛弃吧,由于一个声卡驱动或许只让你的内核增大了十多K,可是你有了一个声卡驱动就必须要有一个播放器吧,不然声卡驱动就没有含义,可一个播放器的巨细可不是一张软盘能够装得下的.在我从前制造的babylinux内核有900多K,其间,文件体系部分站了大部分,由于我的方针是把他做成一个体系修正盘.因而我在内核中编译7种文件体系的支撑,每削减一个文件体系就能够减小几十乃至200多K的内核巨细.越是杂乱,越是安全的文件体系,其支撑模块也越大,比方在linux下FAT模块只需32K,VFAT只需17K,可是ext3的模块就有86K,JFS到达216K, reiserfs模块是224K,能够想像,编译一个支撑7个文件体系的900多K的内核,文件体系部分就占了600K以上的空间,所以假如某一个文件体系是你底子不必的,那么仍是不要编译进内核把,这样至少能够省下100多K的空间.关于其他的驱动,比方网卡,一般巨细只需8,9K,最大的也不过10多 K,因而能够把常用的网卡芯片的驱动都编译进去.别的假如你想让你的babylinux支撑U盘,那么scsi的驱动模块也是不行小看的,他一般要挨近 150K,由于U盘是被作为scsi设备来驱动的.别的你还需求让你的内核支撑即插即用,这些都是不小的空间开支,我的主张是你抛弃一两个你不必的文件体系.总归,你最终编译出来的内核巨细最好不要超越900K,不然你在busybox里只能编译进去很少的指令.

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/298026.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部