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.conf: 49 alias eth0 dl2k 506. 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] 537. Driver will automatically load and configure at next boot time. 54 55Compiling the Driver 56==================== 57 In Linux, NIC drivers are most commonly configured as loadable modules. 58The approach of building a monolithic kernel has become obsolete. The driver 59can be compiled as part of a monolithic kernel, but is strongly discouraged. 60The remainder of this section assumes the driver is built as a loadable module. 61In the Linux environment, it is a good idea to rebuild the driver from the 62source instead of relying on a precompiled version. This approach provides 63better reliability since a precompiled driver might depend on libraries or 64kernel features that are not present in a given Linux installation. 65 66The 3 files necessary to build Linux device driver are dl2k.c, dl2k.h and 67Makefile. To compile, the Linux installation must include the gcc compiler, 68the kernel source, and the kernel headers. The Linux driver supports Linux 69Kernels 2.4.7. Copy the files to a directory and enter the following command 70to compile and link the driver: 71 72CD-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 84Floppy 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 94Installing 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 <optional parameter> ; 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 modprobe.conf 158 or modules.conf (for 2.4) in the /etc directory. Add the following lines: 159 160 alias ethx dl2k 161 options dl2k <optional parameters> 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 174Parameter Description 175===================== 176You can install this driver without any additional parameter. However, if you 177are going to have extensive functions then it is necessary to set extra 178parameter. Below is a list of the command line parameters supported by the 179Linux device 180driver. 181 182mtu=packet_size - Specifies the maximum packet size. default 183 is 1500. 184 185media=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 0 Autosensing active media. 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 205vlan=n - Specifies the VLAN ID. If vlan=0, the 206 Virtual Local Area Network (VLAN) function is 207 disable. 208 209jumbo=[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 217rx_coalesce=m - Number of rx frame handled each interrupt. 218rx_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 bottleneck 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 231tx_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 236tx_flow=[1|0] - Specifies the Tx flow control. If tx_flow=0, 237 the Tx flow control disable else driver 238 autodetect. 239rx_flow=[1|0] - Specifies the Rx flow control. If rx_flow=0, 240 the Rx flow control enable else driver 241 autodetect. 242 243 244Configuration Script Sample 245=========================== 246Here is a sample of a simple configuration script: 247 248DEVICE=eth0 249USERCTL=no 250ONBOOT=yes 251POOTPROTO=none 252BROADCAST=207.200.5.255 253NETWORK=207.200.5.0 254NETMASK=255.255.255.0 255IPADDR=207.200.5.2 256 257 258Troubleshooting 259=============== 260Q1. 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 272Q2: 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 282