Wireless Ethernet D-Link DWL-520+ и Linux
Аппаратное обеспечение
Статья была опубликована 1 февраля 2010 года в 00:00, а последний раз правилась 29 марта 2010 года в 20:46.
Постоянная ссылка: http://www.nixp.ru/articles/58.html
Работа с D-Link DWL-520+ в среде операционной системы GNU/Linux.
Введение
Не секрет, что самой большой проблемой open source операционных систем является отсутствие поддержки со стороны производителей аппаратуры. Для многих устройств отсутствуют «родные» драйверы. На сайтах многих производителей аппаратуры присутствуют драйверы только для семейства Windows. Возникает вопрос: а знают ли они вообще о чем-нибудь, кроме «конторской» Windows? :-)
Точно такая же ситуация возникла и с беспроводной сетевой карточкой DWL-520+ от D-Link — на сайте производителя отсутствуют драйверы для Linux. А ведь карточку поднять надо…
Что для этого надо?
Поиск на Google по ключевым словам «DWL-520+», «linux» и «driver» очень быстро дал ответ на вопрос «Что надо, чтобы поднять карточку». На первой же странице можно обнаружить ссылку на проект acx100.sourceforge.net, где можно легко найти сам драйвер и море информации на тему беспроводных сетей. Например, легко выяснить, почему в адресе проекта присутствует наименование acx100. Оказывается, это наименование чипсета от Texas Instruments, на котором построена карточка. К слову, стоит отметить, что предшественница DWL-520+, карточка DWL-520, была основана на совершенно ином чипсете — Prism2.
Что нам нужно для полного счастья? Мне было необходимо следующее:
- linux-2.4.26.tar.gz — последнее ядро (для порядка);
- wireless_tools.26.tar.gz — средства настройки беспроводных сетевых интерфейсов;
- dwl520+_drivers_307.zip — драйверы для Windows. Оттуда нам необходимо firmware для карточки DWL-520+;
- acx100-0.2.0pre7.tar.bz2 — последняя стабильная версия драйвера для Linux. Можно, конечно, взять и версию 0.2.0pre8, но на момент написания материала она была в разработке и я не стал рисковать.
Как это сделать?
Начать надо с того, чтобы войти в систему как root.
Далее собрать новое ядро. Перед сборкой надо убедиться в том, что в конфигурацию ядра включена поддержка беспроводных сетевых устройств. Сборка займет много времени, поэтому ее стоит начать в первую очередь. Материалов по сборке ядра много, и я опущу ее описание.
Далее, во время сборки ядра, можно подготовить остальные средства.
Начнем, например, со сборки wireless_tools.26.tar.gz. Для этого достаточно сделать следующее:
# tar -xzf wireless_tools.26.tar.gz # cd wireless_tools.26 # make && make install
Теперь можно заняться драйвером acx100. Распакуем его и драйверы для Windows:
# tar -xjf acx100-0.2.0pre7.tar.bz2 # unzip dwl520+_drivers_307.zip
Теперь необходимо скопировать файлы firmware из набора драйверов для Windows и скомпилировать драйвер:
# cp Drivers/520+/WinXP/*.BIN acx100-0.2.0pre7/firmware # make -C acx100-0.2.0pre7
Теперь подождем, пока завершится сборка ядра… подождем… пойдем покурим, попьем кофе…
После окончания сборки ядра перезагрузим Linux с новым ядром.
Настройка
Теперь стоит проверить работоспособность карточки. Для начала, для простоты, допустим, что у нас есть другая машина под управлением Windows с такой же карточкой, настроенная и готовая к работе. Предположим, что карточка имеет такую конфигурацию:
SSID: HomeLan Wireless Mode: Ad-hoc Channel: 6 TxRate: Auto Preamble: Long Preamble Power Mode: Continuous Access Mode IP: 192.168.85.1
Теперь настроим скрипт запуска драйвера сетевой карточки из пакета acx100-0.2.0pre7. Для этого перейдем в каталог acx100-0.2.0pre7/scripts и отредактируем файл start_net. Установим следующие значения переменных:
DEV=wlan0 ESSID=HomeLan RATE=11M CHAN=6 MODE=Ad-hoc ALG=open IP=192.168.85.2 NETMASK=255.255.255.0 GATEWAY=192.168.85.1
Запускаем скрипт start_net и смотрим результат… Если нет сообщений об ошибках, то проверяем связь:
# ping 192.168.85.1
Если не идет обмен, надо проверить еще раз настройки и на том ли месте firmware, включена ли в ядре поддержка беспроводных сетей… и попробовать снова.
Так как связь установлена нормально, можно приступать к настройке автоматического запуска сетевого драйвера по старту ОС.
Автоматический запуск: взгляд из Slackware Linux 9.1
Лично я подошел к вопросу автоматизации запуска следующим образом:
- Скопировал модуль драйвера для DWL-520+ (acx100_pci.o) в каталог /lib/modules/2.4.26/kernel/drivers/net/wireless.
- Создал каталог /lib/modules/2.4.26/firmware/acx100_pci и скопировал в него файлы firmware: WLANGEN.BIN, RADIO11.BIN, RADIO0d.BIN, AIRPLUS.BIN.
- В каталоге /etc/rc.d создал два файла: rc.dwl_520p и rc.dwl_520p.conf:
- Содержание файла rc.dwl_520p:
#! /bin/sh # #set -x
############################ # READ NETWORK CONFIG FILE # ############################
# Get the configuration information from /etc/rc.d/rc.dwl_520p.conf: . /etc/rc.d/rc.dwl_520p.conf
WLAN_DEV_NO="0" KERNEL_VER=`uname -r` MODULES_DIR="/lib/modules/${KERNEL_VER}" MODULE_TYPE="acx100_pci" MODULE_FILE="${MODULES_DIR}/kernel/drivers/net/wireless/${MODULE_TYPE}.o" FIRMWARE_DIR="${MODULES_DIR}/firmware/${MODULE_TYPE}"
dwl_520p_up() { DEV="wlan${1}" if test -r "$FIRMWARE_DIR/WLANGEN.BIN" -o -r "$FIRMWARE_DIR/TIACX111.BIN"; then insmod $MODULE_FILE debug=$DEBUG firmware_dir=$FIRMWARE_DIR if test "$?" = "0"; then if test "$DEBUG_ETH_UP" = "yes"; then echo "Module $MODULE_FILE successfully inserted." fi if test -n "$RATE"; then iwconfig $DEV rate $RATE if test "$?" != "0"; then if test "$DEBUG_ETH_UP" = "yes"; then echo "Failed to set rate $RATE!" fi fi fi if test -n "$CHAN"; then iwconfig $DEV channel $CHAN if test "$?" != "0"; then if test "$DEBUG_ETH_UP" = "yes"; then echo "Failed to set channel $CHAN!" fi fi fi if test -n "$TXPOWER"; then iwconfig $DEV txpower $TXPOWER if test "$?" != "0"; then if test "$DEBUG_ETH_UP" = "yes"; then echo "Failed to set Tx power level to $TXPOWER dBm!" fi fi fi iwconfig $DEV essid "$ESSID" if test "$?" != "0"; then if test "$DEBUG_ETH_UP" = "yes"; then echo "Failed to join or set ESSID $ESSID!" fi fi if test -n "$MODE"; then iwconfig $DEV mode $MODE if test "$?" != "0"; then if test "$DEBUG_ETH_UP" = "yes"; then echo "Failed to set mode to $MODE!" fi fi fi if test -n "$KEY" -a "$ALG" != "open"; then iwconfig $DEV key $ALG "$KEY" if test "$?" != "0"; then if test "$DEBUG_ETH_UP" = "yes"; then echo "Failed to set key to $KEY and algorithm $ALG!" fi fi fi
if test "${USE_DHCP}" = "yes"; then # use DHCP to bring interface up if test ! "${DHCP_HOSTNAME[$1]}" = ""; then /sbin/dhcpcd -t 10 -h ${DHCP_HOSTNAME} -d $DEV else /sbin/dhcpcd -t 10 -d $DEV fi else # bring up interface using a static IP address if test ! "${IPADDR[$1]}" = ""; then # skip unconfigured interfaces BROADCAST=`/bin/ipmask ${NETMASK} ${IPADDR} | cut -f 1 -d ' '` echo "Configuring $DEV:" echo "/sbin/ifconfig $DEV ${IPADDR} broadcast ${BROADCAST} netask ${NETMASK}" /sbin/ifconfig $DEV ${IPADDR} broadcast ${BROADCAST} netmask ${NETMASK} /sbin/ifconfig $DEV mtu 576 else if test "$DEBUG_ETH_UP" = "yes"; then echo "$DEV interface is not configured in /etc/rc.d/rc.dwl-520p.conf!" fi fi fi
else if test "$DEBUG_ETH_UP" = "yes"; then echo "Error while inserting module $MODULE_FILE! Failed..." fi fi else if test "$DEBUG_ETH_UP" = "yes"; then echo "Firmware not found or not readable. Failed..." fi fi }
dwl_520p_down() { DEV="wlan${1}" if test "${USE_DHCP}" = "yes"; then /sbin/dhcpcd -k -d $DEV sleep 1 else /sbin/ifconfig $DEV down fi rmmod acx100_pci }
# Function to bring up the gateway if there is not yet a default route: gateway_up() { if ! /sbin/route | grep "^default" 1> /dev/null ; then if [ ! "$GATEWAY" = "" ]; then /sbin/route add default gw ${GATEWAY} metric 1 fi fi }
# Function to take down an existing default gateway: gateway_down() { if /sbin/route | grep "^default" 1> /dev/null ; then /sbin/route del default fi }
############ ### MAIN ### ############
case "$1" in 'start') # "start" brings up all available interfaces: dwl_520p_up $WLAN_DEV_NO gateway_up ;; 'stop') # "stop" takes down all existing interfaces: gateway_down dwl_520p_down $WLAN_DEV_NO ;; *) # The default is to bring up all interfaces: dwl_520p_up $WLAN_DEV_NO gateway_up esac
# End of /etc/rc.d/rc.dwl_520p - Содержание файла rc.dwl_520p.conf:
# /etc/rc.d/rc.dwl_520p.conf # # Config information for wlan0: ESSID="HomeLan" RATE="11M" CHAN="6" MODE="Ad-hoc" ALG="open" KEY=""
IPADDR="192.168.85.2" NETMASK="255.255.255.0" GATEWAY="192.168.85.1"
USE_DHCP="no" DHCP_HOSTNAME=""
- Содержание файла rc.dwl_520p:
- Внес изменение в файл rc.M, добавив после строк:
# Initialize the networking hardware. If your network driver is a module # and you haven't loaded it manually, this will be deferred until after # the hotplug system loads the module below. if [ -x /etc/rc.d/rc.inet1 ]; then . /etc/rc.d/rc.inet1 fi
следующие строки:
# Setup D-Link DWL-520+ if [ -x /etc/rc.d/rc.dwl_520p ]; then . /etc/rc.d/rc.dwl_520p fi
- Потом перезапустил Linux.
-
Популярные в этом разделе:
- «Работа с USB-ключом eToken PRO под Slackware 12.2»,
- «Настройка мультимедийной клавиатуры»,
- «Рецепт приготовления Win-принтера для печати из Linux».
Последние комментарии
- OlegL, 17 декабря в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1