网络安全参考 | UNIX参考 | GPS参考 | 无线参考 | 在线手册 | OSBUG.ORG | SUNNY-NETWORK.COM
天线制作 GPS 地标
网站地图 RSS订阅
高级搜索 收藏本站
Home | 业界动态 | Open source | GNU | Linux | BSD | Solaris | AIX | HP-UX | IRIX | Mac OS X | Minix | Tru64 | SCO UNIX | Network | Security | X-Window | Database | 应用服务 | Programming | 经典著作 | 永远的纪念 | 杂项
 当前位置: Home > Linux > Misc > 文章  
BabyLinux操作系统的制作过程(上)
文章来源: ChinaITLab 文章作者: GuCuiwen 发布时间: 2007-01-22   字体: [ ]  
 

  这里的--static 参数告诉gcc把这个程序静态联接,这样这个程序不倚赖任何库就能运行。把编译好的init程序拷贝到/sbin下,备份好原来的那个。重新启动系统最后系统的输出结果是: hello, world!

  然后停在那里。做这个实验以前先确定你知道如何把系统恢复到原来的状态,有一个简单的方法,在内核启动前给它加上init=参数,比如你原先的init被你改成了init。baKB 只要在启动的时候给内核加上init=/sbin/init。baKB就可以用原来的init程序启动系统。

  做完以上实验,就明白了内核和init程序之间的关系。此外,init程序不一定是一个二进制可执行程序,它可以是一个bash脚本,一个指向另一个程序的联接,它的位置也并不一定要在/sbin下,只要在启动内核时,给内核加上 init参数就能被运行,比如,开始时给内核加上init=/bin/bash参数,内核在最后一步就直接运行bash给出提示符,不用登录系统就可以输入命令了。其功能类似单用户模式启动系统。 /sbin/init 程序只是内核默认运行的第一个程序。

  六、编译一个Linux系统内核

  1 编译前的规划和准备

  在编译内核前,请先确定你的需求,把你的需求罗列成一张详细的表格。你需要让内核支持什么硬件,支持多少种分区类型和文件系统,支持哪些网卡,支持哪些网络协议。等等。请尽可能详细的罗列这些内容,但是你也不要太贪心,因为你所有能利用的空间只有1440KB,如果你编译出一个大于1440KB或很接近这个数字的内核,你的这个项目就不能完成了,你已经没有空间再放ramdisKB映象文件,除非你原意再多出一张软盘,做一个两张软盘的小Linux系统。对于声卡驱动之类,我劝你还是放弃吧,因为一个声卡驱动也许只让你的内核增大了十多 KB,但是你有了一个声卡驱动就务必要有一个播放器吧,否则声卡驱动就没有意义,可一个播放器的大小可不是一张软盘可以装得下的。在我先前制作的 babyLinux内核有900多KB,其中,文件系统部分站了大部分,因为我的目标是把它做成一个系统修复盘。因此我在内核中编译7种文件系统的支持, 每减少一个文件系统就可以减小几十甚至200多KB的内核大小。越是复杂,越是安全的文件系统,其支持模块也越大,比如在Linux下FAT模块只有 32KB,VFAT只有17KB,但是ext3的模块就有86KB,JFS达到216KB,reiserfs模块是224KB,可以想像,编译一个支持7 个文件系统的900多KB的内核,文件系统部分就占了600KB以上的空间,所以如果某一个文件系统是你根本不用的,那么还是不要编译进内核把,这样至少可以省下100多KB的空间。对于其它的驱动,比如网卡,通常大小只有8,9KB,最大的也不过10多KB,因此可以把常用的网卡芯片的驱动都编译进去。另外如果你想让你的babyLinux支持U盘,那么scsi的驱动模块也是不可小看的,它通常要接近150KB,因为U盘是被当做scsi设备来驱动的。另外你还需要让你的内核支持即插即用,这些都是不小的空间开销,我的建议是你放弃一两个你不用的文件系统。总之,你最后编译出来的内核大小最好不要超过900KB,否则你在busybox里只能编译进去很少的命令。

  在我编译的busybox中,我编译进去120多个命令,基本上把 busybox支持的命令都包括进去了。加上小系统所必需的文件系统目录,/dev下的设备文件,以及/etc下几个必需的配置文件,做成 ramdisKB压缩后的大小是440多KB, 加上900KB左右的内核刚好可以放入一张1440KB软盘,请注意,你应该留下至少50KB的空间,因为我们要在软盘上创建一个ext2文件系统,而文件系统本生需要占据大概25KB的磁盘空间。另外lilo的引导文件boot.b的大小是5。7KB,还有装上lilo后自动产生的Map文件也要10多 KB的空间,Map文件的具体大小由内核安装的实际大小决定,通常不会超过30KB。

  综上所述,请遵循下面的公式:

内核大小+文件系统压缩印象文件+50KB <= 1440KB

  另外一点需要说明的是:

  以上所罗列的文件系统模块大小是察看我现在使用的Redhat 9 的/lib/Modules下的模块文件得到的,实际编译进内核大小会小一点,因为我们用Make bzImage。在内核源代码目录树下生成的内核是经过压缩过的。如果你对以上说的内容不太明白也没有关系,我会在下面的内容中做详细的说明。

  2 必需编译进内核的内容

  首先,我们制作的这个小系统是基于一张软盘的,因此,你的内核必需支持软盘。另外对 IDE硬盘和cdrom的支持也是不可少的,否则做出来的babyLinux就没有实用价值,因为它不能访问硬盘和光盘上的内容这样的Linux虽然可以做的更小,但是制造一个完全没有用的东西是浪费时间。其它的包括framebuffer等,如果你需要支持在字符界面下以高分辨率显示,以看到更多的屏幕内容,那么就必需把framebuffer支持编译进内核,此外在高分辨率下使用的8x8字体也必需编译进去。否则即使你给内核传递了vga= 参数,内核会因为没有可用的小字体而自动转跳到低分辨率模式下,这是以前困扰我好几天想不明白的事情,后来通过反复试验才明白原来是缺少字体的文体。这里我先大致提一下需要注意的事情。在下一小节具体编译时,我会继续就某些细节问题说明。

  BabyLinux操作系统的制作过程(下)

  (参考链接: http://linux.ccidnet.com/art/741/20070119/1005105_1.html)

 
推荐文章
·BabyLinux操作系统的制作过程(下
 
 
共2页: 上一页 [1] 2 下一页
↑返回顶部   打印本页   关闭窗口↓  

Google
 
Web oldhand.org unixreference.net meshmea.org
相关分类
热点文章
·第一台基于”OpenMoko”
·BabyLinux操作系统的制
·难得一见 十大经典Linux
相关文章
·BabyLinux操作系统的制
·打造适合自己Slackware
·用Linux系统引导CD为服
·Linux操作系统下信号与
·自己动手做一个最小的Li
·简单编译升级内核激活FC
·一个Linux爱好者的2.6.1
·定制Linux系统内核,发
更多...
 
 

Copyright(c) 2001-2009 OLDHAND ORGANIZATION, All Rights reserved.
Power by DedeCms 织梦内容管理系统