製作軟盤上運行的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 |