當前位置:編程學習大全網 - 源碼下載 - 本人剛接觸linux 哪個高手願意指點下嗎 留個QQ 謝謝了

本人剛接觸linux 哪個高手願意指點下嗎 留個QQ 謝謝了

這是來自 IBM developerworks 的壹個非常好的文章可以清楚地解釋如何啟動火線和USB設備 Linux操作系統的原理。

希望它在對任何有興趣把Linux操作系統安裝到外部設備的人有所幫助。

原始的網址/developerwor...l-fireboot.html

從火線設備上啟動Linux

可移動驅動器上安裝Linux操作系統

難度等級:中等

Martyn Honeyford(martynh@uk.ibm.com) IBM英國實驗室 軟件工程師

宣可達(austin.dada@gmail.com)翻譯 webzi@linuxsir

2004年7月15日

2005年7月26日開始翻譯,7月28日完成。

翻譯經驗不多。如有不妥,歡迎EMAIL交流。

使用壹個外部驅動器是壹個極棒的方法,能給妳的老硬件帶來新生和讓妳在妳不能(或者不想)改變內置硬盤的計算機上使用Linux系統。

假設妳想使用Linux在壹個雙啟動環境,但是妳的計算機硬盤又沒有任何空余的空間。壹種解決方法是使用"live"的linux發行版本象是Knoppix,他們這能直接從CD啟動運行。 對於偶爾使用,這是壹種可行的辦法,但是它有若幹的劣勢:

*妳將會仍然需要些固定文件存儲。如果妳只是操作少量的文件,壹張1.44MB的磁盤就可以勝任,或者壹個USB閃存棒適合中等量的文件,但是這些都不夠理想。

*當使用壹個LiveCD 的時候,最困難、最糟糕、最不可能的是安裝妳自己的應用程序或者定制現存的程序。

*使用LiveCD在性能上的犧牲,在啟動初所有的設備檢測時尤為明顯,同樣發生使用中(所有的文件從 CD 載入通常是比從硬盤中載入慢的多)。

的確,還有其他可選方案。舉例來說,妳可以買額外的內置驅動器並且在此安裝Linux操作系統。但是常常,妳可能沒有任何空閑的擴展阜。(這特別容易發生在筆記本上,通常他們只允許壹個內置硬盤。)

或者,妳可以使用壹個較大的硬盤取代當前的硬盤, 獲得額外空間用於安裝 Linux操作系統。 然而,這的確是壹個耗費大量時間的方案,需要妳重新安裝現有的操作系統在新的硬盤, 重新安裝和配置妳所有應用程序, 和恢復所有數據。

更好的解決方案是購買壹個外置硬盤並安裝 Linux操作系統。 這樣使得妳在想使用Linux系統時候不必涉及現有的硬件和軟件而只是簡單連接外部驅動器。

可選的可移動設備

可用於安裝Linux操作系統設備涵蓋磁盤驅動器、USB-閃存設備、通過USB/火線連接的硬盤等等。

在壹個小容量的設備中安裝linux是可行的,例如在壹個1.44MB的磁盤或者壹個32MB的USB棒中,他們通常(必須)為特定目的定制,采用裁減的發行版本,例如,拯救中斷的安裝過程。

外置的硬盤在為使用壹個常規目的的linux系統提供最大的靈活性同時,帶來壹個合理的成本。

許多不同的廠商提供許多種不同容量的外置的驅動器。 (Maxtor, 西西部數據, 等等)。這些驅動器還會包含壹個外置盒子,用於固定標準的 3-1/2 寸或 2-1/2 寸 IDE 硬盤。 然後這些驅動器經由 USB 或 IEEE1394(火線) 連接到計算機。

USB 受到在二個主要的版本中的影響,1.1 和 2.0. 1.1 版速度為12 Mbit/ s(每秒1Mbit) ,而 2.0 版支持最高達到 480 Mbit/s 的傳輸速度。 大多數2.0相容的驅動器也向後兼容1.1,通常建議盡量不要采用1.1接口除非沒有其他的選擇(因為其低速不適應此環境。)

火線標準也定義若幹不同的速度, 實際上,大部分人所指的FireWire ,是“FireWire400”標準 ,支持最大傳輸速度為 400 Mbit/s 。

USB2.0和火線在速度上不分伯仲: 雖然 USB 2.0 有比較高的傳輸速度, 但是實際中因為協議的不同兩者速度十分的接近。 如果妳的計算機擁有2種接口, 最好使用USB而非火線(理由我將後將解釋), 但是如果只有火線接口,當然妳就選擇它了。為了實現最大的靈活性, 可以選擇眾多同時支持 USB 2.0 和火線的驅動器中的壹種。(像我稍後將在這壹個文章中使用的那個壹樣。)

對於那些沒有必須的接口, PCI(對於桌面) 和 PCMCIA(對於筆記本型電腦) ,現在火線和USB 2.0擴展卡也並非貴不可及: 舉例來說, 我稍後將在文章中提及PCMCIA火線擴展卡大約為10英鎊.($20 美元以下)

為了達到本文的目的,我已經購買 5-1/4寸外置驅動器的硬盤盒。 這是壹件非常靈活的硬盤盒,並沒提供驅動器而且能固定任何的標準 IDE 設備,包括 3-1/2 寸驅動器和像CD-RW/DVD-RW等5-1/4 寸 IDE 設備 。硬盤盒兼有 USB 2.0 和火線接口。

為了把硬盤盒連接到我的IBM Thinkpad T30筆記本電腦,我也購買了壹個 PCMCIA 火線轉接卡。 ( 因為內置的USB 接口只支持USB 1.1)

硬盤盒和火線轉接卡相對比較便宜。 (大約分別為50英鎊和10英鎊。)

測試期間, 我把壹個手邊閑置的13 GB 3-1/2 寸 IDE 硬盤放進硬盤盒——對於真實情況,我會買壹個較大的容量驅動器, 現在另購壹個硬盤相當低廉( 大約每個50英鎊!)

Linux 支持

正如妳所期待,linux對這些硬盤盒支持的確非常好。任何遵從SBP(串行總線協議)標準的大儲存設備在linux中使用非常簡單。

大體上, 使對這些裝置的支持妳能夠將會需要在妳的核心中支持某些選項( 或直接地編譯或通過模塊。)

對於USB和火線,SBP 裝置通過SCSI模擬來實現-- 也就是說,Linux會把他們當作SCSI硬盤來處理 。 這是在 Linux 世界裏面使用存儲設備的壹個常規方法。 ( 舉例來說, IDE CD/DVD設備通常通過SCSI模擬來連接)。基於以上原因,下列的選項需要被內核支持:

* SCSI support

* SCSI emulation

* SCSI disk support

除此之外,不同連接方式需要壹下的內核支持:

* 針對火線:

* IEEE1394 support

* OHCI1394 support

* RAW1394 support

* SBP-2 support

* 針對USB:

*(host-side) USB support

* OHCI support

* UHCI support

* USB mass-storage support

明顯地,妳還必須為其他的硬件 ( 如顯卡等等)編譯常規的支持, 而且可能需要壹些額外的模塊,取決妳的具體硬件。

舉例來說,我正在使用 PCMCIA(cardbus) 火線轉接卡,因此,我還需要增加:

* PCMCIA support

* cardbus support

安裝

現在我們有很完美外置驅動器,我們將開始安裝在其安裝Linux美妙之旅。

目前最簡單的安裝linux方法(當然僅個人意見) , 是連接妳的所有硬件;(我的情況是,插入火線轉接卡,連上轉接線盒驅動器,然後打開驅動器的電源) 然後從妳選擇的發行版安裝CD上啟動妳的計算機。

我采用的發行版是Gentoo(資源詳見鏈接),因此,我用了最新的 “通用”x86 LiveCD。 (2004.1) 其他的發行版本必須的步驟大致和此相似。

壹旦妳使用安裝CD啟動,要藉由壹點運氣讓他要辨認出妳的驅動器。 磁盤應該出現在/dev/sdX, X 是壹個小寫字母從“a”開始。 在我的系統上,外置硬盤被當做 /dev/sda, 但是如果妳有其他的 SCSI硬盤,這數字將會改變;( 或模擬了SCSI硬盤) 那種情況下,它可能是 /dev/sdb 或壹些其他的字母。 如果妳的驅動器不能被自動檢測到, 就需要進壹步采取措施 -- 舉例來說,妳可能必須打開啟動選項使用火線或者PCMCIA接口, 或妳可能必須手動裝載壹些內核模塊 , 或其他壹類選項。 (資源詳見故障發現與維修指導鏈接)

壹旦驅動器被辨認出來,安裝過程種其運作起來就像壹個內置的硬盤。然後就妳可以對其分區並且用常規方法安裝linux。

有壹句話我著重要提醒,小心選擇何處安裝boot loader(通常是GRUB和LILO)--我建議不要裝到主引導記錄(MBR)中( 通常是默認值) 而是裝到外置驅動器的根分區 ( 或/boot分區,如果妳單獨分了壹個話)。

