sourCEntral - mobile manpages

pdf

BOOTPARAM

NAME

bootparam − 介紹Linux核心的啟動參數

描敘

Linux 核心在啟動的時候可以接受指定的"命令行參數"或"啟動參數". 在通常情況下,由於核心有可能無法識別某些硬體, 或可能將某些硬體識別為不正確的配置,因此, 這些參數可以被用來提供正確的硬體配置參數。 當Linux核心被BIOS直接啟動的時候 (比如說你的核心是從使用了 "cp zImage /dev/fd0" 命令製造的 Linux 啟動軟碟來啟動的), 你無法指定任何的啟動參數。 因此,為了能夠指定啟動參數,你必須使用某些能夠傳遞啟動參數的軟體, 例如 LILO 或 Loadlin。 為了使用很少的參數來改變的核心配置, 可以使用 rdev,查看 rdev(8) 可以得到更多的細節。

由 Werner Almesberger 開發的 LILO 程式 (LInux LOader) 是最普遍的啟動配置軟體。 它能夠啟動各種不同的系統核心, 這些啟動配置信息被放置在一個簡單明了的純文字檔中 (請看 lilo(8)lilo.conf(5).)

LILO 可以啟動像 DOS,OS/2,Linux,FreeBSD,UnixWare 這樣的作業系統, 而且靈活性也非常強。

另外一個較為普遍的啟動軟體是"LoadLin"。這是一個基於 DOS 作業系統的軟體。 該軟體能夠從DOS提示符下啟動Linux核心(使用啟動參數), 只要某些必需的資源可用就行。 這對於那些希望從 DOS 系統中啟動 Linux 的人來說是很不錯的方法。

如果你的硬體能夠被 DOS 驅動程式啟用的話,LoadLin也會是非常有用的。 一個最常見的例子是設置與 SoundBlaster 相容的聲卡。 這些聲卡通過使用 DOS 驅動程式設定一些寄存器就可以將它們設置成為 SB 相容模式的聲卡。 在DOS下啟動這些聲卡的啟動程式,然後使用LoadLin程式啟動Linux, 這樣就可以避免由於重新啟動Linux系統而造成聲卡被重新設置。

參數列表

核心參數行被解析成為一個由空格分隔的字符串列表(即啟動參數表)。 大部分的啟動參數的格式就像下面這樣

名字[=值1],[值2]……[,值10]

其中"名字"是一個唯一關鍵字,被用來區分接受值(如果有的話)那一部分核心。 要注意的是 10 個值的限制是確實存在的, 目前的程式代碼只能對每個關鍵字處理 10 個逗號分隔的參數 (當然,在一些復雜的應用中, 你可以通過重新使用同樣的關鍵字來傳遞多於10個的參數, 只要配置程式可以支持該方法)

大部分的排序工作是在 linux/init/main.c 中進行的。 首先,核心檢查參數是否為 "root="、"nfsroot="、"nfsaddrs="、"ro"、"rw"、"debug" 和"init"這些特殊參數中的一種。這些參數的意義我們將在下面說明。

然後,核心會搜索"配置程式隊列"(bootsetups隊列) 來查看指定的參數字符串(比如"foo")是不是與某個配置指定設備 或是核心的配置程式建立了關聯。 例如假設你傳遞給核心 foo=3,4,5,6, 那麼核心會搜索 bootsetups 隊列看看"foo"是否已經注冊。 如果是,那麼核心將運行與"foo"關聯的配置程式(比如foo_setup()) 並且將參數3,4,5,6交給核心命令列。

任何像 "foo=bar" 這樣格式的參數不會被上面所說的那樣, 作為一個配置程式的關聯被接受,而是被解釋成為一個環境變量的設置。 一個(無用的?)例子就是使用 "TERM=vt100" 作為核心的啟動參數。

任何既不被核心接受又不被解釋為環境變量的參數會被傳送給第一個系統進程, 通常這會是init程式。最常用的傳遞給 init 進程的參數是 "single", 它告訴init使用單使用者模式啟動電腦,並且不要執行任何的守護進程。 查閱幫助,看看你所裝版本的 init 程式可以支持的參數。

一般的、與設備無關的啟動參數

‘init=...’
這個啟動參數提供核心執行時的初始化命令。如果它沒有被設置, 或者沒有被找到的話,核心會去嘗試調用 /etc/init, 然後是 /bin/init, 然後是 /sbin/init, 最後是 /bin/sh ,如果都失敗了,就會提示一個異常信息。

‘nfsaddrs=...’
該啟動參數設置 nfs(網路檔案系統)啟動地址為指定的字符串值。 該啟動地址被用於網路啟動中。

‘nfsroot=...’
該動參數設置 nfs(網路檔案系統)根目錄名為指定字符串。 如果該字符串不是以’/’、’,’或者一個數字開始的,則該字符串加上"/tftpboot/"的前綴。

‘no387’
(只有當CONFIG_BUGi386被定義後才有效) 某些 i387 協處理器在使用 32 位保護模式時會出現錯誤。 例如,一些早期的ULSI-387芯片在處理浮點運算時會出現死鎖的情況。 使用"no387"啟動參數可以讓Linux忽略你的算術協處理器的存在。 當然,這時你就必須將你的核心編譯成為支持數學仿真模式。

‘no-hlt’
(只有當CONFIG_BUGi386被定義後才有效) 某些早期的 i486DX-100 的處理器芯片在使用 "halt" 時會出現問題, 使用這個指令後它不會正常的返回到操作模式。 使用 "no-halt" 指令告訴 Linux 在沒有事情可做的時候, 只是執行一個無限的循環指令,而不是讓CPU進入"halt"模式。 這樣就可以令人們使用這些有缺陷的芯片來運行 Linux。

