Next Previous Contents

10. 雜項

所有不適合放在別處的相關信息都堆在這里。可能不相干,也可能大家不 感興趣,但還是放在這兒了。

10.1 向內核傳遞以太網參數

有兩個通用的內核命令可以在啟動時向內核傳遞以太網參數(etherreserve)。可以用LILO、loadlin或其它接受可選參數的啟動工具 完成該操作。

例如,如果命令為“blah”,希望接收3個參數(假定為123、456和789), 那么在使用LILO時就應該如下:

LILO: linux blah=123,456,789

要了解啟動時參數的更多信息(和完全的列表),請參見 BootPrompt-HOWTO

ether命令

ether=參數與直接構建在內核的驅動程序一起使用。ether=參 數對一個模塊化的驅動程序完全不起作用。它的最通用形式如下:

ether=IRQ,BASE_ADDR,PARAM_1,PARAM_2,NAME

所有的參數都是可選的。第一個非數字的參數被用做NAME。

IRQ: 很明顯。為“0”的IRQ值(一般為缺省值)意味著autoIRQ。首先設置IRQ 而不是base_addr是一個歷史性的巧合──無論在改變別的什么時都可以順 便改正這一點。

BASE_ADDR: 也很明顯。值為“0”(一般為缺省值)意味著探測以太網卡的網卡類型特 定的地址列表。

PARAM_1: 這開始是用來覆蓋WD80*3這樣的共享內存網卡的起始內存的值。有些驅動 程序使用該值的低4位來設置診斷信息級別。0 -- 缺省值,1-7 -- 級別1..7, (7是最完全的信息)8 -- 級別0(沒有信息)。另外,LANCE驅動程序使 用該值的低4位來選擇DMA通道。否則就使用auto-DMA。

PARAM_2: 3c503驅動程序使用它來選擇內部還是外部收發器。0 -- 缺省/內部,1 -- 外部AUI。Cabletron的E21XX網卡還使用PARAM_2的低4位來選擇輸出媒介。 否則就自動檢測。

NAME: 選擇該值所指的網絡設備。標准內核對附屬于總線的以太網卡使用名稱 “eth0”、“eth1”、“eth2”和“eth3”,對并口“袖珍”以太網適配 器使用“atp0”。arcnet驅動程序使用名稱“arc0”。可以使用這些LILO 參數明確設置基址來啟用多塊網卡。1.0內核把基于LANCE的以太網卡作為 特殊情況進行處理:LILO參數被忽略,LANCE網卡總是被分配為從“eth0” 開始的名稱“eth<n>”。附加的非LANCE網卡必須被明確指定為 “eth<n+1>”,并用諸如“ether=0,-1,eth0”的方式禁止通常的 “eth0”探測。(對,這是個Bug。)

reserve命令

這個緊接著的LILO命令用法與上面的“ether=”一樣,即附加在lilo.conf 里指定的啟動選擇名稱后面。

reserve=IO-base,extent{,IO-base,extent...}

在某些機器上,可能需要防止設備驅動程序在某個特定區域里檢查設備 (自動探測)。其原因可能是由于設計低劣的硬件使啟動凍結(如某 些以太網卡)、被錯誤識別的硬件、在較早的探測中狀態被改變的硬件、 或者僅僅是不想讓內核初始化硬件。

啟動時的參數reserve通過指定無需探測的I/O端口區域來解決這個問 題。該區域保留在內核的端口注冊表里,就象該區域里已經發現了一個設 備一樣。注意,這一機制在大多數機器上是不必要的。只有在有問題或特 定的情況下才有必要使用它。

指定區域里的I/O端口受到保護,不被設備探測影響。在某些驅動程序被 NE2000挂起,或其它設備被錯誤地識別為NE2000時使用這一方法。正確的 設備驅動程序不該探測一個保留區域,除非另一個啟動參數明確指定它這 么做。這隱含了reserve經常與其它啟動參數一起使用。因此,如果 指定了一個reserve區域來保護某個特定設備,通常就必須明確指定 對該設備的探測。大多數驅動程序在給定了明確地址后就忽略了端口注冊 表。

例如,啟動行

LILO: linux reserve=0x300,32 ether=0,0x300,eth0

使以太網卡驅動程序以外的所有設備驅動程序都不探測0x300-0x31f。

一般啟動時的參數限制是11個,因此每個reserve關鍵詞只能指定5個 保留區域。如果請求很復雜,可以使用多個reserve指令。

10.2 把以太網驅動程序作為模塊使用

現在大多數Linux發行版里的內核都只包含很少几個內建的驅動程序。驅動 程序都采用獨立的動態可加載模塊的形式提供。這些模塊化驅動程序通常 由管理員使用modprobe(8)命令載入,或者在某些情況下由內核通過 “kerneld”(在2.0版)或“kmod”(在2.1版)自動載入,然后調用 modprobe

你所用的發行版可能會提供良好的圖形配置工具來設置以太網模塊。如果 可能就先使用它們。下面描述了在這些花俏的配置程序下的信息,以及這 些程序改變了哪些東西。

控制使用哪些模塊和每個模塊提供哪些選項的信息一般保存在文件 /etc/conf.modules里。在這個文件里使用的兩個感興趣的主要 選項(對以太網卡而言)是aliasoptionsmodprobe命 令查閱該文件以了解模塊信息。

