[Madwifi-users] Simplified installation instructions
Status: Beta
Brought to you by:
otaku
From: Brian B. <bd...@bb...> - 2003-08-30 05:03:05
|
These are the configuration steps I used to get a Netgear WAG511 (a/b/g) wireless Cardbus card working in my Dell Inspiron 4100 and Latitude C600. I've tried to distill down to the essential items needed to get the madwifi drivers working. In addition I've added information on how to automate network configuration for those running Gentoo Linux. Steps 1-3 are generic, step 4 is specific to Gentoo Linux. After following these instructions I can hotplug my card and within a few seconds be surfing the Internet. Tested on 2 notebooks with 2 APs (ZyWALL 30w .11b AP/router and ZyAIR G-1000 .11g AP). You mileage may vary. All comments and suggestions are welcome. Good luck and hope this helps. ***************************** *** Step 1: Kernel Config *** ***************************** I used menuconfig with a 2.4.22 kernel. Key items required are ACPI, PCMCIA and Hotplug (no APM). If using kernel 2.4.20 be sure to patch with Alan Cox's ac4 ACPI patches. Using Gentoo Linux I emerge'd gs-sources (2.4.22_pre2-gss). General Setup [*] Support for hot-pluggable devices PCMCIA/CardBus <*> PCMCIA/CardBus support [*] CardBus support [ ] Databook TCIC host bridge support [ ] i82092 compatible bridge support [ ] i82365 compatible bridge support [*] ACPI Support <*> AC Adapter <*> Battery <*> Button <*> Fan <*> Processor <*> Thermal Zone < > ASUS Laptop Extras < > Toshiba Laptop Extras [*] Debug Statements ******************************* *** Step 2: Madwifi Drivers *** ******************************* Reboot with your new kernel. Now download the latest madwifi drivers from Sourceforge (hit return when asked for a CVS password). # cvs -d:pserver:ano...@cv...:/cvsroot/madwifi login CVS password: # cvs -z3 -d:pserver:ano...@cv...:/cvsroot/madwifi co madwifi cd to the madwifi directory and execute these commands: # make clean # make # make install The modules wlan.o, ath_hal.o and ath_pci.o are now installed and ready for use. *************************************** *** Step 3: Edit /etc/pcmcia/config *** *************************************** Add the following lines to /etc/pcmcia/config (assumes Netgear card): device "ath_pci" class "network" module "cb_enabler", "net/wlan", "net/ath_hal", "net/ath_pci" card "Netgear WAG511 A/B/G" # version "Atheros Communications, Inc.", "AR5001-0000-0000", "Wireless LAN Reference Card", "00" # manfid 0x0271, 0x0012 pci 0x168c, 0x0013 bind "ath_pci" **************************** *** Step 4: Init scripts *** **************************** Gentoo Linux requries a new script /etc/init.d/net.ath0 and some entries in /etc/conf.d/net. Follow the instructions at the top of the file /etc/init.d/net.ath0 below for instructions on what to add to /etc/conf.d/net. #!/sbin/runscript # Copyright 1999-2003 Gentoo Technologies, Inc. # Distributed under the terms of the GNU General Public License v2 # $Header: /home/cvsroot/gentoo-src/rc-scripts/init.d/net.eth0,v 1.28 2003/03/16 08:03:19 azarah Exp $ #NB: Config is in /etc/conf.d/net # *************************************** # *** add to /etc/conf.d/net and edit *** # *************************************** # For wireless access point association, strip non alphanumeric characters # from the essid before creating the following variables: # essid_networkname="network-name" # key_networkname="xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xx" # key_networkname="s:xxxxxxxxxxxxx" # key_networkname="xxxx-xxxx-xx" # key_networkname="s:xxxxx" # #essid_essid1="essid1" #key_essid1="xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xx" #essid_essid2="essid2" #key_essid2="xxxx-xxxx-xxxx-xxxx-xxxx-xxxx-xx" #iface_ath0="dhcp" #iface_ath0="192.168.1.2 broadcast 192.168.1.255 netmask 255.255.255.0" # *************************************** # *** add to /etc/conf.d/net and edit *** # *************************************** # For pcmcia users. note that pcmcia must be added to the same # runlevel as the net.* script that needs it. depend() { use hotplug pcmcia } checkconfig() { if [ -z "${iface_IFACE}" ] then eerror "Please make sure that /etc/conf.d/net has \$iface_$IFACE set" return 1 fi } setup_env() { # No reason to check these multiple times in the file iface_IFACE="$(eval echo \$\{iface_${IFACE}\})" dhcpcd_IFACE="$(eval echo \$\{dhcpcd_${IFACE}\})" inet6_IFACE="$(eval echo \$\{inet6_${IFACE}\})" alias_IFACE="$(eval echo \$\{alias_${IFACE}\})" status_IFACE="$(ifconfig | gawk -v IFACE="${IFACE}" '/Link/ { if ($1 == IFACE) print "up" }')" if [ -x `which iwconfig` ]; then wireless_IFACE="$(iwconfig 2>/dev/null | gawk -v IFACE="${IFACE}" '/IEEE/ { if ($1 == IFACE) print "yes" }')" else wireless_IFACE="not installed" fi } setup_wireless() { # Try to find Access Points iwconfig $IFACE mode Managed iwconfig $IFACE rate auto iwconfig $IFACE key off iwconfig $IFACE rts off iwconfig $IFACE frag off iwconfig $IFACE essid any ifconfig $IFACE up sleep 2.0 # Configure the AP. The first matching ESSID will be chosen. for AP in `iwlist ${IFACE} scan 2>/dev/null | grep ESSID | awk -F: '{print $2}' | sed 's/[-"]//g'`; do ewarn "Found AP with ESSID ${AP}" if [ -z ${essid_AP} ]; then essid_AP="$(eval echo \$\{essid_${AP}\})" if [ ! -z ${essid_AP} ]; then key_AP="$(eval echo \$\{key_${AP}\})" fi fi done ifconfig $IFACE down ewarn "Configuring wireless card for AP with ESSID ${essid_AP}" if [ ! -z ${essid_AP} ]; then iwconfig ${IFACE} essid ${essid_AP} fi if [ ! -z ${key_AP} ]; then iwconfig ${IFACE} key ${key_AP} fi sleep 0.5 return 0 } start() { local retval=0 setup_env checkconfig || return 1 if [ ${wireless_IFACE} == "yes" ]; then ebegin "Detecting network for ${IFACE}" setup_wireless eend 0 fi ebegin "Bringing ${IFACE} up" if [ "${iface_IFACE}" != "dhcp" ] then /sbin/ifconfig ${IFACE} ${iface_IFACE} >/dev/null || { retval=$? eend ${retval} "Failed to bring ${IFACE} up" return ${retval} } # ifconfig do not always return failure .. /sbin/ifconfig ${IFACE} &> /dev/null || { retval=$? eend ${retval} "Failed to bring ${IFACE} up" return ${retval} } else # Check that eth0 was not brough up by the kernel ... if [ "${status_IFACE}" != "up" ] then /sbin/dhcpcd ${dhcpcd_IFACE} ${IFACE} >/dev/null || { retval=$? eend ${retval} "Failed to bring ${IFACE} up" return ${retval} } fi fi eend 0 if [ -n "${alias_IFACE}" ] then local x="" local num=0 local aliasbcast="" local aliasnmask="" ebegin " Adding aliases" for x in ${alias_IFACE} do aliasbcast="$(eval echo \$\{broadcast_${IFACE}\} \| awk \'\{ print \$$((num + 1)) \}\')" if [ -n "${aliasbcast}" ] then aliasbcast="broadcast ${aliasbcast}" fi aliasnmask="$(eval echo \$\{netmask_${IFACE}\} \| awk \'\{ print \$$((num + 1)) \}\')" if [ -n "${aliasnmask}" ] then aliasnmask="netmask ${aliasnmask}" fi ebegin " ${IFACE}:${num}" /sbin/ifconfig ${IFACE}:${num} ${x} \ ${aliasbcast} ${aliasnmask} >/dev/null num=$((num + 1)) eend 0 done save_options "alias" "${alias_IFACE}" fi if [ -n "${inet6_IFACE}" ] then local x="" ebegin " Adding inet6 addresses" for x in ${inet6_IFACE} do ebegin " ${IFACE} inet6 add ${x}" /sbin/ifconfig ${IFACE} inet6 add ${x} >/dev/null eend 0 done save_options "inet6" "${inet6_IFACE}" fi if [ -n "${gateway}" ] && [ "${gateway%/*}" = "${IFACE}" ] then ebegin " Setting default gateway" # First delete any existing routes if it was setup by kernel .. /sbin/route del default dev ${gateway%/*} &>/dev/null /sbin/route add default gw ${gateway#*/} dev ${gateway%/*} \ netmask 0.0.0.0 metric 1 >/dev/null || { local error=$? ifconfig ${IFACE} down &>/dev/null eend ${error} "Failed to bring ${IFACE} up" stop return ${error} } eend 0 fi # Enabling rp_filter causes wacky packets to be auto-dropped by # the kernel if [ -e /proc/sys/net/ipv4/conf/${IFACE}/rp_filter ] then echo 1 > /proc/sys/net/ipv4/conf/${IFACE}/rp_filter fi } stop() { local myalias="$(get_options alias)" local myinet6="$(get_options inet6)" setup_env ebegin "Bringing ${IFACE} down" # Also down the inet6 interfaces if [ -n "${myinet6}" ] then local x="" for x in ${myinet6} do /sbin/ifconfig ${IFACE} inet6 del ${x} >/dev/null done fi # Do some cleanup in case the amount of aliases change if [ -n "${myalias}" ] then local x="" local num=0 for x in ${myalias} do /sbin/ifconfig ${IFACE}:${num} down >/dev/null num=$((num + 1)) done fi if [ "${iface_IFACE}" = "dhcp" ] then local count=0 while /sbin/dhcpcd -k ${IFACE} &>/dev/null && [ "${count}" -lt 9 ] do # Give dhcpcd time to properly shutdown sleep 1 count=$((count + 1)) done if [ "${count}" -ge 9 ] then eerror "Timed out trying to stop dhcpcd" fi else /sbin/ifconfig ${IFACE} down >/dev/null fi eend 0 } # vim:ts=4 |