‘root=...’
這個參數告訴核心在啟動的時候使用哪個設備被作為根檔案系統。 其預設值是你在編譯核心的時候就所確定的根設備。 如果你想要修改該值,比如說,將第二個軟碟驅動器作為根設備, 你可以使用 "root=/dev/fd1" (根設備也可以用 rdev(8)); 來設置。

根設備能夠以符號形式或數字形式來指定。一種符號指定形式是 /dev/XXYN, 其中 XX 代表設備類型( "hd" 代表普通 IDE 硬碟,緊跟其後的 Y 的范圍是 "a" 到 "d"; "SD" 代表 SCSI 硬碟,緊跟其後的 Y 的范圍是 "a" 到 "e";"ad" 代表 Atari ACSI磁碟, 緊跟其後的 Y 的范圍是 "a" 到 "e";"ez" 代表 Syquest EZ135 相容的使用並口的可移動硬碟, 緊跟其後的 Y 的值只能是"a";"xd" 代表 XT 相容的磁碟,緊跟其後的 Y 的值是 "a" 或者是 "b";"fd" 代表軟驅,而 Y 代表軟驅的序號 - fd0 代表 DOS 的 "A:", fd1代表DOS的 "B:"),Y 表示驅動器字母或序號。N 代表驅動器的分區號 (以十進制數值表示,當然,軟驅是沒有該信息的)。 目前的核心可以使用更多的驅動設備, 比如 nfs,ram,scd,mcd,cdu535,aztcd,cm206cd,gscd,sbpcd,sonycd,bpcd, 其中大部分都是 CD-ROM 設備。 (nfs 指示網路啟動的位置;ram 表示一個 ram 虛擬磁碟(ram 表示可讀寫儲存器)。

需要注意的是以上這些指定對你檔案系統上的設備名稱並沒有做任何實質改變, "/dev/" 部分的描述只是出於傳統習慣。

你也可以通過使用數字形式的主/次設備號指定根設備, 但這是很笨拙和不方便的方法。 (例如,/dev/sda3 的主設備號是 8,次設備號是 3, 所以你也可以使用 "root=0x0803" 來指定根設備。)

‘ro’和‘rw’
"ro" 選項告訴核心使用"只讀"方式裝配檔案系統。 這樣可以讓"檔案一致性檢查"程式 (fsck程式,用來檢查磁碟的工具,類似 DOS 的 scandisk 程式) 能夠在一種所謂"靜止" (也就是說沒有任何對檔案系統的寫操作)的檔案系統中執行。 需要進行寫操作的進程必須等到該檔案系統使用 "讀/寫"方式重新裝配以後才能進行, 例如,使用了"mount -w -n -o remount /"命令。 (請查看 mount(8)。)

"rw" 選項告訴核心使用"可讀寫"方式裝配檔案系統。這是預設值。

只讀方式和可讀寫方式的選擇可以使用 rdev(8). 來設定。

‘reserve=...’
該參數用來設定保留區域,使得該區域的 I/O 端口不會被檢測。該命令的格式是

reserve=iobase,extent[,iobase,extent]...

在某些情況下你的機器也許必須避免設備驅動程式檢測 (自動檢測)某些指定區域的設備。 這些情況有可能是因為由於檢測會導致硬體錯誤,或者硬體會被錯誤地識別, 又或者你只是不想核心對該硬體進行初始化。

reserve(保留)啟動參數指定一個不要檢測的 I/O 端口保留區。 設備驅動程式不會檢測保留區域的 I/O 端口, 除非其他的啟動參數明確的指定需要去檢測。

例如,命令行

reserve=0x300,32 blah=0x300

表示設置保留 I/O 區域 0x300 到 0x31f(共32個端口) 不會被 ‘blah’ 程式以外的驅動程式所檢測。

‘mem=...’
PC 規範定義的返回記憶體數的 BIOS 調用最大可以返回 64MB 記憶體。 Linux 使用這個 BIOS 調用檢測機器安裝了多少記憶體。 如果你擁有超過 64MB 的記憶體,就可以使用這個參數告訴 Linux 你的記憶體數。 該值可以是 10 進制的或者是 16 進制的(加上 0x 的前綴), 延伸檔名也可以加上 "k" (乘以 1024)或 "M" (乘以 1048576)。 下面是 Linux 初始人 Linus 對 "mem=" 參數使用的聲明: "核心能夠接受任何你給予的 ’mem=xx’ 參數, 但是如果你欺騙它的話,它遲早會讓你死的很難看。 參數用來指定最高位的 RAM 地址,所以 ’mem=0x1000000’ 表示你擁有 16MB 的記憶體。 而對於96MB記憶體的機器來說你應該設置為 ’mem=0x6000000’。

注意注意注意:有些機器可能會將記憶體高端設置為 BIOS 所使用, 所以你可能將不能全部擁有 96MB 地址空間。 反之,有些芯片可以將包括 BIOS 的物理記憶體影射到記憶體高端去, 所以,你可以用的實際空間可能會是 96MB+384kB。 但是如果你告訴 Linux 核心你擁有的記憶體超出你的實際記憶體的話,將會發生很糟糕的事情。 也許躲得過初一,躲不過十五。"

‘panic=N’
在預設情況下,核心並不會在異常後重新啟動系統, 但是這個參數可以指定核心在發生異常後 N 秒後重新啟動(如果 N>0)。 這個異常時限也可以使用 "echo N>/proc/sys/kernel/panic" 來設定。

‘reboot=[warm|cold][,[bios|hard]]’
(只有當 CONFIG_BUGi386 被定義的時候該參數才起作用) 從 2.0.22 版本後的核心開始,reboot 命令在預設情況下使用冷啟動。 你可以使用 "reboot=warm" 來進行老版本所的預設的熱啟動方式。 (冷啟動意味著對所有的硬體設備進行重新設置, 但是也有可能令在磁碟緩沖區中尚未寫到磁碟上的數據被破壞。 熱啟動的優點是速度比較快。) 在預設情況下, 要求鍵盤控制器向機器發出可以重新啟動的低電位脈沖是很困難的, 但是至少有一種類型的主板不會這樣工作。 選項 "reboot=bios" 將用 BIOS 的設置代替跳線。

‘nosmp’ 和 ‘maxcpus=N’
(該參數只有當 __SMP__ 參數被定義的時候才有效) 命令行選項 "nosmp" 或 "maxcpus=0" 將會禁止激活 SMP(對稱多處理)功能, 選項 "maxcpus=N" 限制在 SMP 方式下工作的 CPU 最大數目為 N.

核心開發者所使用的啟動參數

‘debug’
核心信息被傳遞給核心的日誌守護進程 klogd 使得它們能夠被記錄在磁碟中。優先級高於 console_loglevel 的信息也可以在控制台上被顯示出來。 (如果想了解信息優先級,可以去查看<linux/kernel.h>檔案。) 在預設情況下,所有比調試信息級別高的信息都會被寫入日誌檔案。 但是這個啟動參數的設置,可以使得核心將 DEBUG(調試信息)級別的信息寫到日誌裏。 console loglevel 也能夠在系統運行時通過使用 klogd 來設置。 請看 klogd(8).

‘profile=N’
用來激活一個核心記錄程式。 如果你需要了解核心在什麼地方消耗其CPU周期,可以通過設置 prof_shift 為一個非零值來激活核心記錄程式。 可以通過在編譯核心的時候指定 CONFIG_PROFILE 值也可以通過 "profile=" 選項來指定 prof_shift 的值。 當 prof_shift 通過以上方式指定為 N,或通過 CONFIG_PROFILE_SHIT 的方式指定, 或者直接使用其預設值 2 的時候, 這個值表示記錄程式使用 prof_shift 個時間間隔進行記錄: 每個時間間隔是一個時鐘滴答。 當系統執行核心代碼的時候,一個記數器的值會不斷的增加。

profile[address >> prof_shift]++;

原始的配置檔案可以從 /proc/profile. 中讀到。或者你也可以使用像 readprofile.c 之類的工具來閱讀配置檔案。任何寫到 /proc/profile 中的操作將清除記數器。

‘swap=N1,N2,N3,N4,N5,N6,N7,N8’
設置控制核心的虛擬存儲交換算法的 8 個參數。這8個參數是 max_page_age, page_advance, page_decline, page_initial_age, age_cluster_fract, age_cluster_min, pageout_weight, bufferout_weight。 只能用於核心控制。

‘buff=N1,N2,N3,N4,N5,N6’
設置核心緩存管理的 6 個參數,分別是 max_buff_age, buff_advance, buff_decline, buff_initial_age, bufferout_weight, buffermem_grace。 同樣也只能用於核心控制

使用記憶體虛擬磁碟的啟動參數

(該參數只在核心使用 CONFIG_BLK_DEV_RAM 進行編譯後才有效) 在通常情況下,在 Linux 下使用一個記憶體虛擬磁碟(RAMDISK)並不是一個好的方法 - 因為系統會自動、高效的使用可用的記憶體。 但是當用軟碟啟動的時候(或者當建立一個啟動軟碟的時候), 將軟碟的內容讀到一個記憶體虛擬磁碟中是非常有用的。 另外的情況也有可能是有一些模塊(或者是檔案系統又或者是硬體的) 必須在主磁碟被訪問前被調到記憶體中來。

在 1.3.48 版本的 Linux 中,ramdisk 的操作被徹底的改變了。 在 1.3.48 以前的版本中,記憶體是靜態分配的,"ramdisk = N" 參數提供記憶體的大小。 (這些也能夠在核心被編譯的時候被設置,或者也可以使用 rdev(8).來進行設置) 從 1.3.48 開始,記憶體虛擬磁碟開始使用高速緩存,而且可以動態的增加其空間。 如果需要了解有關最新的記憶體虛擬磁碟設置(比如你要了解怎麼使用 rdev(8) 來進行ramdisk的設置) 請查看 /usr/src/linux/Documentation/ramdisk.txt.

有關的參數一共有四個,兩個是布爾變量,兩個是整型值。

‘load_ramdisk=N’
如果 N=1,載入一個記憶體虛擬磁碟。如果 N=0,不載入記憶體虛擬磁碟(這是預設值)。

‘prompt_ramdisk=N’
如果 N=1,需要提示插入軟碟。(這是預設值) 如果 N=0,沒有提示。(因此,這個參數永遠也不會需要)

‘ramdisk_size=N’ 或者 ‘ramdisk=N’
設置記憶體虛擬磁碟的最大空間為 N kB。預設值是 4096 kB (4MB)。

‘ramdisk_start=N’
設置啟動塊數值(也就是記憶體虛擬磁碟從軟碟的多少偏移量位置開始)為 N。 由於緊跟在記憶體虛擬磁碟後面的是核心映像檔案,所以這個設置是必要的。

‘noinitrd’
(只有核心在編譯時使用了 CONFIG_BLK_DEV_RAM 標誌和 CONFIG_BLK_DEV_INITRD 標誌時才會有效) 目前,我們基本上可以通過編譯核心使其支持使用初始化記憶體虛擬磁碟 (initrd:Initial Ramdisk)。當啟用 initrd 的時候, 啟動進程會載入核心和一個已經初始化的記憶體虛擬磁碟, 然後核心會將 initrd 轉變為一個"普通的"記憶體虛擬磁碟, 並將它激活為可讀寫的根設備。接下來,會被執行 /linuxrc, "真正的"根檔案系統被激活,而 initrd 檔案系統則被轉移到 /initrd 目錄下。 最後順序執行正常的啟動程式(比如說是 /sbin/init 程式)。 如果希望得到關於 initrd 的詳細的介紹,可以參考 /usr/src/linux/Documentation/initrd.txt.

自然,’noinitrd’ 參數告訴核心,儘管核心是按照使用 initrd 的參數來編譯的, 但是也不需要使用我們上面描述的過程。但是,仍然保留 initrd 的所有數據到 /dev/initrd. 目錄下。 (該設備只能被使用一次,數據在最後一個使用 initrd 的進程被關閉後會釋放掉) /dev/initrd.)

