一. 查看自己系统的内核版本.
[root@kindgeorge root]# uname -r
2.4.18-3
我这里是redhat7.3的,内核2.4.18-3
一般来说,这个内核驱动程序的模块会放在 /lib/modules/2.4.18-3/kernel/drivers/net
二.确定系统是否已经安装下面包
1.由于编译需要用到内核的源代码包和编译程序gcc.所以如果没有的话,要先装.
查看:
[root@kindgeorge root]# rpm -qa|grep kernel
kernel-2.4.18-3
kernel-source-2.4.18-3
[root@kindgeorge root]# rpm -qa|grep gcc (gcc是编译用)
gcc-2.96-110
gcc-g77-2.96-110
gcc-c++-2.96-110
一般装了内核源包的话,都会在出现/usr/src/linux-2.4,同路径下会有linux-2.4.18-3的文件实际目录.
2.如果没有的话,就用原来安装盘上的文件安装,会去下载个相同内核源包安装吧
rpm -ivh kernel-source-2.4.18-3.i386.rpm
......
三. 取得驱动程序和编译
1. 可以重厂家提供的光盘提供,把光盘上的linux目录下的dlkfet-4.24.tar.gz 拷贝过来用.
2. 从网上下载网络卡驱动程序,一般厂家的网站都提供下载程序的.
例如: http://www.d-link.com.cn 上有下载.
[root@kindgeorge root]# cp dlkfet-4.24.tar.gz /usr/src
[root@kindgeorge root]# cd /usr/src/
[root@kindgeorge src]# tar -zxvf dlkfet-4.24.tar.gz
dlkfet-4.24/
dlkfet-4.24/rhine_main.c
dlkfet-4.24/Makefile
dlkfet-4.24/vmns_drv.h
dlkfet-4.24/rhine.h
dlkfet-4.24/.depend.mak
dlkfet-4.24/rhine_vmns.c
dlkfet-4.24/rhine_proc.h
dlkfet-4.24/rhine_proc.c
dlkfet-4.24/rhine_vmns.h
dlkfet-4.24/kcompat.h
dlkfet-4.24/rhine_cfg.h
dlkfet-4.24/.depend
dlkfet-4.24/rhine_wol.c
dlkfet-4.24/rhine_wol.h
dlkfet-4.24/linux.txt
3.请留意一开始是没有.o文件的. 我们编译前可以看看目录的linux.txt,是一个包含介绍安装说明.在进入目录后,执行make进行编译.
[root@kindgeorge src]# cd dlkfet-4.24
[root@kindgeorge dlkfet-4.24]# make
[root@kindgeorge dlkfet-4.24]# ll (编译后查看一下)
total 320
-rw-r--r-- 1 root root 7473 Jan 15 2003 kcompat.h
-rw-r--r-- 1 root root 11491 Jan 20 2003 linux.txt
-rw-r--r-- 1 root root 5219 Dec 10 2002 Makefile
-rw-r--r-- 1 root root 1818 Jan 16 2003 rhine_cfg.h
-rw-r--r-- 1 root root 48715 May 24 18:31 rhinefet.o
-rw-r--r-- 1 root root 42044 Jan 15 2003 rhine.h
-rw-r--r-- 1 root root 78996 Jan 16 2003 rhine_main.c
-rw-r--r-- 1 root root 32760 May 24 18:31 rhine_main.o
-rw-r--r-- 1 root root 14980 Jan 15 2003 rhine_proc.c
-rw-r--r-- 1 root root 1672 Jan 15 2003 rhine_proc.h
-rw-r--r-- 1 root root 12336 May 24 18:31 rhine_proc.o
-rw-r--r-- 1 root root 9172 Jan 15 2003 rhine_vmns.c
-rw-r--r-- 1 root root 1106 Jan 15 2003 rhine_vmns.h
-rw-r--r-- 1 root root 3792 May 24 18:31 rhine_vmns.o
-rw-r--r-- 1 root root 7536 Jan 15 2003 rhine_wol.c
-rw-r--r-- 1 root root 1529 Jan 15 2003 rhine_wol.h
-rw-r--r-- 1 root root 3488 May 24 18:31 rhine_wol.o
-rw-r--r-- 1 root root 6824 Jan 15 2003 vmns_drv.h
4.经过编译后,会编译出一个rhinefet.o 文件,这个就是驱动模块,我们把它拷贝到相应地方:
[root@kindgeorge dlkfet-4.24]#cp rhinefet.o /lib/modules/2.4.18-3/kernel/drivers/net
[root@kindgeorge dlkfet-4.24]# depmod -a
5.测试
(1)可以用命令modprobe rhinefet 或 insmod rhinefet.o 加载.如果没出错信息说明ok.
(2) 用命令lsmod 可以看看是否已经加载了.
[root@kindgeorge dlkfet-4.24]# lsmod
Module Size Used by Not tainted
rhinefet 38752 1
8139too 16448 1
mii 2408 0 [8139too]
这样,看到rhinefet模块已经加载了,基本上,这样就证明已经编译成功.
6. 让它开机时加载
[root@kindgeorge dlkfet-4.24]# vi /etc/modules.conf
在后面加上一行: alias eth1 rhinefet
7. 配置一下网络
[root@kindgeorge dlkfet-4.24]# vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=static
IPADDR=192.168.4.202
NETMASK=255.255.255.0
NETWORK=192.168.4.0
GATEWAY=192.168.4.250
BROADCAST=192.168.4.255
ONBOOT=yes
8.启动网卡,然后用ifconfig查看,
ifup eth1
[root@kindgeorge dlkfet-4.24]# ifconfig
eth0 Link encap:Ethernet HWaddr 00:0A:E6:30:0D:0E
inet addr:211.239.218.153 Bcast:211.239.218.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3780479 errors:0 dropped:0 overruns:0 frame:0
TX packets:3833860 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:1118112324 (1066.3 Mb) TX bytes:1111887387 (1060.3 Mb)
Interrupt:11
eth1 Link encap:Ethernet HWaddr 00:0F:3D:82:EC:1D
inet addr:192.168.4.202 Bcast:192.168.4.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:749312 errors:0 dropped:0 overruns:0 frame:0
TX packets:976174 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:43695059 (41.6 Mb) TX bytes:1472142037 (1403.9 Mb)
Interrupt:5 Base address:0xe000
9.重新启动机器,可以自动加载和使用了.大功告成.
五. 按照安装说明的方法自动编译安装.
在 "三.3" 中我们用make 编译,然后进行手动的拷贝. 实际上在linux.txt中的安装说明提到用make install .
那我们来看看这种方法系统都做了什么吧.
[root@firewall1 dlkfet-4.24]# make install
gcc-Wall -DLINUX -D__KERNEL__ -DMODULE -DEXPORT_SYMTAB -D__NO_VERSION__-O2 -pipe -I/lib/modules/2.4.18-3/build/include -I. -Wstrict-prototypes-fomit-frame-pointer -DMODVERSIONS -include/lib/modules/2.4.18-3/build/include/linux/modversions.h -DVMNS -c -orhine_main.o rhine_main.c
gcc -Wall -DLINUX -D__KERNEL__ -DMODULE-DEXPORT_SYMTAB -D__NO_VERSION__ -O2 -pipe-I/lib/modules/2.4.18-3/build/include -I. -Wstrict-prototypes-fomit-frame-pointer -DMODVERSIONS -include/lib/modules/2.4.18-3/build/include/linux/modversions.h -DVMNS -c -orhine_proc.o rhine_proc.c
gcc -Wall -DLINUX -D__KERNEL__ -DMODULE-DEXPORT_SYMTAB -D__NO_VERSION__ -O2 -pipe-I/lib/modules/2.4.18-3/build/include -I. -Wstrict-prototypes-fomit-frame-pointer -DMODVERSIONS -include/lib/modules/2.4.18-3/build/include/linux/modversions.h -DVMNS -c -orhine_wol.o rhine_wol.c
gcc -Wall -DLINUX -D__KERNEL__ -DMODULE-DEXPORT_SYMTAB -D__NO_VERSION__ -O2 -pipe-I/lib/modules/2.4.18-3/build/include -I. -Wstrict-prototypes-fomit-frame-pointer -DMODVERSIONS -include/lib/modules/2.4.18-3/build/include/linux/modversions.h -DVMNS -c -orhine_vmns.o rhine_vmns.c
**************************************************
Build options:
VERSION 2.4.18-3
SMP Disabled
VMNS Enabled
***************************************************
mkdir -p /lib/modules/2.4.18-3/kernel/drivers/net
install -m 644 -o root rhinefet.o /lib/modules/2.4.18-3/kernel/drivers/net
***** Move official driver via-rhine.o to via-rhine.o.backup
mv /lib/modules/2.4.18-3/kernel/drivers/net/via-rhine.o /lib/modules/2.4.18-3/kernel/drivers/net/via-rhine.o.backup
/sbin/depmod -a || true
按照上面的结果显示是这样的一个过程: