標籤:style blog class code java c
最近開始系統的學習電腦網路,買了被奉為經典中的經典《TCP/IP詳解 卷2:實現》。不過這本書確實也有點過時了,講解的是4.4BSD-Lite的代碼,和當前BSD發布版的代碼已經有很大差異了。根據在網路上搜尋的結果,FreeBSD-2.0、NetBSD-1.0和BSD/OS 2.0都是基於4.4BSD-Lite的,但是BSD/OS在當時是商業版,現在也沒有找到這個版本的原始碼。FreeBSD的i386架構的源碼,最接近的只有2.0.5版本的,2.0的不知道是沒有,還是已經丟失了。比較了FreeBSD-2.0.5、NetBSD-1.0的代碼和4.4BSD-Lite代碼的差異,FreeBSD的已經差異很大,NetBSD的則幾乎沒有差異!所以最後決定安裝NetBSD-1.0版本的系統。安裝的目的當然是為了能對系統的代碼進行修改並測試,只是看代碼而不能修改多沒意思啊^_^.
折騰了好幾天,最後終於是安裝成功並且核心的重編和更新也沒有問題了。簡單記錄下經過千辛萬苦得出來的步驟:
1.最開始直接用1.0版本的kcaha-10.fs/kcbt-10.fs進行安裝,但是這兩個安裝映像死活找不到核心檔案netbsd,查看過1.0的核心代碼,估計問題是出在開啟磁碟片和讀寫磁碟片的部分,不過核心代碼沒法編譯,在1.3版本的系統裡編譯也沒通過,最後只能無奈放棄這個安裝方式了。
2.開始的時候1.0版本的沒法安裝成功,所以就下載了往後的版本,最後確定1.3版本是最接近可以正確啟動安裝程式的版本。但是比對1.3版本的代碼和1.0的代碼後,發現1.3版本的網路代碼部分也已經改動了不少了,對查看原始碼不是很方便。嘗試過在1.3版本的系統下直接將核心檔案netbsd換成1.0版本的,不過最後系統沒法正常啟動。在1.3版本的系統下編譯1.0版本的核心代碼,也不是很順利。不過對1.3版本的安裝過程中,發現安裝程式只是將編譯好的應用和核心檔案直接解壓到硬碟上,然後做一些配置工作,之後就可以重啟並從硬碟引導安裝好的系統了。所以想到使用1.3版本的安裝程式,將1.0版本的系統解壓到硬碟上,應該可以將1.0版本的系統安裝成功。首次嘗試這個方法的時候,重啟之後從硬碟引導1.0版本的系統時,root檔案系統居然變成唯讀,其他檔案系統/usr、/var和/home都沒有mount成功。當時以為這個方法行不通,接著嘗試了其他的方式,也都沒有成功,最後又回到了這個方式上來,不過糊裡糊塗的解決了檔案系統掛載的問題後,一下子所有問題都迎刃而解了。
3.首先建立一個虛擬機器,需要帶有磁碟片和光碟片,磁碟片用於存放安裝程式,光碟片存放編譯好的應用和核心。當然,硬碟是必須要有的...
系統類別型選擇“Other”:
磁碟片使用的鏡像檔案就是NetBSD-1.3的啟動鏡像檔案boot.fs:
[[email protected] floppies]$ pwd/home/tortoise/Downloads/NetBSD-1.3/i386/installation/floppies[[email protected] floppies]$ bximage======================================================================== bximage Disk Image Creation Tool for Bochs $Id: bximage.c 11315 2012-08-05 18:13:38Z vruppert $========================================================================Do you want to create a floppy disk image or a hard disk image?Please type hd or fd. [hd] fdChoose the size of floppy disk image to create, in megabytes.Please type 0.16, 0.18, 0.32, 0.36, 0.72, 1.2, 1.44, 1.68, 1.72, or 2.88. [1.44] -- 這裡直接斷行符號I will create a floppy image with cyl=80 heads=2 sectors per track=18 total sectors=2880 total bytes=1474560What should I name the image?[a.img] boot.imgWriting: [] Done.I wrote 1474560 bytes to boot.img.The following line should appear in your bochsrc: floppya: image="boot.img", status=inserted[[email protected] floppies]$ dd if=boot.fs of=boot.img2880+0 records in2880+0 records out1474560 bytes (1.5 MB) copied, 0.0233093 s, 63.3 MB/s[[email protected] floppies]$
光碟片鏡像檔案包含的檔案清單如下:
[[email protected] bin]# ls -l /mnt/cdtotal 15550-r-xr-xr-x. 1 root root 6722031 May 7 19:55 base.tgz-r-xr-xr-x. 1 root root 4446591 May 7 19:57 comp.tgz-r-xr-xr-x. 1 root root 51083 May 7 19:56 etc.tgz-r-xr-xr-x. 1 root root 1074976 May 7 19:55 games.tgz-r-xr-xr-x. 1 root root 349556 May 7 19:59 kern.tgz-r-xr-xr-x. 1 root root 761644 May 7 19:56 man.tgz-r-xr-xr-x. 1 root root 1711013 May 7 19:56 misc.tgz-r-xr-xr-x. 1 root root 805086 May 7 19:57 text.tgz[[email protected] bin]#
除了kern.tgz外,其他的每個檔案都對應NetBSD-1.0/i386/binary下的一個目錄,檔案產生方式如下(以base.tgz檔案為例,其他檔案類似):
[[email protected] base10]$ pwd/home/tortoise/Downloads/NetBSD-1.0/i386/binary/base10[[email protected] base10]$ cat base10.* > base.tgz[[email protected] base10]$ tar -tzvf base.tgz | headdrwxr-xr-x root/wheel 0 1994-10-20 03:27 .drwxr-xr-x root/wheel 0 1994-10-20 03:03 ./altrootdrwxr-xr-x root/wheel 0 1994-10-20 03:10 ./bin-r-xr-xr-x bin/bin 40960 1994-10-20 03:10 ./bin/[-r-xr-xr-x bin/bin 40960 1994-10-20 03:08 ./bin/cat-r-xr-xr-x bin/bin 45056 1994-10-20 03:08 ./bin/chmod-r-xr-xr-x bin/bin 45056 1994-10-20 03:09 ./bin/cp-r-xr-xr-x bin/bin 200704 1994-10-20 03:09 ./bin/csh-r-xr-xr-x bin/bin 57344 1994-10-20 03:09 ./bin/date-r-xr-xr-x bin/bin 45056 1994-10-20 03:09 ./bin/dd[[email protected] base10]$
kern.tgz檔案是從NetBSD-1.0的啟動鏡像檔案kcaha-10.fs(kcbt-10.fs應該也可以,不過我沒試過這個檔案)裡把netbsd檔案抽取出來打包壓縮產生的:
[[email protected] floppies]$ pwd/home/tortoise/Downloads/NetBSD-1.0/i386/floppies[[email protected] floppies]$ bximage======================================================================== bximage Disk Image Creation Tool for Bochs $Id: bximage.c 11315 2012-08-05 18:13:38Z vruppert $========================================================================Do you want to create a floppy disk image or a hard disk image?Please type hd or fd. [hd] fdChoose the size of floppy disk image to create, in megabytes.Please type 0.16, 0.18, 0.32, 0.36, 0.72, 1.2, 1.44, 1.68, 1.72, or 2.88. [1.44] 1.2I will create a floppy image with cyl=80 heads=2 sectors per track=15 total sectors=2400 total bytes=1228800What should I name the image?[a.img] Writing: [] Done.I wrote 1228800 bytes to a.img.The following line should appear in your bochsrc: floppya: image="a.img", status=inserted[[email protected] floppies]$ dd if=kcaha-10.fs of=a.img2400+0 records in2400+0 records out1228800 bytes (1.2 MB) copied, 0.0181592 s, 67.7 MB/s[[email protected] floppies]$ sudo mount -o loop -r a.img /mnt/floppy[[email protected] floppies]$ ls -l /mnt/floppy/total 659drwxr-xr-x. 2 root root 512 Oct 24 1994 bin-rwxr-xr-x. 1 root root 2005 Oct 24 1994 copy_kerneldrwxr-xr-x. 2 root root 2560 Oct 24 1994 devdrwxr-xr-x. 2 root root 512 Oct 24 1994 mnt-rwxr-xr-x. 1 root root 659600 Oct 24 1994 netbsddrwxr-xr-x. 2 root root 512 Oct 24 1994 sbindrwxr-xr-x. 3 root root 512 Oct 24 1994 usr[[email protected] floppies]$ cp /mnt/floppy/netbsd ./[[email protected] floppies]$ tar -cvf kern.tar ./netbsd./netbsd[[email protected] floppies]$ gzip kern.tar[[email protected] floppies]$ mv kern.tar.gz kern.tgz[[email protected] floppies]$ tar -tzvf kern.tgz-rwxr-xr-x tortoise/tortoise 659600 2014-05-14 23:12 ./netbsd[[email protected] floppies]$
8個tgz檔案都建立好之後,放在同一個目錄下產生iso鏡像檔案:
[[email protected] bin]$ ls -ltotal 31468-rw-rw-r--. 1 tortoise tortoise 6722031 May 7 19:55 base.tgz-rw-rw-r--. 1 tortoise tortoise 4446591 May 7 19:57 comp.tgz-rw-rw-r--. 1 tortoise tortoise 51083 May 7 19:56 etc.tgz-rw-rw-r--. 1 tortoise tortoise 1074976 May 7 19:55 games.tgz-rw-rw-r--. 1 tortoise tortoise 349556 May 7 19:59 kern.tgz-rw-rw-r--. 1 tortoise tortoise 761644 May 7 19:56 man.tgz-rw-rw-r--. 1 tortoise tortoise 1711013 May 7 19:56 misc.tgz-rw-rw-r--. 1 tortoise tortoise 805086 May 7 19:57 text.tgz[[email protected] bin]$ mkisofs -o NetBSD-1.0-bin.iso *.tgzI: -input-charset not specified, using utf-8 (detected in locale settings) 62.91% done, estimate finish Wed May 14 23:19:53 2014Total translation table size: 0Total rockridge attributes bytes: 0Total directory bytes: 0Path table size(bytes): 10Max brk space used 07952 extents written (15 MB)[[email protected] bin]$
打包壓縮成tgz檔案格式,是為了符合NetBSD-1.3版本的安裝檔案格式要求。
4.啟動虛擬機器,開始安裝過程:
自訂硬碟的分區方式,
根分區使用2G空間,交換分區使用64M,為記憶體的兩倍,
根據硬碟的容量進行分區安排就可以了,
斷行符號之後就真正格式化硬碟了,
按斷行符號後即進入軟體包安轉介面,選者cdrom安裝方式,
按Ctrl-Z退出安裝進程,查看當前已掛載的裝置,將光碟片掛載到系統上(不掛載的話會一直找不到檔案):
進入掛載的目錄之後再使用fg命令回到安裝進程,這裡如果不cd進入光碟片的掛載目錄的話,好像會有問題,懶得去確認了,哈哈:
忽略報錯資訊,繼續:
檔案路徑和之前輸入的不一樣的,要不是強制加上的,要不就是有bug了,修改路徑後繼續:
再次忽略報錯資訊,繼續往下:
斷行符號之後就會將cdrom中的檔案解壓到硬碟上,
輸出資訊有點亂,直接斷行符號:
回到最開始的安裝介面了,這裡可以直接退出了。
把硬碟的分區都掛載到系統上,然後使用chroot命令跳轉到/mnt目錄下:
跳轉成功,進入/etc目錄下用 vi 修改 rc 檔案:
紅色方框內的就是需要修改的地方。按照實際的分區輸入分區掛載的命令,儲存之後退出vi。
先斷開磁碟片的串連,再reboot重啟系統:
NetBSD-1.0 登入成功!