Имеется USB-сетевая карта D-Link DUB-E100 версии C1. Требуется установить ее на компьютер-роутер с операционной системой Vyatta Core 6.5 R1 i386. Помогите, пожалуйста, скомпилировать драйвер этой сетевой карты, у меня не получается. Однако сетевой интерфейс не появляется. В комплекте с сетевой картой имеются исходники драйвера под Linux, но в них не прописана сетевая карта с idVendor=2001 и idProduct=1a02 – D-Link не удосужился подправить исходники драйвера под новую ревизию карты. В действительности сетевая карта D-Link DUB-E100 версии C1 является картой ASIX AX88772B, которая присутствует в исходниках драйвера, но имеет другие idVendor и idProduct. Поэтому, исправляю исходники таким образом. Прописываю в файле asix.c следующую структуру: И добавляю такой блок в структуру usb_device_id: Теперь нужно скомпилировать драйвер. По умолчанию в Debian отсутствует компилятор. Устанавливаю его, предварительно обновив список пакетов: Устанавливаю заголовочные файлы ядра: В ответ получаю: Определяю версию ядра: В ответ получаю: Устанавливаю требуемый пакет: Теперь создаю каталог /tmp/d, копирую в него исходники драйвера и компилирую его: Компиляция проходит успешно: В каталоге /tmp/d образуется файл драйвера asix.ko. Устанавливаю драйвер: Установка проходит нормально: Перегружаю компьютер и вижу, что сетевой интерфейс появился! После этого устанавливаю пакет обычным образом: Далее определяю версию ядра: В ответ получаю: В репозитории Debian пакет заголовочных файлов для этого ядра конечно же отсутствует. А пакеты из репозитория Vyatta не устанавливаются командой apt-get, их нужно скачивать через wget и устанавливать через dpkg. Захожу в описание пакетов для Vyatta Core 6.5: http://packages.vyatta.com/vyatta/dists/VC6.5/main/binary-i386/Packages и обнаруживаю там пакет linux-vyatta-kbuild, в описании которого указано: “Header/support files of Vyatta kernel build”. Скачиваю этот пакет: Затем устанавливаю его: Просмотрев содержимое пакета, вижу, что заголовочные файлы в пакете располагаются в каталоге /usr/src/linux-image/debian/build/build-i386-none-586-vyatta. Так как Makefile исходников драйвера ищет заголовочные файлы ядра по пути /lib/modules/$(CURRENT)/build, где CURRENT – версия ядра, то создаю соответствующий симлинк, ссылающийся на каталог /usr/src/linux-image/debian/build/build-i386-none-586-vyatta: Теперь вроде бы все готово к компиляции драйвера. Создаю каталог /tmp/d, копирую в него исходники драйвера, перехожу в этот каталог и компилирую: В результате получаю кучу ошибок: Что с этим делать дальше не знаю.
Все, что я делал для этого, подробно описал здесь:Показать
При загрузке Debian на компьютере с подключенной сетевой картой она определяется так (файл /var/log/dmesg):
[ 1.304511] usb 2-2: new high speed USB device using ehci_hcd
[ 1.448991] usb 2-2: New USB device found, idVendor=2001, idProduct=1a02
[ 1.448995] usb 2-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1.448998] usb 2-2: Product: DUB-E100
[ 1.449000] usb 2-2: Manufacturer: D-Link
[ 1.449003] usb 2-2: SerialNumber: D7409Astatic const struct driver_info dlink_dub_e100c_info = {
.description = "D-Link DUB-E100C USB 2.0 Fast Ethernet Adapter",
.bind = ax88772b_bind,
.unbind = ax88772b_unbind,
.status = ax88772b_status,
.flags = FLAG_ETHER | FLAG_FRAMING_AX | FLAG_HW_IP_ALIGNMENT,
.rx_fixup = ax88772b_rx_fixup,
.tx_fixup = ax88772b_tx_fixup,
};… {
// DLink DUB-E100C
USB_DEVICE (0x2001, 0x1a02),
.driver_info = (unsigned long) & dlink_dub_e100c_info,
}, …apt-get update && apt-get install build-essentialapt-get install linux-headersПакет linux-headers - виртуальный, его функции предоставляются пакетами:
linux-headers-2.6.32-5-xen-686 2.6.32-48squeeze1
linux-headers-2.6.32-5-vserver-686-bigmem 2.6.32-48squeeze1
linux-headers-2.6.32-5-vserver-686 2.6.32-48squeeze1
linux-headers-2.6.32-5-openvz-686 2.6.32-48squeeze1
linux-headers-2.6.32-5-amd64 2.6.32-48squeeze1
linux-headers-2.6.32-5-686-bigmem 2.6.32-48squeeze1
linux-headers-2.6.32-5-686 2.6.32-48squeeze1
linux-headers-2.6.32-5-486 2.6.32-48squeeze1
linux-headers-2.6-xen-686 2.6.32+29
linux-headers-2.6-vserver-686 2.6.32+29
linux-headers-2.6-vserver-686-bigmem 2.6.32+29
linux-headers-2.6-openvz-686 2.6.32+29
linux-headers-2.6-amd64 2.6.32+29
linux-headers-2.6-686 2.6.32+29
linux-headers-2.6-686-bigmem 2.6.32+29
linux-headers-2.6-486 2.6.32+29
Вы должны явно указать, какой именно вы хотите установить.uname –r2.6.32-5-686apt-get install linux-headers-2.6.32-5-686makemake -C /lib/modules/2.6.32-5-686/build SUBDIRS=/tmp/d modules
make[1]: Entering directory `/usr/src/linux-headers-2.6.32-5-686'
CC [M] /tmp/d/asix.o
Building modules, stage 2.
MODPOST 1 modules
CC /tmp/d/asix.mod.o
LD [M] /tmp/d/asix.ko
make[1]: Leaving directory `/usr/src/linux-headers-2.6.32-5-686'make installsu -c "cp -v asix.ko /lib/modules/2.6.32-5-686/kernel/drivers/net/usb && /sbin/depmod -a"
«asix.ko» -> «/lib/modules/2.6.32-5-686/kernel/drivers/net/usb/asix.ko»
Вдохновленный успехом перехожу ко второму этапу – подключению карты к Vyatta.
Пакет build-essential отсутствует в репозитории Vyatta, поэтому сначала подключаю репозиторий Debian. Для этого в конфигурационном режиме Vyatta выполняю команды:set system package repository debian
set system package repository debian components main
set system package repository debian distribution stable
set system package repository debian url http://http.us.debian.org/debian
commitsudo apt-get update && sudo apt-get install build-essentialuname –r3.3.8-1-586-vyattasudo wget http://packages.vyatta.com/vyatta/pool/main/linux-vyatta-kbuild_3.3.8-1+vyatta+14+pacifica2_i386.debsudo dpkg -i linux-vyatta-kbuild_3.3.8-1+vyatta+14+pacifica2_i386.debcd /lib/modules/*
sudo ln -s /usr/src/linux-image/debian/build/build-i386-none-586-vyatta buildmakemake -C /lib/modules/3.3.8-1-586-vyatta/build SUBDIRS=/tmp/d modules
make[1]: Entering directory `/usr/src/linux-image/debian/build/build-i386-none-586-vyatta'
CC [M] /tmp/d/asix.o
/tmp/d/asix.c:840: error: unknown field 'ndo_set_multicast_list' specified in initializer
/tmp/d/asix.c:840: warning: initialization from incompatible pointer type
/tmp/d/asix.c: In function 'ax88772b_set_tx_csum':
/tmp/d/asix.c:1500: error: implicit declaration of function 'ethtool_op_set_tx_csum'
/tmp/d/asix.c: At top level:
/tmp/d/asix.c:1516: error: unknown field 'set_tx_csum' specified in initializer
/tmp/d/asix.c:1516: warning: initialization from incompatible pointer type
/tmp/d/asix.c:1517: error: unknown field 'get_tx_csum' specified in initializer
/tmp/d/asix.c:1517: warning: initialization from incompatible pointer type
/tmp/d/asix.c:1518: error: unknown field 'get_rx_csum' specified in initializer
/tmp/d/asix.c:1518: warning: initialization from incompatible pointer type
/tmp/d/asix.c:1519: error: unknown field 'set_rx_csum' specified in initializer
/tmp/d/asix.c:1519: warning: initialization from incompatible pointer type
/tmp/d/asix.c:1533: error: unknown field 'ndo_set_multicast_list' specified in initializer
/tmp/d/asix.c:1533: warning: initialization from incompatible pointer type
make[2]: *** [/tmp/d/asix.o] Error 1
make[1]: *** [_module_/tmp/d] Error 2
make[1]: Leaving directory `/usr/src/linux-image/debian/build/build-i386-none-586-vyatta'
make: *** [default] Error 2
Исправленные исходники драйвера закачал сюда: http://webfiles.ru/files/35268500