SCSI設備啟動參數

關於這個區域的一些符號說明:

iobase 第一個SCSI主設備佔用的I/O端口。它用 16 進制的數據指定,一般介於 0x200 到 0x3ff 之間。

irq SCSI 卡設置的硬體中斷號。具體的值取決於 SCSI 卡的具體要求, 一般使用的中斷號是 5,7,9,10,11,12 和 15。 其他的中斷號一般會被一些外設所佔用,比如說,IDE 接口的硬碟,軟碟驅動器,串口等等。

scsi-id SCSI 適配器在 SCSI 總線上使用的用來標識自身的識別號碼(ID)。 只有一部分 SCSI 適配器允許你改動該 ID 的值,大部分都是被固化好的。 預設值一般是 7,可是,在 Seagate 和Future Domain TMC-950 的板卡上是 6。

parity 是否允許 SCSI 適配器在交換數據的時候使用奇偶效驗。 指定一個非零值,奇偶效驗會起用,如果指定為零則不會啟動奇偶效驗。 同樣,不是所有的 SCSI 適配卡支持選擇奇偶效驗的啟動參數。

‘max_scsi_luns=...’
一個 SCSI 設備能夠使用一些包括它自己在內的"子設備"。 最常用的例子是現在的 SCSI CD-ROM 設備能夠同時處理多張光碟。 每張光碟使用"邏輯單元號碼"(LUN)來確定其位置。 當然,大部分設備,比如硬碟,磁帶機都只能處理一個設備,因此它們的 LUN 會被設置為 0 一些設計上有缺陷的 SCSI 設備一旦發現 LUN 號碼不為零時,就可能不再繼續工作。 因此,如果在編譯的時候沒有設置 CONFIG_SCSI_MULTI_LUN 標誌, 新的核心將使用 0 作為預設值。