既然我們已經安裝 Linux 在這個設備上,我們想要從上面啟動它。 事情到此開始變的有點復雜了。

啟動

在我前討論在如何的新驅動器上面啟動,我要講解壹些boot loader的小知識。

boot loader程序通常安裝在計算機的第壹個硬盤的MBR上。 當boot loader被調用 (BIOS自動地運行MBR裏的代碼),它通常顯示壹份可啟動操作系統的菜單。以便選擇壹個給定的操作系統啟動計算機。

兩件細節在這個章節中應該註意:

* 操作系統選擇菜單(通常)從磁盤中載入。

*為了啟動有關的操作系統, boot loader 需要從磁盤中讀取相關的內核。

在操作系統被裝載之前 ,以上各步驟已經執行,這意味著所有的磁盤讀取在BIOS調用時。 這是壹個必須的前提,即,為了直接啟動磁盤,妳的 BIOS必須支持通過火線或USB被連接的磁盤。通常能在BIOS中看到關於從這些設備上啟動選項。 火線BIOS支持現在的確非常的少見,但是 USB 支持正在變得相當的平常。 因此,如果妳正在使用壹部相對比較新的計算機上的USB接口,應該可以直接啟動驅動器進Linux。

當經由 USB 連接,在安裝外部的驅動器的 MBR 的幼蟲之後,我能夠直接地啟動它。 當以被連接的磁盤片啟動的時候,只是進入 BIOS 裝備公用程序。 外部的磁盤片將會出現如壹個壹般的硬盤: 移動它,如此它在啟動次序中的內在驅動器之前。

我也能夠在壹個內置的硬盤的MBR上安裝壹個boot loader而且使用其啟動USB硬盤(在GRUB中被成為hd1)。 如果妳正在使用火線, 有可能妳的 BIOS 將會無法直接地啟動硬盤,而且妳需要更多壹點步驟。

幸運的是,由於 Linux 的多樣性,這有非常容易解決,如果妳不能直接地啟動,( 我就是這樣的情況,使用壹個PCMCIA轉接卡!) 妳能運行初始啟動步驟,來自壹個支持的設備 , 像是壹臺軟驅,CD-ROM,USB棒,或在主硬盤上的小分區, 然後使用外部的驅動器繼續其他步驟。

創建壹個啟動鏡像

我們有2種方法啟動:

*單階啟動

內核啟動, 掛載根分區文件系統, 接著調用初始化教本繼續初始化( 通常是/sbin/init)

*雙階啟動 (initrd)的啟動

內核啟動,掛載壹個初始ram disk (initrd),進壹步運行定制的初始化, 然後掛載根分區文件系統繼續初始化(同樣, 通常調用/sbin/init)

每種方法都有它自己的優點和缺點。

單階啟動

為了要使用壹個單階的啟動,我們需要建立壹個內核包含掛載壹個根分區文件系統所需的所有驅動程序。( 任何其他的驅動能作為模塊編譯並在根分區載入時候進行常規初始化。)

如果我們正在從像軟盤這樣的壹個非常小的裝置嘗試啟動, 最好的方式是創建的壹個正合適內核,編譯進所有掛載根外部分區系統所需驅動 -- 而且編譯其他的作為模塊。 舉例來說,我的內核編譯進了SCSI支持, PCMCIA 支持, IEE1394 , SBP ,和其他相似的支持, 但是其他的(包括顯卡支持,網絡設備支持,等等)當做模塊編譯並儲存在根分區上(在外部的驅動器的),而不是存儲在軟盤上。

這種方法的主要問題是需要我們給內核源代碼打補丁-- 那是壹種最糟糕的痛苦(當新的內核發布),而真正的問題是如果補丁沒有在維護,這樣就不能跟上內核的變化。

妳可能以為如果計算機BIOS支持USB和火線直接啟動,我們能避免發生以上的2個問題。 不幸地,事情不是這樣:這壹個方法使用BIOS在啟動時調用磁盤,壹旦內核開始初始化, BIOS就失去了作用,而且使用內核驅動來調用磁盤-- 所以妳仍然會碰到同樣的問題。

二階啟動

內核2.0.X版本 ,添加了壹個有趣的功能到內核 -- 使用“initial RAM disk(初始內存磁盤)”(or initrd)來實現二階啟動。

簡言之,內核壹概既往的啟動;掛載壹個創建在內存裏迷妳的根分區文件系統取代掛載“真正”的根分區系統。 無論任何命令都在這個初始環境中執行在“真正”的根分區系統被掛載之前直到我們切換到真正的根分區文件系統並銷毀初始內存磁盤(initial RAM disk)。

