Linux下新手装网卡指南

时间:2018-10-16 21:21来源:网络整理 作者:Linux先生 举报 点击:
? 在第n次看到"如何在Linux下配置我的XXX网卡"这样的问题之后 我觉得有必要把一些最基本的Linux网卡平台的知识总结一下,省省大 家的时间.以后有空再写声卡的

? 在第n次看到"如何在Linux下配置我的XXX网卡"这样的问题之后 我觉得有必要把一些最基本的Linux网卡平台的知识总结一下,省省大 家的时间.以后有空再写声卡的和显卡的.    本文主要面对新新手,不对任何高难度问题进行讨论,包括双网卡, 正常编译了driver也不能用的古怪网卡等.本文的主要目的是告诉新 新手,Linux下网卡是怎样被驱动的.本文不讨论平台Linux的问题,假 设用户已经成功平台了Linux,就等驱动网卡.
  第一步--不要再问"Linux下能够装XXX卡么?"这样的问题,Linux 是个开放的系统,借助于网络上无数的高手,几乎所有的硬件都能找到 支持.
  首先需要指出,Linux下对网卡的支持往往是只对芯片的,所以对 某些不是很著名的网卡,往往需要知道它的芯片型号以配置Linux.比 如我的Accton网卡,就不存在Linux的driver,但是因为它是NE2000兼 容,所以把它当NE2000就可以在Linux下用了.所以当你有一块网卡不 能用,在找Linux的driver之前一定搞清楚这个网卡用的什么芯片,跟 谁兼容,比如3c509,ne2000,etherexpress等等.这样的型号一般都在 网卡上最大的一快芯片上印着,抄下来就是了.
  最普遍使用也许是最好配的网卡也许就是Ne2000兼容卡了,我用 它来作例子.注意实际上很多廉价卡都是NE2000兼容的.
  对于NE2000卡,先要作的一件事情,是将网卡设定为Jumpless模式. 很多现在的网卡缺省都是PnP模式,这在95下的确能减少很多麻烦,但 是Linux不支持,所以Linux下必须是Jumpless模式.一般所有网卡都有 带的驱动盘和DOS下可执行的一个设定程序,用该程序将网卡设为 Jumpless.当然如果是老卡,本来就不是PnP,不用管这个.注意,这里主 要是ISA的NE2000,关于PCI的NE2000,需要另外设置.
  下来就是得弄清楚网卡的IO地址和IRQ.这是两个非常重要的网卡 驱动参数.这个最简单就是还用那个网卡的设定程序,设定完Jumpless 之后肯定有地方可以软设定IO和IRQ.老一些的卡得跳线,道理一样.另 外一个方法是如果网卡能在95或NT下工作,去95下的control panel里 看这个卡的properities,查IO和IRQ.
  OK,到现在,你知道了你的卡是NE2000兼容,知道了它是在Jumpless 模式下,知道了IO地址和IRQ,就可以平台了.
  Linux系统与95这些系统不同的一点是它是运行在"内核"上的,所 谓内核,就是把系统最核心的部分孤立出来编程,将各种驱动程序,内 存控制等部分编在一起.于95不同,Linux得内核是公开的,经常更新的, 这样不需要更? 个系统,用户只需要把最新的内核原程序download 下来编译,就可以得到一个支持更多硬件,更多文件系统,更安全的系 统了.所以需要指出,Linux的Driver很少有象95下那样是"平台"的. Linux下的driver大多数都是以C程序形式发布,或者在内核里,或者需 要用户自己修改内核代码.总之要让Driver运行,得重新配置编译内核. 如何操作Linux内核是学习Linux中非常重要的一节.Linux的新手最好 在这里多下点功夫搞清楚.有关核心的问题建议看Linux How To文档中 的kernel How to.
  Anyway, Linux已经装好了,那么用的是什么内核呢?一般缺省的 Linux内核是从平台盘上来的.那个内核一般包括大多数硬件的驱动程序, 比如Ne2000卡.所以未一定要重新编译内核,也许现有的内核就可以驱动. 所以下一步就是把网卡插入计算机,看看Linux能否发现它.这可以从 Linux的启动画面中看出来,如果你发现如下的一行: eth0:NE2000 card found at 0x300 using IRQ 05 那就说明Linux发现了NE2000卡, 在IO 300,IRQ 05的地方.   如果Linux没有发现你的网卡,但是你确认你网卡得型号和参数, 比如我的网卡是NE2000兼容,IO 0x300, IRQ 05.那么可以修改Linux 启动文件专门搜索这个设备.这个文件在/etc/rc.d/rc.modules里对 于NE2000,是这样的: #/sbin/modprobe ne io=0x300 # NE2000 at 0x300将最前面的#号去掉,再启动机器试试.
  另外该文件里还可以发现对其它系列网卡比如3C系列的autoprobe. OK,到现在启动屏幕上也没有出现eth0:NE2000 card found at 0x300 using IRQ 05这样的好消息,那么你就得编译内核了.
  编译内核之前一定要搞清楚的是网卡的芯片号.比如我有一块SMC 的网卡,但是我是无法在Linux的内核配置菜单里找到SMC这样的字样 的,Linux不是win95,有那么长一串厂商牌号等. 我在这个SMC的卡上 找到了digital 21140-AE的字眼,于是我知道这个卡用的是DEC 21140-AE芯片,于是按照这个寻找,就找到了驱动.
  知道了芯片类型,或者兼容类型(比如ne2000)就可以开始编译内 核了.具体的针对不同系统的内核编译推荐先看看有关内核编译的文 章,这里不多作介绍.
  进入/usr/src/linux运行make menuconfig进入菜单配置内核.找 到Network Device Support.选则EtherNet,再选则相应的芯片号.如 果是ISA系线的NE2000,就选则other ISA cards,选则NE2000/NE1000 ISA support.如果是PCI的网卡,就选则PCI ethernet adapters.注 意,PCI卡未必都能这样驱动,很多都不行,得另外找driver.比如Intel PCI EtherExpress Pro 100等.
  有关其它选项希望能多自己摸索.多看看help和how-to.   配置完内核后,运行make dep;make;make zlilo就可以了.如果内 核选项过多会出现过大的情况而无法平台.那么需要把一些不必要的 驱动去掉.
  一般这样之后再启动就可以发现网卡了.驱动了网卡,下一步就是 设定TCP/IP这些东西.这就不是这里的内容了.
  我的经验,Linux下NE2000兼容卡都比较好设.3c系列的卡也都有 支持.至于其它卡比如我的DEC 21140就麻烦很多.另外有些卡即使用 某种芯片也未必就能用这个芯片的驱动,这种情况就是有驱动程序也 不能用,就需要上网查了.
  有关Intel Etherexpress系列卡的配置.Linux内核中有 Etherexpress 16的支持,但没有其它卡的driver.在 里有关于EtherExpress 100B pro的讨论.在那里可以download到一个 c源码的驱动程序,编译进内核就可以了.那么,如果以上都试过了,而你 的网卡的确还是不能认,那么你需要上网查driver 了.在网上查东西 是一门看起来简单实际上极体现经验的学问.建议寻找Linux网卡的 driver从开始.在那 里可以发现的针对网卡得驱动有: DEC DC21*4* Tulip chip based cards 3Com PCI Etherlink PCI and EISA cards Intel EtherExpress Pro100B, Pro100+ and Pro10+ PCI 3c515 ISA Fast Etherlink card SMC EtherPower II (EPIC/100 83c170 chip) driver. RealTek RTL8129/8139 driver. Lite-On lc82c168 PNIC driver (now merged with the Tulip driver). Macronix MX98713 and ASIX experimental drivers are now merged with the Tulip driver). VIA Rhine (VT86C100A and 3043) driver (now released). Winbond w89c840 driver (beta test). Note: this driver was written without official documentation. TI ThunderLAN driver (external link -- Caldera/James Banks). Hewlett Packard 100VG driver updates (external link -- Yaroslav). Intel EtherExpress Pro/10 PCI driver (remote link). 3c509/3c529/3c579 ISA/MCA/EISA EtherLink III driver update. The driver now detects multiple cards when loaded as a module. AMD LANCE/PCnet driver update. The driver is now usable as a loadable module. Cirrus/Crystal/IBM CS8900 series driver (remote link). PCI NE2000 driver (local page) PCI NE2000 updates (remote link) Intel Etherexpress Pro 100, DEC 21X4* based board, 3Com EtherLink III PCI/EISA (3c590 3c592,3c595,3c597,3c900 3c905) Intel EtherExpress Pro/10 PCI9 With i82596 Chip) TI ThunderLan PCI NE2000 Packet Engines "Yellowfin" G-NIC SMC EtherPower II (EPIC/100 83c170 chip) RealTek RTL8129/8139 同时还有一个Ecom EtherLink III family的setup程序,没有用过,也 许不错. 如果这里你还是没有找到相应的网卡驱动,那么就去search 了.
  我推荐的方法是上Internet Newsgroup查.因为你绝对不是第一 个在Linux下用这个网卡的人,你的问题绝对有人在网络上问过.而且 有人回答过.那么问题就是如何找到他.最简单的方法是打开netscape 到去.这里的关键是关键字的选则,比如我有个卡的 芯片是DEC的21140,那么我考虑到21140已经是个长数字,于是输入 21140 linux来搜索,这里Linux是必须的,否则看到上千篇关于21140 win95的驱动问题,是不是很烦?结果21140 linux 很快就找到了有关 文章.
  如果这样也找不到驱动程序,或者有了驱动程序不知道怎么用,用 了出问题,再来版上问. 记得把具体的网卡型号,芯片型号,你作过什 么努力,什么问题等都写清楚,以便于他人帮助.