如果需要在啟動的時候指定 LUN 的值,可以使用 "max_scsi_luns=n" 作為啟動參數, 而 n 是一個大於 1 小於 8 的數值。 為了避免上面描述的問題,使用 n=1 可以避免那些設備的造成的錯誤。

SCSI 磁帶配置
一些 SCSI 磁帶設備的啟動設置能夠使用下面的格式來進行:

st=buf_size[,write_threshold[,max_bufs]]

前面的兩個數字指定單元的大小(kB),預設的值 buf_size 是 32kB,最大的值可以指定為 16384kB。 write_threshold 是磁帶得到的緩存區大小,預設的是 30kB。 其最大的緩存值依據不同的驅動設備的個數而得到不同的值,預設值是兩個設備。 預設的格式可能像下面這樣

st=32,30,2

你能夠在核心原始碼的 scsi 目錄下的 README.st 中看到所有的細節。

Adaptec aha151x, aha152x, aic6260, aic6360, SB16-SCSI 配置
在這一句中 aha 數值代表適配卡類型,aic 數值表示適配卡的 SCSI 芯片類型, 也包括像 Soundblaster-16 這樣的 SCSI 設備。

SCSI 主設備探測程式將從已經安裝好的 BIOS 中進行查找, 如果沒有的話,該檢測將不會找到你的設備。 那麼,你就必須使用以下格式的啟動參數:

aha152x=iobase[,irq[,scsi-id[,reconnect[,parity]]]]

如果驅動程式是以調試模式編譯的話,第六個值能夠被指定設置調試的級別。

其他的參數已經在上面描述過了。值得一提的是 reconnect 參數如果是非零值就能夠允許設備"斷連和重新連接"。下面是一個例子。

aha152x=0x340,11,7,1

要注意到的是參數必須按指定的順序來設定, 這意味著如果你需要指定奇偶參數的話你就必須指定其他的所有參數。

Adaptec aha154x 配置
aha1542 系列的適配卡上有一個 i82077 軟碟控制器,aha1540 系列的卡沒有。 這種卡叫做總線主控卡,它們能夠通過參數的設置"合理"的與其他設備共享總線。 它們的啟動參數就像下面這樣:

aha1542=iobase[,buson,busoff[,dmaspeed]]

通常可用的 iobase 值會是 0x130,0x134,0x230,0x234,0x330,0x334 其中的一個。 相容的卡能夠允許使用其他值。

buson, busoff 值表示的是該卡佔用 ISA 總線的時間(以微秒計)。預設值是 11 微秒開,4 微秒關, 這樣其他的卡(比如說基於 ISA 總線的 LANCE 以太網卡)就能夠有機會訪問 ISA 總線。

dmaspeed 值代表直接存儲訪問 (DMA) 的傳輸速度 (以MB/秒為單位)。 預設值是 5MB/秒。 較新版本的卡允許你使用軟體設置來選擇該值,老版本的卡使用跳線來設置。 如果你的主板支持的話,你能夠將該值提高到 10MB/秒。 如果使用 5MB/秒以上的傳輸速度,你就應該進行很小心的實驗。

Adaptec aha274x, aha284x, aic7xxx 配置
這些板卡能夠接受像下面這樣格式的參數:

aic7xxx=extended,no_reset

extended 值,如果是非零的話,表明大容量磁碟的擴展轉換模式可以被使用。而 no_reset 值如果是非零的話,告訴驅動程式在設置 SCSI 卡後重新啟動時不要重新設置 SCSI 總線。

