среда, 15 августа 2012 г.

Драйвер D-Link DUB-E100 rev.C1 для FreeBSD своими руками

Собрался поднять интернет шлюз на базе неттопа. Соответственно понадобилась вторая сетевая карта. Взял D-Link DUB-E100.
Столкнулся с тем, что диск, прилагавшийся к устройству, не содержит подходящего драйвера для линукс. Т.е. драйвер на диске имеется, но для чипсета rev.B1, а устройство rev.C1. На сайте производителя нужная версия драйвера так же отсутствовала. Эксперименты с подменой чипсета в исходниках драйвера результата не дали, поэтому решил попробовать сетевушку с FreeBSD.
В исходниках FreeBSD драйвер под rev.C1 так же отсутствовал, но зато самостоятельное изменение драйвера дало положительный результат.
Итак, начинаем.
Поправить нужно 2 файлика
в файл
/usr/src/sys/dev/usb/net/if_axe.c
добавляем следующую строку
AXE_DEV(DLINK, DUBE100B1, AXE_FLAG_772),
AXE_DEV(DLINK, DUBE100C1, AXE_FLAG_772B),
AXE_DEV(GOODWAY, GWUSB2E, 0),
и в файл
/usr/src/sys/dev/usb/usbdevs
добавляем
product DLINK DUBE100B1 0x3c05 DUB-E100 rev B1
product DLINK DUBE100C1 0x1a02 DUB-E100 rev C1
product DLINK RT2870 0x3c09 RT2870
Осталось пересобрать ядро
Для экономии времени компиляции поправим файл
/etc/make.conf
вписываем строчку
MODULES_OVERRIDE = usb
это позволит пересобрать только модули драйверов usb устройств
теперь идем в корневую папку исходников
# cd /usr/src
и выполняем следующее
# make buildkernel KERNCONF=MYKERNEL
# make installkernel KERNCONF=MYKERNEL
Перезагружаемся
# reboot
и наслаждаемся :)