這點在各種環境中都非常有用,但是我們的目標僅僅是簡單的利用我們的迷妳環境去重新掃描SCSI總線,等待外部驅動器識別,然後用它切換到我們真正的根而後繼續啟動。

使用這種方法,我們需要創建2個文件,壹個內核和壹個初始鏡像文件。

內核僅是壹個內建啟動鏡像(initrd)支持常規內核。 initrd 鏡像是壹個包涵我們迷妳根分區系統的環路(loopback)文件系統鏡像。 (該鏡像可以有選折地使用gzip壓縮來減小它的大小)。

妳能在資源章節裏找到關於如何創建和定制妳自己的初始鏡像的更多信息。

在鏡像文件裏,有壹個linuxrc的文件。當鏡像給載入時,該文件自動運行,所以請確定其有運行權限!為了達到我們的目的,linuxrc文件非常的簡單:

列舉 1. initrd linuxrc

#!/bin/sh

REAL_ROOT=/dev/sda1

# mount the /proc filesystem

mount -t proc none /proc

#for scsi-emulation (SCSI模擬)

# modprobe sd_mod

#for pcmcia (PCNCIA卡)

# modprobe pcmcia_core

#for FireWire (火線)

# modprobe ieee1394

# modprobe ohci1394

# modprobe raw1394

# modprobe sbp2

#for USB (USB)

# modprobe usbcore

# modprobe ohci-hcd

# modprobe uhci-hcd

# modprobe usb-storage

# loop rescanning the scsi bus + rerunning devfsd

retries=5

i=1

until [ -e $REAL_ROOT ]

do

if [ $i -gt $retries ]

then

echo "Unable to mount real root ($REAL_ROOT) - Giving up!"

/bin/ash

exit

fi

echo "Real root ($REAL_ROOT) not found, retrying ($i)"

sleep 1

echo "scsi add-single-device 0 0 0" > /proc/scsi/scsi

echo "scsi add-single-device 1 0 0" > /proc/scsi/scsi

echo "scsi add-single-device 2 0 0" > /proc/scsi/scsi

/bin/devfsd /dev -np

i=$((i+1))

done

#umount /proc as it will be remounted by the normal init process

(解除掛載/proc分區當它會給常規的INIT進程重新掛載)

umount /proc

#now we simply exit, and the normal boot process should continue

(現在我們可以退出了,常規的啟動進程將會繼續)

exit 0

我們正在做的是載入適當的模塊去支持外部驅動器: 請按需註視相應行。 (我把所有需要的支持編譯進內核,因此不需要模塊)。 然後循環, 再掃描 SCSI 總線 (回應壹個命令到/proc虛擬文件系統下壹個特別文件並調用devfsd程序) 直到根分區設備出現(我的情況是/dev/sda1 )。在我的情況,被訪問的火線模擬SCSI總線是1 0 0,但是並不影響嘗試部分其他的總線 -- 如果妳知道將會使用哪壹個,妳可以裁減這個教本。 同時, 如果妳有其他的 SCSI 設備 (或模擬 SCSI設備), 驅動器可能有壹個不同的字母。(例如,/dev/sdb1) 而且如果妳沒有使用外置驅動器上的第壹個分區, 妳將會需要使用壹個不同的數字。( 例如,/dev/sda2)

現在我們需要做的全部是復制相關的文件進initrd鏡像.( 妳能夠使用mount -o loop 命令掛載未壓縮的鏡像)尤其,我們需要確定我們有 linuxrc 文件、所有被用到的命令和其依賴的庫。 這個(未掛載的)鏡像可以有選折的壓縮。

復制內核 (bzImage) 和 initrd 鏡像 (initrd.gz)到磁盤。

最後的步是在磁盤上安裝壹個boot loader, 而且用下列的選項啟動內核: kernel bzImage root=/dev/sda1 initrd=initrd.gz.

妳現在應該可以使用磁盤來啟動了:它會從軟盤中載入內核,載入initrd鏡像入內存,然後從那裏繼續常規啟動。這點以後,磁盤就可以拿開了。

如果磁盤不合適 ( 例如,計算機沒有軟驅),任何設備在BIOS能用於啟動都可以使用。 個人而言,我就使用壹個小小的32MB的USB棒來達到這個目的。

參考資料:

http://www.linuxsir.org/bbs/showthread.php?t=211021

  • 上一篇:河南省委、省政府發出關於做好2022年元旦春運工作的通知。
  • 下一篇:壹對壹直播源碼開發需要哪些功能?
  • copyright 2024編程學習大全網