AdvanSys SCSI Hosts configuration (‘advansys=’)
AdvanSys 驅動程式能夠接收(最多) 4 個 I/O 地址用於來探測 AdvanSys SCSI 卡。 要注意的是這些值(如果使用了它們)並不會對 EISA 總線或者 PCI 總線的檢測有任何作用。 它們只能用來檢測 ISA 總線和 VLB 總線型的卡。 另外,如果驅動程式是使用調試模式編譯的話, 調試級別能夠通過加入一個 0xdeb[value] 參數來設定。 value 可以是 0-f(16進制),代表可以得到多達 16 個級別的調試信息。

AM53C974

AM53C974=host-scsi-id,target-scsi-id,max-rate,max-offset

BusLogic SCSI Hosts 配置 (‘BusLogic=’)

BusLogic=N1,N2,N3,N4,N5,S1,S2,...

作為更深層次的討論,我們來分析一下 BusLogic 命令行參數,參考一下 /usr/src/linux/drivers/scsi/BusLogic.c (在我看的核心版本中是3149-3270行). 下面的文字是一段精辟的摘錄

參數 N1-N5 是整數。參數 S1 是字符串。N1 是適配卡的 I/O 地址。 N2 是標記隊列深度(Tagged Queue Depth), 是為那些支持標記隊列(Tagged Queue)的目標設備而設置的。 N3 是總線停滯時間(以秒計), 這是表示從 SCSI 適配卡重新啟動 SCSI 總線到發出一個 SCSI 指令之間的時間。 N4 是區域選項(只適合特定的單個適配卡) N5 是全局選項(針對所有的適配卡)

字符串參數用來對於標記隊列控制 (TQ:Default,TQ:Enable,TQ:Disable,TQ:<Per-Target-Spec>), 出錯處理(ER:Default,ER:HardReset,ER:BusDeviceReset,ER:None,ER:<Per-Target-Spec>) 和適配卡檢測(NoProbe,NoProbeISA,NoProbePCI)。

EATA/DMA 配置
預設的需要檢測的 I/O 端口能夠使用以下的參數來改變:

eata=iobase,iobase,....

Future Domain TMC-16x0 配置

fdomain=iobase,irq[,adapter_id]

Great Valley Products (GVP) SCSI 控制器配置

gvp11=dma_transfer_bitmask

Future Domain TMC-8xx, TMC-950 配置

tmc8xx=mem_base,irq

在這裏, mem_base 值是卡所使用的記憶體映射的 I/O 區域值。 常見的值會是 0xc8000,0xca000,0xcc000,0xce000,0xdc000,0xde000。

IN2000 配置

in2000=S

這裏 S 是一個用逗號分隔的關鍵字 [:值] 可以被識別的關鍵字(有可能伴隨著值)是: ioport:addr, noreset, nosync:x, period:ns, disconnect:x,debug:x, proc:x. 如果你要了解這些參數的功能的話,請看 /usr/src/linux/drivers/scsi/in2000.c.

NCR5380 和 NCR53C400 配置
這個啟動參數遵循以下的格式

ncr5380=iobase,irq,dma

或者

ncr53c400=iobase,irq

如果卡沒有使用中斷,那麼 IRQ 值 255(0xff)將被用來屏蔽中斷。 IRQ 值 254 表示自動檢測,更多的細節可以從下面的文件中得到。 /usr/src/linux/drivers/scsi/README.g_NCR5380.

NCR53C8xx 配置

ncr53c8xx=S

這裏 S 是一個用逗號分隔的關鍵字 [:值] 可以被識別的關鍵字(有可能伴隨著值)是: mpar (master_parity), spar (scsi_parity),disc (disconnection), specf (special_features), ultra (ultra_scsi),fsn (force_sync_nego), tags (default_tags), sync (default_sync), verb (verbose), debug (debug), burst (burst_max). 如果需要了解這些值的功能,請參考 /usr/src/linux/drivers/scsi/ncr53c8xx.c.

NCR53c406a 配置

ncr53c406a=iobase[,irq[,fastpio]]

指定 irq = 0 適用於無中斷驅動模式。 設置 fastpio = 1 設置為快速的處理器 I/O(PIO)模式,0 是慢速的處理器 I/O(PIO)模式。

IOMEGA PPA3 配置

ppa=iobase[,speed_high[,speed_low[,nybble]]]

這裏 iobase 的值是並口的地址(預設值是 0x378), speed_high 是在數據處理時延遲時間(以微秒為單位,預設值是 1), speed_low 是端口其他狀態下的延遲時間(以微秒為單位,預設值是 6), nybble 是一個 BOOL 值,表示是不是強制使用半個字節(4個位)的工作模式, 預設值是"假"。 更多細節請參考 /usr/src/linux/drivers/scsi/README.ppa.

Pro Audio Spectrum 配置
PAS16 適配卡使用 NC5380 SCSI 芯片,較新的版本支持免跳線模式。啟動參數是下列格式:

pas16=iobase,irq

不同點是你可以指定 IRQ 的值是 255, 這樣你就可讓驅動程式不要使用中斷,當然這樣會降低性能。 通常 iobase 的值是0x388。

Seagate ST-0x 配置
如果你的卡沒有在啟動的時候被檢測到,你需要使用下面格式的啟動參數:

st0x=mem_base,irq

這裏 mem_base 值是卡所使用的記憶體映射的 I/O 區域值。 通常的值會是 0xc8000,0xca000,0xcc000,0xce000,0xdc000,0xde000。

Trantor T128 配置
這種卡也是使用 NCR5380 芯片組,並且接受以下的選項:

t128=mem_base,irq

mem_base 的值0xc8000,0xcc000,0xdc000,0xd8000。

UltraStor 14F/34F 配置
檢測出的預設的 I/O 端口列表能夠被

eata=iobase,iobase,....

所改變。

WD7000 配置

wd7000=irq,dma,iobase

Commodore Amiga A2091/590 SCSI 控制器配置

wd33c93=S

這裏 S 是一個用逗號分隔的字符串選項。 可以被識別的選項字是: nosync:bitmask, nodma:x, eriod:ns, disconnect:x, debug:x, clock:x, next. 詳細說明請參考 /usr/src/linux/drivers/scsi/wd33c93.c.

