domenica 1 aprile 2012

Hacking driver usb-ethernet qf9700


Ho acquistato questo adattatore usb-ethernet su ebay per il mio portatile, appena inserisco l'adattatore mi accorgo che il mio ubuntu 10.10 con kernel 2.6.35-32-generic non lo riconosce, fortunatamente insieme all'adattatore c'è pure un cd che contiene i driver per windows, mac, android e linux. Prendo i sorgenti per linux è inizio a compilarli per il mio kernel, visto che nel cd c'è il driver compilato solo per il kernel 2.6.29. Appena avvio la compilazione mi da una serie di errori, bene ci mancava anche questo problema, faccio una ricerca su internet per vedere se ci sono dei sorgenti aggiornati e compatibili per il mio kernel, trovo questo sito: http://mquin.livejournal.com/178482.html - http://www.elite.uk.com/mike/qf9700/, dove mike è riuscito a fare una patch di questo driver per i kernel 2.6.32 e 2.6.37. Provo i sorgenti patchati per il kernel 2.6.32 ma non va mi da ancora errori, passo a compilare con quelli patchati per il kernel 2.6.37 e finalmente riesco a ultimare la compilazione di questo driver compatibile con il mio kernel 2.6.35. Mi resta solo di caricare il modulo qf9700.ko con insmod, appena lo faccio ottengo questo errore:

sudo insmod qf9700.ko
insmod: error inserting 'qf9700.ko': -1 Unknown symbol in module

mi sono detto mannaggia a me che ho acquistato questo adattatore, poi parlando con un amico e vedendo l'output di dmesg dopo che carico il modulo, vediamo che prima di caricare il qf9700.ko dobbiamo caricare il modulo mii.ko e usbnet.ko che si trovano in /lib/module/2.6.35-32-generic/kernel/drivers/net/ e /lib/modules/2.6.35-32-generic/kernel/drivers/net/usb/, quindi creo uno script che avvio ogni volta quando devo usare l'usb-ethernet, mettendo questi comandi:

#!/bin/bash

sudo insmod /lib/modules/2.6.35-32-generic/kernel/drivers/net/mii.ko
sudo insmod /lib/modules/2.6.35-32-generic/kernel/drivers/net/usb/usbnet.ko
sudo insmod /lib/modules/2.6.35-32-generic/kernel/drivers/net/usb/qf9700.ko

ovviamente ho copiato il modulo qf9700.ko compilato nella cartella usb, Enjoy :)