首页 | Linux 基础 | 资讯动态 | Linux 应用 | Linux 服务器 | Linux 开发 | Linux 安全 | 专题 | 联盟论坛
  当前位置:主页>Linux 应用>linux技巧应用>文章内容
制作软盘上运行的FreeBSD系统
来源:www.unix5.com 作者:riechelr_hl 发布时间:2007-08-01  

bsd# cd /sys/i386/conf
bsd# config MINI
bsd# cd ../../compile/MINI
bsd# make depend && make kernel

编译完成后就会成生kernel这个文件,这时它的体积还是比较大,不过现在不用管它,后面将会介绍怎么样处理它。

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 $
bsd# ln -s ./crunch1 reboot
bsd# ln -s ./crunch1 sysctl
bsd# ln -s ./crunch1 ifconfig
bsd# ln -s ./crunch1 route
bsd# ln -s ./crunch1 ping
bsd# ln -s ./crunch1 dmesg
bsd# cd /mnt/bin
bsd# ln -s ../sbin/crunch1 sh                            # sh必须在/mnt/bin目录中
bsd# ln -s ../sbin/crunch1 hostname
bsd# ln -s ../sbin/crunch1 cp
bsd# ln -s ../sbin/crunch1 rm
bsd# ln -s ../sbin/crunch1 ls
bsd# ln -s ../sbin/crunch1 cat
bsd# ln -s ../sbin/crunch1 test
bsd# ln -s ../sbin/crunch1 mkdir
bsd# ln -s ../sbin/crunch1 less
bsd# ln -s ../sbin/crunch1 uname
bsd# ln -s ../sbin/crunch1 more
6、编写启动脚本
因为我们的系统只是为了测试在软盘上运行FreeBSD,因而这里的启动脚本非常简单只是让系统可以工作,没有做其它的工作,其内容如下:
#!/bin/sh
# Floppy BSD init script

PATH=/sbin:/bin
HOME=/
export PATH HOME

echo
echo "Hello, it's my Floppy BSD"
echo

# 因为没有使用登录验证,所以这里只是简单的一直运行shell
while : ; do
/bin/sh
done

7、建立设备文件
现在需要建立一些基本的设备文件,我们使用/dev/MAKEDEV来完成这些操作:

bsd# cd /mnt/dev
bsd# cp /dev/MAKEDEV .
bsd#./MAKEDEV std # 建立标准设备
bsd# rm MAKEDEV

8、最后工作
到目前为止,我们的启动部分,Kernel和内存磁盘都已经准备好了,下面就开始整合它们了。
因为init启动的时候会查找login class中的daemon这个类别,如果没有则会出现错误提示,为了使init不报错,我们还需要复制/etc/login.conf到/mnt/etc中:

bsd# cp /etc/login.conf /mnt/etc/login.conf
因为loader支持直接加载gzip压缩格式的文件,这为我们节约磁空提供了方便,同时也解决了我们空间不够的问题,现在压缩kernel和内存磁盘bsd:
bsd# cd /root
bsd# cp /sys/compile/MINI/kernel .
bsd# gzip -9 kernel                                                # 使用最大压缩率,将生成文件kernel.gz
bsd# umount /mnt
bsd# gzip -9 bsd                                                    # 使用最大压缩率,将生成文件bsd.gz
然后编辑loader的配制文件:
bsd# cd /fd/boot
bsd# vi loader.rc
输入:
load kernel
load -t mfs_root bsd                                    # 表示将bsd.gz以md的方式加载,并且成为root device
共5页: 上一页 [1] [2] 3 [4] [5] 下一页
 
如果您对本文有任何疑问或者建议,请到论坛讨论区发表您的意见: >> 论坛入口
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
  热点文章
·MBR如果被覆盖了怎麽办?
·linux应用技巧集囊(新手遍)
·Linux操作系统Gaim玩转QQ与MSN--
·shell编程技巧
·简述 Linux 文件系统的目录结构
·提高Linux系统性能,加速网络应用
·优化Linux系统服务器硬盘实用技
·Linux操作系统下设置NFS共享讲解
·Linux 的带宽管理系统
·通过Linux系统引导CD排除服务器
·Linux系统下查CPU个数的方法
·精彩分享:Linux系统下使用aMsn
  相关文章
·提高Linux系统性能,加速网络应用
·Linux操作系统下设置NFS共享讲解
·用Linux操作系统构建的路由器--
·如何找回删除Linux后的Windows启
·实用技巧:Linux操作系统文件链
·Linux操作系统Gaim玩转QQ与MSN--
·实用技巧:“禁用”Linux终端输
·Linux系统下查CPU个数的方法
·Linux操作系统下网络互访管理软
·Linux系统强大的控制台、终端和s
·Linux下Apache并发连接数和带宽
·优化Linux系统服务器硬盘实用技

本站信息源至:互联网络,均为学习,交流所用,如有版权问题,请联系我们.
站长QQ:397422079 E_mail:riechelr_hl@unix5.com
转载本站内容请注明原作者名.谢谢!