📄 ethernet-howto-3.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"><HTML><HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312"> <META NAME="GENERATOR" CONTENT="ZH-SGML-Tools 1.0.9"> <TITLE>Linux以太网-HOWTO: 常见问题</TITLE> <LINK HREF="Ethernet-HOWTO-4.html" tppabs="http://www.linux.org.tw/CLDP/gb/Ethernet-HOWTO-4.html" REL=next> <LINK HREF="Ethernet-HOWTO-2.html" tppabs="http://www.linux.org.tw/CLDP/gb/Ethernet-HOWTO-2.html" REL=previous> <LINK HREF="Ethernet-HOWTO.html#toc3" tppabs="http://www.linux.org.tw/CLDP/gb/Ethernet-HOWTO.html#toc3" REL=contents><SCRIPT src="menu.js"> function BeginPage() {} function EndPage() {} </SCRIPT> </HEAD> <BODY bgcolor=#FFFFFF MARGINHEIGHT=0 MARGINWIDTH=0> <A HREF="Ethernet-HOWTO-4.html" tppabs="http://www.linux.org.tw/CLDP/gb/Ethernet-HOWTO-4.html"><IMG SRC="next.gif" tppabs="http://www.linux.org.tw/CLDP/gb/img/next.gif" ALT="Next"></A><A HREF="Ethernet-HOWTO-2.html" tppabs="http://www.linux.org.tw/CLDP/gb/Ethernet-HOWTO-2.html"><IMG SRC="prev.gif" tppabs="http://www.linux.org.tw/CLDP/gb/img/prev.gif" ALT="Previous"></A><A HREF="Ethernet-HOWTO.html#toc3" tppabs="http://www.linux.org.tw/CLDP/gb/Ethernet-HOWTO.html#toc3"><IMG SRC="toc.gif" tppabs="http://www.linux.org.tw/CLDP/gb/img/toc.gif" ALT="Contents"></A><HR><H2><A NAME="faq"></A> <A NAME="s3">3. 常见问题</A></H2><P><P>这里是一些有关使用Linux进行以太网连接的常见问题。某些特定问题按照制造商进行分类。可能你想问的问题别人已经问过(而且被回答了!),所以即使没有在这里找到你的答案,还可能在诸如<A HREF="javascript:if(confirm('http://www.dejanews.com/ \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?'))window.location='http://www.dejanews.com/'" tppabs="http://www.dejanews.com/">Dejanews</A>之类的新闻档案中找到你所要的。<P><H2><A NAME="alfa"></A> <A NAME="ss3.1">3.1 Alpha驱动程序——获取与使用</A></H2><P><P>我听说我的网卡有一个更新的或初步的/alpha驱动程序。从哪儿得到它呢?<P>最新的“新”驱动程序可以在Donald的FTP站点:<CODE>cesdis.gsfc.nasa.gov</CODE>里面的<CODE>/pub/linux/</CODE>下找到。因为事情变化很频繁,可能需要四处找一找。或者使用WWW浏览器去:<P><A HREF="javascript:if(confirm('http://cesdis.gsfc.nasa.gov/linux/ \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?'))window.location='http://cesdis.gsfc.nasa.gov/linux/'" tppabs="http://cesdis.gsfc.nasa.gov/linux/">Don's Linux Home Page</A><P>查找你想要的驱动程序更简单一些。(留神WWW浏览器会悄悄地把源码中的TABs替换为空格,等等 - 如果无法确定的话,使用FTP下载,至少也得用WWW浏览器的FTP URL。)<P>如果驱动程序确实是alpha版本,或pre-alpha版本,那么请恰当地对待它。换句话说,不要抱怨,因为你无法弄清用它能做些什么。同样,如果它使你的机器宕机了,不要抱怨。相反,你应该发给我们一份材料组织很好的Bug报告,如果是一个补丁,那就更好!<P>注意,某些“可用”的实验性/alpha驱动程序已经包含在标准的内核源码树中。在运行<CODE>make config</CODE>时你首先要回答的一个问题就是“Prompt for development and/or incomplete code/drivers”。在此你要回答“Y”以包括任何alpha/实验性驱动程序。<P><H2><A NAME="two-card"></A> <A NAME="ss3.2">3.2 一台机器使用多个以太网卡</A></H2><P><P>做些什么才能让Linux运行两块以太网卡?<P>这个问题的答案取决于驱动程序是否被用做可载入的模块或者直接编译进了内核。大多数Linux发行版本现在都使用模块化的驱动程序。这样就不用发行许多内核,每种内核设置一个不同的内建驱动程序。使用一个单一的基本内核,如果特定用户系统需要,一旦系统启动,就可以从驱动程序模块文件(通常存放在<CODE>/lib/modules/</CODE>)中载入个别的驱动程序。<P><EM>把驱动程序作为模块使用:</EM>对于PCI驱动程序,模块通常会自动检测该品牌类型所有安装的网卡。但对于ISA网卡,探寻一个网卡是不安全的操作,因此你需要提供网卡的I/O地址以便模块知道去哪里查找。这一信息存储在文件<CODE>/etc/conf.modules</CODE>中。<P>例如,如果一个用户有两块ISA NE2000网卡,一块在<CODE>0x300</CODE>,一块在<CODE>0x240</CODE>,它们在<CODE>/etc/conf.modules</CODE>文件中显示如下:<P><PRE> alias eth0 ne alias eth1 ne options ne io=0x240,0x300</PRE><P>这几行的意义:就是说如果管理员(或内核)进行<CODE>modprobe eth0</CODE>或者<CODE>modprobe eth1</CODE>,那么为<CODE>eth0</CODE>或者<CODE>eth1</CODE>载入<CODE>ne.o</CODE>驱动程序。此外,在载入<CODE>ne.o</CODE>模块时,使用选项<CODE>io=0x240,0x300</CODE>,这样驱动程序就知道去哪里寻找网卡。注意<CODE>0x</CODE>很重要 - DOS里常用的<CODE>300h</CODE>在这里没有用。改变<CODE>0x240</CODE>和<CODE>0x300</CODE>的顺序会使哪一块物理网卡以<CODE>eth0</CODE>和<CODE>eth1</CODE>结尾发生改变。<P>同这个例子一样,大多数ISA模块驱动程序可以接受多个以逗号分隔的I/O值以处理多块网卡。但是,某些(老的?)驱动程序,比如3c501.o模块,目前载入一个模块只能处理一块网卡。这样,要检测两块网卡就必须载入两次该模块。此时,文件<CODE>/etc/conf.modules</CODE>将如下所示:<P><PRE> alias eth0 3c501 alias eth1 3c501 options eth0 -o 3c501-0 io=0x280 irq=5 options eth1 -o 3c501-1 io=0x300 irq=7</PRE><P>在此例中,选项<CODE>-o</CODE>用来给每个模块实例一个唯一的名字,因为不能用同一个名字载入两个模块。选项<CODE>irq=</CODE>也是用来指定网卡设置的硬件IRQ。(此方法也能用于可接受多个以逗号分隔的I/O值的模块,但这样会使模块被不必要地载入两次,降低了效率。)<P>最后一个例子,假设用户有一块在<CODE>0x350</CODE>的3c503网卡和一块在<CODE>0x280</CODE>的SMC Elite16 (wd8013)网卡。则应该这样:<P><PRE> alias eth0 wd alias eth1 3c503 options wd io=0x280 options 3c503 io=0x350</PRE><P>对于PCI网卡,只要用<CODE>alias</CODE>语句把<CODE>ethN</CODE>接口和相应的驱动程序名联系起来就行了,因为PCI网卡的I/O地址可以被安全地检测到。<P>可用的模块一般存放在<CODE>/lib/modules/`uname -r`/net</CODE>下,这里<CODE>uname -r</CODE>命令可以得到内核的版本(比如2.0.34)。你可以在这里看看哪一个驱动程序适合你的网卡。一旦你在<CODE>conf.modules</CODE>文件里进行了正确的设置,就可以用下面的方法检查一下:<P><PRE> modprobe ethN dmesg | tail</PRE><P>这里“N”是你要检测的以太网卡的接口号。<P><P><EM>使用编译进内核的驱动程序:</EM>如果你需要的驱动程序编译进了内核,那么处理多块以太网卡的接口已经存在了。但缺省情况下只自动检测<EM>一块</EM>以太网卡。这样就避免了启动时检测敏感网卡可能引起的麻烦。<P>(注意:在2.1.x之后的内核中,启动检测被分为安全和不安全的两类,所有安全的检测(如对PCI和EISA网卡)可以自动找到所有相关的网卡。在至少有一块ISA网卡的多网卡系统中还需要进行以下的处理。)<P>有两种方法可以启动对第二块(或第三块等等)网卡的自动检测。最简单的方法是向内核传递启动参数,由LILO完成。使用<CODE>ether=0,0,eth1</CODE>这样简单的启动参数就可以完成对第二块网卡的检测。此时按照启动时找到的网卡顺序分配<CODE>eth0</CODE>和<CODE>eth1</CODE>。假如你想让<CODE>0x300</CODE>处的网卡为<CODE>eth0</CODE>,而<CODE>0x280</CODE>处的网卡为<CODE>eth1</CODE>,那么可以使用<P><BLOCKQUOTE><CODE>LILO: linux ether=5,0x300,eth0 ether=15,0x280,eth1</CODE></BLOCKQUOTE><P>命令<CODE>ether=</CODE>可以接受的参数并不仅限于如上所示的IRQ + I/O + name。请参看<A HREF="Ethernet-HOWTO-10.html#lilo" tppabs="http://www.linux.org.tw/CLDP/gb/Ethernet-HOWTO-10.html#lilo">传递以太网参数......</A>以了解全部的句法、网卡特定参数和LILO使用技巧。<P>这些启动参数可以固定,这样就不用每次都必须重新敲一遍。参看LILO手册中有关LILO的配置选项“<CODE>append</CODE>”。<P>第二种方法(不建议使用)是编辑文件<CODE>Space.c</CODE>并用零替换I/O地址中的<CODE>0xffe0</CODE>入口。<CODE>0xffe0</CODE>入口是用来告诉内核不要检测该设备 -- 把它替换为零就启动了对该设备的自动检测。<P>注意,如果想用Linux作为两个网络间的路由,你需要启动IP转发并重新编译内核。一般在一台老式的AT/286上运行“kbridge”一类的软件就相当不错了。<P>如果你是一边在<EM>网络冲浪</EM>,一边看本文档,最好去阅读Donald的WWW站点上的mini-howto。看一下<A HREF="javascript:if(confirm('http://cesdis.gsfc.nasa.gov/linux/misc/multicard.html \n\nThis file was not retrieved by Teleport Pro, because it is addressed on a domain or path outside the boundaries set for its Starting Address. \n\nDo you want to open it from the server?'))window.location='http://cesdis.gsfc.nasa.gov/linux/misc/multicard.html'" tppabs="http://cesdis.gsfc.nasa.gov/linux/misc/multicard.html">Multiple Ethercards</A>.<P><P><H2><A NAME="ss3.3">3.3 这个<CODE>以太</CODE>东东不干活。为什么?</A></H2><P><P>如上所述,<CODE>ether=</CODE>命令<EM>只</EM>对编译进了内核的驱动程序起作用。现在大多数的发行版本都用模块的方式使用驱动程序,所以很少再使用<CODE>ether=</CODE>命令了。(某些早期文档需要更新以反映这一变化。)如果你想使用模块化的以太网驱动程序的选项,<EM>必须</EM>修改<CODE>/etc/conf.modules</CODE>文件。<P>如果你<EM>是</EM>使用编译的驱动程序,而且已经把<CODE>ether=</CODE>加进了LILO配置文件,需要重新运行<CODE>lilo</CODE>使更新后的配置文件生效。<P><P><H2><A NAME="ne2k-probs"></A> <A NAME="ss3.4">3.4 NE1000/NE2000网卡(及其兼容卡)的问题</A></H2><P><P><B>问题:</B>在用v2.0.x启动时没有检测到PCI NE2000兼容网卡。<P><B>原因:</B>在v2.0.30之前的<CODE>ne.c</CODE>驱动程序只知道基于RealTek 8029的兼容网卡的PCI ID号。在此只后才出现了使用其它PCI ID号的PCI NE2000兼容网卡,所以驱动程序无法检测这些网卡。<P><B>解决方案:</B>最简单的方法是把Linux内核升级到v2.0.31以上版本。它可以识别五种不同的NE2000-PCI芯片的ID号,在启动或载入模块时自动检测到它们。如果你升级到了2.0.34以上版本,会有一个比原先的ISA/PCI驱动程序稍小但更高效的PCI专用NE2000驱动程序。<P><B>问题:</B>启动时PCI NE2000兼容网卡被报告为ne1000(8比特网卡!)或者在v2.0.x下载入ne.o模块不起作用。<P><B>原因:</B>某些PCI兼容网卡不支持字节存取(因此不是百分之百的兼容NE2000)。这使它在检测时被误认为NE1000网卡。<P><B>解决方案:</B>你需要升级到v2.0.31以上版本。现在的驱动程序会检测到这种硬件Bug。<P><B>问题:</B>PCI NE2000网卡的性能很差,即使按照性能技巧章节所说的减小了窗口大小。<P><B>原因:</B>十多年前设计和出售的初始8390芯片的技术数据手册上提到,为了得到最高的可靠性,在每次写操作之前需要一个读操作。驱动程序能够轻易地做到这一点,但从v1.2内核时代起,缺省情况下取消了这一操作。有一个用户报告说重新启用这一“错误的特性”就可以改善廉价的PCI NE2000兼容网卡的性能。<P><B>解决方案:</B>由于只有一个用户提出报告把它作为解决方案,不要对此寄予太大的希望。重新使用写之前的读操作可以简单地编辑<CODE>linux/drivers/net/</CODE>下的驱动程序文件,取消包含<CODE>NE_RW_BUGFIX</CODE>的那一行的注释,然后重建内核或载入相应的模块。如果这样确实有效,请给我发一封e-mail,描述性能上的差异和你所使用的网卡/芯片类型。(对<CODE>ne2k-pci.c</CODE>驱动程序也可以如法炮制。)<P><B>问题:</B><CODE>ne2k-pci.c</CODE>驱动程序对PCI NE2000网卡报告诸如<CODE>timeout waiting for Tx RDC</CODE>错误信息,无法正常工作。<P><B>原因:</B>你的网卡或网卡到PCI总线的连接无法处理该驱动程序使用的长字I/O优化。<P><B>解决方案:</B>首先,检查BIOS/CMOS设置,看看与PCI总线相关的计时对于可靠的操作是否过于严格了。否则,使用ISA/PCI的<CODE>ne.c</CODE>驱动程序(或者删除<CODE>ne2k-pci.c</CODE>中的<CODE>#define USE_LONGIO</CODE>),使你的网卡可用。<P><B>Probem:</B>没检测到ISA的即插即用NE2000网卡(如RealTek 8019)。<P><B>原因:</B>初始的NE2000特性不支持即插即用,因此Linux的NE2000驱动程序也不支持即插即用。<P><B>解决方案:</B>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -