суббота, 28 августа 2010 г.

Драйвер для USB Wifi карточки D-Link DWA-125


Если вы приобрели карточку DWA-125, то можете столкнуться с тем, что она не работает. Это может быть из-за отсутствия нужного драйвера. Если вы не ратуете за чистоту системы от неуправляемых файлов, вы можете скачать и установить официальный драйвер согласно инструкциям. Однако, если вы хотите сделать deb пакет для драйвера, потребуется чуть-чуть больше времени.

Сперва ознакомтесь с ручной сборкой пакетов по ссылке http://barrel-of-herring.blogspot.com/2010/08/deb.html. После этого можно приступать.

Установите заголовки от вашего ядра. Для Debian Squeeze и ядра 2.6.32-4-686-bigmem это пакет linux-headers-2.6.32-4-686-bigmem.

Теперь скачайте и распакуйте последний драйвер по ссылке на dlink.ru.

cd /tmp
wget http://ftp.dlink.ru/pub/Wireless/DWA-125/Drivers/Linux/2009_1204_RT3070_Linux_STA_v2.1.2.0.tar.gz
tar zxf 2009_1204_RT3070_Linux_STA_v2.1.2.0.tar.gz
cd 2009_1204_RT3070_Linux_STA_v2.1.2.0/

Откомпилируйте драйвер:

make

Теперь создадим служебный каталог с нужными файлами для сборки пакета:

mkdir -p B/DEBIAN

nano B/DEBIAN/control
nano B/DEBIAN/conffiles
nano B/DEBIAN/postinst
nano B/DEBIAN/postrm

С таким содержимым:

B/DEBIAN/control:
Package: rt3070-driver
Priority: extra
Section: utils
Installed-Size: 580
Maintainer: ВАШ E-MAIL
Architecture: ВАША АРХИТЕКТУРА
Version: 2.1.2-1
Depends: firmware-ralink
Build-Depends: make, module-init-tools, coreutils
Description: Ralink 3070 driver
B/DEBIAN/conffiles:
/etc/Wireless/RT2870STA/RT2870STA.dat
/etc/Wireless/RT3070STA/RT2870STA.dat

B/DEBIAN/postinst:
#!/bin/sh

set -e

if [ "$1" = configure ]; then
    echo "Running depmod."
    /sbin/depmod
fi

B/DEBIAN/postrm:
#!/bin/sh

set -e

if [ "$1" = configure ]; then
    echo "Running depmod."
    /sbin/depmod
fi

Файл control содержит описание пакета. Файл conffiles содержит описание конфигурационных файлов, которые устанавливает пакет. Файлы postinst и postrm содержат shell команды, которые надо выполнить после установки и удаления пакета соответственно (после установки или удаления драйверов надо обязательно выполнять команду depmod).

Теперь надо скопировать собранный драйвер и файлы конфигурации.

mkdir -p B/lib/modules/ВЕРСИЯ_ЯДРА/kernel/drivers/net/wireless/
install -m 644 os/linux/rt3070sta.ko B/lib/modules/ВЕРСИЯ_ЯДРА/kernel/drivers/net/wireless/

mkdir -p B/etc/Wireless/RT2870STA
mkdir -p B/etc/Wireless/RT3070STA

cp -a RT2870STA.dat B/etc/Wireless/RT2870STA
cp -a RT2870STA.dat B/etc/Wireless/RT3070STA

Где ВЕРСИЯ_ЯДРА - версия вашего ядра, доступная по uname -r.

Предпоследний шаг - запретить загрузку модуля rt2800usb, который конфликтует с новым, только что собранным, драйвером:

mkdir -p B/etc/modprobe.d
nano B/etc/modprobe.d/rt3070.conf

С таким содержимым:

blacklist rt2800usb

И, наконец, собираем пакет:

dpkg-deb -b B ../rt3070-driver_2.1.2-1_ВЕРСИЯ_ЯДРА.deb

Теперь его можно установить:

sudo dpkg -i ../rt3070-driver_2.1.2-1_ВЕРСИЯ_ЯДРА.deb

Для вашего удобства я поместил исходники драйвера и скрипт сборки в один архив. Просто распакуйте его, и запустите скрипт build, она выполнит все предыдущие шаги - скомпилирует драйвер и соберёт пакет. Например, на моей системе этот скрипт собирает пакет с именем rt3070-driver_2.1.2-1_2.6.32-4-686-bigmem.deb.

Не забывайте, что собранный драйвер будет работать только на том ядре, на котором он собирался. Сетевой интерфейс будет называться ra0.

Комментариев нет: