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

📄 0130internet_connect.htm

📁 鸟哥的linux私房菜
💻 HTM
📖 第 1 页 / 共 5 页
字号:
	<hr /><a NAME="note_nic"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class="text_h2">Linux 的网路卡</span><br />
	<div class=block2>
		在 Linux 里面的各项装置几乎都是以档案名称来取代的,例如 /dev/hda 代表 IDE1 介面的第一个 master 硬碟等等。
		不过,<span class=text_import2>网路卡的代号 (Network Interface Card, NIC) 却是以模组对应装置名称来代替的,
		而预设的网路卡代号为 eth0</span> ,第二张网路卡则为 eth1 ,以此类推。<br /><br />

		我们知道网路卡其实是硬体,所以当然需要核心支援才能驱动他。
		一般来说,目前新版的 Linux distributions 预设可以支援的网路卡晶片组数量已经很完备了,
		包括大厂的 3COM, Intel 以及初阶的 RealTek, D-Link 等网路卡晶片都已经被支援,
		所以使用者可以很轻易的设定好他们的网路卡。不过,万一您的网路卡晶片组开发商不愿意释出开放源 
		(Open Source) 的硬体驱动程式,或者是该网路卡太新了,使得 Linux 核心来不及支援时,
		那么您就得要透过∶<br />
		<ul><span class=text_import2>
		<li><a href="http://linux.vbird.org/linux_basic/0540kernel.php">重新编译核心</a>
		<li><a href="http://linux.vbird.org/linux_basic/0540kernel.php#module">编译网路卡的核心模组</a>
		</span></ul>
		好让核心可以支援网路卡这块硬体啦!但是,重编核心或编译网路卡核心模组都不是简单的工作,
		而且有时原始码又可能无法在每部主机上面编译成功,所以万一您的网路卡真的不被预设的 Linux 
		网路晶片所支援,那么鸟哥真的建议直接换一块被 Linux 支援的网路卡吧,例如很便宜的螃蟹卡!
		免得花了太多时间在硬体确认上面,划不来的! ^_^<br /><br />

		 如果您是照鸟哥推荐的,使用 RLT 8139 晶片 ( RealTek 8139 ) 的网路卡 ( 就是螃蟹卡 ) 
		,那您应该在安装 Linux 的时候就已经捉到网路卡了,那真是恭喜您啦!
		因为您的网路卡应该已经可以正常的工作棉!那如果在安装的时候并没有捉到网路卡呢?
		该如何是好?那也不用担心,因为您也可以事后才安装网路卡的驱动程式呀!不过,因为 
		Linux 并不像 Windows 是那样的随插即用,所以需要动一些手术的! <br /><br />

		另外,其实有的时候 Linux 的预设网路卡模组可能无法完全 100%  的发挥网路卡的功能的,
		所以,有的时候您还是得必须要自行编译网路卡的模组才行喔!当然,
		那个网路卡的模组就得要自行由网路卡开发商的官方网站下载了!不过,如果您的网路卡是自行编译安装的,
		<span class=text_import2>那么每次重新安装其他版本的核心时,您都必须要自行重新手动编译过该模组</span>。
		因为模组与核心是有相关性的啊!<br /><br />

		好了,假设您的网路卡已经在主机上面,不论是内建的还是自行安插到 PCI 或 PCI-x 或 PCI-E 的介面上,
		那么如何确认该网路卡有被核心捉到呢?很简单啊!就利用 dmesg 来查阅即可∶<br />

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>dmesg | grep -in eth</span>
117:divert: not allocating divert_blk for non-ethernet device lo
<span class=term_write>171:divert: allocating divert_blk for eth0</span>
227:divert: not allocating divert_blk for non-ethernet device sit0
228:eth0: no IPv6 routers present

[root@linux ~]# <span class=term_command>dmesg | cat -n | less</span>
<span class=term_say>#...前面省略...</span>
   169  3c59x: Donald Becker and others. www.scyld.com/network/vortex.html
   170  0000:00:08.0: 3Com PCI 3c905C Tornado at 0xe800. Vers LK1.1.19
   171  divert: allocating divert_blk for eth0
<span class=term_say>#...后面省略...</span>
</pre></td></tr></table>

		透过这个 dmesg 可以发现系统在开机时确实有捉到网路卡,然后透过搜寻行号,就能够找到该网路卡的驱动模组;
		当然,您也可以透过 lspci 来查阅网路卡的相关模组呐!
		另外,您也可以透过这个 dmesg 了解到该张网路卡的代号喔!举例来说,鸟哥上面这个讯息就显示∶
		<span class=text_import2>我的这张网路卡代号是 eth0 </span><br />

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>lspci</span>
00:08.0 Ethernet controller: 3Com Corporation 3c905C-TX/TX-M [Tornado] (rev 74)
</pre></td></tr></table>

		看到了吧?鸟哥的某一部主机就是使用 3Com 的网路卡啊!Linux 系统本身就内建了 3c905C 这个驱动程式,
		所以鸟哥根本不需要自行安装驱动程式呐!真是高兴! ^_^
		那么这个 3c905 的驱动程式放在哪里啊?就是核心模组啊!在这个地方∶<br />

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>cd /lib/modules/`uname -r`/kernel/drivers/net</span>
[root@linux net]# <span class=term_command>modinfo 3c59x.ko</span>
filename:       3c59x.ko
author:         Donald Becker &lt;becker@scyld.com&gt;
description:    3Com 3c59x/3c9xx ethernet driver LK1.1.19 10 Nov 2002
license:        GPL
version:        LK1.1.19 DBFD1C112761D573276AC45
parm:           debug:3c59x debug level (0-6)
<span class=term_say>.....以下省略.....</span>
</pre></td></tr></table>

		你可以先以 lsmod 查询各个相关的模组后,再到这个地方来检查,或者是直接以上面这个目录下的档案,
		配合 lsmod 所显示出来的各个模组名称相对应,以取得各个网路卡的模组名称说!这样了解吗?
		OK 那你如何知道你的网路卡卡号呢?很简单啊!不管有没有启动你的网路卡,都可以使用∶
		『<span class=text_import2> ifconfig eth0 </span>』来查询你的网卡卡号。
		如果网路卡已经安装好了,那么请前往<a href="#connect_fix_IP">固定 IP 上网方式</a>去设定
		ifcfg-eth0 这个档案 (如果是新增的网卡,这个档案可能不会存在喔!,需要自己建立)。
		好了,万一你的网路卡无法被驱动,不过好在官方有提供相关的原始码时,
		您就可以自行编译啦!<br /><br />
	</div>


	<hr /><a NAME="note_compile"></a><img src="../images/penguin-s.gif" alt="小标题的图示" height="23" width="16" align="middle" /><span class="text_h2">编译网路卡驱动程式</span><br />
	<div class=block2>
		如果你买到的网路卡实在太新,导致 Linux 预设核心不支援,
		或者您实在是很想要一些官方网站提供的驱动程式的新功能,
		那实在就得要自行编译核心啦!
		事实上,如果您要新添购硬体时,请先查阅一下硬体包装上面是否提及支援 Linux 的字样,
		因为有些硬体厂商在推出新硬体时,常常会漏掉 Linux 驱动程式的撰写,
		如果包装上面有提到支援的话,那么至少您会获得官方网站所提供的驱动程式原始码啊! ^_^<br /><br />

		鸟哥以我们实验室内一部 P-4 内建 Gigabit 乙太网路卡的 CentOS Linux 系统来作介绍,
		这部主机的内建乙太网路使用的是 <a href="http://www.marvell.com" 
		target="_blank">Marvell</a> 的 88E8001 晶片,鸟哥到他们网站上面找到了一个 2006/04 
		释出的最新驱动程式来安装,该原始的档案名称为 install-8_40.tar.bz2 ,看到 .tar.bz2 
		就应该知道他是属于原始码,虽然鸟哥这部主机已经正确的捉到网路卡了,
		不过,我们还是来更新一下让这个模组成为最新的驱动程式吧! ^_^<br /><br />

		另外,记得啊,要编译就得要有 gcc, make, kernel-devel 等套件才行喔!不要说你忘了!
		赶紧回到<a href="../linux_basic/0520source_code_and_tarball.php">基础篇</a>里面看看先!
		假设您已经∶
		<ul><span class=text_import2><li>前往官方网站取得驱动程式的原始码了;</li>
		<li>已经在您的系统上面安装了 gcc, make, kernel-devel 等套件;</li></span></ul>
		那接下来的编译步骤是这样的∶<br />

		<ol>
		<li><span class=text_import1>解压缩与编译∶</span><br /><br />
		假设您下载下来的档案放置在 /root 内的话,那么使用 root 的身份进行如下工作吧∶<br />

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>cd /usr/src</span>
[root@linux src]# <span class=term_command>ln -s kernels/2.6.9-34.0.1.EL-smp-i686/ linux</span>
[root@linux src]# <span class=term_command>cd ~</span>
</pre></td></tr></table>

		上面这个步骤很重要!因为驱动程式的模组都会需要找到核心的包含档案与相关函式库,
		而一般来说, Linux kernel 2.6 以后的版本,则都会预设将核心原始码放在
		<span class=text_import2>/usr/src/kernels/(version)</span> 这个目录内,但一般程式却是假设核心原始码在 
		<span class=text_import2>/usr/src/linux</span>,因此我们必须要先作个手术,将原始码与 
		/usr/src/linux 作个连结啊!请注意,那个原始码请依照您的核心版本与 Linux distribution 之公布为准。<br />

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>tar -jxvf install-8_40.tar.bz2</span>
[root@linux ~]# <span class=term_command>cd DriverInstall</span>
<span class=term_say># 此时在该目录下有个 README 的档案,记得看一看,这个档案内会说明很多资讯,
# 包括如何编译,以及这个模组所支援的晶片组哩!</span>
[root@linux DriverInstall]# <span class=term_command>./install.sh</span>
</pre></td></tr></table>

		这个模组写的比较人性化,因为他有给予一个可直接安装测试的 script,
		所以我们可以直接执行这个指令即可,很单纯吧! ^_^ 。不过记得,
		这些动作请在主机前进行。因为这个 script 会主动的重新启动网路卡喔!
		所以如果你是在网路上连线到此主机上面动作的话,嘿嘿!那可是会失败的!
		这个指令会有很多的选项在里面,请依序选择∶
		<ul><li>1) installation<li>y(install)</ul>
		然后这个 script 便会主动的进行编译、模组卸除以及模组安装到
		<span class=text_import2>/lib/modules/`uname -r`/kernel/drivers/net</span> 这个目录中,
		并且尝试载入这个模组,以及启动网路卡喔!如果一切无误,您就会看到如下画面∶<br />

<table class="term"><tr><td class="term"><pre>
 eth0: network connection up using port A
     speed:           1000
     autonegotiation: yes
     duplex mode:     full
     flowctrl:        symmetric
     role:            slave
     irq moderation:  disabled
     scatter-gather:  enabled
     tx-checksum:     enabled
     rx-checksum:     enabled
     rx-polling:      enabled
</pre></td></tr></table>

		这样就算安装妥当棉!很简单吧! ^_^<br /><br /></li>

		<li><span class=text_import1>模组之测试与处理</span><br /><br />
		事实上,刚刚我们那个模组其实已经主动的载入到我们的系统当中了,
		不过,如果您所取得的原始码并没有附上这么一支人性化的 script 的话,那么您就得要自行进行底下的动作了。<br />

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>ls -l</span>
drwxr-xr-x  2 root root   4096 Jul 20 11:57 sk98lin
[root@linux ~]# <span class=term_command>ls -l sk98lin</span>
-rw-r--r--  1 root root 2666344 Jul 20 11:57 sk98lin.ko
<span class=term_say># 上面那个目录假设是我编译出来的模组,里面还会有一个档案喔!那个档案就是
# sk98lin.ko ,要注意,新的 2.6 版的核心模组副档名都变成 .ko 的格式了!</span>

[root@linux ~]# <span class=term_command>cp -a sk98lin /lib/modules/`uname -r`/kernel/drivers/net</span>
<span class=term_say># 注意啊!整个网路卡驱动模组就是放在上面的目录中,不要写错了。</span>

[root@linux ~]# <span class=term_command>depmod -a</span>
<span class=term_say># 将所有的模组进行重新分析的工作!建立关连档案</span>

[root@linux ~]# <span class=term_command>lsmod | grep 'sk98lin'</span>
<span class=term_say># 先确认『sk98lin』这个模组不存在,然后就可以开始测试∶</span>

[root@linux ~]# <span class=term_command>modprobe sk98lin</span>
[root@linux ~]# <span class=term_command>lsmod | grep 'sk98lin'</span>
<span class=term_say># 如果有相关的字样跑出来时,就表示这个模组可以顺利的被载入啦!</span>
</pre></td></tr></table>

		如果可以顺利载入的话,恭喜您,您所自行编译的驱动程式已经搞定啦!
		不过,当有新版本的核心释出时,您也安装了新版的核心,那么上面的动作您就得要再进行一次,
		为什么呢?想一想,刚刚您将编译出来的驱动程式模组放在哪里?
		然后编译的时候参考的核心原始码又是在哪里?那您就会晓得『为什么』了! ^_^<br /><br /></li>

		<li><span class=text_import1>设定开机自动启动网路卡模组</span><br /><br />
		我们前面提到,Linux 的网路卡其实仅是一个代号,并不是类似硬碟的装置档案,所以,
		我们必须要指定这个代号与模组的对应才行,在 CentOS (Red Hat 系统) 的对应是使用 /etc/modprobe.conf 
		,至于旧版的 2.4 核心中,则使用的是 /etc/modules.conf ,注意一下您的核心版本。
		鸟哥的 CentOS 4.3 使用的是 /etc/modprobe.conf ,所以我就得这么做∶<br />

<table class="term"><tr><td class="term"><pre>
[root@linux ~]# <span class=term_command>vi /etc/modprobe.conf</span>
<span class=term_say># 修改或增加底下这一行吧!</span>
<span class=term_write>alias eth0 sk98lin</span>

⌨️ 快捷键说明

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