Beberapa waktu yang lalu sungguh menyedihkan keadaan kartu ethernet di laptop saya, tidak bisa lagi digunakan entah kenapa. Untuk mengatasinya saya membeli USB to LAN, karena kalau dibawa ke service center bisa-bisa laptopnya opname. Di dalam USB to LAN (setelah ini akan saya singkat menjadi usb2lan) yang saya beli ini berisi CD Driver untuk sistem operasi Windows, dan ketika dicoba, semuanya berjalan lancar tapi Windows tidak langsung mengenali usb2lan ini dan tetap harus install driver bawaannya. Setelah install baru dapat digunakan dengan baik.
Masalah muncul ketika saya hendak menggunakannya dengan sistem operasi linux. Kebetulan saya menggunakan Kubuntu Linux 7.04, dan memang setelah usb2lan tersebut ditancapkan tidak terjadi apa-apa, yang ada hanyalah sepotong log dari /var/log/messages sebagai berikut:
Jul 11 10:46:20 m1abrams kernel: [ 282.620000] usb 4-3: new high speed USB device using ehci_hcd and address 5 Jul 11 10:46:20 m1abrams kernel: [ 282.752000] usb 4-3: configuration #1 chosen from 1 choice Jul 11 10:46:21 m1abrams kernel: [ 282.948000] usbcore: registered new interface driver libusual Jul 11 10:46:21 m1abrams kernel: [ 282.952000] Initializing USB Mass Storage driver... Jul 11 10:46:21 m1abrams kernel: [ 282.952000] scsi2 : SCSI emulation for USB Mass Storage devices Jul 11 10:46:21 m1abrams kernel: [ 282.952000] usbcore: registered new interface driver usb-storage Jul 11 10:46:21 m1abrams kernel: [ 282.952000] USB Mass Storage support registered. Jul 11 10:46:26 m1abrams kernel: [ 287.952000] scsi 2:0:0:0: Direct-Access Generic Secure ID Stick 0.00 PQ: 0 ANSI: 2 Jul 11 10:46:26 m1abrams kernel: [ 287.952000] SCSI device sdb: 2013183 512-byte hdwr sectors (1031 MB) Jul 11 10:46:26 m1abrams kernel: [ 287.956000] sdb: Write Protect is off Jul 11 10:46:26 m1abrams kernel: [ 287.956000] SCSI device sdb: 2013183 512-byte hdwr sectors (1031 MB) Jul 11 10:46:26 m1abrams kernel: [ 287.956000] sdb: Write Protect is off Jul 11 10:46:26 m1abrams kernel: [ 287.956000] sdb: sdb1 Jul 11 10:46:26 m1abrams kernel: [ 288.064000] sd 2:0:0:0: Attached scsi removable disk sdb Jul 11 10:46:26 m1abrams kernel: [ 288.064000] sd 2:0:0:0: Attached scsi generic sg2 type 0
Saya melakukan lsusb untuk melihat manufaktur milik usb2lan ini.
tom@m1abrams:/home/tom$ sudo lsusb Bus 004 Device 005: ID 196d:0112 Bus 004 Device 001: ID 0000:0000 Bus 003 Device 002: ID 08ff:2500 AuthenTec, Inc. Bus 003 Device 001: ID 0000:0000 Bus 002 Device 001: ID 0000:0000 Bus 001 Device 004: ID 062a:0000 Creative Labs Optical Mouse Bus 001 Device 003: ID 0a46:9601 Davicom Semiconductor, Inc. Bus 001 Device 001: ID 0000:0000 tom@m1abrams:/home/tom$
Hmm, manufakturnya Davicom Semiconductor, Inc. Hasil googling menunjuk ke situs www.davicom.com.tw. Lalu, bagaimana memaksa usb2lan ini berjalan di Kubuntu atau distro linux yang lain? Setelah googling sana-sini akhirnya ketemu driver milik Davicom ini yang telah dimodifikasi oleh seseorang dengan nama Jon Dowland dan dapat di download di situsnya www.alcopop.org.
Yang diperlukan untuk menginstall driver dari usb2lan ini adalah sebagai berikut.
Kernel source (unduh dari kambing.vlsm.org)
Untuk *buntu bisa dengan cara apt-get lalu install linux-headers (generic), linux-image(generic), linux-restricted-modules-generic, dan linux-source.
Driver dm9601 bisa diunduh disini (mirror telah saya buat disini)
Selanjutnya, saya menganggap Anda sudah mempunyai kernel source dari kernel yang Anda pakai sekarang, jadi langkah selanjutnya adalah meng-ekstrak file dm9601.gz yang sudah diunduh.
tom@m1abrams:/usr/src/$ sudo tar xzvf DM9601.GZ tom@m1abrams:/usr/src/2.6.18$ cd 2.6.18 tom@m1abrams:/usr/src/2.6.18$ sudo make make -C /lib/modules/2.6.20-16-generic/build M=/usr/src/2.6.18 LDDINCDIR=/usr/src/2.6.18/../include modules make[1]: Entering directory `/usr/src/linux-headers-2.6.20-16-generic' CC [M] /usr/src/2.6.18/dm9601.o /usr/src/2.6.18/dm9601.c:52:26: error: linux/config.h: No such file or directory In file included from /usr/src/2.6.18/dm9601.c:62: /usr/src/2.6.18/dm9601.h:100:1: warning: "ALIGN" redefined In file included from include/asm/system.h:4, from include/asm/processor.h:18, from include/asm/thread_info.h:16, from include/linux/thread_info.h:21, from include/linux/preempt.h:9, from include/linux/spinlock.h:49, from include/linux/capability.h:45, from include/linux/sched.h:46, from /usr/src/2.6.18/dm9601.c:53: include/linux/kernel.h:35:1: warning: this is the location of the previous definition /usr/src/2.6.18/dm9601.c: In function ‘__check_reg5’: /usr/src/2.6.18/dm9601.c:122: warning: return from incompatible pointer type /usr/src/2.6.18/dm9601.c: In function ‘__check_reg8’: /usr/src/2.6.18/dm9601.c:123: warning: return from incompatible pointer type /usr/src/2.6.18/dm9601.c: In function ‘__check_reg9’: /usr/src/2.6.18/dm9601.c:124: warning: return from incompatible pointer type /usr/src/2.6.18/dm9601.c: In function ‘__check_rega’: /usr/src/2.6.18/dm9601.c:125: warning: return from incompatible pointer type /usr/src/2.6.18/dm9601.c: In function ‘__check_nfloor’: /usr/src/2.6.18/dm9601.c:126: warning: return from incompatible pointer type /usr/src/2.6.18/dm9601.c: In function ‘get_registers’: /usr/src/2.6.18/dm9601.c:189: warning: passing argument 7 of ‘usb_fill_control_urb’ from incompatible pointer type /usr/src/2.6.18/dm9601.c: In function ‘set_registers’: /usr/src/2.6.18/dm9601.c:227: warning: passing argument 7 of ‘usb_fill_control_urb’ from incompatible pointer type /usr/src/2.6.18/dm9601.c: In function ‘set_register’: /usr/src/2.6.18/dm9601.c:266: warning: passing argument 7 of ‘usb_fill_control_urb’ from incompatible pointer type /usr/src/2.6.18/dm9601.c: In function ‘update_eth_regs_async’: /usr/src/2.6.18/dm9601.c:300: warning: passing argument 7 of ‘usb_fill_control_urb’ from incompatible pointer type /usr/src/2.6.18/dm9601.c:314: warning: passing argument 7 of ‘usb_fill_control_urb’ from incompatible pointer type /usr/src/2.6.18/dm9601.c:328: warning: passing argument 7 of ‘usb_fill_control_urb’ from incompatible pointer type /usr/src/2.6.18/dm9601.c: In function ‘read_bulk_callback’: /usr/src/2.6.18/dm9601.c:483: warning: passing argument 6 of ‘usb_fill_bulk_urb’ from incompatible pointer type /usr/src/2.6.18/dm9601.c: In function ‘dm9601_start_xmit’: /usr/src/2.6.18/dm9601.c:602: warning: passing argument 6 of ‘usb_fill_bulk_urb’ from incompatible pointer type /usr/src/2.6.18/dm9601.c: In function ‘dm9601_open’: /usr/src/2.6.18/dm9601.c:801: warning: passing argument 6 of ‘usb_fill_bulk_urb’ from incompatible pointer type /usr/src/2.6.18/dm9601.c:810: warning: passing argument 6 of ‘usb_fill_int_urb’ from incompatible pointer type /usr/src/2.6.18/dm9601.c: In function ‘dm9601_disconnect’: /usr/src/2.6.18/dm9601.c:1014: warning: ISO C90 forbids mixed declarations and code make[2]: *** [/usr/src/2.6.18/dm9601.o] Error 1 make[1]: *** [_module_/usr/src/2.6.18] Error 2 make[1]: Leaving directory `/usr/src/linux-headers-2.6.20-16-generic' make: *** [default] Error 2 tom@m1abrams:/usr/src/2.6.18$
Dari yang tahap yang saya lakukan, muncul peringatan error yang mengatakan bahwa file linux/config.h tidak ditemukan, sehingga proses kompilasi menjadi gagal. Mengapa? Karena sekarang header config.h sudah tidak digunakan lagi. Iseng-iseng saya mencoba mengambil file config.h milik Slackware lalu menyalinnya ke direktori include di /usr/include/linux/include/linux lalu melakukan kompilasi lagi dengan perintah make.
tom@m1abrams:/usr/src/2.6.18$ sudo make make -C /lib/modules/2.6.20-16-generic/build M=/usr/src/2.6.18 LDDINCDIR=/usr/src/2.6.18/../include modules make[1]: Entering directory `/usr/src/linux-headers-2.6.20-16-generic' Building modules, stage 2. MODPOST 1 modules make[1]: Leaving directory `/usr/src/linux-headers-2.6.20-16-generic' tom@m1abrams:/usr/src/2.6.18$
Berhasil ! Setelah itu, masukkan modul yang baru dikompile tadi.
tom@m1abrams:/usr/src/2.6.18$ ls dm9601.c dm9601.ko dm9601.mod.o Makefile readme.txt dm9601.h dm9601.mod.c dm9601.o Module.symvers readme.txt.bak tom@m1abrams:/usr/src/2.6.18$ sudo insmod dm9601.ko tom@m1abrams:/usr/src/2.6.18$
Sampai tahap ini driver usb2lan milik Davicom ini sudah terinstall dengan baik. Kita bisa langsung melakukan setting network dengan ethernet baru ini. Namun masih ada kekurangan karena setiap kita restart komputer, driver ini tidak otomatis diload oleh kernel. Bagaimana caranya agar setiap kita nyalakan komputer, driver modul ini diload kernel?
Lakukan langkah-langkah sebagai berikut.
masih di direktori /usr/src/2.6.18 tempat driver modul berada
tom@m1abrams:/usr/src/2.6.18$ sudo cp dm9601.ko \ /lib/modules/`uname \ -r`/kernel/drivers/net/ tom@m1abrams:/usr/src/2.6.18$
Lalu masukkan baris skrip dibawah ini ke /etc/rc.local agar dijalankan ketika sistem berjalan.
tom@m1abrams:/usr/src/2.6.18$ pico /etc/rc.local *PENTING !! letakkan baris dibawah ini sebelum baris exit 0 (exit nol) /sbin/insmod /lib/modules/`uname -r`/kernel/drivers/net/dm9601.ko tom@m1abrams:/usr/src/2.6.18$
Kalau sudah, silakan melakukan reboot untuk mencobanya. Selamat mencoba !