From:http://blog.163.com/ninja_wk/blog/static/989155620073584237317/
在USB盤上打造自己的Linux發行版
前言;
我一直想做一個在隨身碟自己啟動和啟動並執行Linux系統,近來花費了一些功夫,初步做出了一個基本可以啟動並執行這樣的系統,現在記錄一下,一是供自己以後參考;二是與大家共同學習和切磋;三是為本論壇增加一點人氣。
1、我的製作環境;
先說硬體環境,只說與本系統製作可能有關係的:我的隨身碟是一個比較早期的朗科64M盤,主板晶片時一個Sis的早期版本。我想現在新的主板和新的隨身碟應該會比我的硬體具備更好的硬體相容性。我先把Bios裡面的啟動介質設定為USB-HDD,另外三種USB啟動方式在我這次中都不能成功啟動。
我的軟體環境,或者說我的作業系統是Sarge。
2、我的基本思路
誠然要做一個比較完善的實用系統,最好是在已經有的Linux發行版的基礎上進行加工和修改來做,比如說在Morphix、Knoppix、DSL等基礎上進行再加工,但是我做這個系統的主要目的時滿足自己的好奇心,另外也是作為學習的一種方式,所以我從更基礎的步驟開始,包括自己編譯核心、自己製作根目錄系統、自己進行各種配置等---當然最好能從自己編寫所有源碼的最基礎開始,但那是不可能的。
3、製作過程;
3.1、編譯核心;
具體的編譯過程就不說了,資料隨處可見,在這裡關鍵是注意為了使隨身碟啟動時能找到自己的根目錄系統,需要打一個補丁。關於這個補丁的詳情可見:
http://www.lammerts.org/software/kernelpatches/
由於這個補丁是針對核心2.4.22的,所以我專門下載了2.4.22版本的源碼---我不知道這個補丁是否對2.4核心的其他版本起作用,而針對2.6核心的補丁又有不同。
然後,解壓—打補丁—編譯—得到bzImage,不提。
3.2、製作根目錄系統;
製作根目錄系統的文章也很多,我這裡就不重複,值得注意的是:
3.21、由於現在使用的時隨身碟,空間較磁碟片寬鬆得多,所以我沒有使用busybox,而是從我自己工作的Sarge系統的bin sbin lib等目錄中直接拷貝需要的東西。
3.22、一般我們都使用initrd來分兩個階段啟動Linux,由initrd來掛載隨身碟上的檔案系統。不知道為什麼,我不喜歡這種方式。經過實驗證明,直接由grub或是syslinux來指定根目錄檔案系統是可行的。
3.23、現在我的根目錄裡面幾乎沒有什麼設定檔,連inittab fstab等都沒有,以後再改進吧。
3.3、處理隨身碟;
首先要使用fdisk cfdisk對隨身碟分區,我把我的隨身碟劃分為兩個區,第一個10M的boot區,第二個是50M的root區,注意將boot分區設定為可開機---在DOS下叫啟用吧。
然後要建立檔案系統,因為我對syslinux比對grub熟悉一些,所以我使用:
#mkdosfs /dev/sda1
#mke2fs /dev/sda2
將boot分區建立為FAT檔案系統而將root分區建立為ext2檔案系統---用grub應該不用這麼麻煩,待我下次再研究如何用grub來載入啟動隨身碟上的核心。
再然後就要這樣對隨身碟進行syslinux處理:
#syslinux /dev/sda
複製相關的檔案到隨身碟,在掛上相應的檔案系統之後,把前面編譯的核心bzImage複製到sda1,而把自己製作的根檔案系統複製到sda2。
最後編寫一個syslinux的設定檔並把它複製到sda1裡面。(實際上sda1裡面只有三個檔案,一是核心;一是syslinux系統檔案;一是下面的syslinux.cfg)
#nano syslinux.cfg
title myusb
kernel bzImage
root /dev/sda2
製作完成,現在啟動電腦就可以順利進入到我的隨身碟了---雖然核心在啟動的時候還會報告找不到root檔案系統,但是折騰了幾下之後,它就找到了並順利執行init,現在電腦上出現了:
init#
表示可以使用隨身碟Linux系統了。
但是這個系統還做不了什麼事情,需要對許多的設定檔進行建立,比如說現在的系統連用nano vi等編輯檔案都總報告”error opening terminal”的錯誤而退出,需要複製原來系統的/etc/terminfo/l/linux檔案才能正常運行。
我本來是想製作一個能運行Gcc+Rhide的小型C語言學習系統---就象當年用一張磁碟片,拷貝上Dos+TurboC 1.0就能到處學習C語言一樣,但現在事情看起來複雜得多,現在要安裝Gcc就很麻煩,還需要不斷的探索。