wpa_supplicant wifi problems no scan results

1,403 views
Skip to first unread message

Androidphan

unread,
Apr 21, 2009, 6:59:16 AM4/21/09
to android-porting
I have an Atheros 5007EG wireless network card at my hardware
platform. I compiled the kernel(2.6.27) with ath5k built in.

Then I compiled wpa_supplicant with CONFIG_WIRELESS_EXTENSIONS=y
CONFIG_DRIVER_WEXT=y and CONFIG_CTRL_IFACE=y.

Then in my init.rc :
mkdir /data/misc/wifi 0770 wifi wifi
mkdir /data/misc/wifi/sockets 0770 wifi wifi
mkdir /data/system/wpa_supplicant 0770 wifi wifi
mkdir /data/misc/dhcp 0770 dhcp dhcp
chown dhcp dhcp /data/misc/dhcp

ifup wlan0

service wpa_supplicant /system/bin/logwrapper /system/bin/
wpa_supplicant -Dwext -iwlan0 -c/system/etc/wifi/wpa_supplicant.conf -
dd
group wifi

My wpa_supplicant.conf at /system/etc/wifi/wpa_supplicant.conf :

update_config=1
ctrl_interface=DIR=/data/system/wpa_supplicant GROUP=system

Then when I try to scan with: wpa_cli -p/data/system/wpa_supplicant -
iwlan0 and then scan & scan_results, I'm getting no scan results, when
I know there are definitly scan results. Because when I scanned with
Windows, I do get to see scan results.

What is wrong with my configuration?

My logcat output from wpa_supplicant:

I//system/bin/wpa_supplicant( 2127): Initializing interface 'wlan0'
conf '/system/etc/wifi/wpa_supplicant.conf' driver 'wext'
ctrl_interface 'N/A' bridge 'N/A'
I//system/bin/wpa_supplicant( 2127): Configuration file '/system/etc/
wifi/wpa_supplicant.conf' -> '/system/etc/wifi/wpa_supplicant.conf'
I//system/bin/wpa_supplicant( 2127): Reading configuration file '/
system/etc/wifi/wpa_supplicant.conf'
I//system/bin/wpa_supplicant( 2127): update_config=1
I//system/bin/wpa_supplicant( 2127): ctrl_interface='DIR=/data/system/
wpa_supplicant'
I//system/bin/wpa_supplicant( 2127): Initializing interface (2)
'wlan0'
I//system/bin/wpa_supplicant( 2127): EAPOL: SUPP_PAE entering state
DISCONNECTED
I//system/bin/wpa_supplicant( 2127): EAPOL: KEY_RX entering state
NO_KEY_RECEIVE
I//system/bin/wpa_supplicant( 2127): EAPOL: SUPP_BE entering state
INITIALIZE
I//system/bin/wpa_supplicant( 2127): EAP: EAP entering state DISABLED
I//system/bin/wpa_supplicant( 2127): EAPOL: External notification -
portEnabled=0
I//system/bin/wpa_supplicant( 2127): EAPOL: External notification -
portValid=0
I//system/bin/wpa_supplicant( 2127): SIOCGIWRANGE: WE(compiled)=22 WE
(source)=21 enc_capa=0xf
I//system/bin/wpa_supplicant( 2127): capabilities: key_mgmt 0xf enc
0xf
I//system/bin/wpa_supplicant( 2127): WEXT: Operstate: linkmode=1,
operstate=5
I//system/bin/wpa_supplicant( 2127): Own MAC address:
00:22:43:2c:fa:a6
I//system/bin/wpa_supplicant( 2127): wpa_driver_wext_set_wpa
I//system/bin/wpa_supplicant( 2127): wpa_driver_wext_set_key: alg=0
key_idx=0 set_tx=0 seq_len=0 key_len=0
I//system/bin/wpa_supplicant( 2127): wpa_driver_wext_set_key: alg=0
key_idx=1 set_tx=0 seq_len=0 key_len=0
I//system/bin/wpa_supplicant( 2127): wpa_driver_wext_set_key: alg=0
key_idx=2 set_tx=0 seq_len=0 key_len=0
I//system/bin/wpa_supplicant( 2127): wpa_driver_wext_set_key: alg=0
key_idx=3 set_tx=0 seq_len=0 key_len=0
I//system/bin/wpa_supplicant( 2127):
wpa_driver_wext_set_countermeasures
I//system/bin/wpa_supplicant( 2127): ioctl[SIOCSIWAUTH]: Operation not
supported on transport endpoint
I//system/bin/wpa_supplicant( 2127): WEXT auth param 4 value 0x0 -
wpa_driver_wext_set_drop_unencrypted
I//system/bin/wpa_supplicant( 2127): Setting scan request: 0 sec
100000 usec
I//system/bin/wpa_supplicant( 2127): Using existing control interface
directory.
I//system/bin/wpa_supplicant( 2127): ctrl_iface bind(PF_UNIX) failed:
Address already in use
I//system/bin/wpa_supplicant( 2127): ctrl_iface exists, but does not
allow connections - assuming it was leftover from forced program
termination
I//system/bin/wpa_supplicant( 2127): Successfully replaced leftover
ctrl_iface socket '/data/system/wpa_supplicant/wlan0'
I//system/bin/wpa_supplicant( 2127): Added interface wlan0
I//system/bin/wpa_supplicant( 2127): RTM_NEWLINK: operstate=0
ifi_flags=0x1003 ([UP])
I//system/bin/wpa_supplicant( 2127): RTM_NEWLINK, IFLA_IFNAME:
Interface 'wlan0' added
I//system/bin/wpa_supplicant( 2127): Wireless event: cmd=0x8b06 len=8
I//system/bin/wpa_supplicant( 2127): State: DISCONNECTED -> SCANNING
I//system/bin/wpa_supplicant( 2127): CTRL-EVENT-STATE-CHANGE id=-1
state=2
I//system/bin/wpa_supplicant( 2127): Starting AP scan (broadcast SSID)
I//system/bin/wpa_supplicant( 2127): Trying to get current scan
results first without requesting a new scan to speed up initial
association
I//system/bin/wpa_supplicant( 2127): Received 0 bytes of scan results
(0 BSSes)
I//system/bin/wpa_supplicant( 2127): Scan results: 0
I//system/bin/wpa_supplicant( 2127): CTRL-EVENT-SCAN-RESULTS Ready
I//system/bin/wpa_supplicant( 2127): No suitable AP found.
I//system/bin/wpa_supplicant( 2127): Setting scan request: 0 sec 0
usec
I//system/bin/wpa_supplicant( 2127): No enabled networks - do not scan
I//system/bin/wpa_supplicant( 2127): State: SCANNING -> INACTIVE
I//system/bin/wpa_supplicant( 2127): CTRL-EVENT-STATE-CHANGE id=-1
state=1
.....
.....
I//system/bin/wpa_supplicant( 2127): RX ctrl_iface - hexdump_ascii
(len=6):
I//system/bin/wpa_supplicant( 2127): 53 54 41 54 55
53 STATUS
I//system/bin/wpa_supplicant( 2127): RX ctrl_iface - hexdump_ascii
(len=11):
I//system/bin/wpa_supplicant( 2127): 44 52 49 56 45 52 20 52 53
53 49 DRIVER RSSI
I//system/bin/wpa_supplicant( 2127): RX ctrl_iface - hexdump_ascii
(len=16):
I//system/bin/wpa_supplicant( 2127): 44 52 49 56 45 52 20 4c 49
4e 4b 53 50 45 45 44 DRIVER LINKSPEED
I//system/bin/wpa_supplicant( 2127): RX ctrl_iface - hexdump_ascii
(len=14):
I//system/bin/wpa_supplicant( 2127): 44 52 49 56 45 52 20 4d 41
43 41 44 44 52 DRIVER MACADDR
V/WifiStateTracker( 2137): Connection to supplicant established,
state=INACTIVE
I//system/bin/wpa_supplicant( 2127): RX ctrl_iface - hexdump_ascii
(len=21):
I//system/bin/wpa_supplicant( 2127): 44 52 49 56 45 52 20 52 58
46 49 4c 54 45 52 2d DRIVER RXFILTER-
I//system/bin/wpa_supplicant( 2127): 41 44 44 20
30 ADD 0
I//system/bin/wpa_supplicant( 2127): RX ctrl_iface - hexdump_ascii
(len=22):
I//system/bin/wpa_supplicant( 2127): 44 52 49 56 45 52 20 42 54
43 4f 45 58 53 43 41 DRIVER BTCOEXSCA
I//system/bin/wpa_supplicant( 2127): 4e 2d 53 54 4f
50 N-STOP
....
....
I//system/bin/wpa_supplicant( 2127): 42 4c 41 43 4b 4c 49 53 54
20 63 6c 65 61 72 BLACKLIST clear
I//system/bin/wpa_supplicant( 2127): CTRL_IFACE: bssid=' clear'
I//system/bin/wpa_supplicant( 2127): Setting scan request: 0 sec 0
usec
I//system/bin/wpa_supplicant( 2127): No enabled networks - do not scan
I//system/bin/wpa_supplicant( 2127): State: INACTIVE -> INACTIVE
I//system/bin/wpa_supplicant( 2127): CTRL-EVENT-STATE-CHANGE id=-1
state=1
I//system/bin/wpa_supplicant( 2127): CTRL_IFACE monitor send - hexdump
(len=40): 2f 64 61 74 61 2f 6d 69 73 63 2f 77 69 66 69 2f 73 6f 63 6b
65 74 73 2f 77 70 61 5f 63 74 72 6c 5f 32 31 33 37 2d 31 00

Luca Belluccini

unread,
Apr 21, 2009, 10:54:30 AM4/21/09
to android-porting
I'm with the same module. I set it NOT built-in.
You are planning to make wifi interact with Android GUI?
I modified wifi.c specifying the right path to module to be insmodded.
By the way I'm having the same SIOCSIWAUTH error, starting manually
the wpa_supplicant.
I think it's the main problem.

Gani Bhagavathula

unread,
Apr 21, 2009, 1:40:03 PM4/21/09
to android-porting
Luca:

If I dont use WPA (and have no wpa_supplicant) is it OK just to change
the wifi.c like this, and compile the module and make sure it is in
the init.rc? Will it connect to a WEP protected network at that
point?

static const char IFACE_DIR[] = "/data/system/
wpa_supplicant";
static const char DRIVER_MODULE_NAME[] = "ath5k";
static const char DRIVER_MODULE_TAG[] = "ath5k ";
static const char DRIVER_MODULE_PATH[] = "/system/lib/modules/
ath5k.ko";
static const char FIRMWARE_LOADER[] = "wlan_loader";
static const char DRIVER_PROP_NAME[] = "wlan.driver.status";


Regards,
Gani

Luca Belluccini

unread,
Apr 21, 2009, 4:41:34 PM4/21/09
to android-porting
It is not working for me. I did the same changes on wifi.c as you
pasted here.
In Android GUI, I can press Enable wifi and I get:
-module insmodded
-GUI locked for some seconds
-reboot
-Android in airplane mode
I'm running on a real eeepc701.
It seems the hot code causing error is:
wifi_load_driver in wifi.c

By the way I think we need wpa_supplicant (or it will be launched by
Android?).
The property wlan.driver.status must be set. But I don't know which
value must be set.

On 21 Apr, 19:40, Gani Bhagavathula <gani.bhagavath...@gmail.com>
wrote:

Gani Bhagavathula

unread,
Apr 22, 2009, 1:15:07 AM4/22/09
to android-porting
Luca:

