移植wpa_supplicant到arm-linux宿主機開發環境:Ubuntu10.10/Fedora1232bits目標開發板:Mini6410arm-linux內核Kernel:2.6.38交叉編譯器CROSS_COMPILE:arm-linux-gcc-4.5.11.移植準備a.下載openssl源代碼(使用openssl-0.9.8e)官網:http://www.openssl.org/source/源碼:http://www.openssl.org/source/openssl-0.9.8e.tar.gzb.下載wpa_supplicant源代碼(使用wpa_supplicant-0.7.3)官網:http://hostap.epitest.fi/wpa_supplicant/源碼:http://hostap.epitest.fi/releases/wpa_supplicant-0.7.3.tar.gzc:下載:libtommath源代碼(libtommath_0.39.orig.tar.gz)源碼:ftp://220.165.12.10/debian/pool/main/libt/libtommath/libtommath_0.39.orig.tar.gz2.編譯openssla.將openssl解到wpa_supplicant/patches目錄下#tarzxvfopenssl-0.9.8e.tar.gz-C../wpa_supplicant-0.7.3/patches/b.將openssl-0.9.8-tls-extensions.patch拷貝到wpa_supplicant/patches/openssl-0.9.8e目錄下#cpwpa_supplicant-0.7.3/patches/openssl-0.9.8e-tls-extensions.patchopenssl-0.9.8e/c.patchopenssl-0.9.8e#patch-p1>產生libssl.a及libcrypto.a方式2.#./Configureno-asm--prefix=/usr/local/openssl#makeCC=arm-linux-gccinstall>>產生libssl.so及libcrypto.so3.編譯libtommath-0.39a.將libtommath-0.39解到/usr/src/目錄下#tarzxvflibtommath_0.39.orig.tar.gz-C/usr/srcb.編譯libtommath#makeCC=arm-linux-gcc產生libtommath.a4.編譯wpa_supplicant(增加WPS功能)#cpdefconfig.configCONFIG_DRIVER_WEXT=yCONFIG_IEEE8021X_EAPOL=yCONFIG_EAP_FAST=yCONFIG_TLS=opensslCONFIG_TLS=internalCONFIG_INTERNAL_LIBTOMMATH=yifndefCONFIG_INTERNAL_LIBTOMMATHLTM_PATH=/usr/src/libtommath-0.39CFLAGS+=-I$(LTM_PATH)LIBS+=-L$(LTM_PATH)LIBS_p+=-L$(LTM_PATH)endifCONFIG_WPS=yCONFIG_EAP_WPS=y#vim.configCC=gcc-L/usr/local/ssl/lib/CFLAGS+=-I/usr/local/ssl/include/LIBS+=-L/usr/local/ssl/lib/#makeCC=arm-linux-gccinstall修正WEP中open/share無法正確選擇WPA_SUPPLICANT當遇到WEP加密時,由於無法判斷是採用OPEN/SHARE,通常會在聲稱.conf檔中加入auth_alg=OPENSHARED(至少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,"Overridingauth_algselection: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--------------------changetoALG_OPEN_SYSTEM");}}}Wpa_supplicant.conf說明#Arm-linux/linux//建立socketctrl_interface=/var/run/wpa_supplicantctrl_interface_group=wheelupdate_config=1(可以在wpa_cli中保存配置檔)#ap_scan=1#Android//建立socketctrl_interface=DIR=/data/misc/wifictrl_interface_group=wifiupdate_config=1(可以在wpa_cli中保存配置檔)#ap_scan=1##WPA/WPA2#WPA-PSK,PSKuseASCII(只要密碼正確就允許)#network={#ssid="AcSiP"//AP名稱#psk="1111111111"//密碼##Higherpriorityusefirst#priority=5#}#Thesameasabove,assignSSIDforAPwithoutbrocastSSID(針對那些拒絕廣播SSID的AP)#network={#network={#ssid="secondssid"#scan_ssid=1#psk="verysecretpassphrase"#priority=2#}#AllowWPA-PSKonly.Allowanyvalidpasswordse...