前言

大家可能见到过很多在软盘上运行的Linux系统,可在软盘上运行的FreeBSD反而比较少,虽然有PICOBSD,然而很多时候PICOBSD并不能满足我们的需要,那么可不能够自己制作一个在软盘上运行的FreeBSD系统呢?答案是肯定的。我在维护着一个Floppy Firewall的Project,他是个基于FreeBSD和IPFilter的运行在软盘上的防火墙系统,很多网友在使用了Floppy Firewall之后发邮件来询问如何使FreeBSD运行在一张小小的软盘上。但由于前段时间事情太多一直没有时间,今天终于找到时间,所以把制作在软盘上运行的FreeBSD的过程写出来和大家分享,由于时间仓促,文中难免有错误之处,还请大家指教。

1、FreeBSD的启动过程简介

当BIOS读入MBR之后,MBR中的程式读入硬盘FreeBSD Slice(FreeBSD分区)中的引导程式,引导程式默认情况下会加载/boot/loader,然后loader将加载/kernel,此时 kernel开始检测一些硬件和做一些初始化。初始化完成后kernel将mount root device,然后启动系统初始化进程/sbin/init,init将根据/etc/rc中的配置来进行初始化等。

能够看出我们需要解决的部分就是:引导程式 -> /boot/loader -> /kernel -> /sbin/init -> /etc/rc在了解了启动过程之后和问题所在之后,我们便能够开始制作软盘上的FreeBSD了。

2、初始化软盘

首先要做的就是要将软盘初始化,包括配置disklabel和创建文档系统(格式化成ufs格式)。

bsd# disklabel -r -w fd0a fd1440

接下来是安装引导程式。

bsd# disklabel -B fd0a

现在软盘已能够引导了,但因为我们要在他上面放置程式,所以要创建文档系统。

bsd# newfs fd0a

刚才已做好了引导程式,因为引导程式会加载/boot/loader,所以我们还需要将系统中的/boot/loader复制到软盘中。

bsd# mkdir /fd

            bsd# mount /dev/fd0a /fd

            bsd# mkdir /fd/boot

            bsd# cp /boot/loader /fd/boot/loader

根据FreeBSD的启动过程,现在我们已准备好了引导程式和loader,接下来就要准备内核了。

3、定制内核

软盘的空间有限,所以我们需要定制一个小内核,而不能直接使用系统原来的内核。由于我们只使用软盘,所以内核中的关于scsi、ata、atapi和raid等这些东西都应该删除,因为我们无需IPv6所以INET6也应该删除,具体留下些什么要看自己的用途了,这没有什么标准。但是有几样是必须的:

options MFS              # 内存文档系统支持

            options MD_ROOT      # 使用MD(内存磁盘)设备做root

            options UFS              # UFS文档系统支持

            options UFS_ROOT    # UFS ROOT

            pseudo-device md    # MD设备支持

下面是我使用的一个内核配制文档:

#

            # 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

            options                   FFS                   #Berkeley Fast Filesystem

            options                   FFS_ROOT             #FFS usable as root device [keep this!]

            options                   MFS                   #Memory Filesystem

            options                   MD_ROOT               #MD is a potential root device

            options                   COMPAT_43            #Compatible with BSD 4.3 [KEEP THIS!]

            options                   NO_SWAPPING      #Disable swap

            device                   isa

            device                   pci

            # Floppy drives

            device                   fdc0 at     isa?    port IO_FD1    irq 6   drq 2

            device                   fd0   at     fdc0   drive 0

            # atkbdc0 controls both the keyboard and the PS/2 mouse

            device                   atkbdc0   at    isa?   port   IO_KBD

            device                   atkbd0     at   atkbdc?   irq 1   flags 0x1

            device                   vga0        at    isa?

            # syscons is the default console driver, resembling an SCO console

            device                    sc0         at    isa?   flags 0x100

            # Floating point support - do not disable.

            device                   npx0        at    nexus?   port IO_NPX   irq 13

            # PCI Ethernet NICs that use the common MII bus controller code.

            # NOTE: Be sure to keep the 'device miibus' line in order to use these NICs!

            device                    miibus       # MII bus support

            device                    fxp            # Intel EtherExpress PRO/100B (82557, 82558)

            device                    rl               # RealTek 8129/8139

            device                    xl              # 3Com 3c90x

            device                    lnc0

            at     isa?   port 0x280   irq 10   drq 0            # VMware Nic

            # Pseudo devices - the number indicates how many units to allocate.

            pseudo-device                    loop            # Network loopback

            pseudo-device                    ether          # Ethernet support

            pseudo-device                    md             # Memory "disks"

文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!