Linux中国 Linux中国门户站!
设为主页 设为主页
收藏本站 收藏本站
 
当前位置 :首页 ->Linux技术 ->系统管理 ->正文

[网卡]NE1000 / NE2000网卡(及其兼容卡)的FAQ

来源:Linux-cn.com 作者:Webmaster 时间:2007-05-05 点击: [收藏] [投稿]

  问题:机器在启动时出现“8390...”或“WD....”信息后死机。拔掉NE2000就好了。

  解决方案:把你的NE2000地址改为0x340一类的地址。此外,你可以在和“ether=”参数一起使用“reserve=”启动参数,保护网卡不受其它设备驱动程序检测的影响。

  原因:你的NE2000兼容网卡兼容性不好。一个激活的NE2000是个无底洞,会使其它的驱动程序陷在其空间内进行自动检测。把NE2000改到一个不常用的地址就可以从其它的自动检测中消除这一陷阱,机器也就可以启动了。

  问题:机器启动时在进行SCSI检测时死机。

  原因:这个问题跟上面的一样,改变以太网卡的地址,或使用reserve/ether启动参数。

  问题:机器启动时在进行声卡检测时死机。

  原因:不可能,实际上是发生在静默方式的SCSI检测过程中,与上面的问题一样。

  问题:启动时检测不到NE2000 - 根本就没有启动信息。

  解决方案:因为造成检测不到的原因很多,所以没有“神奇的解决方案”。下面列出了可能有所帮助的一些措施。

  1) 构建一个只包含需要的设备驱动程序的内核。证实你确实是从新内核启动的。忘记运行lilo等会使你从老的内核启动。(仔细观察启动时报告的构建时间/日期。)听起来很明显,但我们以前都犯过这个错。通过检查System.map文件里ne_probe一类的名称,确定驱动程序已包含在新的内核里。

  2) 仔细观察启动信息。看看它是否提及正在进行诸如“NE*000 probe at 0xNNN: not found (blah blah)”一类的ne2k检测,或者就是静悄悄地失败了。这里的区别很大。使用dmesg|more在登录后浏览启动信息,或者在启动完成显示登录提示符时使用Shift-PgUp卷回屏幕。

  3) 启动后,执行cat /proc/ioports,证实网卡要求的全部I/O空间是空的。如果网卡在0x300,那么ne2k驱动程序要求的空间为0x300-0x31f。如果其它设备的驱动程序注册了其中的一个口,就不会对该地址进行检测,而是静悄悄地检测下一个要检测的地址。常见的情况是lp驱动程序保留了0x378,或者第二个IDE通道保留了0x376,这就使ne驱动程序停止检测0x360-0x380。

  4) 与上面一样执行cat /proc/interrupts。确定没有其它设备注册了你为以太网卡设置的中断。这种情况下,检测可以进行,以太网卡驱动程序会在启动时大声抱怨无法得到所要求的IRQ中断线。

  5) 如果你还为驱动程序静悄悄地失败而苦恼,那么编辑并给检测增加一些printk()。比如,对于ne2k,你可以在linux/drivers/net/ne.c中增加/删除某些行(用 “+”或“-”表示),如下所示:


------------------------------------------------------- 

int reg0 = inb_p(ioaddr); 

+ printk("NE2k probe - now checking %x
",ioaddr); 
- if (reg0 == 0xFF) 
+ if (reg0 == 0xFF) { 
+ printk("NE2k probe - got 0xFF (vacant I/O port)
"); 
return ENODEV; 
+ } 
-------------------------------------------------------- 

  那么它就会输出检查的每一个口地址信息,你可以看到你的网卡地址是否被检测了。

  6) 你还可以从Don的ftp站点(在howto中也提及了)获取ne2k的诊断程序,看看你在启动进入Linux后能否用它检测你的网卡。使用“-p 0xNNN”选项告诉它在哪里寻找你的网卡。(缺省情况下只检测0x300,与启动时的探测不同,不会检测其它的地址。)在找到网卡时的输出如下:


-------------------------------------------------------- 
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 00 
SA PROM 0: 00 00 00 00 c0 c0 b0 b0 05 05 65 65 05 05 20 20 
SA 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. 
---------------------------------------------------------------

  你的注册值和PROM值可能会不一样。注意,对16比特网卡,所有PROM值都增加一倍,以太网卡地址(00:00:c0:b0:05:65)出现在第一行,加倍后的0x57标识出现在PROM的结尾。

  在0x300处没有安装网卡时的输出如下:


----------------------------------------------------------------- 

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 ff 
SA PROM 0: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 
SA PROM 0x10: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff 

Invalid signature found, wordlength 2. 
----------------------------------------------------------------- 

  出现值0xff的原因是在读取空I/O口时返回的就是该值。如果在检测的区域内有其它硬件,你可以看到一些非0xff的值。

  7) 尝试在运行提供的DOS驱动程序或配置程序之后,从DOS启动软盘(通过loadlin)热启动进入Linux。这可能会进行一些额外的(即非标准的)“魔法”来初始化网卡。

  8) 试一下Russ Nelson的ne2000.com包驱动程序,看它能否看见你的网卡 -- 如果还不行,事情就不大妙了。例如:

A:> ne2000 0x60 10 0x300 

  所用参数为软件中断向量、硬件IRQ和I/O地址。你可以从任意的msdos存档中的pktdrv11.zip里找到它 -- 现在的版本大概是11以上了。

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<



上一篇:[硬盘]安装第二块硬盘   下一篇:《UNIX系列系统入侵教程》之三

文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论
更多相关文章
Power by linux-cn.com 粤ICP备05006655号