一. 问题的提出
  在 IBM 80x86 系列 PC 机中, 引导系统时对硬盘的寻址是采用的基本输入输出系统 (BIOS) 根据 CMOS 中存储的硬盘参数进行引导的. 读取了硬盘的主引导记录 (MBR, Main Boot Record) 后根据其内部存储的数据或者定位到相应的分区而由该分区的引导扇区中的完成对该分区中系统的引导, 或者是直接从 主引导分区中加载引导所需要的信息完成引导, 比如 LILO.由于历史的原因, 很多系统在引导时所使用的硬盘读取方式仍然为旧的中断调用 int 13h. 该中断中对硬盘的寻址方式以三维的方式出现, 这三维分别 为: 柱面, 磁头, 磁道(CYLs, HEADs, SECs). 其中柱面号是保存在中央处理器(CPU)的 CX 寄存器的高 10 位 (bit) 中, 占用 10 个二进制位(bit). 这样决定了其寻址范围只能是 0 - 1023. 随着现在计算机科学的发展, 硬盘容量的不断扩大, 该中断调用的局限也暴露出来. 这就是无法使用 LILO 引导平台在1024 柱面以后的 Linux 系统.
  事实上, 并非完全不能. 对硬盘的访问还可以采取另外一种形式, 就是使用线性地址空间, 不再使用柱面, 磁头, 磁道的三维地址定位方式. 这也是使用 GNU / Linux 系统提供的 LILO 对平台在硬盘任何位置的操作系统进行引导的关键.

 二. 对 LILO 的分析   作为一个成熟的操作系统的引导系统, LILO 当然可以采用上面所说的两种方式对硬盘中的系统进行引导. 当然一般的情况是使用常见的三维地址空间对硬盘进行访问, 而对于一些比较特殊的系统是需要使用线性模式对硬盘进行访问. 这时需要在要引导的系统对应的引导记录上加上参数, 以便 LILO 能够做 出正确的处理.   
   一般在进行 Linux 系统平台的时候, 执行到 LILO 的平台这一步时, 会`问你是否使用 linear 模式, 如果使用的话, 需要填上一些参数. 而这时的系统提示是问你是否有比较特殊的系统与 Linux 共存. 这个消息实际上迷惑了几乎所有人. (注: 这里所说的提示信息是 RedHat Linux 系列和一些在此基础上进 行改进版本的) 其实可以在这个时候加上一些特殊参数以实现一些特殊的功能.
  具体的什么参数对应什么功能已经超出了本文的范围, 你可以参考 LILO 的手册文档, 该文档已经由中国 Linux 论坛的 ZEO 翻译成中文. 这里只对其中的一个参数感兴趣, 就是硬盘的 CHS 参数.

三. 问题的解决   
  如果你有一块超过 8 G 的大硬盘, 并且需要把 Linux 平台在比较靠后的位置, 可以在平台的时候, 选择 linear 模式, 并且给它加上硬盘参数.
  平台时候的硬盘参数可以这样写: hd?=CYLs, HEADs, SECs
  其中的大写字母需要用实际的硬盘参数来替换, 这些参数可以从硬盘的标枪上查到, 也可以看看 BIOS 设置里硬盘参数对应 LBA 模式的那一行. 问号是根据硬盘确定的, 实际使用的时候, 它可以是 a, b, c, d 四个字母中的一个. 比如: hda=1869,63,255 这是 IBM 15.2G 硬盘的参数. 当然进入了 Linux 以后, 可以通过编辑 /etc/lilo.conf 加上这个文件, 然后运行一遍 lilo 达到同样的目的. 下面是本人未加参数前的 lilo.conf的内容:
boot = /dev/hda
map = /boot/map
install = /boot/boot.b
prompt timeout = 50
image = /boot/vmlinuz label = linux
root = /dev/hda1
initrd = /boot/initrd-2.2.12-20.img read-only 按照 linear 方式加入参数以后是如下格式: boot = /dev/hda map = /boot/map install = /boot/boot.b prompt linear $#@60;-----加进了这一行 timeout = 50 image = /boot/vmlinuz label = linux root = /dev/hda1 initrd = /boot/initrd-2.2.12-20.img read-only append = "hda=1869,63,255" $#@60;------加进了这一行  修改成这样以后, 保存, 在命令提示符下打 lilo 命令, 当再次起动 Linux系统的时候, LILO 就按照线性模式对系统进行引导.   除了在硬盘上寻址定位的方式不同以外, 对其他方面没有什么影响. 上面只是举个例子, 实际上是没有什么实用的, 但请注意, append参数是针对每个系统引导记录的, 一定要放在 image 的下面或者是 other 的下面,这样它才可以发挥作用.

四. 参考 LILO.CONF 中文手册页

作者:yuhj责任编辑:)

天极新媒体 最酷科技资讯

扫码赢大奖

评论

* 网友发言均非本站立场,本站不在评论栏推荐任何网店、经销商,谨防上当受骗!

新葡京娱乐网址推荐