Neo FreeRunner Wifi

From Openmoko

Revision as of 20:26, 21 July 2008 by Kd8ikt (Talk | contribs)

Jump to: navigation, search

To get wlan working on your Freerunner, you can follow these steps:

1. create and edit a suitable /etc/wpa_supplicant/wpa_supplicant.conf (use your favourite search engine to find the syntax)

2. execute

ifup eth0

3. execute

wpa_supplicant -ieth0 -c/etc/wpa_supplicant/wpa_supplicant.conf -B

(-B for running as daemon)

4. get a IP via dhcp:

udhcpc eth0

That's it, your wlan should now work!

Contents

Using /etc/network/interfaces

Another way is to use /etc/network/interfaces

For instance, for WEP:

  • Using wireless tools:
iface eth0 inet dhcp
   wireless-key my_wep_key
   wireless-essid my_essid
  • Using wpa_supplicant (this allows more authentication methods).
iface eth0 inet dhcp
   wpa-wep-key0 my_wep_key
   wpa-key-mgmt NONE
   wpa-ssid my_essid

Using a wpa_supplicant.conf file:

iface eth0 inet dhcp
   wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

Then just run:

ifup eth0

You'll get a lot of messages, like ioctl[SIOCSIWENCODEEXT]: Operation not supported and sed: unrecognized option `--quiet', they appear to be harmless. The "--quiet" error message can be avoided by replacing "sed --quiet" with "sed -n" in /etc/wpa_supplicant/*.sh

Known good wpa-supplicant version?

Is the 0.6.3-r1 broken? I don't get anything to work with these instructions via usage of wpa_supplicant, but WEP works via direct interfaces changes (wireless-essid/wireless-key settings).

Sample wpa_supplicant.conf

ctrl_interface=/var/run/wpa_supplicant
eapol_version=1
ap_scan=1

# WPA2:
network={
       ssid="your ssid"
       scan_ssid=1
       proto=RSN
       key_mgmt=WPA-PSK
       pairwise=CCMP TKIP
       group=TKIP CCMP
       psk="secret key"
       priority=50
}

# WPA:
network={
      ssid="your_ssid"
      scan_ssid=1
      psk="secret key"
      priority=10
}

# WEP:
network={
     ssid="your_ssid"
     scan_ssid=1
     key_mgmt=NONE
     wep_tx_keyidx=0
     wep_key0="secret key"
     priority=8
}

# Open:
network={
     ssid="your ssid"
     key_mgmt=NONE
     priority=5
}

A very ugly /etc/init.d/wlan startscript

#!/bin/sh
#
# wlan	This shell script starts and stops wlan.
#
# processname: wlan

# Source function library.
#. /etc/rc.d/init.d/functions
# "written" by HdR

RETVAL=0
prog="wlan"

# test -f /etc/default/$prog && . /etc/default/$prog

start() {
	echo -n "Starting $prog: "
	ifconfig eth0 up
	wpa_supplicant -ieth0 -c/etc/wpa_supplicant/wpa_supplicant.conf -B
	sleep 10
	udhcpc eth0
	RETVAL=$?
	return $RETVAL
}

stop() {
	# Stop daemons.
	echo -n "Shutting down $prog: "
        killall wpa_supplicant
	ifconfig eth0 down
#        killproc gpsd
	RETVAL=$?
	return $RETVAL
}

# See how we were called.
case "$1" in
  start)
	start
	;;
  stop)
	stop
	;;
  restart|reload)
	stop
	start
	RETVAL=$?
	;;
  *)
	echo "Usage: $0 {start|stop|restart}"
	exit 1
esac

exit $RETVAL

An alternative way to automate

Add the wpa_supplicant details to /etc/network/interfaces:

iface eth0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

Now `ifup eth0` will start up wpa_supplicant and udhcpc for you, and `ifdown eth0` will stop them, in theory at least. In practise udhcpc can time out before wpa_supplicant has finished connecting to the access point, and if udhcpc has failed to get an address ifdown exits without stopping wpa_supplicant and bringing down the interface.

Comments

The alternative method seems to work reliably on the FR/ GTA02, I couldn't get the manual method to work when WPA/PSK is involved. Also you must do ifdown usb0 before the ifup eth0. Then you also need to setup the resolv.conf manually as it does not seem to get the dns server from the dhcp server. If the dhcp fails during ifup eth0, then you can run udhcpc eth0 manually it usually gets the dhcp address the second time around.

I use a script called u...

# u
ifdown usb0
ifup eth0 
echo nameserver xx.xx.xx.xx >/etc/resolv.conf

This usually works


[July 19, 2008] I've had repeated success with:

# ifconfig eth0 up
# iwconfig eth0 essid any
# iwconfig eth0 key '...'
# iwconfig eth0 essid '...'
# udhcpc eth0
# ifconfig usb0 down; ifconfig usb0 up

Hope that helps someone.

The following may be helpful in order to scan available networks :

# iwlist eth0 scan


[kd8ikt] i found a neat lil script that scans/shows and asks for a essid/pass then fires up udhcpc (some modification required) http://www.spencerstirling.com/computergeek/wireless.html also sort of working on a shell script to find open nets and auto connect "work in progress" http://wiki.openmoko.org/wiki/GTA02_WLAN_AUTO

Personal tools

To get wlan working on your Freerunner, you can follow these steps:

1. create and edit a suitable /etc/wpa_supplicant/wpa_supplicant.conf (use your favourite search engine to find the syntax)

2. execute

ifup eth0

3. execute

wpa_supplicant -ieth0 -c/etc/wpa_supplicant/wpa_supplicant.conf -B

(-B for running as daemon)

4. get a IP via dhcp:

udhcpc eth0

That's it, your wlan should now work!

Using /etc/network/interfaces

Another way is to use /etc/network/interfaces

For instance, for WEP:

  • Using wireless tools:
iface eth0 inet dhcp
   wireless-key my_wep_key
   wireless-essid my_essid
  • Using wpa_supplicant (this allows more authentication methods).
iface eth0 inet dhcp
   wpa-wep-key0 my_wep_key
   wpa-key-mgmt NONE
   wpa-ssid my_essid

Using a wpa_supplicant.conf file:

iface eth0 inet dhcp
   wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

Then just run:

ifup eth0

You'll get a lot of messages, like ioctl[SIOCSIWENCODEEXT]: Operation not supported and sed: unrecognized option `--quiet', they appear to be harmless. The "--quiet" error message can be avoided by replacing "sed --quiet" with "sed -n" in /etc/wpa_supplicant/*.sh

Known good wpa-supplicant version?

Is the 0.6.3-r1 broken? I don't get anything to work with these instructions via usage of wpa_supplicant, but WEP works via direct interfaces changes (wireless-essid/wireless-key settings).

Sample wpa_supplicant.conf

ctrl_interface=/var/run/wpa_supplicant
eapol_version=1
ap_scan=1

# WPA2:
network={
       ssid="your ssid"
       scan_ssid=1
       proto=RSN
       key_mgmt=WPA-PSK
       pairwise=CCMP TKIP
       group=TKIP CCMP
       psk="secret key"
       priority=50
}

# WPA:
network={
      ssid="your_ssid"
      scan_ssid=1
      psk="secret key"
      priority=10
}

# WEP:
network={
     ssid="your_ssid"
     scan_ssid=1
     key_mgmt=NONE
     wep_tx_keyidx=0
     wep_key0="secret key"
     priority=8
}

# Open:
network={
     ssid="your ssid"
     key_mgmt=NONE
     priority=5
}

A very ugly /etc/init.d/wlan startscript

#!/bin/sh
#
# wlan	This shell script starts and stops wlan.
#
# processname: wlan

# Source function library.
#. /etc/rc.d/init.d/functions
# "written" by HdR

RETVAL=0
prog="wlan"

# test -f /etc/default/$prog && . /etc/default/$prog

start() {
	echo -n "Starting $prog: "
	ifconfig eth0 up
	wpa_supplicant -ieth0 -c/etc/wpa_supplicant/wpa_supplicant.conf -B
	sleep 10
	udhcpc eth0
	RETVAL=$?
	return $RETVAL
}

stop() {
	# Stop daemons.
	echo -n "Shutting down $prog: "
        killall wpa_supplicant
	ifconfig eth0 down
#        killproc gpsd
	RETVAL=$?
	return $RETVAL
}

# See how we were called.
case "$1" in
  start)
	start
	;;
  stop)
	stop
	;;
  restart|reload)
	stop
	start
	RETVAL=$?
	;;
  *)
	echo "Usage: $0 {start|stop|restart}"
	exit 1
esac

exit $RETVAL

An alternative way to automate

Add the wpa_supplicant details to /etc/network/interfaces:

iface eth0 inet dhcp
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

Now `ifup eth0` will start up wpa_supplicant and udhcpc for you, and `ifdown eth0` will stop them, in theory at least. In practise udhcpc can time out before wpa_supplicant has finished connecting to the access point, and if udhcpc has failed to get an address ifdown exits without stopping wpa_supplicant and bringing down the interface.

Comments

The alternative method seems to work reliably on the FR/ GTA02, I couldn't get the manual method to work when WPA/PSK is involved. Also you must do ifdown usb0 before the ifup eth0. Then you also need to setup the resolv.conf manually as it does not seem to get the dns server from the dhcp server. If the dhcp fails during ifup eth0, then you can run udhcpc eth0 manually it usually gets the dhcp address the second time around.

I use a script called u...

# u
ifdown usb0
ifup eth0 
echo nameserver xx.xx.xx.xx >/etc/resolv.conf

This usually works


[July 19, 2008] I've had repeated success with:

# ifconfig eth0 up
# iwconfig eth0 essid any
# iwconfig eth0 key '...'
# iwconfig eth0 essid '...'
# udhcpc eth0
# ifconfig usb0 down; ifconfig usb0 up

Hope that helps someone.

The following may be helpful in order to scan available networks :

# iwlist eth0 scan


[kd8ikt] i found a neat lil script that scans/shows and asks for a essid/pass then fires up udhcpc (some modification required) http://www.spencerstirling.com/computergeek/wireless.html also sort of working on a shell script to find open nets and auto connect "work in progress" http://wiki.openmoko.org/wiki/GTA02_WLAN_AUTO