1 2 D-Link DL2000-based Gigabit Ethernet Adapter Installation 3 for Linux 4 May 23, 2002 5 6Contents 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 17Compatibility List 18================= 19Adapter Support: 20 21D-Link DGE-550T Gigabit Ethernet Adapter. 22D-Link DGE-550SX Gigabit Ethernet Adapter. 23D-Link DL2000-based Gigabit Ethernet Adapter. 24 25 26The driver support Linux kernel 2.4.7 later. We had tested it 27on 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 35Quick Install 36============= 37Install linux driver as following command: 38 391. make all 402. insmod dl2k.ko 413. ifconfig eth0 up 10.xxx.xxx.xxx netmask 255.0.0.0 42 ^^^^^^^^^^^^^^^\ ^^^^^^^^\ 43 IP NETMASK 44Now eth0 should active, you can test it by "ping" or get more information by 45"ifconfig". If tested ok, continue the next step. 46 474. cp dl2k.ko /lib/modules/`uname -r`/kernel/drivers/net 485. Add the following line to /etc/modprobe.d/dl2k.conf: 49 alias eth0 dl2k 506. Run depmod to updated module indexes. 517. Run "netconfig" or "netconf" to create configuration script ifcfg-eth0 52 located at /etc/sysconfig/network-scripts or create it manually. 53 [see - Configuration Script Sample] 548. Driver will automatically load and configure at next boot time. 55 56Compiling the Driver 57==================== 58 In Linux, NIC drivers are most commonly configured as loadable modules. 59The approach of building a monolithic kernel has become obsolete. The driver 60can be compiled as part of a monolithic kernel, but is strongly discouraged. 61The remainder of this section assumes the driver is built as a loadable module. 62In the Linux environment, it is a good idea to rebuild the driver from the 63source instead of relying on a precompiled version. This approach provides 64better reliability since a precompiled driver might depend on libraries or 65kernel features that are not present in a given Linux installation. 66 67The 3 files necessary to build Linux device driver are dl2k.c, dl2k.h and 68Makefile. To compile, the Linux installation must include the gcc compiler, 69the kernel source, and the kernel headers. The Linux driver supports Linux 70Kernels 2.4.7. Copy the files to a directory and enter the following command 71to compile and link the driver: 72 73CD-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 85Floppy 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 95Installing 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. 158 2. Locate the boot module configuration file, most commonly in the 159 /etc/modprobe.d/ directory. Add the following lines: 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 175Parameter Description 176===================== 177You can install this driver without any additional parameter. However, if you 178are going to have extensive functions then it is necessary to set extra 179parameter. Below is a list of the command line parameters supported by the 180Linux device 181driver. 182 183mtu=packet_size - Specifies the maximum packet size. default 184 is 1500. 185 186media=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 206vlan=n - Specifies the VLAN ID. If vlan=0, the 207 Virtual Local Area Network (VLAN) function is 208 disable. 209 210jumbo=[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 218rx_coalesce=m - Number of rx frame handled each interrupt. 219rx_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 226 has been a bottleneck for high speed network. 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 232tx_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 237tx_flow=[1|0] - Specifies the Tx flow control. If tx_flow=0, 238 the Tx flow control disable else driver 239 autodetect. 240rx_flow=[1|0] - Specifies the Rx flow control. If rx_flow=0, 241 the Rx flow control enable else driver 242 autodetect. 243 244 245Configuration Script Sample 246=========================== 247Here is a sample of a simple configuration script: 248 249DEVICE=eth0 250USERCTL=no 251ONBOOT=yes 252POOTPROTO=none 253BROADCAST=207.200.5.255 254NETWORK=207.200.5.0 255NETMASK=255.255.255.0 256IPADDR=207.200.5.2 257 258 259Troubleshooting 260=============== 261Q1. 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 273Q2: 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 283