ARCnet¶
注意
如果您像我們中的許多人一樣,沒有得到 ARCnet 卡的手冊,請參閱本目錄中的 ARCnet 硬體 以獲取跳線設定和電纜連線資訊。
既然沒有人聽我的,也許一首詩會引起你的注意
This driver's getting fat and beefy,
But my cat is still named Fifi.
嗯,我想我可以稱它為一首詩,即使只有兩行。嘿,我是計算機科學專業的,不是英語專業的。饒了我吧。
關鍵是:如果你測試了這個並讓它工作了,我真的真的真的真的真的想聽到你的訊息。或者如果你沒有。或者任何事情。
ARCnet 0.32 ALPHA 首次進入 Linux 核心 1.1.80 - 這很好,但之後甚至更少的人開始寫信給我,因為他們甚至不必安裝補丁。 <嘆息>
拜託,做一個紳士!給我發一份成功報告!
(嘿,這甚至比我原來的詩更好...這變得糟糕了!)
警告
如果你不盡快透過電子郵件告訴我你的成功/失敗,我可能會被迫開始唱歌。我們不希望那樣,對吧?
(你知道,可能會有人認為我過於強調這一點了。如果你這麼認為,為什麼不在一封簡短的電子郵件中抨擊我呢?請同時包括您使用的卡型別、軟體、網路規模以及它是否正常工作。)
我的電子郵件地址是:apenwarr@worldvisions.ca
這些是 Linux 的 ARCnet 驅動程式。
這個新版本 (2.91) 由 David Woodhouse <dwmw2@infradead.org> 整理而成,旨在新增對另一個晶片組的支援後整理驅動程式。現在,通用支援已與各個晶片組驅動程式分離,並且原始檔不再包含那麼多 #ifdefs!我對這個檔案做了一些修改,但保留了 Avery 的第一人稱視角,因為我不想完全重寫它。
之前的版本是我(Avery Pennarun)經過幾個月的斷斷續續的努力,以及來自其他人的許多錯誤報告/修復和建議,特別是來自 Tomasz Motylewski 的大量投入和編碼的結果。從 ARCnet 2.10 ALPHA 開始,Tomasz 全新改進的 RFC1051 支援已包含在內,並且似乎執行良好!
我在哪裡討論這些驅動程式?¶
Tomasz 非常友善地建立了一個新的改進的郵件列表。透過傳送帶有正文“subscribe linux-arcnet 你的真實姓名”的訊息到 listserv@tichy.ch.uj.edu.pl 來訂閱。然後,要向列表提交訊息,請傳送郵件至 linux-arcnet@tichy.ch.uj.edu.pl。
郵件列表的存檔位於
linux-net@vger.kernel.org(現在已失效,已替換為 netdev@vger.kernel.org)上的人也以非常樂於助人而聞名,尤其是在我們談論可能一開始就無法正常工作的 ALPHA Linux 核心時。
其他驅動程式和資訊¶
您可以訪問我在全球資訊網上的 ARCNET 頁面:
此外,SMC(生產 ARCnet 卡的公司之一)有一個您可能感興趣的網站,其中包括各種卡的驅動程式,包括 ARCnet。試試
Performance Technologies 製造各種支援 ARCnet 的網路軟體
http://www.perftech.com/ 或 ftp 到 ftp.perftech.com。
Novell 為 DOS 製作了一個網路協議棧,其中包括 ARCnet 驅動程式。嘗試 FTP 到 ftp.novell.com。
您可以從 oak.oakland.edu:/simtel/msdos/pktdrvr 獲取 Crynwr 資料包驅動程式集合(包括 arcether.com,您希望與 ARCnet 卡一起使用的那個)。但是,如果沒有補丁,它在 386+ 上無法完美執行,並且也不喜歡某些卡。固定版本可在我的 WWW 頁面上找到,或者如果您沒有 WWW 訪問許可權,可以透過電子郵件獲取。
安裝驅動程式¶
您需要做的就是安裝驅動程式
make config
(be sure to choose ARCnet in the network devices
and at least one chipset driver.)
make clean
make zImage
如果您獲得此 ARCnet 軟體包作為當前核心中 ARCnet 驅動程式的升級,您需要首先將 arcnet.c 複製到 linux/drivers/net 目錄中的那個。
如果您重新啟動到新的 Linux 核心時收到一些 ARCnet 訊息,您將知道驅動程式已正確安裝。
有四個晶片組選項
標準 ARCnet COM90xx 晶片組。
這是普通的 ARCnet 卡,您可能已經有了。這是唯一的晶片組驅動程式,如果未告知卡的位置,它將自動探測。它遵循命令列上的選項
com90xx=[<io>[,<irq>[,<shmem>]]][,<name>] | <name>
如果將晶片組支援作為模組載入,則選項為
io=<io> irq=<irq> shmem=<shmem> device=<name>
要停用自動探測,只需在核心命令列上指定“com90xx=”。要單獨指定名稱,但允許自動探測,只需輸入“com90xx=<name>”
ARCnet COM20020 晶片組。
這是來自 SMC 的新晶片組,支援混雜模式(資料包嗅探)、額外的診斷資訊等。不幸的是,沒有明智的方法可以自動探測這些卡。您必須在核心命令列上指定 I/O 地址。
命令列選項是
com20020=<io>[,<irq>[,<node_ID>[,backplane[,CKP[,timeout]]]]][,name]
如果將晶片組支援作為模組載入,則選項為
io=<io> irq=<irq> node=<node_ID> backplane=<backplane> clock=<CKP>
timeout=<timeout> device=<name>
COM20020 晶片組允許您在軟體中設定節點 ID,從而覆蓋預設值,預設值仍然在卡上的 DIP 開關中設定。如果您沒有 COM20020 資料表,並且您不知道其他三個選項指的是什麼,那麼它們不會讓您感興趣 - 忘記它們。
IO 對映模式下的 ARCnet COM90xx 晶片組。
這也適用於普通的 ARCnet 卡,但不使用共享記憶體。它的效能不如上面的驅動程式,但以防萬一您的卡不支援共享記憶體,或者(奇怪的是)您的機器中有太多 ARCnet 卡而導致 shmem 插槽耗盡,因此提供此驅動程式。如果您沒有在核心命令列上給出 IO 地址,則驅動程式將找不到該卡。
命令列選項是
com90io=<io>[,<irq>][,<name>]
- 如果將晶片組支援作為模組載入,則選項為
io=<io> irq=<irq> device=<name>
ARCnet RIM I 卡。
這些是 _完全_ 記憶體對映的 COM90xx 晶片。對這些的支援未經測試。如果您有其中一個,請透過郵件將成功報告發送給作者。必須指定所有選項,裝置名稱除外。命令列選項
arcrimi=<shmem>,<irq>,<node_ID>[,<name>]
如果將晶片組支援作為模組載入,則選項為
shmem=<shmem> irq=<irq> node=<node_ID> device=<name>
可載入模組支援¶
配置並重新構建 Linux。當被問及時,如果您想使用可載入模組,請回答“m”以支援“通用 ARCnet 支援”和對您的 ARCnet 晶片組的支援。如果您願意,也可以對“通用 ARCnet 支援”說“y”,對晶片組支援說“m”。
make config
make clean
make zImage
make modules
如果您使用的是可載入模組,則需要使用 insmod 載入它,並且可以在命令列上指定卡的各種特性。(在最新版本的驅動程式中,自動探測更加可靠並且可以作為模組工作,因此現在大部分都是不必要的。)
例如
cd /usr/src/linux/modules
insmod arcnet.o
insmod com90xx.o
insmod com20020.o io=0x2e0 device=eth1
使用驅動程式¶
如果您構建的核心包含 ARCnet COM90xx 支援,它應該在您啟動時自動探測您的卡。如果您使用編譯到核心中的不同晶片組驅動程式,則必須在核心命令列上給出必要的選項,如上所述。
閱讀 Linux 的 NET-2-HOWTO 和 ETHERNET-HOWTO;它們應該可以在您獲取此驅動程式的地方找到。將您的 ARCnet 視為一個增強型的(或降低型的,視情況而定)乙太網卡。
順便說一句,請務必將 HOWTO 中的所有引用從“eth0”更改為“arc0”。請記住,ARCnet 不是“真正的”乙太網,並且裝置名稱是不同的。
一臺計算機中的多張卡¶
Linux 現在對此有很好的支援,但由於我一直很忙,ARCnet 驅動程式在這方面受到了一些影響。如果編譯到核心中,COM90xx 支援將(嘗試)自動檢測所有已安裝的卡。
如果您有其他卡,並且支援已編譯到核心中,那麼您可以簡單地重複核心命令列上的選項,例如
LILO: linux com20020=0x2e0 com20020=0x380 com90io=0x260
如果您將晶片組支援構建為可載入模組,則需要執行以下操作
insmod -o arc0 com90xx
insmod -o arc1 com20020 io=0x2e0
insmod -o arc2 com90xx
ARCnet 驅動程式現在會自動整理它們的名稱。
我如何讓它與...一起工作?¶
- NFS
linux->linux 應該沒問題,只需假裝您正在使用乙太網卡。 oak.oakland.edu:/simtel/msdos/nfs 有一些不錯的 DOS 客戶端。還有一個基於 DOS 的 NFS 伺服器,稱為 SOSS。它沒有像 Linux 那樣進行多工處理(實際上,它根本沒有進行多工處理),但你永遠不知道你可能需要什麼。
對於 AmiTCP(可能還有其他),您可能需要在 Amiga nfstab 中設定以下選項:MD 1024 MR 1024 MW 1024(感謝 Christian Gottschling <ferksy@indigo.tng.oche.de> 提供此資訊。)
可能這些指的是最大 NFS 資料/讀取/寫入塊大小。我不知道為什麼 Amiga 上的預設值不起作用;如果您知道更多,請寫信給我。
- DOS
如果您正在使用免費軟體 arcether.com,您可能需要從我的網頁安裝驅動程式補丁。它可以幫助 PC/TCP,並且如果 arcether 在初始化期間超時太快,也可以讓 arcether 載入。事實上,如果您在 386+ 上使用它,您真的需要這個補丁。
- Windows
參見 DOS :) Trumpet Winsock 可以與 Novell 或 Arcether 客戶端一起正常工作,前提是您記得載入 winpkt。
- LAN Manager 和 Windows for Workgroups
這些程式使用的協議與 Internet 標準不相容。他們試圖假裝這些卡是乙太網卡,並混淆網路上的其他人。
但是,Linux ARCnet 驅動程式 v2.00 及更高版本透過“arc0e”裝置支援此協議。有關更多資訊,請參見“多協議支援”部分。
使用適用於 Linux 的免費軟體 Samba 伺服器和客戶端,您現在可以與基於 TCP/IP 的 WfWg 或 Lan Manager 網路很好地連線。
- Windows 95
Win95 包含的工具允許您使用 LANMAN 風格的網路驅動程式 (NDIS) 或 Novell 驅動程式 (ODI) 來處理您的 ARCnet 資料包。如果您使用 ODI,則需要將“arc0”裝置與 Linux 一起使用。如果您使用 NDIS,請嘗試“arc0e”裝置。如果您需要 arc0e,您完全瘋了,並且/或者您需要構建某種使用兩種封裝型別的混合網路,請參見下面的“多協議支援”部分。
- OS/2
我被告知它可以在 Warp Connect 下使用來自 SMC 的 ARCnet 驅動程式工作。您需要為此使用“arc0e”介面。如果您讓 SMC 驅動程式與“普通”Warp Bonus Pack 中包含的 TCP/IP 一起工作,請告訴我。
ftp.microsoft.com 也有一個免費軟體“Lan Manager for OS/2”客戶端,它應該使用與 WfWg 相同的協議。但是,我無法在 Warp 下安裝它。請透過郵件將任何結果傳送給我。
- NetBSD/AmiTCP
這些使用舊版本的 Internet 標準 ARCnet 協議 (RFC1051),該協議與使用 arc0s 裝置的 Linux 驅動程式 v2.10 ALPHA 及更高版本相容。(請參見下面的“多協議 ARCnet”。)** 較新版本的 NetBSD 顯然支援 RFC1201。
使用多協議 ARCnet¶
ARCnet 驅動程式 v2.10 ALPHA 在其自己的“虛擬網路裝置”上支援三種協議
arc0
RFC1201 協議,官方 Internet 標準,恰好與 Novell 的 TRXNET 驅動程式 100% 相容。ARCnet 驅動程式 1.00 版 _僅_ 支援此協議。 arc0 是三種協議中最快的(無論出於何種原因),並且允許使用更大的資料包,因為它支援 RFC1201“資料包拆分”操作。除非您有特定需要使用其他協議,否則我強烈建議您堅持使用此協議。
arc0e
“乙太網封裝”透過 ARCnet 傳送資料包,這些資料包實際上很像乙太網資料包,包括 6 位元組的硬體地址。此協議與 Microsoft 的 NDIS ARCnet 驅動程式相容,例如 WfWg 和 LANMAN 中的那個。由於 493 的 MTU 實際上小於 TCP/IP“要求”的 MTU (576),因此某些網路操作可能無法正常執行。但是,Linux TCP/IP 層可以透過自動分段 TCP/IP 資料包以使其適合來在大多數情況下進行補償。 arc0e 的工作速度也比 arc0 稍慢,原因尚未確定。(可能導致其速度稍慢的是較小的 MTU。)
arc0s
“[簡]單”RFC1051 協議是與新標準完全不相容的“先前”Internet 標準。但是,今天的一些軟體繼續支援舊標準(並且僅支援舊標準),包括 NetBSD 和 AmiTCP。 RFC1051 也不支援 RFC1201 的資料包拆分,並且 507 的 MTU 仍然小於 Internet“要求”,因此您很可能會遇到問題。由於與 arc0e 相同的原因,它的速度也比 RFC1201 慢大約 25%。
arc0s 支援由 Tomasz Motylewski 貢獻,並由我進行了一些修改。錯誤可能都是我的錯。
如果您願意,您可以選擇不將 arc0e 和 arc0s 編譯到驅動程式中 - 這將為您節省一些記憶體,並避免在嘗試使用最新 Linux 核心中的“NFS-root”內容時造成混淆。
當您第一次 ifconfig arc0 裝置時,將自動建立 arc0e 和 arc0s 裝置。但是,要實際使用它們,您還需要 ifconfig 您需要的其他虛擬裝置。然後,您可以透過多種方式設定您的網路
單協議。
這是配置網路的最簡單方法:僅使用兩種可用協議中的一種。如上所述,除非您有充分的理由(例如,某些其他軟體,即 WfWg,僅適用於 arc0e),否則最好僅使用 arc0。
如果您只需要 arc0,那麼以下命令應該可以讓您開始使用
ifconfig arc0 MY.IP.ADD.RESS route add MY.IP.ADD.RESS arc0 route add -net SUB.NET.ADD.RESS arc0 [add other local routes here]
如果您需要 arc0e(並且只需要 arc0e),則略有不同
ifconfig arc0 MY.IP.ADD.RESS ifconfig arc0e MY.IP.ADD.RESS route add MY.IP.ADD.RESS arc0e route add -net SUB.NET.ADD.RESS arc0e
arc0s 的工作方式與 arc0e 非常相似。
同一線路上的多個協議。
現在事情開始變得令人困惑了。要嘗試它,您可能需要有點瘋狂。這是 *我* 所做的。:) 請注意,我不將 arc0s 包含在我的家庭網路中;我沒有任何 NetBSD 或 AmiTCP 計算機,所以我只在有限的測試期間使用 arc0s。
我的家庭網路上有三臺計算機;兩臺 Linux 機器(由於上述原因,更喜歡 RFC1201 協議)和一臺無法執行 Linux 但執行免費 Microsoft LANMAN 客戶端的 XT。
更糟糕的是,其中一臺 Linux 計算機(freedom)還有一個調變解調器,並充當我的 Internet 提供商的路由器。另一臺 Linux 機器 (insight) 也有自己的 IP 地址,需要將 freedom 用作其預設閘道器。但是,XT (patience) 沒有自己的 Internet IP 地址,因此我為其分配了一個“私有子網”上的地址(如 RFC1597 中定義的)。
首先,使用一個簡單的網路,其中只有 insight 和 freedom。 Insight 需要
透過 RFC1201 (arc0) 協議與 freedom 通訊,因為我更喜歡它並且速度更快。
使用 freedom 作為其 Internet 閘道器。
這很容易做到。像這樣設定 insight
ifconfig arc0 insight route add insight arc0 route add freedom arc0 /* I would use the subnet here (like I said to in "single protocol" above), but the rest of the subnet unfortunately lies across the PPP link on freedom, which confuses things. */ route add default gw freedomFreedom 的配置如下
ifconfig arc0 freedom route add freedom arc0 route add insight arc0 /* and default gateway is configured by pppd */
太好了,現在 insight 直接在 arc0 上與 freedom 通訊,並透過 freedom 將資料包傳送到 Internet。如果您不知道如何執行上述操作,您現在應該停止閱讀本節,因為它只會變得更糟。
現在,如何將 patience 新增到網路中?它將使用 LANMAN 客戶端,這意味著我需要 arc0e 裝置。它需要能夠與 insight 和 freedom 通訊,並且還需要使用 freedom 作為 Internet 閘道器。(回想一下,patience 有一個“私有 IP 地址”,該地址在 Internet 上無法使用;沒關係,我為這個子網在 freedom 上配置了 Linux IP 偽裝)。
因此,patience(必然;我沒有來自提供商的另一個 IP 號碼)的 IP 地址與 freedom 和 insight 所在的子網不同,但需要使用 freedom 作為 Internet 閘道器。更糟糕的是,包括 LANMAN 在內的大多數 DOS 網路程式都具有完全依賴於網路掩碼和“預設閘道器”來確定如何路由資料包的弱智網路方案。這意味著要訪問 freedom 或 insight,patience 將透過其預設閘道器傳送資料,而不管 freedom 和 insight(透過 arc0e 裝置)都可以理解直接傳輸的事實。
我透過為 freedom 提供一個額外的 IP 地址來補償 - 別名“gatekeeper” - 它位於我的私有子網上,與 patience 所在的子網相同。然後,我將 gatekeeper 定義為 patience 的預設閘道器。
要配置 freedom(除了上面的命令)
ifconfig arc0e gatekeeper route add gatekeeper arc0e route add patience arc0e
這樣,freedom 將透過 arc0e 傳送所有用於 patience 的資料包,將其 IP 地址作為 gatekeeper(在私有子網上)。當它與 insight 或 Internet 通訊時,它將使用其“freedom”Internet IP 地址。
您會注意到我們尚未在 insight 上配置 arc0e 裝置。這可以工作,但實際上沒有必要,並且需要我為 insight 分配另一個來自我的私有子網的特殊 IP 號碼。由於 insight 和 patience 都使用 freedom 作為其預設閘道器,因此兩者已經可以相互通訊。
我第一次像這樣設定東西真是幸運(咳嗽),因為當我將 insight 引導到 DOS 時,它真的很方便。在那裡,它執行 Novell ODI 協議棧,該協議棧僅適用於 RFC1201 ARCnet。在這種模式下,insight 無法直接與 patience 通訊,因為 Novell 協議棧與 Microsoft 的 Ethernet-Encap 不相容。在不更改 freedom 或 patience 上的任何設定的情況下,我只需將 freedom 設定為 insight(現在在 DOS 中,記住)的預設閘道器,並且所有轉發都會在通常無法相互通訊的兩個主機之間“自動”發生。
對於那些喜歡圖表的人,我在同一物理 ARCnet 線路上建立了兩個“虛擬子網”。您可以這樣想象它
[RFC1201 NETWORK] [ETHER-ENCAP NETWORK] (registered Internet subnet) (RFC1597 private subnet) (IP Masquerade) /---------------\ * /---------------\ | | * | | | +-Freedom-*-Gatekeeper-+ | | | | * | | \-------+-------/ | * \-------+-------/ | | | Insight | Patience (Internet)
它工作了:現在做什麼?¶
傳送郵件描述您的設定,最好包括驅動程式版本、核心版本、ARCnet 卡型號、CPU 型別、網路上的系統數量以及使用的軟體列表,到以下地址
我確實會回覆我收到的所有訊息(有時是自動回覆)。我的電子郵件可能很奇怪(而且通常會在到達我的途中被轉發到各處),因此如果您在合理的時間內沒有收到回覆,請重新發送。
它不起作用:現在做什麼?¶
執行與上述相同的操作,但還要包括 ifconfig 和 route 命令的輸出,以及任何相關的日誌條目(即,任何以“arcnet:”開頭並且自上次重啟以來顯示的內容)在您的郵件中。
如果您想自己嘗試修復它(我強烈建議您先透過郵件告訴我問題,因為它可能已經解決了),您可能想嘗試一些可用的除錯級別。對於 D_DURING 或更高級別的繁重測試,首先殺死您的 klogd 守護程式是一個 _非常_ 好的主意! D_DURING 顯示每個傳送或接收的資料包的 4-5 行。 D_TX、D_RX 和 D_SKB 實際上顯示每個傳送或接收的資料包,這顯然很大。
從 v2.40 ALPHA 開始,自動探測例程已發生重大更改。特別是,除非您開啟 D_INIT_REASONS 除錯標誌,否則它們不會告訴您為什麼找不到該卡。
驅動程式執行後,您可以隨時以 root 身份執行 arcdump shell 指令碼(可從我處獲得或在完整的 ARCnet 軟體包中獲得,如果您有它)來列出 arcnet 緩衝區的內容。要從中獲得任何意義,您應該獲取相關的 RFC。(一些列在 arcnet.c 的頂部附近)。 arcdump 假定您的卡位於 0xD0000。如果不是,請編輯指令碼。
緩衝區 0 和 1 用於接收,緩衝區 2 和 3 用於傳送。乒乓緩衝區以兩種方式實現。
如果您的除錯級別包括 D_DURING 並且您沒有定義 SLOW_XMIT_COPY,則每次重置卡時(僅在執行 ifconfig up 或 Linux 確定驅動程式已損壞時才會發生),緩衝區都會被清除為 0x42 的常量值。在傳輸期間,緩衝區中未使用的部分也將被清除為 0x42。這是為了更容易確定資料包正在使用哪些位元組。
您可以透過鍵入以下內容來更改除錯級別,而無需重新編譯核心
ifconfig arc0 down metric 1xxx
/etc/rc.d/rc.inet1
其中“xxx”是您想要的除錯級別。例如,“metric 1015”會將您置於除錯級別 15。除錯級別 7 當前是預設值。
請注意,除錯級別(從 v1.90 ALPHA 開始)是不同調試標誌的二進位制組合;因此除錯級別 7 實際上是 1+2+4 或 D_NORMAL+D_EXTRA+D_INIT。要包括 D_DURING,您需要在此基礎上加 16,從而導致除錯級別為 23。
如果您不理解這一點,您可能無論如何都不想知道。透過電子郵件告訴我您的問題。
我想寄錢:現在做什麼?¶
去睡一覺或做點什麼。早上你會感覺更好。