BOOTPARAM(7) | Linux Programmer's Manual | BOOTPARAM(7) |
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@yeah.net>
[中文版最新更新]¶
2000/11/06
《中國linux論壇man手冊頁翻譯計劃》:¶
跋¶
本頁面中文版由中文
man 手冊頁計劃提供。
中文 man
手冊頁計劃:https://github.com/man-pages-zh/manpages-zh
14 January 1995 | Linux 2.1.21 |