主题 : 整理wpa_supplicant問題集? 复制链接 | 浏览器收藏 | 打印
级别: 圣骑士
UID: 44407
精华: 0
发帖: 386
金钱: 1945 两
威望: 389 点
贡献值: 0 点
综合积分: 772 分
注册时间: 2011-04-25
最后登录: 2014-08-25
楼主  发表于: 2012-03-01 16:36

 整理wpa_supplicant問題集?

如題,最近碰到加密的問題,WEP修改過重新編譯OK,
但是Android\external\wpa_supplicant\wpa_supplicant.c 並沒有看到wps相關內容,
而自己移植的wpa_supplicant-0.7.3又不能在Android上執行。

但最後在Android\external\wpa_supplicant_6\wpa_supplicant.c 找到了wps相關內容
有沒有人試過,我是build  Android\external\wpa_supplicant\ 而不是Android\external\wpa_supplicant_6\



WPA_SUPPLICANT當遇到WEP加密時,由於無法判斷是採用OPEN/SHARE,通常會在聲稱.conf檔中加入auth_alg=OPEN SHARED(至少Android遇到),但事實上某些wifi網卡驅動不能實現同時OPEN和SHARED同時設置,任意時刻只能用一個,這裏給出解決不能同時設置的方法,在wpa_supplicant.c:wpa_supplicant_associate()中加入以下內容:


if (ssid->auth_alg) {
        algs = 0;
        if (ssid->auth_alg & WPA_AUTH_ALG_OPEN)
            algs |= AUTH_ALG_OPEN_SYSTEM;
        if (ssid->auth_alg & WPA_AUTH_ALG_SHARED)
            algs |= AUTH_ALG_SHARED_KEY;
        if (ssid->auth_alg & WPA_AUTH_ALG_LEAP)
            algs |= AUTH_ALG_LEAP;
        wpa_printf(MSG_DEBUG, "Overriding auth_alg selection: 0x%x",
               algs);

//新增這段

        if ((algs & AUTH_ALG_OPEN_SYSTEM) && (algs & AUTH_ALG_SHARED_KEY) ) {
            algs = AUTH_ALG_SHARED_KEY;
            G_TRY_CONNECT ++;

            if (G_TRY_CONNECT >= 4) {
                algs = AUTH_ALG_OPEN_SYSTEM;
                wpa_printf(MSG_DEBUG, "RAYDEBUG--------------------change to ALG_OPEN_SYSTEM");
            }
        }
    }
[ 此帖被kazaya在2012-03-02 11:03重新编辑 ]
级别: 圣骑士
UID: 44407
精华: 0
发帖: 386
金钱: 1945 两
威望: 389 点
贡献值: 0 点
综合积分: 772 分
注册时间: 2011-04-25
最后登录: 2014-08-25
1楼  发表于: 2012-03-01 17:15
已解決WEP、WPS,但是WAPI仍未解決

1.<android>/external/wpa_supplicant_6/wpa_supplicant/wpa_supplicant.c 新增以下內容:


if (ssid->auth_alg) {
        algs = 0;
        if (ssid->auth_alg & WPA_AUTH_ALG_OPEN)
            algs |= AUTH_ALG_OPEN_SYSTEM;
        if (ssid->auth_alg & WPA_AUTH_ALG_SHARED)
            algs |= AUTH_ALG_SHARED_KEY;
        if (ssid->auth_alg & WPA_AUTH_ALG_LEAP)
            algs |= AUTH_ALG_LEAP;
        wpa_printf(MSG_DEBUG, "Overriding auth_alg selection: 0x%x",
               algs);

//新增這段

        if ((algs & AUTH_ALG_OPEN_SYSTEM) && (algs & AUTH_ALG_SHARED_KEY) ) {
            algs = AUTH_ALG_SHARED_KEY;
            G_TRY_CONNECT ++;

            if (G_TRY_CONNECT >= 4) {
                algs = AUTH_ALG_OPEN_SYSTEM;
                wpa_printf(MSG_DEBUG, "RAYDEBUG--------------------change to ALG_OPEN_SYSTEM");
            }
        }
    }


如果先前有build wpa_supplicant,之後要單獨build wpa_supplicant
2.要在刪除
<android>/out/out/target/product/<vendor>/obj/EXECUTABLES/wpa_cli_intermediates
<android>/out/out/target/product/<vendor>/obj/EXECUTABLES/wpa_supplicant_intermediates
<android>/out/out/target/product/<vendor>/obj/SHARED_LIBRARIES/libwpa_client_intermediates

3.修改Android.mk
如果是wpa_supplicant_6.:<android>/external/wpa_supplicant_6/wpa_supplicant/Android.mk

ifeq ($(WPA_BUILD_SUPPLICANT),true)

ifeq ($(WPA_BUILD_SUPPLICANT),false)

如果是wpa_supplicant_5.:<android>/external/wpa_supplicant/Android.mk
ifeq ($(WPA_BUILD_SUPPLICANT),true)

ifeq ($(WPA_BUILD_SUPPLICANT),false)
否則只會產出libwpa_client.so檔

