网络安全参考 | 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 > BSD > FreeBSD > 文章  
制作软盘上运行的FreeBSD系统
文章来源: 绿盟 文章作者: 黑夜编码人 发布时间: 2003-08-06   字体: [ ]  
 

  4、编译系统程序

  现在就要准备系统所需要的基本程序了,首先最基本的是init和sh,init是所有进程的父进程,它负责进行一些初始化工作,它将是kernel引导完成后要运行的第一个用户进程,而sh用于解释/etc/rc中的命令。

  在UNIX中大部程序都使用了共享库,这有利减少磁盘空间的占用,这对于使用硬盘是非常有用的,然而对于软盘就不太适用了,因为单一个大部分程序都要使用的库libc.so就有500多K,加上其它的库软盘根本就装不下。

  我们可以发现,大部分时候一个程序只是用到了库中的某个函数,但同样也要加载整个库,所以我们可以使用静态编译来使程序只包含它使用的那部分函数,这样可以减少程序的大小。

  不过这样问题同样存在,如果只有少数程序这到没有什么,一旦程序很多时,那么空间问题同样存在。如果会C语言的朋友都知道,其实每一个程序中有很大一部分函数是相同的,比如printf,这个函数在大部分程序中都会用到,如果每个程序都包含一段printf的代码,那么如果有100个程序的话,就会包含100个这样的代码,然而这些代码都是相同的,实际上有99个都是浪费了空间,那么可不可以让一些程序在静态编译的情况下也能够共享一些函数呢?要知道答案,往下接着看。

  幸好,PICOBSD为我们提供了这样的一个机制,使得程序即不用加载标准库也可以利用其它程序中的相同函数,这就是crunch(crunch好像是世界顶级黑客高手John Draper的网名,不知道这与他有没有关系。^_^)。

  crunch是将所有需要的软件编译在一个文件中即crunch,然后当中的程序通过symbol link的方式link到它上面,这样便可以使用相应的程序(类似于linux中的busybox),同时又节约了空间。PICOBSD为我们提供了一个自己定制crunch的机会,在FreeBSD4.5 Release(注:4.8 Release中的crunch无法定制,至少我没有找到,所以建议大家使用4.5)中,crunch的配制文件是/usr/src/release/picobsd/custom/crunch1/crunch.conf,编辑它以选择你需要哪些软件,下面以一个例子来说明它的用法。

# $FreeBSD: src/release/picobsd/router/crunch.conf,v 1.1.2.2 2001/02/20 02:53:35 luigi Exp $
#
# NOTE: the string "/usr/src" will be automatically replaced with the
# correct value set in 'build' script - you should change it there

# Default build options
buildopts -DNOPAM -DRELEASE_CRUNCH -DNOSECURE -DNOCRYPT -DNONETGRAPH -DNOIPSEC

# other sources
srcdirs /usr/src/bin
srcdirs /usr/src/sbin/i386
srcdirs /usr/src/sbin
srcdirs /usr/src/usr.bin
srcdirs /usr/src/usr.sbin
srcdirs /usr/src/gnu/usr.bin
srcdirs /usr/src/gnu/usr.sbin
srcdirs /usr/src/libexec
# sources for ns & vm
srcdirs /usr/src/release/picobsd/tinyware

# 以下为你所需要在crunch包含的程序列表,以空格分隔。

progs dmesg ping ifconfig route hostname
progs cp rm ls cat test mkdir less
progs uname sysctl
progs init sh reboot

# ln是表示建立一个别名,如ln less more,表示当执行more的时候实际上是执行lessln less more

# 以下是指定编译时需要的库

libs -lncurses -lmytinfo -lipx
libs -lz -lpcap -lalias
libs -ledit -lutil -lmd -lcrypt -lmp -lgmp -lm -lkvm
libs -lgnuregex -ltelnet

  当编辑好crunch.conf之后,你就可以开始编译crunch了:

bsd# make

  这时会生成一个名为crunch1的程序,我们要的就是它了。

 
推荐文章
·FreeBSD系统终极安装手册(图)
·教你制作软盘上运行的FreeBSD系
·教你定制自己的压缩的FreeBSD内
·打造FreeBSD桌面系统
·FreeBSD6.0中cpu_switch调度机制
 

 
↑返回顶部   打印本页   关闭窗口↓  

Google
 
Web oldhand.org unixreference.net meshmea.org
相关分类
热点文章
·打造FreeBSD桌面系统
·FreeBSD服务器的安装与
·FreeBSD系统安装配置之
·FreeBSD系统终极安装手
·教你制作软盘上运行的Fr
·FreeBSD系统安装与配置
·FreeBSD服务器的安装与
·FreeBSD,实实在在的选
相关文章
·让FreeBSD更安全
·配置基于ADSL的防火墙
·OpenBSD内核编译和优化
·FreeBSD服务器的安装与
·FreeBSD服务器的安装与
·FreeBSD上用IP Filter进
·FreeBSD,实实在在的选
·打造FreeBSD桌面系统
更多...
 
 

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