中間借用的工具也從開始用的VMWare換成了現在的qemu。
當然,不排除有優良的發行版本和更新的內核源碼和工具可以不再用自己DIY,以下只是講講我自己動手的經歷:
首先,要有一個可分區安裝linux的USB移動硬盤,理論上FLASH U盤也可以,SD/XD等閃存卡+讀卡器也可以,不過FLASH芯片的速度相對還是慢了些,實用程度遠沒有用移動硬盤高。這里還要提到移動硬盤最好是支持USB 2.0的,用的主板最好也如此,USB1.0和1.1的速度上,實用程度也很低。理論上用IEEE 1394火線接口的移動硬盤更快,只是我沒有條件試過。
再首先,移動硬盤的USB/IDE轉換板也有點講究,我先后試過的幾種移動硬盤轉接板中,以那種標有IBM的小板子的移動硬盤盒最差,就算是在Windows下,也經常有硬盤離線的情況發生,一般用那種整塊墊著硬盤的底板的移動硬盤盒不錯,最好就是單口就能供電啟動。
其次,準備一套發行版的Linux安裝光盤,當然,ISO文件也成,這里假設的當然是我們從Windows環境下開始,如果當前用的是linux,可能還不用那么麻煩。
第三、準備一套可用的虛擬機環境,如果不在乎盜版或是你己經為之合法地付費,那么首選VMWare,這幾乎是X86平臺下虛擬X86平臺的性能取好的虛擬機軟件了,虛擬速度幾乎達到1:1,如果一定要合法地使用軟件,那么就用qemu吧,去哪里下載,請自己找。
第四、把移動硬盤連接到Windows 宿主機上來,正確地認出來,這里假設當前宿主機只有一塊內部硬盤,移動硬盤是唯一連接的一個移動存儲設備。正確地配置虛擬機,把移動硬盤(在Windows下,第二塊硬盤的設備文件是\\.\PhysicalDrive1)完全交給虛擬機作為主要硬盤,VMWare下,通過向導你可以建立一個vmdk文件,但是僅僅是指明,這個虛擬硬盤就是宿主機上的移動硬盤,這都可以在GUI下實現。在Qemu下,指明將移動硬盤作為虛擬機的命令是:
qemu.exe -boot d -L . -m 256 -hda \\.\PhysicalDrive1 -cdrom d:\CDIMGS\FC-i386-CD1.ISO -localtime
這里我不想太多去討論虛擬機的使用,否則就變成虛擬機操作的經驗之談了,這里最后只提一個小提示,使用qemu的話,安裝kqemu可以得到相當程度的性能提高。
總而言之,我們建立一臺使用USB硬盤作為主硬盤的虛擬機,并從光盤上引導或是從光盤鏡像文件上引導它,順利地安裝了一套運行在虛擬機上的發行版本的Linux,這里又僅以FC 5 Linux為實例了,其實發行版本其實也大同小異。
第五、確保安裝后運行在虛擬機中的Linux系統有完整的內核開發環境和內核源代碼。這里又要扯到虛擬機的使用上去了,不管用什么辦法,可能你需要安裝開發環境、下載內核源代碼的最近版本,可以正確地配置虛擬機直接上網下載、也可能利用宿主機下載后用FTP、Samba共享的辦法甚至做成光盤鏡像來讓虛擬機終于可以配置和編譯內核。
第六、開始配置新的內核,其中,重要的是要讓這個內核支持USB移動存儲驅動,而且還不能是內置在內核中,而是編譯成內核驅動模塊,由于存儲驅動模塊化,而又是引導時段需要的,因此,這個內核還必須支持引導過程的內存鏡像盤(initrd)。于是,需要配置的內核部分包括:
至少必須的文件系統支持:ext3、ext2,反正都有initrd了,就配成模塊方式。
至少必須支持的SCSI驅動:scsi、scsi-sd,這兩個被VMWare 的虛擬Buslogic SCSI控制器和USB Storage驅動所依賴,配置成模塊方式:
到少必須支持的USB驅動:usb支持、usb-storage即usb存儲驅動。還有必須的uhci_hcd(基于intel系列芯片及VIA系列的的USB 1.0/1.1總線控制器)、ohci_hcd(基于AMD、nForce、ALI等兼容芯片的USB 1.0/1.1總線控制器)、ehci_hcd(擴展的USB 2.0總線控制器)。都配置模塊方式。
至少必須支持的塊設備:LoopBack Device Support,模塊方式/內核方式都可以,2.4版本的內核使用Loop設備的方式來存放initrd鏡像。 Ram disk支持,這個是必須,并且要編譯在內核里。還有最重要的是Initrd的支持,需要編譯到內核中,2.6的內核配置中,intitrd - Initial RAM filesystem and RAM disk (initramfs/initrd) support放在內核的General setup之下。
其它的部分,都可以按需定制。配置了內核之后,不外就是編譯內核與內核模塊、安裝復制內核模塊、安裝新的內核。這些和通常的定制linux內核大同小異。把新的內核安裝到當前系統上,并且加入到GRUB的選項中(這里又是假設了,假設當前使用的是GRUB作為Boot loader,至于LILO、syslinux這些,也是大同小異)。