硬碟驅動器

IDE 硬碟驅動器/光驅驅動程式參數
IDE 驅動程式可以接受的參數有很多, 其范圍包括從磁碟規格到有缺陷的控制器芯片的支持。 指定驅動程式參數的同時需要使用 "hdX=" 的格式來指定驅動器。 X 的范圍是從 "a" 到 "h"。

非驅動器選項使用前綴 "hd=" 來指定。 注意如果將驅動器選項作用於非驅動器選項也可以工作, 而且選項也能夠像你所期望的那樣被應用。

同時還要注意到的是 "hd=" 格式也能夠用於按照規定的順序(從 a 到 h) 檢索到下一個沒有指定的驅動器。在下面的討論中,我們可以看到 "hd=" 選項將會被短暫的引用。 需要了解更多細節的話,參考 linux/drivers/block 目錄下的 README.ide

‘hd=cyls,heads,sects[,wpcom[,irq]]’ 選項
這些選項用來指定磁碟的物理參數。前面三個參數是必須的。 柱面/磁頭/磁道三個參數將被 fdisk 程式所使用。 如果是 IDE 的硬碟驅動器,"寫補償"值會被忽略掉。 指定的 IRQ 值是接口程式所使用的,所以其實並不能被稱為真正意義上的指定的驅動器參數。

‘hd=serialize’ 選項
具有雙 IDE 接口的 CMD-640 芯片在設計上是有缺陷的。 這個缺陷是當第二個接口與第一個接口被同時使用時,將會破壞你的數據。 使用這個選項能夠使你的接口永遠不會同時使用。

‘hd=dtc2278’選項
這個選項告訴驅動程式你擁有一個 DTC-2278D 的 IDE 接口。 驅動程式就會試圖使用 DTC 的指定操作來激活第二個接口並啟動快速傳送模式。

‘hd=noprobe’選項
不要檢測該硬碟驅動器。例如,

hdb=noprobe hdb=1166,7,17

將會屏蔽掉檢測,可是仍然指定了驅動器的物理參數, 因為這樣才能夠將驅動器登記成為一個有效的、可用的塊設備。

‘hd=nowerr’選項
一些驅動器具有 WRERR_STAT 位,並且永久有效。這個選項忽略該位。

‘hd=cdrom’選項
這個選項告訴 IDE 驅動程式有一個 ATAPI 相容的光碟驅動器。 在大部分情況下光碟驅動器會被自動的識別, 但是對於不能識別的光碟驅動器來說, 這個選項是很有用的。

標準的 ST-506 磁碟驅動程式參數 (‘hd=’)
標準的磁碟驅動程式可以接受磁碟的物理參數,就像上面的 IDE 設備那樣。 注意無論怎樣它都只希望接受三個參數(柱面/磁頭/磁道)-- 過多或過少的參數都會被忽略掉。 當然,它只接受 "hd=" 這樣的參數,像 "had=" 參數這樣的在這裏是無效的。下面是它的格式:

hd=cyls,heads,sects

如果裝有兩個磁碟驅動器,上面的工作需要重復的進行以配置第二個磁碟驅動器。

XT 磁碟驅動程式參數 (‘xd=’)
如果你不幸使用了一些些老掉牙的、8 位的和使用驚人的 125kB/s 傳輸速度的卡, 這些參數會對你有幫助。 如果它們不能被識別的話,你只能使用以下格式的啟動參數:

xd=type,irq,iobase,dma_chan

type 值指定該卡的製造廠商,下面是廠商的值及對應的名字: 0= 普通卡; 1=DTC; 2,3,4=Western Digital,5,6,7=Seagate; 8=OMTI. 同一廠家出廠的不同類型的卡的區別由 BIOS 字符串來指定,如果指定 type,這些也就沒有用了。

函數 xd_setup() 不檢查這些值,並且會假設你已經輸入了全部的四個值。 不要讓它失望。 這裏有一個 WD1002 控制器示範用法--假設 BIOS 被關掉/移走了--使用預設的 XT 控制參數

xd=2,5,0x320,3

Syquest’s EZ*可移動磁碟

ez=iobase[,irq[,rep[,nybble]]]

IBM MCA總線設備

請同時參考 /usr/src/linux/Documentation/mca.txt.

PS/2 ESDI hard disks
有可能按下面的方法在啟動時指定你所需要的磁碟物理參數。

ed=cyls,heads,sectors.

對於ThinkPad-720, 要加上下面的選項

tp720=1.

IBM Microchannel SCSI Subsystem 配置

ibmmcascsi=N

這裏 N 是子系統的pun (SCSI ID)

CD-ROMs (Non-SCSI/ATAPI/IDE)

Aztech 接口
語法是:

aztcd=iobase[,magic_number]

如果你設置 magic_number 值為0x79, 那麼該驅動程式嘗試在任何一個未知的固件上面執行。其他的值都會被忽略掉。

MicroSolutions ‘backpack’ 光驅接口
語法:

bpcd=iobase

CDU-31A 和 CDU-33A Sony 接口
這種光碟驅動器的接口會出現在一些 Pro Audio Spectrum 聲卡及 其他支持 Sony 驅動接口的卡上。語法是:

cdu31a=iobase,[irq[,is_pas_card]]

指定一個為 0 的 IRQ 告訴驅動程式該硬體不支持中斷(如一些 PAS 卡)。 如果你的卡支持中斷,就要使用它們,這樣可以減少驅動程式的 CPU 佔用時間。

對於 is_pas_card 選項來說,如果使用 Pro Audio Spectrum 的卡則應該輸入 "PAS",否則就不需要指定了。

CDU-535 Sony 接口
該光碟驅動器接口的語法如下

sonycd535=iobase[,irq]

如果你要指定 IRQ 值的話,0 可以被當成一個標誌位被填到 I/O 地址中。