實際的模塊本身一般保存在名為/lib/modules/`uname -r`/net 的目錄下,其中uname -r命令給出內核的版本(如2.0.34)。你可以 在這里看看哪一個模塊與你的網卡匹配。

在你的conf.modules文件里首先需要的是告訴modprobe對于 eth0(和eth1以及......)網絡接口使用什么驅動程序。為此 要使用


alias

命令。例如,有一塊使用smc-ultra.o驅 動程序模塊的ISA SMC EtherEZ網卡,需要增加如下一行把該驅動程序 aliaseth0上:

        alias eth0 smc-ultra

其次,可能需要一個options行來指出與某個特定模塊(或模塊別名) 一起使用哪些選項。還采用上面那個例子,如果只有一行alias而沒 有options行,內核會警告(參見dmesg)說自動探測ISA網卡不 好。要消除這個警告,需要增加另一行來告訴模塊網卡被配置在哪個I/O基 址上,比方說是16進制地址0x280

        options smc-ultra io=0x280

大多數ISA模塊在insmod命令行接受io=0x340irq=12這 樣的參數。提供這些參數以避免探測該網卡是必須的或至少是強 烈建議的。與PCI和EISA設備不同,對大多數ISA設備而言沒有真正安全的 自動探測方法,所以在把驅動程序作為模塊使用時應當避免自動探測。

每個模塊所接受的所有選項列表可以在以下文件中找到:

/usr/src/linux/Documentation/networking/net-modules.txt

推荐閱讀該文件以了解對你的特定網卡可以使用哪些選項。注意,對于單 個模塊能夠處理多個設備的模塊,有些支持用逗號分開的值列表,如所有 基于8390的驅動程序和PLIP驅動程序。例如:


        options 3c503 io=0x280,0x300,0x330,0x350 xcvr=0,1,0,1

上面就是一個模塊控制四塊3c503網卡,其中網卡2和4使用外部收發器。不 要在“=”或逗號周圍使用空格。

還要注意,一個忙的模塊不能被刪除。這也就是說在刪除模塊前需要 使用ifconfig eth0 down(關閉以太網卡)。

命令lsmod可以顯示哪些模塊被載入、它們是否正在被使用,而 rmmod可以刪除這些模塊。

10.3 相關文檔

本文檔的很多信息來自comp.os.linux新聞組保存的帖子,這表明該新聞組 是一個有價值的信息源。其它的有用信息來自Donald自己的一大堆小文件。 當然,如果你正在設置一塊以太網卡,你還要讀一下NET-2 Howto才能真正 配置好你要用的軟件。另外,如果你想做個黑客,你總能從驅動程序的源 碼里找到些有用的信息。在實際代碼開始之前,總有一到兩段描述關鍵點 的文字。

對于那些尋找不是Linux特有信息(如什么是10BaseT、什么是AUI、Hub是 干什么的等等)的人,我強烈推荐使用新聞組comp.dcom.lans.ethernetcomp.sys.ibm.pc.hardware.networking。那些在dejanews.com 上的新聞組檔案也是很有價值的信息源。你可以從以下URL的RTFM(保存所 有新聞組的FAQ)獲取新聞組的FAQ:

Usenet FAQs

你還可以在以下URL看一下可以說是“Ethernet-HomePage”的主頁:

Ethernet-HomePage

10.4 聲明與版權

本文檔是絕對真理。它可能是你所找到的最新的資料。除了你自己, 沒人會對你的硬件出現的問題負責。如果你的以太網卡或其它的硬件冒煙 的話(几乎不可能!),我們也不承擔任何責任。也就是說,本文作者不 對任何使用本文信息采取行動造成的損失負責。

Copyright (c) 1993-1997 本文的版權所有人為Paul Gortmaker。在保留 版權信息和本許可內容的條件下,本文檔允許任意復制和傳播。

在保留原始版權信息的條件下,允許復制和傳播本文檔修改后的版本﹔在 本許可內容不變的條件下,允許傳播所有依據本文檔推導出的結果。

在上述針對修改版本的條件下,允許復制和傳播本文檔的其它語言翻譯版 本。

對翻譯者的提示。首先,翻譯SGML源文件(可以用FTP從HowTo主站點獲得), 這樣可以生成其它的輸出格式。請注意保留一份翻譯的原始英文SGML源文 件!在發布更新后的HowTo時,獲取該版本的新SGML源文件,簡單地使用 diff -u old.sgml new.sgml就可以知道何處有變動,并把這些變動 放入你的翻譯版本,無需重新閱讀或重新翻譯全部內容。

如果你想在公開出版物中使用本文檔,請聯系本文作者(通過e-mail), 這樣可以獲得最新的資料。以前有些Linux HowTo的過時版本被公開出版, 使得開發者為一些在更新版本中已經回答過的問題飽受折磨。

10.5 結束語

如果你在本文檔中發現有錯別字或過時信息,請給我發e-mail。本文檔比 較大,所以很容易出現疏漏。如果你曾發e-mail要求改正,而在新版本中 依然沒改過來,請把改正要求再發一遍,可能你的上一封e-mail被我平時 收到的大量垃圾信件掩蓋了。

謝謝!

Paul Gortmaker, p_gortmaker@yahoo.com (戈紹男,isaac_ge@yahoo.com


Next Previous Contents