制作软盘上运行的FreeBSD系统 - 中国WEB开发者网络 (http://www.webasp.net) -- 技术教程 (http://www.webasp.net/article/) --- 制作软盘上运行的FreeBSD系统 (http://www.webasp.net/article/11/10070.htm) |
| -- 作者:未知 -- 发布日期: 2004-06-10 |
前言 1、FreeBSD的启动过程简介 2、初始化软盘 bsd# disklabel -r -w fd0a fd1440 接下来是安装引导程序。
bsd# disklabel -B fd0a 现在软盘已经能够引导了,但因为我们要在它上面放置程序,所以要创建文件系统。
bsd# newfs fd0a 刚才已经做好了引导程序,因为引导程序会加载/boot/loader,所以我们还需要将系统中的/boot/loader复制到软盘中。
bsd# mkdir /fd 根据FreeBSD的启动过程,现在我们已经准备好了引导程序和loader,接下来就要准备内核了。
bsd# mount /dev/fd0a /fd bsd# mkdir /fd/boot bsd# cp /boot/loader /fd/boot/loader 3、定制内核 下面是我使用的一个内核配制文件: #
# GENERIC -- Generic kernel configuration file for FreeBSD/i386 # # # $FreeBSD: src/sys/i386/conf/GENERIC,v 1.246.2.38 2002/01/25 17:41:40 murray Exp $ machine i386 cpu I386_CPU cpu I486_CPU cpu I586_CPU cpu I686_CPU ident "MINI-KERNEL" maxusers 0 #maxusers最好让系统自动分配,如果设得过大,会占用过多的内存。 options INET #InterNETworking device isa # Floppy drives # atkbdc0 controls both the keyboard and the PS/2 mouse device vga0 at isa? # syscons is the default console driver, resembling an SCO console # Floating point support - do not disable. # PCI Ethernet NICs that use the common MII bus controller code. # Pseudo devices - the number indicates how many units to allocate. 上面的内核基本上是一个系统要运行的最小配制了,当然如果你的机器不同具体也不同,大家按自己的情况来定,我的机器配制是: bsd# cd /sys/i386/conf 编译完成后就会成生kernel这个文件,这时它的体积还是比较大,不过现在不用管它,后面将会介绍如何处理它。
bsd# config MINI bsd# cd ../../compile/MINI bsd# make depend && make kernel 4、编译系统程序 # $FreeBSD: src/release/picobsd/router/crunch.conf,v 1.1.2.2 2001/02/20 02:53:35 luigi Exp $ 当编辑好crunch.conf之后,你就可以开始编译crunch了:
# # 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 # other sources # 以下为你所需要在crunch包含的程序列表,以空格分隔。 # ln是表示建立一个别名,如ln less more,表示当执行more的时候实际上是执行less # 以下是指定编译时需要的库 bsd# make
这时会生成一个名为crunch1的程序,我们要的就是它了。 5、建立内存磁盘大家可以看到crunch1加上我们刚才编译的内核和loader程序,已经超出了软盘的容量,同时为了加速程序的运行我们需要使用MD(内存磁盘)来解决这个问题,MD将作为系统的根文件系统和用来存放系统程序。对于内存磁盘的大小一般不易太大,因为这样会占用过多的内存,下面我们就以建立一个3M的内存磁盘为例说明如何建立内存磁盘: bsd# cd /root 接下来要做的就是建立目录结构,具体建立哪些目录这要视需要决定,本例中需要建立如下目录:
bsd# dd if=/dev/zero of=bsd bs=1k count=3072 # 生成一个3M的文件,用来做MD bsd# vnconfig -c -s labels vn0c bsd # 使用bsd来创建一个vn设置,以便在其中存放程序 bsd# disklabel -w -r vn0c auto # 建立disklabel bsd# disklabel -B vn0c # 安装启动代码 bsd# newfs vn0c # 创建UFS文件系统 bsd# mount /dev/vn0c /mnt # 将vn0c即bsd mount到/mnt bsd# mkdir /mnt/etc 然后将crunch1复制到/mnt/sbin中,再将刚才编译进crunch1中的那些命令分别做上symbol link:
bsd# mkdir /mnt/sbin bsd# mkdir /mnt/bin bsd# mkdir /mnt/dev bsd# cp /usr/src/release/picobsd/custom/crunch1/crunch1 /mnt/sbin 6、编写启动脚本bsd# cd /mnt/sbin bsd# ln -s ./crunch1 init # init必须在/mnt/sbin目录中 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 因为我们的系统只是为了测试在软盘上运行FreeBSD,因而这里的启动脚本非常简单只是让系统可以工作,没有做其它的工作,其内容如下: #!/bin/sh
# Floppy BSD init script PATH=/sbin:/bin echo # 因为没有使用登录验证,所以这里只是简单的一直运行shell 7、建立设备文件 bsd# cd /mnt/dev
bsd# cp /dev/MAKEDEV . bsd#./MAKEDEV std # 建立标准设备 bsd# rm MAKEDEV 8、最后工作 bsd# cp /etc/login.conf /mnt/etc/login.conf 因为loader支持直接加载gzip压缩格式的文件,这为我们节约磁空提供了方便,同时也解决了我们空间不够的问题,现在压缩kernel和内存磁盘bsd:
bsd# cd /root 然后编辑loader的配制文件:
bsd# cp /sys/compile/MINI/kernel . bsd# gzip -9 kernel # 使用最大压缩率,将生成文件kernel.gz bsd# umount /mnt bsd# gzip -9 bsd # 使用最大压缩率,将生成文件bsd.gz bsd# cd /fd/boot 输入:
bsd# vi loader.rc load kernel 存盘退出,将kernel.gz和bsd.gz复制到软盘中:
load -t mfs_root bsd # 表示将bsd.gz以md的方式加载,并且成为root device bsd# cd /root
bsd# cp kernel.gz /fd bsd# cp bsd.gz /fd bsd# umount /fd 现在用你的这张软盘就可以启动你的机器,如果一切正常的话,你将看到"Hello, it's my Floppy BSD"的提示,并且看到可爱的shell符"#"了,是不是很有满足感呢?:) 按照本文的步骤,我制作了一个例子,大家可以到这里下载:http://www.cnfug.org/tmp/flp-bsd.bin 使用方法请参照Floppy Firewall的使用方法。 这几天太累了,我现在得去睡觉了。 参考资料: |
| webasp.net |