- 論壇徽章:
- 0
|
輕松制作優(yōu)盤(pán)Linux
自網(wǎng)絡(luò) 時(shí)間:[color="#ff6600"]2004-12-8 發(fā)稿:[color="#ff6600"]admin 責(zé)編:[color="#ff6600"]admin 點(diǎn)擊:[color="#ff6600"]加載中...
科技進(jìn)步到今天,軟驅(qū)開(kāi)始慢慢退出市場(chǎng),取而代之的是優(yōu)盤(pán)。優(yōu)盤(pán)和軟盤(pán)相比,不但在容量上要大很多,而且在速度上也快了許多。以往建在軟盤(pán)上的Linux
由于受限于1.4MB的容量,所以多數(shù)被用來(lái)做小型路由器、防火墻之類(lèi)的應(yīng)用。而今天有了幾十MB、幾百M(fèi)B甚至上GB的優(yōu)盤(pán)后,就完全可以提供小型的
HTTP、郵件等需要更大存儲(chǔ)空間的服務(wù)了。想想看用戶(hù)只要把這個(gè)特制的優(yōu)盤(pán)插入電腦的USB接口,就可以啟動(dòng)一個(gè)小型的Linux系統(tǒng)。這個(gè)系統(tǒng)已經(jīng)有
了路由、HTTP和郵件等功能,只需快速設(shè)置一下IP等參數(shù)就可以開(kāi)始工作了。這就相當(dāng)于用戶(hù)隨身帶著一臺(tái)Linux服務(wù)器,方便極了。
要制作優(yōu)盤(pán)Linux,首先在硬件上要滿(mǎn)足以下條件:
1.優(yōu)盤(pán)帶有啟動(dòng)功能;
2.主板支持USB設(shè)備啟動(dòng)(如USBZip啟動(dòng))。
有了合適的硬件條件后,用戶(hù)就可以開(kāi)始動(dòng)手制作優(yōu)盤(pán)Linux了。以下所有工作都在Linux環(huán)境下完成,筆者的軟硬件環(huán)境如下:
軟件環(huán)境:Federa Linux 1.0,系統(tǒng)采用GRUB做引導(dǎo)程序;
硬件環(huán)境:P42.0GHz、主板Intel 845、內(nèi)存512MB、兩個(gè)80GB硬盤(pán)(hda、hdb)和帶啟動(dòng)功能的128MB優(yōu)盤(pán)。
下面就開(kāi)始介紹優(yōu)盤(pán)Linux的制作過(guò)程。
分區(qū)和格式化
首先,將已經(jīng)設(shè)置為帶啟動(dòng)功能的優(yōu)盤(pán)插入U(xiǎn)SB接口,使用下面的命令對(duì)其進(jìn)行分區(qū)和格式化:
# fdisk /dev/sda
其
中/dev/sda設(shè)備指用戶(hù)的優(yōu)盤(pán)。如果用戶(hù)的機(jī)器中還有其它的SCSI設(shè)備,那么可能是/dev/sdb等。用戶(hù)使用“fdisk”刪除優(yōu)盤(pán)原來(lái)的所
有分區(qū),并將128MB的空間都分成一個(gè)Linux基本分區(qū)。接下來(lái)用戶(hù)要將其格式化為Ext2文件系統(tǒng),可以使用以下命令:
# mkfs.ext2 /dev/sda1
安裝GRUB
有了已經(jīng)格式化好的Ext2的文件系統(tǒng),接下來(lái)用戶(hù)就可以在這個(gè)文件系統(tǒng)上安裝Linux的引導(dǎo)程序GRUB了。
首先,要將格式化好的優(yōu)盤(pán)上的文件系統(tǒng)掛載到當(dāng)前的Linux系統(tǒng)中。命令如下:
# mount /dev/sda1 /usb
接著,要建立GRUB所需要的目錄,并將當(dāng)前使用的Linux系統(tǒng)中的GRUB相關(guān)文件(/boot/grub/目錄下的stage1和stage2)復(fù)制到優(yōu)盤(pán)的/usb/boot/grub下。命令如下:
# mkdir /usb
# mkdir /usb/boot
# mkdir /usb/boot/grub
# cp /boot/grub/stage* /usb/boot/grub/
然后,使用“grub”命令將GRUB引導(dǎo)程序安裝在優(yōu)盤(pán)上。具體可以參考如下:
grub> root (hd2,0)
Filesystem type is ext2fs, partition type 0x83
grub> setup (hd2)
Checking if “/boot/grub/stage1” exists... yes
Checking if“/boot/grub/stage2”exists... yes
Checking if“/boot/grub/e2fs_stage1_5”exists... no
Running“install /boot/grub/stage1 (hd2) /boot/
grub/stage2 p /boot/grub/grub.conf”... succeeded
Done.
grub>quit
上面操作中的像“(hd2)”這樣的參數(shù)可能隨用戶(hù)機(jī)器的硬盤(pán)數(shù)量和分布情況的差異會(huì)有所不同。在安裝完GRUB后,還要對(duì)其進(jìn)行配置。用戶(hù)在優(yōu)盤(pán)的/usr/boot/grub目錄下創(chuàng)建grub.conf文件,命令如下:
# vi /usb/boot/grub/grub.conf
grub.conf文件的內(nèi)容如下:
default=0
timeout=10
title My USB Linux
root (hd0,0)
kernel /vmlinuz
保存退出,GRUB配置完成。此時(shí)可以測(cè)試用優(yōu)盤(pán)啟動(dòng)機(jī)器,會(huì)看到GRUB的啟動(dòng)畫(huà)面和選項(xiàng)“My USB Linux”了。
注意在測(cè)試優(yōu)盤(pán)啟動(dòng)時(shí),將兩個(gè)硬盤(pán)的電源線都要拔掉,因?yàn)樵谏厦娴膅rub.conf中設(shè)定的根分區(qū)是hd0。
編譯內(nèi)核
首
先用戶(hù)要根據(jù)用途考慮使用哪一個(gè)版本的內(nèi)核。比如要使用Iptables來(lái)建立防火墻,那就一定要選擇2.4以上的版本。但要記住,版本并不是越高越好。
選定內(nèi)核的版本后,從kernel.org上下載對(duì)應(yīng)的源碼。在動(dòng)手配置內(nèi)核之前,還要對(duì)內(nèi)核的源碼做一個(gè)小小的修改。從內(nèi)核的源碼樹(shù)中找到init目錄
下的do_mounts.c文件,請(qǐng)根據(jù)自己的源碼版本做類(lèi)似下面的修改:
* Allow the user to distinguish between failed open
* and bad superblock on root device.
*/
- printk (“VFS: Cannot open root device“%s”or %s”,
+ printk (“VFS: Cannot open root device“%s”or %s”,
retrying in 1 second.", root_device_name, kdevname (ROOT_DEV));
- printk (“Please append a correct “root=”boot option”);
- panic(“VFS: Unable to mount root fs on %s”,
- kdevname(ROOT_DEV));
+ printk (“You may need to append a correct“root=”boot option”);
+ printk (“or wait for the root device to become ready.”);
+
+ /* wait 1 second and try again,
+ * allowing time for hubs/devices to become ready */
+ set_current_state(TASK_INTERRUPTIBLE);
+ schedule_timeout(HZ);
+ goto retry;
)
panic(“VFS: Unable to mount root fs on %s”, kdevname(ROOT_DEV));
做
這一步修改是考慮到,通常在Linux啟動(dòng)過(guò)程中,內(nèi)核解壓運(yùn)行完成后,會(huì)加載root分區(qū),然后執(zhí)行root分區(qū)上的init腳本。當(dāng)用戶(hù)使用硬盤(pán)時(shí),
硬盤(pán)的初始化速度很快。在內(nèi)核運(yùn)行完成之前,因?yàn)橛脖P(pán)已經(jīng)準(zhǔn)備就緒了,所以?xún)?nèi)核可以順利加載硬盤(pán)上的root分區(qū)。然而優(yōu)盤(pán)初始化速度要比硬盤(pán)慢多了。這
樣就會(huì)出現(xiàn)內(nèi)核啟動(dòng)完成后,因優(yōu)盤(pán)還沒(méi)有完成初始化而導(dǎo)致root分區(qū)無(wú)法被加載的現(xiàn)象。所以要想使用優(yōu)盤(pán)啟動(dòng)Linux就需要延長(zhǎng)內(nèi)核加載root分區(qū)
的等待時(shí)間,辦法就是對(duì)系統(tǒng)內(nèi)核初始化代碼do_mounts.c作類(lèi)似上面的修改。
當(dāng)然還有其它的解決辦法,比如在內(nèi)核啟
動(dòng)時(shí),先將一個(gè)臨時(shí)的root分區(qū)設(shè)在RAM disk上,然后等待幾秒鐘,在優(yōu)盤(pán)差不多初始化完成后再繼續(xù)啟動(dòng)。這種方法就要選上對(duì)“RAM
disk”的支持,而且還要修改initrd.img文件等。所以除非用戶(hù)想同時(shí)用RAM
disk做一些其它的用途(如運(yùn)行特定程序或加載其它的驅(qū)動(dòng)),否則就不建議使用這種方法。
在完成源碼的修改后,就可以開(kāi)始配置內(nèi)核了。在配置過(guò)程中將所有需要的功能和驅(qū)動(dòng)都編譯進(jìn)內(nèi)核中去。注意要將一些不必要的模塊去掉,比如聲卡和顯卡驅(qū)動(dòng)等。還要特別注意對(duì)網(wǎng)絡(luò)方面的支持要廣泛一些,要盡量將可能遇到的網(wǎng)卡的驅(qū)動(dòng)編譯進(jìn)內(nèi)核。
常
見(jiàn)的USB芯片類(lèi)型有EHCI、OHCI和UHCI三種。因?yàn)閷?duì)于常見(jiàn)的PC機(jī)主板來(lái)說(shuō)一般使用的是UHCI芯片的USB控制器,所以在USB設(shè)備的配置
中,要對(duì)應(yīng)的選上對(duì)“UHCI Alternate Driver (JE) support”的支持。另外,還要選上“Preliminary
USB device filesystem”。因?yàn)樵贚inux中,優(yōu)盤(pán)等類(lèi)似設(shè)備都是被模擬成SCSI硬盤(pán)而進(jìn)行訪問(wèn)。以下是執(zhí)行“make
menuconfig”命令配置內(nèi)核時(shí)關(guān)于USB的選項(xiàng)實(shí)例,可供參考:
Support for USB
[ ] USB verbose debug messages
--- Miscellaneous USB options
Preliminary USB device filesystem
--- USB Host Controller Drivers
UHCI Alternate Driver (JE) support
OHCI (Compaq, iMacs, OPTi, SiS, ALi, ...) support
--- USB Device Class drivers
USB Mass Storage support
[ ] USB Mass Storage verbose debug
[ ] Freecom USB/ATAPI Bridge support
[ ] ISD-200 USB/ATA Bridge support
[ ] Microtech CompactFlash/SmartMedia support
細(xì)心完成內(nèi)核配置后,最后就是編譯內(nèi)核了。內(nèi)核的編譯方法大家應(yīng)該很熟悉了,通常是使用“make mrproper”、“make menuconfig”、“make dep”、“make clean”和“make bzImage”等指令來(lái)編譯。
編譯完成后,新的內(nèi)核就是arch/i386/boot/目錄中的bzImage文件,將其復(fù)制到優(yōu)盤(pán)上,命名如下:
# cp arch/i386/boot/bzImage /usb/vmlinuz
編譯成功的內(nèi)核通常不會(huì)超過(guò)1MB。在實(shí)際制作優(yōu)盤(pán)Linux的過(guò)程中,定制內(nèi)核是非常關(guān)鍵的。很多人失敗在這個(gè)地方。通常要多次嘗試,才能生成適合的內(nèi)核。
目錄和文件
內(nèi)核啟動(dòng)后,要加載root文件系統(tǒng)。在Linux中,root文件系統(tǒng)中包含了系統(tǒng)必須的目錄、設(shè)備文件、可執(zhí)行文件和配置文件等。
首先創(chuàng)建系統(tǒng)必需的目錄,示意如下:
# mkdir bin etc etc/rc.d proc tmp var dev mnt
# chmod 755 bin etc etc/rc.d tmp var dev mnt
# chmod 555 proc
接著要用“mknod”命令在dev目錄下建立一些基本的設(shè)備文件,不可從原系統(tǒng)/dev目錄中復(fù)制。具體請(qǐng)參考下列實(shí)例命令:
# cd dev
# mknod tty c 5 0
# mknod console c 5 1
# chmod 666 tty console
# mknod tty0 c 4 0
# chmod 666 tty0
# mknod ram0 b 1 0
# chmod 600 ram0
然
后生成一些常用命令和工具,比如sh、ls、cd和ifconfig等。用戶(hù)可以使用原來(lái)系統(tǒng)中的這些命令,不過(guò)要對(duì)應(yīng)地將其所用到的動(dòng)態(tài)連接庫(kù)也復(fù)制到
優(yōu)盤(pán)上,或者是重新進(jìn)行靜態(tài)編譯,然后將二進(jìn)制文件復(fù)制到優(yōu)盤(pán)上。這些過(guò)程都不輕松,如果想研究Linux,或者是想在優(yōu)盤(pán)Linux上使用Glibc的
話,可以自己動(dòng)手來(lái)做一下。對(duì)于大多數(shù)人,可以使用BusyBox工具箱來(lái)做這件事。BusyBox提供了一個(gè)很小的可執(zhí)行程序busybox。用戶(hù)通過(guò)
鏈接它可以為系統(tǒng)提供ls、rm、cp和init等多種命令。busybox的安裝過(guò)程很簡(jiǎn)單。在Fedora
Linux中已經(jīng)自帶,用戶(hù)也可以自行下載源碼來(lái)編譯安裝。安裝完后,可以將busybox產(chǎn)生的文件復(fù)制到優(yōu)盤(pán)中,具體可以參考其官方網(wǎng)站
http:// www.busybox.net上的說(shuō)明。
最后,還要建立一些配置文件,比如/etc/rc.d/inittab、/etc/rc.d/rc.sysinit和/etc/fstab等。下面是這幾個(gè)文件的簡(jiǎn)單實(shí)例,僅供參考:
1./etc/rc.d/inittab
::sysinit:/etc/rc.d/rc.sysinit
::askfirst:/bin/sh
2./etc/rc.d/rc.sysinit
#!/bin/sh
mount -a
3./etc/fstab
proc /proc proc defaults 0 0
完成上面這些工作之后,就可以測(cè)試這個(gè)小型的優(yōu)盤(pán)Linux了。
在
啟動(dòng)時(shí),先是GRUB引導(dǎo),接下來(lái)就是內(nèi)核解壓和初始化,然后調(diào)用/sbin/init,由init來(lái)調(diào)用/etc/inittab中的各種程序運(yùn)行(比
如加掛各種分區(qū)等),最后在console上啟動(dòng)一個(gè)Shell程序,這樣就完成了啟動(dòng)。如果在啟動(dòng)中遇到問(wèn)題,還要反復(fù)進(jìn)行修改和測(cè)試,這中間的過(guò)程就
要靠自己去摸索了。
優(yōu)盤(pán)Linux的應(yīng)用
創(chuàng)建和定制完Linux系統(tǒng)所需的目錄結(jié)構(gòu)和文件之后,就已經(jīng)完成了一個(gè)小型的Linux系統(tǒng)了。這個(gè)小型的Linux系統(tǒng)主要可以有以下幾個(gè)方面的應(yīng)用。
做為應(yīng)急盤(pán)
當(dāng)Linux系統(tǒng)故障時(shí),可以用這個(gè)優(yōu)盤(pán)啟動(dòng)系統(tǒng),然后將原系統(tǒng)的硬盤(pán)掛進(jìn)文件系統(tǒng),進(jìn)行診斷和修復(fù)。盤(pán)中可以放入一些常用的診斷工具和軟件。
提供應(yīng)用服務(wù)
此
時(shí)這個(gè)小型的Linux系統(tǒng)本身已經(jīng)可以提供路由和防火墻等功能了。不過(guò)用戶(hù)還可以加入其它的應(yīng)用服務(wù),這要視用戶(hù)自己的需要而定。比如一個(gè)Web開(kāi)發(fā)人
員,可以裝上MySQL、Apache、PHP和CVS等服務(wù)。這些服務(wù)可以先在其它的Linux上靜態(tài)編譯好,然后將其復(fù)制到優(yōu)盤(pán)上。
其它
優(yōu)盤(pán)還可以有其它的用途,比如作為密匙盤(pán),為L(zhǎng)inux的啟動(dòng)或應(yīng)用程序提供訪問(wèn)控制認(rèn)證等。(T111)
本文來(lái)自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u/2222/showart_1992356.html |
|