| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | 
 | 48 | 5. Add the following line to /etc/modprobe.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 <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 |  | 
 | 174 | Parameter Description | 
 | 175 | ===================== | 
| Matt LaPlante | 3f6dee9 | 2006-10-03 22:45:33 +0200 | [diff] [blame] | 176 | You can install this driver without any additional parameter. However, if you | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 | 				  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 |  | 
 | 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 | 
| Matt LaPlante | 6c28f2c | 2006-10-03 22:46:31 +0200 | [diff] [blame] | 225 | 				  has been a bottleneck for high speed network. | 
| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 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 |  |