GoldStar 接口
該光碟驅動器的接口語法是:

gscd=iobase

ISP16 光驅接口
語法:

isp16=[iobase[,irq[,dma[,type]]]]

(三個整數值,一個字符串)。如果 type 的值是 "noisp16" 的話,接口不會被配置。 其他可以被接受的 type 值包括: ‘Sanyo", ‘Sony’, ‘Panasonic’ 和 ‘Mitsumi’.

Mitsumi標準接口
這種光碟驅動器接口的語法是:

mcd=iobase,[irq[,wait_value]]

這裏 wait_value 被用來設置為內部故障的超時時間。能否實現還需要依靠在編譯時的定義而定。 Mitsumi FX400 是一種不使用 mcd 驅動程式的 IDE/ATAPI 光碟驅動器。.

Mitsumi XA/MultiSession接口
這是與我們上面介紹的一樣的硬體,只不過該驅動程式擁有更多的特性。 語法:

mcdx=iobase[,irq]

Optics Storage 接口
語法為:

optcd=iobase

Phillips CM206 接口
語法是:

cm206=[iobase][,irq]

該驅動程式會假定所給的 3 到 11 之間的值是設置的 IRQ 值, 數值在 0x300 到 0x370 之間的值是 I/O 端口號, 因此你可以指定一個,或者可以指定兩個,且沒有特殊的位置要求。 它也接受 "cm206=auto" 參數來實現自動檢測。

The Sanyo 接口
語法是:

sjcd=iobase[,irq[,dma_channel]]

SoundBlaster Pro 接口
語法是:

sbpcd=iobase,type

這裏 type 是下面這些字符串的一種(大小寫敏感的): ‘SoundBlaster’, ‘LaserMate’, 或 ‘SPEA’. I/O 地址是光碟驅動器接口的,並不是聲卡的一部分。

以太網路設備

不同的驅動程式使用不同的參數,但是至少它們都會要使用一個 IRQ,一個 I/O 端口地址, 一個名字。下面是最為普遍的參數設置格式:

ether=irq,iobase[,param_1[,...param_8]],name

第一個非數值的參數被作為名字使用。 param_n 的值(如果可以使用的話)對於不同的卡/驅動程式來說往往具有不同的含義。 典型的 param_n 的值用來指定像共享的記憶體地址,接口選擇,DMA 通道等等。

該參數最普遍的用法是強迫進行第二以太網卡的檢測。 因為作為預設的情況來說,核心只是檢測第一塊以太網卡。 下面是實現第二以太網卡檢測的簡單方法:

ether=0,0,eth1

注意這裏 IRQ 和 I/O 的值都是 0,這個表示值需要進行自動檢測。

以太網的 HowTo 檔案對於多網卡的使用,網卡/驅動程式的指定, param_n 數值的使用都有詳細的介紹。 有興趣的讀者可以參考該文件中對自己擁有的卡的說明。

軟碟驅動器驅動程式

軟碟驅動程式選項有很多,它們在 linux/drivers/block 目錄下的 README.fd 中列舉出來。 這些信息就是摘自那個檔案。

floppy=mask,allowed_drive_mask
設置允許進行掩碼設置的驅動程式將掩碼設置為 mask。 在預設情況下,只有每個軟碟控制器的 0 號和 1 號單元允許這樣做。 這樣規定的原因是有一些非標準的硬體(華碩的 PCI 主板)在訪問 2 號或者 3 號單元時, 會令鍵盤發生問題。該選項差不多已被 cmos 選項所取代了。

floppy=all_drives
為所有的軟碟驅動器設置驅動器掩碼。 如果你在一個軟碟控制器上擁有兩個驅動器的話,你就可以這麼做。

floppy=asus_pci
設置掩碼為只允許 0 號和 1 號單元。(預設值)

floppy=daring
告訴軟碟驅動程式你有一個比較好的軟碟控制器。 這樣的設置可以使你的設備運行得更加有效和順利, 但是對於某些特定的控制器,這可能會引起錯誤,也可能會加快某些操作的速度。

floppy=0,daring
告訴軟碟驅動程式你的軟碟控制器需要謹慎的運行。

floppy=one_fdc
告訴軟碟驅動程式你只有一個軟碟控制器。(預設值)

floppy=two_fdc or floppy=address,two_fdc
告訴軟碟驅動程式你擁有兩個軟碟控制器。第二個控制器假設位於 address 值。 如果 address 的值沒有給出的話,0x370 被當成假想位置。

floppy=thinkpad
告訴軟碟驅動程式你有一個 Thinkpad 電腦。Thinkpad 的磁碟變更線路與通常的機器相反。

floppy=0,thinkpad
告訴軟碟驅動程式你沒有一個 Thinkpad 電腦。

floppy=drive,type,cmos
設置 CMOS 的類型為 type 值。條件是驅動器在掩碼中被置"允許"。 如果你有兩個以上的軟碟驅動器(在實際的 CMOS 設置中只能設置兩個), 或者你的 BIOS 使用的是非標準的 CMOS 類型,這是非常有用的。 把前面兩個軟碟驅動器的 CMOS 設置為 0(預設值) 使得軟碟驅動程式從實際的 CMOS 設置中讀取它們的信息。

floppy=unexpected_interrupts
當接收到一個異常時顯示相應的消息。(預設行為)

floppy=no_unexpected_interrupts or floppy=L40SX
如果出現異常,也不要提示。IBM L40SX 在某些特定的顯示模式下需要這個選項。 (這看起來像是視頻和軟碟之間有某種交互關系。 異常中斷只會影響性能,所以能夠被安全的忽略)

聲卡驅動程式

聲卡驅動程式也能夠接受啟動參數來替代編譯時使用的值。 這種方法並不值得推薦,因為這樣會更復雜。 參數說明在 /linux/drivers/sound/Readme.Linux 檔案中描敘。它接受如下格式的啟動參數:

