Ключевые слова:wireless, ethernet, wavelan, linux, hardware, driver, (найти похожие документы)
From: Андрей Головня (AG) <andrew_golovnia [аt] ukr.net> (ICQ75123273, http://ag.qnx.org.ru/)
Newsgroups: http://www.nixp.ru/
Date: Mon, 17 May 2004 18:21:07 +0000 (UTC)
Subject: Подключение Wireless Ethernet карты под Linux
Оригинал: http://www.nixp.ru/cgi-bin/go.pl?q=articles&a=dwl-520plus_linux
Wireless Ethernet D-Link DWL-520+ и Linux
Введение
--------
DWL-520+
Не секрет, что самой большой проблемой open source операционных систем
является отсутствие поддержки со стороны производителей аппаратуры.
Для многих устройств отсутствуют <<родные>> драйверы. На сайтах многих
производителей аппаратуры присутствуют драйверы только для семейства
Windows. Возникает вопрос: а знают ли они вообще о чем-нибудь, кроме
<<конторской>> Windows? :-)
Точно такая же ситуация возникла и с беспроводной сетевой карточкой
DWL-520+ от D-Link (http://www.d-link.com/) -- на сайте производителя
отсутствуют драйверы для Linux. А ведь карточку поднять надо...
Что для этого надо?
-------------------
Поиск на Google по ключевым словам <<DWL-520+>>, <<linux>> и
<<driver>> очень быстро дал ответ на вопрос <<Что надо, чтобы поднять
карточку>>. На первой же странице можно обнаружить ссылку на проект
http://acx100.sourceforge.net, где можно легко найти сам драйвер и море
информации на тему беспроводных сетей. Например, легко выяснить,
почему в адресе проекта присутствует наименование acx100. Оказывается,
это наименование чипсета от Texas Instruments, на котором построена
карточка. К слову, стоит отметить, что предшественница DWL-520+,
карточка DWL-520, была основана на совершенно ином чипсете -- Prism2.
Что нам нужно для полно счастья? Мне было необходимо следующее:
* linux-2.4.26.tar.gz -- последнее ядро (для порядка);
http://www.kernel.org/pub/linux/kernel/v2.4/linux-2.4.26.tar.gz
* wireless_tools.26.tar.gz -- средства настройки беспроводных
сетевых интерфейсов;
http://pcmcia-cs.sourceforge.net/ftp/contrib/wireless_tools.26.tar.gz
* dwl520+_drivers_307.zip -- драйверы для Windows. Оттуда нам
необходимо firmware для карточки DWL-520+;
ftp://ftp.dlink.com/Wireless/dwl520+/Driver/dwl520+_drivers_307.zip
* [acx100-0.2.0pre7.tar.bz2 -- последняя стабильная версия
драйвера для Linux. Можно, конечно, взять и версию 0.2.0pre8, но
на момент написания материала она была в разработке и я не стал
рисковать.
http://rhlx01.fht-esslingen.de/~andi/acx100/acx100-0.2.0pre7.tar.bz2
Как это сделать?
----------------
Начать надо с того, чтобы войти в систему как 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
Лично я подошел к вопросу автоматизации запуска следующим образом:
1. Скопировал модуль драйвера для DWL-520+ (acx100_pci.o) в каталог
/lib/modules/2.4.26/kernel/drivers/net/wireless.
2. Создал каталог /lib/modules/2.4.26/firmware/acx100_pci и
скопировал в него файлы firmware: WLANGEN.BIN, RADIO11.BIN,
RADIO0d.BIN, AIRPLUS.BIN.
3. В каталоге /etc/rc.d создал два файла: rc.dwl_520p и
rc.dwl_520p.conf:
a. Содержание файла 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
# Determine broadcast address from the IP address and netmask:
BROADCAST=`/bin/ipmask ${NETMASK} ${IPADDR} | cut -f 1 -d ' '`
# Set up the ethernet card:
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
-------------------------------------
b. Содержание файла 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=""
-------------------------------------
4. Внес изменение в файл 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
-------------------------------------
5. Потом перезапустил Linux.
_________________________________________________________________