Neo FreeRunner Wifi
From Openmoko
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 # WPA-PSK started working for me after commenting out the "proto" option #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
Success stories
July 22, 2008
wpa_supplicant 0.6.3-r1 works for me with WPA-PSK. After removing the "proto" option things started working (now mentioned in the sample config above). Unlike the comment above, udhcpc updates /etc/resolver.conf correctly for me.
Bringing up wpa_supplicant manually or using "ifup eth0" with the wpa-conf option set in /etc/network/interfaces work for me. If usb0 was already up when running "ifup eth0" you'll end up with 2 default routes which can cause problems. To solve this either take usb0 down first or run "ip route del default dev usb0".
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. This is for WEP.
The following may be helpful in order to scan available networks :
# iwlist eth0 scan
[kd8ikt]
script to autoconnect to open AP's
http://wiki.openmoko.org/wiki/wifiweasel