I tried this, and am getting stuck at a more basic place. I dont
think I am even loading the kernel that I am compiling. Here is what
I do - I did a menuconfig on the kernel, and compiled it. I also did
something like 'make SUBDIRS=drivers/net/wireless/ath5k modules'.

Then I copied the bzImage into the vendor/asus/eee_701 directory as
suggested. Also the ath5k.ko module into vendor/asus/eee_701/modules
directory. The module ends up in the image allright. I have added
the relavant lines in the init.rc to load the ath5k module also.

However, in the dmesg, I see something like "ath5k disagrees with the
version of struct_symbol". Looks like the stock kernel that came from
the repo (2.6.25) is being loaded, rather than the one I compiled
2.6.27. That kind of makes sense, since the driver didnt work when I
tried to make it part of the driver rather than a module either.

I must be missing a step after copying the bzImage into place and
before I compile the installer_img OR the make-live script is making a
difference. One of these. Can you help?

Regards,
Gani

Gani Bhagavathula

unread,
Apr 22, 2009, 3:45:07 AM4/22/09
to android-porting
Luca:

I found my problem. I was not renaming the new kernel as kernel when
I copied the bzImage file to vendor/asus/eee_701 - so my new kernel
was not being loaded...

I have to try this when I get home tonight...

Gani

On Apr 22, 6:15 am, Gani Bhagavathula <gani.bhagavath...@gmail.com>
> ...
>
> read more »

Luca Belluccini

unread,
Apr 22, 2009, 7:48:05 AM4/22/09
to android-porting
Any new?

On 22 Apr, 09:45, Gani Bhagavathula <gani.bhagavath...@gmail.com>
> ...
>
> leggi tutto

Gani Bhagavathula

unread,
Apr 22, 2009, 10:54:57 AM4/22/09
to android-porting
Still at work Luca, Can't try this unless I get home. Will update
later...

Gani
> ...
>
> read more »

Gani Bhagavathula

unread,
Apr 24, 2009, 4:13:18 AM4/24/09
to android-porting
Luca:

I thought I posted this yesterday, but looks like I sent it as a
Author only reply. I thought I would put this here for everyone's
benefit.

In the changes we both initially did in the wifi.c, the path to the
module needs to be /lib/modules/ath5k.ko and not /system/lib/modules/
ath5k.ko. If you change that, the Module gets loaded properly. Not
that the WLAN works, but you dont go into the Airplane Mode.

The next thing I did was to comment out the line set_prop
("ctrl.status", WLAN_LOADER); since the logs showed that it was trying
to load the firmware - ATH5K driver does not need any firmware as far
as I know. The error related to this goes away, but I am no closer to
getting the driver to work.

Gani

On Apr 21, 9:41 pm, Luca Belluccini <lucabellucc...@gmail.com> wrote:
> It is not working for me. I did the same changes onwifi.c as you
> pasted here.
> In Android GUI, I can press Enablewifiand I get:
> -module insmodded
> -GUI locked for some seconds
> -reboot
> -Android in airplane mode
> I'm running on a real eeepc701.
> It seems the hot code causing error is:
> wifi_load_driver inwifi.c
>
> By the way I think we need wpa_supplicant (or it will be launched by
> Android?).
> The property wlan.driver.status must be set. But I don't know which
> value must be set.
>
> On 21 Apr, 19:40, Gani Bhagavathula <gani.bhagavath...@gmail.com>
> wrote:
>
> > Luca:
>
> > If I dont use WPA (and have no wpa_supplicant) is it OK just to change
> > thewifi.c like this, and compile the module and make sure it is in
> > the init.rc?  Will it connect to a WEP protected network at that
> > point?
>
> > static const char IFACE_DIR[]           = "/data/system/
> > wpa_supplicant";
> > static const char DRIVER_MODULE_NAME[]  = "ath5k";
> > static const char DRIVER_MODULE_TAG[]   = "ath5k ";
> > static const char DRIVER_MODULE_PATH[]  = "/system/lib/modules/
> > ath5k.ko";
> > static const char FIRMWARE_LOADER[]     = "wlan_loader";
> > static const char DRIVER_PROP_NAME[]    = "wlan.driver.status";
>
> > Regards,
> > Gani
>
> > On Apr 21, 3:54 pm, Luca Belluccini <lucabellucc...@gmail.com> wrote:
>
> > > I'm with the same module. I set it NOT built-in.
> > > You are planning to makewifiinteract with Android GUI?
> > > I modifiedwifi.c specifying the right path to module to be insmodded.

Michael Trimarchi

unread,
Apr 24, 2009, 4:21:38 AM4/24/09
to android...@googlegroups.com
Hi, the problem here is the java parsing function wait a minus after if
I remember
the signal streght, and It can't parse. When you receive the scan result
event, the
comunicattion with wpa supplicant is up. Android lunch the wpa_supplicant

Michael

Gani Bhagavathula

unread,
Apr 24, 2009, 5:12:11 AM4/24/09
to android-porting
Michael:

I have read a reference to the java parser function in some other post
too, but not sure what it means... Can you give me any more
information to work with?

Regards,
Gani

On Apr 24, 9:21 am, Michael Trimarchi <trimar...@gandalf.sssup.it>
wrote:

Michael Trimarchi

unread,
Apr 24, 2009, 5:16:46 AM4/24/09
to android...@googlegroups.com
Gani Bhagavathula wrote:
> Michael:
>
> I have read a reference to the java parser function in some other post
> too, but not sure what it means... Can you give me any more
> information to work with?
>
vi ./base/services/java/com/android/server/WifiService.java

take a look of the code and in particular here
for (int i = lineBeg; i < lineEnd; ++i) {
- char ch = reply.charAt(i);
- /*
- * Assume that the signal level starts
with a '-'
- */
- if (ch == '-') {
- /*
- * Skip whatever instances of '-' we
may have
- * after we parse the signal level
- */
- parsingScanResultLevel =
(scanResultLevel == 0);
- } else if (parsingScanResultLevel) {

As you can see it expect a minus. You can obtain it in the
wpa_supplicant response
or just revert this change and don't look for -. Add a print in this
function to see
if it return the list of the wifi network and
good luck

Michael Trimarchi

unread,
Apr 24, 2009, 5:28:35 AM4/24/09
to android...@googlegroups.com

Leon

unread,
Apr 24, 2009, 10:47:26 AM4/24/09
to android-porting
Another way/thought:

In include/linux/wireless.h of linux kernel
struct iw_quality
{
__u8 level; /* signal level (dBm) */
};

The value should be negative, but it is stored in the unsigned value.

Therefore in iwlib.c of the wireless tool
void
iw_print_stats(char * buffer,
iwqual * qual,
iwrange * range,
int has_range)
{
/* Statistics are in dBm (absolute power measurement) */
sprintf(buffer,
"Quality:%d/%d Signal level:%d dBm Noise level:%d
dBm%s",
qual->qual, range->max_qual.qual,
qual->level - 0x100, qual->noise - 0x100,
(qual->updated & 0x7) ? " (updated)" : "");
}

"qual->level - 0x100" restores to its origin negative value.


In driver.h of external/wpa_supplicant
struct wpa_scan_result {
int level;
}

level can be negative. And it should get the negative value.

So,
In driver_wext.c
int wpa_driver_wext_get_scan_results(void *priv,
struct wpa_scan_result *results,
size_t max_size)
{
case IWEVQUAL:
results[ap_num].level = iwe->u.qual.level - 0x100;
}

Is it better to make conversion in wpa_supplicant ?


Regards,
Leon


On Apr 24, 5:16 pm, Michael Trimarchi <trimar...@gandalf.sssup.it>
> ...
>
> read more »
Reply all
Reply to author
Forward
0 new messages