sound=device1[,device2[,device3...[,device10]]]

這裏每個 deviceN 是類似於 0xTaaaId 這樣格式的值,其中各字符表示為:

T - 設備類型: 1=FM, 2=SB, 3=PAS, 4=GUS, 5=MPU401, 6=SB16, 7=SB16-MPU401。

aaa - 16 進制的 I/O 地址。

I - 16 進制表示的中斷地址 。

d - DMA 通道號。

這樣的格式看起來是很混亂的,你最好在編譯的時候就使用你知道的值。 使用 "sound=0" 的參數將會完全屏蔽聲卡驅動程式。

ISDN 驅動程式

ICN ISDN 驅動程式
語法:

icn=iobase,membase,icn_id1,icn_id2

這裏 icn_id1 和 icn_id2 是兩個字符串,用來為核心消息提供卡的名字。

PCBIT ISDN 驅動程式
語法:

pcbit=membase1,irq1[,membase2,irq2]

這裏 membaseN 是第 N 塊卡其共享記憶體的地址,irqN 是第 N 塊卡的中斷值。 預設值是 IRQ 5 和記憶體地址 0xD0000。

Teles ISDN 驅動程式
語法:

teles=iobase,irq,membase,protocol,teles_id

這裏 iobase 是卡的 I/O 端口地址,membase,irq 的意義與上面的一樣, teles_id 是唯一的 ASCII 字符串標識。

串口驅動程式

RISCom/8 多串口驅動程式 (‘riscom8=’)
語法:

riscom=iobase1[,iobase2[,iobase3[,iobase4]]]

更多的細節請參考 /usr/src/linux/Documentation/riscom8.txt.

DigiBoard 驅動程式 (‘digi=’)
如果該選項被使用,則應該使用 6 個參數。 語法:

digi=status,type,altpin,numports,iobase,membase

參數可以是整數值,也可以是字符串值。 如果使用了字符串,則 iobase 和 membase 參數需要使用 16 進制的形式。 整型參數值按順序為: status (允許(1) 或屏蔽(0)該卡), type (PC/Xi(0), PC/Xe(1), PC/Xeve(2), PC/Xem(3)), altpin (允許(1)或屏蔽(0) alternate pin排列), numports (該卡的端口數目), iobase (該卡設置的I/O 端口號 (16進制)), membase (記憶體視窗的基地址(16進制)). 所以,下面兩個不同格式的參數形式其實是一樣的:

digi=E,PC/Xi,D,16,200,D0000
digi=1,0,0,16,0x200,851968

更多的細節請參考 /usr/src/linux/Documentation/digiboard.txt.

Baycom 串/並口無線 Modem
語法:

baycom=iobase,irq,modem

只有三個參數;如果有多張卡,就使用多個該命令。 modem 參數是一個字符串,值是 ser12,ser12*,par96,par96* 中的一個。 這裏 "*" 代表使用軟體 DCD。ser12 和 par96 用來選擇所支持的 modem 類型。 更多的細節請參考 /usr/src/linux/drivers/net/README.baycom.

Soundcard 無線 Modem 驅動程式
語法:

soundmodem=iobase,irq,dma[,dma2[,serio[,pario]]],0,mode

除了最後一個參數以外其他的都是整型值; 你可能注意到參數中有一個 0,需要該數值是因為在設置代碼中有一個錯誤。 模式參數是一個字符串,其語法是 hw:modem。 這裏 hw 是"sbc","wss","wssfdx" 中的一個值,modem 是 "afsk1200","fsk9600" 中的一個值。

列印驅動程式

‘lp=’
對於 1.3.75 版本以後的核心來說, 你可以告訴列印驅動程式你使用了或沒有使用哪個並行端口。 如果你不想讓列印驅動程式取得所有可用的並口,後者是非常有用的, 這樣其他的驅動程式(比如說 PLIP,PPA)就能夠使用那些端口。

參數的格式是多個 I/O 地址及 IRQ 對。舉例來說, lp=0x3bc,0,0x378,7 將使用位於 0x3bc 地址的端口, "無 IRQ" (輪詢 IRQ) 模式,然後使用位於 0x378 地址,IRQ 為 7 的端口。 位於地址 0x278 的端口(如果有的話)不會被檢測, 因為自動檢測模式只發生於沒有 "lp=" 參數的情況下。 如果需要屏蔽列印驅動程式的話,使用 lp=0 就可以實現。

WDT500/501驅動程式
語法:

wdt=io,irq

滑鼠驅動程式

‘bmouse=irq’
總線型滑鼠驅動程式只能接受一個參數,也就是該硬體需要的 IRQ 值。

‘msmouse=irq’
對於微軟相容滑鼠來說參數與前面總線滑鼠是一樣的。

ATARI滑鼠設置
atamouse=threshold[,y-threshold]

如果只有一個參數,該參數同時代表 x 起點坐標和 y 起點坐標。 如果有兩個參數,則第一個是 x 起點坐標,第二個是 y 起點坐標。 這些值必須是在 1 到 20 之間(包括 20);預設值是 2。

視頻設備

‘no-scroll’
該選項告訴控制台驅動程式不要使用硬體滾動模式 (滾動模式在將螢幕圖像移動到圖形儲存器中而不是移動數據時非常有效)。 一些 Braille 機器會需要它的。

作者

Linus Torvalds

參考

klogd(8), lilo.conf(5), lilo(8), mount(8), rdev(8).

該手冊頁的大部分內容來自 Paul Gortmaker 寫的 Boot Parameter HowTo(1.0.1)版本。 在該 HowTo 中還可以找到更多的有關信息。

[中文版維護人]

billpan <billpan AT yeah DOT net>

[中文版最新更新]

2000/11/06

《中國linux論壇man手冊頁翻譯計劃》:

http://cmpp.linuxforum.net

pdf