⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ethernet-howto-3.html

📁 Linux初学者最好的老师就是howto了。相当于函数man。
💻 HTML
📖 第 1 页 / 共 4 页
字号:
使用网卡所附的DOS配置盘取消PnP,并为该网卡设置一个指定的I/O地址和IRQ。在<CODE>/etc/conf.modules</CODE>里增加这样的一行<CODE>options ne io=0xNNN</CODE>,其中<CODE>0xNNN</CODE>是你为网卡设置的16进制I/O地址。(假设你使用的是模块化驱动程序;否则,在启动时使用一个<CODE>ether=0,0xNNN,eth0</CODE>参数。你也可以进入BIOS/CMOS设置,把IRQ从PnP改为Legacy-ISA。如果你需要为兼容其它的操作系统而保留PnP设置,那么你可以看一下<EM>isapnptools</EM>软件包。使用<CODE>man isapnp</CODE>看看它是否已经安装在你的系统上了。如果没有,浏览一下下面的连接:<P><A HREF="javascript:if(confirm('http://www.roestock.demon.co.uk/isapnptools/  \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.roestock.demon.co.uk/isapnptools/'" tppabs="http://www.roestock.demon.co.uk/isapnptools/">ISA PNP Tools</A><P><P><B>问题:</B>在启动检测时NE*000驱动程序报告“not found (no reset ack)”。<P><B>原因:</B>这跟上面所说的改动有关。在证实8390处于所检测的I/O地址之后,进行重新设置。在网卡完成重新设置后,应当通知重新设置完成。你的网卡没有通知,所以驱动程序认为不存在NE网卡。<P><B>解决方案:</B>你可以在启动时使用一个未被使用的<CODE>mem_end</CODE>的16进制值<CODE>0xbad</CODE>,告诉驱动程序你有一个坏网卡。在使用<CODE>0xbad</CODE>覆盖时你<EM>必须</EM>为网卡提供一个非零的I/O地址。例如,在<CODE>0x340</CODE>的网卡不响应重新设置时,则使用如下方法:<P><BLOCKQUOTE><CODE>LILO: linux ether=0,0x340,0,0xbad,eth0</CODE></BLOCKQUOTE><P><P>这样,即使你的网卡不响应重新设置,网卡检测还能继续下去。如果你是以模块方式使用驱动程序,那么可以象提供I/O地址一样提供选项<CODE>bad=0xbad</CODE>。<P><B>问题:</B>NE*000网卡使机器在第一次网络访问时死机。<P><B>原因:</B>这个问题从早期的1.1.57内核到现在都出现过,而且只在有限的几种软件配置的兼容网卡上出现。看来是需要用某些特殊的方法来初始化它们。<P><B>解决方案:</B>有几个人报告在热启动(即loadlin或Ctrl-Alt-Del)Linux之前,运行提供的DOS软件配置程序或提供的DOS驱动程序可以使网卡工作。这表明这些卡需要以某种特殊的方式初始化,与当前的Linux驱动程序稍有区别。<P><B>问题:</B>在<CODE>0x360</CODE>的NE*000以太网卡没有检测到。<P><B>原因:</B>你的NE2000网卡在I/O空间占据了<CODE>0x20</CODE>个字节,使它与<CODE>0x378</CODE>处的并口发生冲突。其它可能的设备是<CODE>0x370</CODE>处的第二个软盘控制器(如果有的话),以及<CODE>0x376--0x377</CODE>处的第二个IDE控制器。如果该口已被其它驱动程序注册,内核将不再进行检测。<P><B>解决方案:</B>或者把你的网卡移到<CODE>0x280, 0x340, 0x320</CODE>一类的地址,或者在编译时不支持并行打印机。<P><B>问题:</B>每次打印时网络都断开(NE2000)。<P><B>原因:</B>与上一个问题相同,但你的内核比较老,不支持对重叠I/O区域的检查。使用如上的解决方案,有空时获取一个新的内核。<P><B>问题:</B>没检测到0xNNN: 00 00 C5 ... 处的NE*000以太网卡。(非法标识yy zz)<P><B>原因:</B>首先,你是否在地址0xNNN处有一个NE1000或NE2000网卡?如果有,报告的硬件地址是否象一个合法地址?如果是的话,那么你的NE*000兼容网卡很差劲。所有的NE*000兼容网卡都假定网卡上的SA PROM的第14和15字节为<CODE>0x57</CODE>。而你的网卡不是这样 -- 它的值为“yy zz”。<P><B>解决方案:</B>有两种解决方法。最简单的方法就是如上所述的“no reset ack”解决方案,使用一个<CODE>0xbad</CODE>的mem_end值。这样在提供一个非零的I/O地址时就可以忽略标识检查。此方法无需重新编译内核。<P>第二种方法(对黑客)需要修改驱动程序,并重新编译内核(或模块)。在驱动程序(/usr/src/linux/drivers/net/ne.c)的42行有一个“Hall of Shame”列表。这个表是用来检测那些差劲的兼容网卡的。例如,DFI网卡在PROM的前三个字节使用“DFI”,而不是象要求的那样在第14和15字节使用<CODE>0x57</CODE>。<P><B>问题:</B>机器在启动时出现“8390...”或“WD....”信息后死机。拔掉NE2000就好了。<P><B>解决方案:</B>把你的NE2000地址改为<CODE>0x340</CODE>一类的地址。此外,你可以在和“ether=”参数一起使用“reserve=”启动参数,保护网卡不受其它设备驱动程序检测的影响。<P><B>原因:</B>你的NE2000兼容网卡兼容性不好。一个激活的NE2000是个无底洞,会使其它的驱动程序陷在其空间内进行自动检测。把NE2000改到一个不常用的地址就可以从其它的自动检测中消除这一陷阱,机器也就可以启动了。<P><P><B>问题:</B>机器启动时在进行SCSI检测时死机。<P><B>原因:</B>这个问题跟上面的一样,改变以太网卡的地址,或使用reserve/ether启动参数。<P><B>问题:</B>机器启动时在进行声卡检测时死机。<P><B>原因:</B>不对,实际上是发生在静默方式的SCSI检测过程中,与上面的问题一样。<P><B>问题:</B>启动时检测不到NE2000 -- 根本就没有启动信息。<P><B>解决方案:</B>因为造成检测不到的原因很多,所以没有“神奇的解决方案”。下面列出了可能有所帮助的一些措施。<P>1) 构建一个只包含需要的设备驱动程序的内核。证实你确实是从新内核启动的。忘记运行lilo等会使你从老的内核启动。(仔细观察启动时报告的构建时间/日期。)听起来很明显,但我们以前都犯过这个错。通过检查<CODE>System.map</CODE>文件里<CODE>ne_probe</CODE>一类的名称,确定驱动程序已包含在新的内核里。<P>2) 仔细观察启动信息。看看它是否提及正在进行诸如“NE*000 probe at 0xNNN: not found (blah blah)”一类的ne2k检测,或者就是静悄悄地失败了。这里的区别很大。使用<CODE>dmesg|more</CODE>在登录后浏览启动信息,或者在启动完成显示登录提示符时使用Shift-PgUp卷回屏幕。<P>3) 启动后,执行<CODE>cat /proc/ioports</CODE>,证实网卡要求的全部I/O空间是空的。如果网卡在<CODE>0x300</CODE>,那么ne2k驱动程序要求的空间为<CODE>0x300-0x31f</CODE>。如果其它设备的驱动程序注册了其中的一个口,就不会对该地址进行检测,而是静悄悄地检测下一个要检测的地址。常见的情况是lp驱动程序保留了<HR><PRE>0x378</PRE><HR>,或者第二个IDE通道保留了<CODE>0x376</CODE>,这就使ne驱动程序停止检测<CODE>0x360-0x380</CODE>。<P>4) 与上面一样执行<CODE>cat /proc/interrupts</CODE>。确定没有其它设备注册了你为以太网卡设置的中断。这种情况下,检测可以进行,以太网卡驱动程序会在启动时大声抱怨无法得到所要求的IRQ中断线。<P>5) 如果你还为驱动程序静悄悄地失败而苦恼,那么编辑并给检测增加一些printk()。比如,对于ne2k,你可以在<CODE>linux/drivers/net/ne.c</CODE>中增加/删除某些行(用“+”或“-”表示),如下所示:<P><HR><PRE>    int reg0 = inb_p(ioaddr);+    printk("NE2k probe - now checking %x\n",ioaddr);-    if (reg0 == 0xFF)+    if (reg0 == 0xFF) {+       printk("NE2k probe - got 0xFF (vacant I/O port)\n");        return ENODEV;+    }</PRE><HR><P>那么它就会输出检查的每一个口地址信息,你可以看到你的网卡地址是否被检测了。<P>6) 你还可以从Don的ftp站点(在howto中也提及了)获取ne2k的诊断程序,看看你在启动进入Linux后能否用它检测你的网卡。使用“<CODE>-p 0xNNN</CODE>”选项告诉它在哪里寻找你的网卡。(缺省情况下只检测<CODE>0x300</CODE>,与启动时的探测不同,不会检测其它的地址。)在找到网卡时的输出如下:<P><HR><PRE>Checking the ethercard at 0x300.  Register 0x0d (0x30d) is 00  Passed initial NE2000 probe, value 00.8390 registers: 0a 00 00 00 63 00 00 00 01 00 30 01 00 00 00 00SA PROM  0: 00 00 00 00 c0 c0 b0 b0 05 05 65 65 05 05 20 20SA PROM 0x10: 00 00 07 07 0d 0d 01 01 14 14 02 02 57 57 57 57        NE2000 found at 0x300, using start page 0x40 and end page 0x80.</PRE><HR><P>你的注册值和PROM值可能会不一样。注意,对16比特网卡,所有PROM值都增加一倍,以太网卡地址(00:00:c0:b0:05:65)出现在第一行,加倍后的<CODE>0x57</CODE>标识出现在PROM的结尾。<P>在<CODE>0x300</CODE>处没有安装网卡时的输出如下:<P><HR><PRE>Checking the ethercard at 0x300.  Register 0x0d (0x30d) is ff  Failed initial NE2000 probe, value ff.8390 registers: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ffSA PROM        0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ffSA PROM 0x10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff Invalid signature found, wordlength 2.</PRE><HR><P>出现值<CODE>0xff</CODE>的原因是在读取空I/O口时返回的就是该值。如果在检测的区域内有其它硬件,你可以看到一些非<CODE>0xff</CODE>的值。<P>7) 尝试在运行提供的DOS驱动程序或配置程序之后,从DOS启动软盘(通过loadlin)热启动进入Linux。这可能会进行一些额外的(即非标准的)“魔法”来初始化网卡。<P>8) 试一下Russ Nelson的ne2000.com包驱动程序,看它能否看见你的网卡 -- 如果还不行,事情就不大妙了。例如:<P><BLOCKQUOTE><CODE>A:> ne2000 0x60 10 0x300</CODE></BLOCKQUOTE><P>所用参数为软件中断向量、硬件IRQ和I/O地址。你可以从任意的msdos档案文件中的pktdrv11.zip里找到它 -- 现在的版本大概是11以上了。<P><P><P><H2><A NAME="8013-probs"></A> <A NAME="ss3.5">3.5 SMC Ultra/EtherEZ和WD80*3网卡的问题</A></H2><P><P><B>问题:</B>你得到了如下信息:<P><PRE>        eth0: bogus packet size: 65531, status=0xff, nxpg=0xff</PRE><P><B>原因:</B>是共享内存的问题。<P><B>解决方案:</B>最普遍的原因是配置的PCI机器没有映射到ISA内存设备里。因此你读到的是PC的RAM(全都是<CODE>0xff</CODE>值),而不是存放接收数据包数据的网卡上的RAM。<P>另一个容易解决的典型问题是板卡冲突,在此区域有缓存或“shadow ROM”,或者你的ISA总线运行速度高于8Mhz。以太网卡上的内存失效的数目也令人惊奇,所以如果你的以太网卡有诊断程序的话,运行一下。<P><B>问题:</B>SMC EtherEZ在非共享内存(PIO)模式下不工作。<P><B>原因:</B>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -