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