1 |
1275 |
phoenix |
|
2 |
|
|
D-Link DL2000-based Gigabit Ethernet Adapter Installation
|
3 |
|
|
for Linux
|
4 |
|
|
May 23, 2002
|
5 |
|
|
|
6 |
|
|
Contents
|
7 |
|
|
========
|
8 |
|
|
- Compatibility List
|
9 |
|
|
- Quick Install
|
10 |
|
|
- Compiling the Driver
|
11 |
|
|
- Installing the Driver
|
12 |
|
|
- Option parameter
|
13 |
|
|
- Configuration Script Sample
|
14 |
|
|
- Troubleshooting
|
15 |
|
|
|
16 |
|
|
|
17 |
|
|
Compatibility List
|
18 |
|
|
=================
|
19 |
|
|
Adapter Support:
|
20 |
|
|
|
21 |
|
|
D-Link DGE-550T Gigabit Ethernet Adapter.
|
22 |
|
|
D-Link DGE-550SX Gigabit Ethernet Adapter.
|
23 |
|
|
D-Link DL2000-based Gigabit Ethernet Adapter.
|
24 |
|
|
|
25 |
|
|
|
26 |
|
|
The driver support Linux kernel 2.4.7 later. We had tested it
|
27 |
|
|
on the environments below.
|
28 |
|
|
|
29 |
|
|
. Red Hat v6.2 (update kernel to 2.4.7)
|
30 |
|
|
. Red Hat v7.0 (update kernel to 2.4.7)
|
31 |
|
|
. Red Hat v7.1 (kernel 2.4.7)
|
32 |
|
|
. Red Hat v7.2 (kernel 2.4.7-10)
|
33 |
|
|
|
34 |
|
|
|
35 |
|
|
Quick Install
|
36 |
|
|
=============
|
37 |
|
|
Install linux driver as following command:
|
38 |
|
|
|
39 |
|
|
1. make all
|
40 |
|
|
2. insmod dl2k.o
|
41 |
|
|
3. ifconfig eth0 up 10.xxx.xxx.xxx netmask 255.0.0.0
|
42 |
|
|
^^^^^^^^^^^^^^^\ ^^^^^^^^\
|
43 |
|
|
IP NETMASK
|
44 |
|
|
Now eth0 should active, you can test it by "ping" or get more information by
|
45 |
|
|
"ifconfig". If tested ok, continue the next step.
|
46 |
|
|
|
47 |
|
|
4. cp dl2k.o /lib/modules/`uname -r`/kernel/drivers/net
|
48 |
|
|
5. Add the following lines to /etc/modules.conf:
|
49 |
|
|
alias eth0 dl2k
|
50 |
|
|
6. Run "netconfig" or "netconf" to create configuration script ifcfg-eth0
|
51 |
|
|
located at /etc/sysconfig/network-scripts or create it manually.
|
52 |
|
|
[see - Configuration Script Sample]
|
53 |
|
|
7. Driver will automatically load and configure at next boot time.
|
54 |
|
|
|
55 |
|
|
Compiling the Driver
|
56 |
|
|
====================
|
57 |
|
|
In Linux, NIC drivers are most commonly configured as loadable modules.
|
58 |
|
|
The approach of building a monolithic kernel has become obsolete. The driver
|
59 |
|
|
can be compiled as part of a monolithic kernel, but is strongly discouraged.
|
60 |
|
|
The remainder of this section assumes the driver is built as a loadable module.
|
61 |
|
|
In the Linux environment, it is a good idea to rebuild the driver from the
|
62 |
|
|
source instead of relying on a precompiled version. This approach provides
|
63 |
|
|
better reliability since a precompiled driver might depend on libraries or
|
64 |
|
|
kernel features that are not present in a given Linux installation.
|
65 |
|
|
|
66 |
|
|
The 3 files necessary to build Linux device driver are dl2k.c, dl2k.h and
|
67 |
|
|
Makefile. To compile, the Linux installation must include the gcc compiler,
|
68 |
|
|
the kernel source, and the kernel headers. The Linux driver supports Linux
|
69 |
|
|
Kernels 2.4.7. Copy the files to a directory and enter the following command
|
70 |
|
|
to compile and link the driver:
|
71 |
|
|
|
72 |
|
|
CD-ROM drive
|
73 |
|
|
------------
|
74 |
|
|
|
75 |
|
|
[root@XXX /] mkdir cdrom
|
76 |
|
|
[root@XXX /] mount -r -t iso9660 -o conv=auto /dev/cdrom /cdrom
|
77 |
|
|
[root@XXX /] cd root
|
78 |
|
|
[root@XXX /root] mkdir dl2k
|
79 |
|
|
[root@XXX /root] cd dl2k
|
80 |
|
|
[root@XXX dl2k] cp /cdrom/linux/dl2k.tgz /root/dl2k
|
81 |
|
|
[root@XXX dl2k] tar xfvz dl2k.tgz
|
82 |
|
|
[root@XXX dl2k] make all
|
83 |
|
|
|
84 |
|
|
Floppy disc drive
|
85 |
|
|
-----------------
|
86 |
|
|
|
87 |
|
|
[root@XXX /] cd root
|
88 |
|
|
[root@XXX /root] mkdir dl2k
|
89 |
|
|
[root@XXX /root] cd dl2k
|
90 |
|
|
[root@XXX dl2k] mcopy a:/linux/dl2k.tgz /root/dl2k
|
91 |
|
|
[root@XXX dl2k] tar xfvz dl2k.tgz
|
92 |
|
|
[root@XXX dl2k] make all
|
93 |
|
|
|
94 |
|
|
Installing the Driver
|
95 |
|
|
=====================
|
96 |
|
|
|
97 |
|
|
Manual Installation
|
98 |
|
|
-------------------
|
99 |
|
|
Once the driver has been compiled, it must be loaded, enabled, and bound
|
100 |
|
|
to a protocol stack in order to establish network connectivity. To load a
|
101 |
|
|
module enter the command:
|
102 |
|
|
|
103 |
|
|
insmod dl2k.o
|
104 |
|
|
|
105 |
|
|
or
|
106 |
|
|
|
107 |
|
|
insmod dl2k.o ; add parameter
|
108 |
|
|
|
109 |
|
|
===============================================================
|
110 |
|
|
example: insmod dl2k.o media=100mbps_hd
|
111 |
|
|
or insmod dl2k.o media=3
|
112 |
|
|
or insmod dl2k.o media=3,2 ; for 2 cards
|
113 |
|
|
===============================================================
|
114 |
|
|
|
115 |
|
|
Please reference the list of the command line parameters supported by
|
116 |
|
|
the Linux device driver below.
|
117 |
|
|
|
118 |
|
|
The insmod command only loads the driver and gives it a name of the form
|
119 |
|
|
eth0, eth1, etc. To bring the NIC into an operational state,
|
120 |
|
|
it is necessary to issue the following command:
|
121 |
|
|
|
122 |
|
|
ifconfig eth0 up
|
123 |
|
|
|
124 |
|
|
Finally, to bind the driver to the active protocol (e.g., TCP/IP with
|
125 |
|
|
Linux), enter the following command:
|
126 |
|
|
|
127 |
|
|
ifup eth0
|
128 |
|
|
|
129 |
|
|
Note that this is meaningful only if the system can find a configuration
|
130 |
|
|
script that contains the necessary network information. A sample will be
|
131 |
|
|
given in the next paragraph.
|
132 |
|
|
|
133 |
|
|
The commands to unload a driver are as follows:
|
134 |
|
|
|
135 |
|
|
ifdown eth0
|
136 |
|
|
ifconfig eth0 down
|
137 |
|
|
rmmod dl2k.o
|
138 |
|
|
|
139 |
|
|
The following are the commands to list the currently loaded modules and
|
140 |
|
|
to see the current network configuration.
|
141 |
|
|
|
142 |
|
|
lsmod
|
143 |
|
|
ifconfig
|
144 |
|
|
|
145 |
|
|
|
146 |
|
|
Automated Installation
|
147 |
|
|
----------------------
|
148 |
|
|
This section describes how to install the driver such that it is
|
149 |
|
|
automatically loaded and configured at boot time. The following description
|
150 |
|
|
is based on a Red Hat 6.0/7.0 distribution, but it can easily be ported to
|
151 |
|
|
other distributions as well.
|
152 |
|
|
|
153 |
|
|
Red Hat v6.x/v7.x
|
154 |
|
|
-----------------
|
155 |
|
|
1. Copy dl2k.o to the network modules directory, typically
|
156 |
|
|
/lib/modules/2.x.x-xx/net or /lib/modules/2.x.x/kernel/drivers/net.
|
157 |
|
|
2. Locate the boot module configuration file, most commonly modules.conf
|
158 |
|
|
or conf.modules in the /etc directory. Add the following lines:
|
159 |
|
|
|
160 |
|
|
alias ethx dl2k
|
161 |
|
|
options dl2k
|
162 |
|
|
|
163 |
|
|
where ethx will be eth0 if the NIC is the only ethernet adapter, eth1 if
|
164 |
|
|
one other ethernet adapter is installed, etc. Refer to the table in the
|
165 |
|
|
previous section for the list of optional parameters.
|
166 |
|
|
3. Locate the network configuration scripts, normally the
|
167 |
|
|
/etc/sysconfig/network-scripts directory, and create a configuration
|
168 |
|
|
script named ifcfg-ethx that contains network information.
|
169 |
|
|
4. Note that for most Linux distributions, Red Hat included, a configuration
|
170 |
|
|
utility with a graphical user interface is provided to perform steps 2
|
171 |
|
|
and 3 above.
|
172 |
|
|
|
173 |
|
|
|
174 |
|
|
Parameter Description
|
175 |
|
|
=====================
|
176 |
|
|
You can install this driver without any addtional parameter. However, if you
|
177 |
|
|
are going to have extensive functions then it is necessary to set extra
|
178 |
|
|
parameter. Below is a list of the command line parameters supported by the
|
179 |
|
|
Linux device
|
180 |
|
|
driver.
|
181 |
|
|
|
182 |
|
|
mtu=packet_size - Specifies the maximum packet size. default
|
183 |
|
|
is 1500.
|
184 |
|
|
|
185 |
|
|
media=media_type - Specifies the media type the NIC operates at.
|
186 |
|
|
autosense Autosensing active media.
|
187 |
|
|
10mbps_hd 10Mbps half duplex.
|
188 |
|
|
10mbps_fd 10Mbps full duplex.
|
189 |
|
|
100mbps_hd 100Mbps half duplex.
|
190 |
|
|
100mbps_fd 100Mbps full duplex.
|
191 |
|
|
1000mbps_fd 1000Mbps full duplex.
|
192 |
|
|
1000mbps_hd 1000Mbps half duplex.
|
193 |
|
|
|
194 |
|
|
1 10Mbps half duplex.
|
195 |
|
|
2 10Mbps full duplex.
|
196 |
|
|
3 100Mbps half duplex.
|
197 |
|
|
4 100Mbps full duplex.
|
198 |
|
|
5 1000Mbps half duplex.
|
199 |
|
|
6 1000Mbps full duplex.
|
200 |
|
|
|
201 |
|
|
By default, the NIC operates at autosense.
|
202 |
|
|
1000mbps_fd and 1000mbps_hd types are only
|
203 |
|
|
available for fiber adapter.
|
204 |
|
|
|
205 |
|
|
vlan=n - Specifies the VLAN ID. If vlan=0, the
|
206 |
|
|
Virtual Local Area Network (VLAN) function is
|
207 |
|
|
disable.
|
208 |
|
|
|
209 |
|
|
jumbo=[0|1] - Specifies the jumbo frame support. If jumbo=1,
|
210 |
|
|
the NIC accept jumbo frames. By default, this
|
211 |
|
|
function is disabled.
|
212 |
|
|
Jumbo frame usually improve the performance
|
213 |
|
|
int gigabit.
|
214 |
|
|
This feature need jumbo frame compatible
|
215 |
|
|
remote.
|
216 |
|
|
|
217 |
|
|
rx_coalesce=m - Number of rx frame handled each interrupt.
|
218 |
|
|
rx_timeout=n - Rx DMA wait time for an interrupt.
|
219 |
|
|
If set rx_coalesce > 0, hardware only assert
|
220 |
|
|
an interrupt for m frames. Hardware won't
|
221 |
|
|
assert rx interrupt until m frames received or
|
222 |
|
|
reach timeout of n * 640 nano seconds.
|
223 |
|
|
Set proper rx_coalesce and rx_timeout can
|
224 |
|
|
reduce congestion collapse and overload which
|
225 |
|
|
has been a bottlenect for high speed network.
|
226 |
|
|
|
227 |
|
|
For example, rx_coalesce=10 rx_timeout=800.
|
228 |
|
|
that is, hardware assert only 1 interrupt
|
229 |
|
|
for 10 frames received or timeout of 512 us.
|
230 |
|
|
|
231 |
|
|
tx_coalesce=n - Number of tx frame handled each interrupt.
|
232 |
|
|
Set n > 1 can reduce the interrupts
|
233 |
|
|
congestion usually lower performance of
|
234 |
|
|
high speed network card. Default is 16.
|
235 |
|
|
|
236 |
|
|
tx_flow=[1|0] - Specifies the Tx flow control. If tx_flow=0,
|
237 |
|
|
the Tx flow control disable else driver
|
238 |
|
|
autodetect.
|
239 |
|
|
rx_flow=[1|0] - Specifies the Rx flow control. If rx_flow=0,
|
240 |
|
|
the Rx flow control enable else driver
|
241 |
|
|
autodetect.
|
242 |
|
|
|
243 |
|
|
|
244 |
|
|
Configuration Script Sample
|
245 |
|
|
===========================
|
246 |
|
|
Here is a sample of a simple configuration script:
|
247 |
|
|
|
248 |
|
|
DEVICE=eth0
|
249 |
|
|
USERCTL=no
|
250 |
|
|
ONBOOT=yes
|
251 |
|
|
POOTPROTO=none
|
252 |
|
|
BROADCAST=207.200.5.255
|
253 |
|
|
NETWORK=207.200.5.0
|
254 |
|
|
NETMASK=255.255.255.0
|
255 |
|
|
IPADDR=207.200.5.2
|
256 |
|
|
|
257 |
|
|
|
258 |
|
|
Troubleshooting
|
259 |
|
|
===============
|
260 |
|
|
Q1. Source files contain ^ M behind every line.
|
261 |
|
|
Make sure all files are Unix file format (no LF). Try the following
|
262 |
|
|
shell command to convert files.
|
263 |
|
|
|
264 |
|
|
cat dl2k.c | col -b > dl2k.tmp
|
265 |
|
|
mv dl2k.tmp dl2k.c
|
266 |
|
|
|
267 |
|
|
OR
|
268 |
|
|
|
269 |
|
|
cat dl2k.c | tr -d "\r" > dl2k.tmp
|
270 |
|
|
mv dl2k.tmp dl2k.c
|
271 |
|
|
|
272 |
|
|
Q2: Could not find header files (*.h) ?
|
273 |
|
|
To compile the driver, you need kernel header files. After
|
274 |
|
|
installing the kernel source, the header files are usually located in
|
275 |
|
|
/usr/src/linux/include, which is the default include directory configured
|
276 |
|
|
in Makefile. For some distributions, there is a copy of header files in
|
277 |
|
|
/usr/src/include/linux and /usr/src/include/asm, that you can change the
|
278 |
|
|
INCLUDEDIR in Makefile to /usr/include without installing kernel source.
|
279 |
|
|
Note that RH 7.0 didn't provide correct header files in /usr/include,
|
280 |
|
|
including those files will make a wrong version driver.
|
281 |
|
|
|