Prolific PL-2501 USBnet кабель и Linux


Не LANом единым жив Ethernet. Есть в природе такая замечательная вещь как USBnet, начитавшись про которую, я купил специальный кабель с шилдиком Gembird.
Вся специальность данного кабеля заключается в наличие чипа (в моем случае Prolific ) между штекерами. Под катом привожу описание того как я заставил его рабоать под ОС .

Хочу сказать что на момент написания этой записи я использовал ядро 2.6.37-rc1, и при этом не смог заставить работать данный девай без патча на модуль plusb, но об этом далее.

После подключения кабеля к ПК наблюдаем:

[email protected]:~$ lsusb
...
Bus 002 Device 012: ID 067b:2501 Prolific Technology, Inc. PL2501 USB-USB Bridge (USB 2.0)
...

Самой полезной ссылкой, найденной в гугле, оказалась Bugzilla Novell. По ссылке предлагается патч добавляющий поддержку чипа PL-2501 в модуль plusb, а так же предлагается обходной вариант через modprobe.

Начнем с обходного варианта, может быть кому-то он будет полезен, но у меня он не сработал. Создаем файл /etc/modprobe.d/plusb.conf:

alias usb:v067Bp2501d*dc*dsc*dp*ic*isc*ip* plusb
install plusb /sbin/modprobe --ignore-install plusb; echo "067b 2501" >
/sys/bus/usb/drivers/plusb/newid

Пользы от этого для меня не было:

[email protected]:~$ dmesg
...
[223790.973057] usb 2-2: new high speed USB device using ehci_hcd and address 12
[223791.119709] usb 2-2: New USB device found, idVendor=067b, idProduct=2501
[223791.119713] usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[223791.119717] usb 2-2: Product: USB Transfer Cable
[223791.119720] usb 2-2: Manufacturer: Prolific Technology Inc.
[email protected]:~$ ifconfig usb0
usb0: error fetching interface information: Device not found

Ну что же, будем патчить модуль, тем более изменения там не критичные. Добываем исходники ядра и патчимся:

[email protected]:~$ cd /usr/src/linux/drivers/net/usb
[email protected]:/usr/src/linux/drivers/net/usb$ wget http://rascal.su/uploads/2010/11/plusb.
[email protected]:/usr/src/linux/drivers/net/usb$  < plusb.
[email protected]:/usr/src/linux/drivers/net/usb$ cd /usr/src/linux 
[email protected]:/usr/src/linux$ make SUBDIRS=drivers/net/usb modules

Заменяем родной модуль:

[email protected]:~$ rmmod -f plusb
[email protected]:~$ mv /lib/modules/`uname -r`/kernel/drivers/net/usb/plusb.ko \
/lib/modules/`uname -r`/kernel/drivers/net/usb/plusb.ko.orig
[email protected]:~$ cp /usr/src/linux/drivers/net/usb/plusb.ko \
/lib/modules/`uname -r`/kernel/drivers/net/usb/plusb.ko

После чего подключаем кабель:

[email protected]:~$ dmesg
...
[225265.854230] usb 2-2: new high speed USB device using ehci_hcd and address 13
[225266.000203] usb 2-2: New USB device found, idVendor=067b, idProduct=2501
[225266.000208] usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[225266.000212] usb 2-2: Product: USB Transfer Cable
[225266.000214] usb 2-2: Manufacturer: Prolific Technology Inc.
[225266.020489] plusb 2-2:1.0: usb0: register 'plusb' at usb-0000:00:1d.7-2, Prolific 
PL-2301/PL-2302, ea:7f:f0:96:b0:af
[225266.020596] usbcore: registered new interface driver plusb
[email protected]:~$ ifconfig usb0
usb0      Link encap:Ethernet  HWaddr ea:7f:f0:96:b0:af  
BROADCAST MULTICAST  MTU:1500  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000 
RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

И вот, чудо произошло!

Честно говоря, мне не совсем понятно, почему модуль plusb все еще не поддерживает чип PL-2501 "из коробки".