PS.WPS需要重新編寫wpa_supplicant.conf
http://www.google.com.tw/url?sa=t&rct=j&q=wps+in+wpa_supplicant&source=web&cd=1&ved=0CCQQFjAA&url=https%3A%2F%2Fbugzilla.altlinux.org%2Fattachment.cgi%3Fid%3D4573&ei=xkBPT6ApiO-YBczAxZkK&usg=AFQjCNFoIMIzSI0ip5RTxgP2FJKENaHVBA

到時候我在研究....先確認是否有wapi更新....


如果想直接用./build-android重新build

1.在Android/device/<vendor>/<platform>/BoardConfig.mk

mini6410

# config.mk
#
# Product-specific compile-time definitions.
#

# The generic product target doesn't have any hardware-specific pieces.
TARGET_ARCH_VARIANT := armv6-vfp
TARGET_CPU_ABI := armeabi
TARGET_NO_BOOTLOADER := true
TARGET_NO_KERNEL := true
TARGET_PROVIDES_INIT_RC := true
TARGET_PROVIDES_UEVENTD_RC := true

BOARD_NO_RGBX_8888 := true
BOARD_HAS_LIMITED_EGL := true

# JS Engine
JS_ENGINE=jsc
ENABLE_JSC_JIT=true
BOARD_USES_OVERLAY := true
DEFAULT_FB_NUM := 4


# Customized map
TARGET_PRELINKER_MAP := vendor/friendly-arm/products/prelink-linux-arm.map

# Hardware 3D
TARGET_HARDWARE_3D := false

# Audio
BOARD_USES_ALSA_AUDIO := true
BUILD_WITH_ALSA_UTILS := true

# Camera
BOARD_CAMERA_LIBRARIES := libcamera
BOARD_S3CJPEG_LIBRARIES := libs3cjpeg

# Wi-Fi
BOARD_HAVE_LIBWIFI := true
BOARD_WPA_SUPPLICANT_DRIVER := CUSTOM
#CONFIG_DRIVER_NL80211 := true
WPA_BUILD_SUPPLICANT := true
#WPA_SUPPLICANT_VERSION := VER_0_5_X //把這兒mark
WPA_SUPPLICANT_VERSION := VER_0_6_X
CONFIG_CTRL_IFACE := y

# Bluetooth
BOARD_HAVE_BLUETOOTH := true

# GPS
BOARD_GPS_LIBRARIES :=gps.mini6410.so

# Media
BUILD_WITHOUT_PV := true
BUILD_WITH_FULL_STAGEFRIGHT := true



netcfg

lo       UP    127.0.0.1       255.0.0.0       0x00000049
dummy0   DOWN  0.0.0.0         0.0.0.0         0x00000082
eth0     DOWN  0.0.0.0         0.0.0.0         0x00001002
ath0     UP    192.168.1.101   255.255.255.0   0x00001043

修改:

1.mkdir /data/misc/ath0
   cp /data/misc/ath0/wpa_supplicant.conf
   chmod 777 /data/misc/ath0/wpa_supplicant.conf


-ctrl_interface=DIR=/data/misc/wifi
+ctrl_interface=DIR=/data/misc/ath0
ctrl_interface_group=wifi
update_config=1


# Let wpa_supplicant search and select AP
ap_scan=1

# WPA-PSK, PSK use ASCII
#network={
#  ssid="Test1"
#  psk="1111111111"
#   #Higher priority use first
#  priority=5
#}

# The same as above, assign SSID for AP without brocast SSID
#network={
#  ssid="second ssid"
#  scan_ssid=1
#  psk="very secret passphrase"
#  priority=2
#}

# Allow WPA-PSK only. Allow any valid password set
#network={
#  ssid="example"
#  proto=WPA
#  key_mgmt=WPA-PSK
#  pairwise=CCMP TKIP
#  group=CCMP TKIP WEP104 WEP40
#  psk=06b4be19da289f475aa46a33cb793029d4ab3db7a23ee92382eb0106c72ac7bb
#  priority=2
#}

# Plaintext( Not use 802.1X )
#network={
#  ssid="plaintext-test"
#  key_mgmt=NONE
#}

# Shared WEP, Not use IEEE 802.11 Shared Key
#network={
#  ssid="Test1"
#  key_mgmt=NONE
#  wep_key0='abcde'
#  wep_key1='abcde'
#  wep_key2='abcde'
#  wep_tx_keyidx=0
#  priority=5
#}

#Shared WEP, Use IEEE 802.11 Shared Key
#network={
#  ssid="Test1"
#  key_mgmt=NONE
#  wep_key0="aaaaa"
#  wep_key1="aaaaa"
#  wep_key2="aaaaa"
#  wep_key3="aaaaa"
#  wep_tx_keyidx=0
#  priority=5
#  auth_alg=SHARED
#}

#IBSS/ad-hoc with WPA-None/TKIP
#network={
#  ssid="test adhoc"
#  mode=1
#  proto=WPA
#  key_mgmt=WPA-NONE
#  pairwise=NONE
#  group=TKIP
#  psk="secret passphrase"
#}



2.wpa_supplicant -dd -Dwext -iath0 -c/data/misc/ath0/wpa_supplicant.conf&
[ 此帖被kazaya在2012-03-02 11:02重新编辑 ]