Sunday, January 17, 2010

Linux USB Ethernet Driver (Davicom, dm9601)

Driver Patch for Linux kernel 2.6.31.X
Patch Author- Ankit Kapoor


[Update Sept 17, 2012]

---------------------------------------

Recently got to know that Google has deleted all user files while upgrading Goolge groups to a new version around 5-6 months back. Unfortunately, I missed to check reminder mails (a lot off) from Google and right now I don't have that patch file backed up anywhere else.
---------------------------------------

If you are trying to install Davicom Semiconductor's usb ethernet card driver for Linux kernel 2.6.31.X* (see post end), probably you have already downloaded dm9601-Linux2.6_1.tar from the meworks web site.

If during compilation of the driver you see following error messages:

/home/ankit/Soft/tars/dm9601/dm9601.c: In function ‘ctrl_callback’:
/home/ankit/Soft/tars/dm9601/dm9601.c:166: error: implicit declaration of function ‘warn’
/home/ankit/Soft/tars/dm9601/dm9601.c: In function ‘write_bulk_callback’:
/home/ankit/Soft/tars/dm9601/dm9601.c:527: error: implicit declaration of function ‘info’
/home/ankit/Soft/tars/dm9601/dm9601.c: In function ‘dm9601_tx_timeout’:
/home/ankit/Soft/tars/dm9601/dm9601.c:599: error: ‘struct net_device’ has no member named ‘priv’
...

...
...
/home/ankit/Soft/tars/dm9601/dm9601.c:1021: error: ‘struct net_device’ has no member named ‘tx_timeout’
/home/ankit/Soft/tars/dm9601/dm9601.c:1022: error: ‘struct net_device’ has no member named ‘do_ioctl’
/home/ankit/Soft/tars/dm9601/dm9601.c:1023: error: ‘struct net_device’ has no member named ‘hard_start_xmit’
/home/ankit/Soft/tars/dm9601/dm9601.c:1024: error: ‘struct net_device’ has no member named ‘set_multicast_list’
...
...
make[2]: *** [/home/ankit/Soft/tars/dm9601/dm9601.o] Error 1
make[1]: *** [_module_/home/ankit/Soft/tars/dm9601] Error 2

You can follow the steps given below to solve above issue.
1. Download driver(dm9601-Linux2.6_1.tar) from meworks. Move tar file to /tmp/
2. Download the patch dm9601_2.6.31.5-0.1.patch (right click and select SaveAs option). Move the patch file to /tmp/ folder.
3. cd /tmp/
3. tar -xvf dm9601-Linux2.6_1.tar
4. cd dm9601/
5. patch -p1 -i /tmp/dm9601_2.6.31.5-0.1.patch
You should get following output:
patching file dm9601.c
patching file dm9601.h
6. make (you should not get compilation errors now)7. sudo /sbin/modprobe/dm9601

see readme given with the driver tar file to configure the new ethernet interface.

*Note: I created and tested attached patch for kernel 2.6.31.5-0.1 on SUSE-11.2. If you are using some different kernel version but still getting same compilation errors as shown above, patching the driver with the attached patch file should also work for you.
Thank you.