移植wpa_supplicant 2.5 实现rtl8188可以无线上网

2019-07-13 03:47发布

libnl-1.1.4.tar.gz    下载地址:http://www.infradead.org/~tgr/libnl/ openssl-0.9.8za       下载地址:ftp://ftp.openssl.org/source/old/0.9.x/ wpa_supplicant-2.5    下载地址:http://w1.fi/releases/     我这里使用的是wpa_supplicant-2.5.tar.gz和openssl-0.9.8za.tar.gz。   下载wpa_supplicant-2.5.tar.gz (openssl用到2.5提供的补丁) #tar xvfz wpa_supplicant-2.5.tar.gz看到patches目录下 openssl-0.9.8za-tls-extensions.patch和openssl-0.9.8zf-tls-extensions.patch两个补丁文件,所以openssl要下载对应的0.98za或0.98zf版本 我们下载0.98za版本 #tar zxvf openssl-0.9.8za.tar.gz 分别解压wpa_supplicant-2.5.tar.gz和openssl-0.9.8za.tar.gz,把wpa_supplicant-2.5里面的patches文件夹下的openssl-0.9.8za-tls-extensions.patch文件拷贝到openssl-0.9.8za目录下,运行: patch -p1 < openssl-0.9.8za-tls-extensions.patch     下面开始编译各个源码 需要使用root 权限,否则在install的时候会提示没有权限。   配置libnl(之前用了最新的libnl-3.4.0,编译wpa的时候会提示找不到-lnl,因为3.4编译完后生成的是libnl-3) ./configure --prefix=/usr/local/arm/libnl1.1 编译 make CC=arm-linux-gnueabi-gcc make install     编译openssl 修改makfile 需要用绝对路径,否则会提示出错 CC= /home/zjf/R40/lichee/out/sun8iw11p1/linux/common/buildroot/external-toolchain/bin/arm-linux-gnueabi-gcc AR= /home/zjf/R40/lichee/out/sun8iw11p1/linux/common/buildroot/external-toolchain/bin/arm-linux-gnueabi-ar $(ARFLAGS) r RANLIB= /home/zjf/R40/lichee/out/sun8iw11p1/linux/common/buildroot/external-toolchain/bin/arm-linux-gnueabi-ranlib   安装目录放在了openssl的目录下,没有试其它目录,因为在下面运行make install的时候会安装失败,是由于要安装man导致,所以在编译wpa_supplicant的时候直接选择主目录就可以了。   INSTALLTOP=/home/zjf/wifibuild/openssl-0.9.8za OPENSSLDIR=/home/zjf/wifibuild/openssl-0.9.8za   执行 make && make install       编译wpa_supplicant(wpa还是用2.5版本,用2.6版本编译不过) 首先建立配置文件: cp defconfig .config 然后修改.config,增加以下内容:   CC=arm-linux-gnueabi-gcc CFLAGS+=-I /home/zjf/wifibuild/openssl-0.9.8za/include LIBS+=-L /home/zjf/wifibuild/openssl-0.9.8za/lib LDFLAGS +=-L /home/zjf/wifibuild/openssl-0.9.8za LIBS+=-L /home/zjf/wifibuild/openssl-0.9.8za   CFLAGS += -I/usr/local/arm/libnl1.1/include/ LDFLAGS +=  -I/usr/local/arm/libnl1.1/include/ LIBS += -L/usr/local/arm/libnl1.1/lib     保存配置后执行 make ,完成编译。 把wpa_supplicant 下载到板子上后创建一下配置文件wpa_supplicant.conf 内容如下:   network={ ssid="z001"      psk="1234567891" }                                      network={                        ssid="z001"              psk="1234567891"         priority=1               key_mgmt=WPA-PSK } 然后运行下面命令 ./wpa_supplicant -Dnl80211 -iwlan0 -c/tmp/wpa_supplicant.conf &   打印如下 # Successfully initialized wpa_supplicant nl80211: Could not re-add multicast membership for vendor events: -2 (No such file or directory) wlan0: Trying to associate with 6c:e8:73:27:42:68 (SSID='z001' freq=2437 MHz) [22570.275881] cfg80211: Calling CRDA for country: US [22570.282865] RTL871X: rtw_set_802_11_connect(wlan0)  fw_state=0x00000008 [22570.375384] RTL871X: start auth [22570.381426] RTL871X: auth success, start assoc [22570.393070] RTL871X: assoc success wlan0: Associated with 6c:e8:73:27:42:68 [22570.403822] RsvdPageNum: 8 [22570.514479] RTL871X: send eapol packet [22570.619330] RTL871X: send eapol packet [22570.623993] RTL871X: set pairwise key to hw: alg:4(WEP40-1 WEP104-5 TKIP-2 AES-4) camid:4 [22570.718353] RTL871X: set group key to hw: alg:4(WEP40-1 WEP104-5 TKIP-2 AES-4) keyid:1 [22570.718385] RTL871X: send eapol packet wlan0: WPA: Key negotiation completed with 6c:e8:73:27:42:68 [PTK=CCMP GTK=CCMP] wlan0: CTRL-EVENT-CONNECTED - Connection to 6c:e8:73:27:42:68 completed [id=1 id_str=] [22571.736155] RTL871X: set group key to hw: alg:4(WEP40-1 WEP104-5 TKIP-2 AES-4) keyid:1 [22571.736190] RTL871X: send eapol packet wlan0: WPA: Group rekeying completed with 6c:e8:73:27:42:68 [GTK=CCMP]   然后用dhcp 获取ip地址 udhcpc -i wlan0   ping 一下,成功ping 通   为了方便可以搭建一个脚本 ifconfig eth0 down ifconfig wlan0 up sleep 2 ./wpa_supplicant -Dnl80211 -iwlan0 -c/tmp/wpa_supplicant.conf & sleep 5 udhcpc -i wlan0   以下是个很好的wpa_supplicant.conf例程   # 请不要修改下面这一行内容,否则将不能正常工作   ctrl_interface=/var/run/wpa_supplicant      # 确保只有root用户能读取WPA的配置   ctrl_interface_group=0      # 使用wpa_supplicant来扫描和选择AP   ap_scan=1      # 简单的情形:WPA-PSk密码验证方式,PSK是ASCII密码短语,所有合法的加密方式都允许连接   network={     ssid="simple"     psk="very secret passphrase"     # 优先级越高,就能越早匹配到。     priority=5   }      # 与前面的设置相同,但要求对特定的SSID进行扫描(针对那些拒绝广播SSID的AP)   network={     ssid="second ssid"     scan_ssid=1     psk="very secret passphrase"     priority=2   }      # 仅使用WPA-PSK方式。允许使用任何合法的加密方式的组合   network={     ssid="example"     proto=WPA     key_mgmt=WPA-PSK     pairwise=CCMP TKIP     group=CCMP TKIP WEP104 WEP40     psk=06b4be19da289f475aa46a33cb793029d4ab3db7a23ee92382eb0106c72ac7bb     priority=2   }      # 明文连接方式(不使用WPA和IEEE802.1X)   network={     ssid="plaintext-test"     key_mgmt=NONE   }      # 共享WEP密钥连接方式(不使用WPA和IEEE802.1X)   network={     ssid="static-wep-test"     key_mgmt=NONE     # 引号包含的密钥是ASCII密钥     wep_key0="abcde"     # 没有引号包含的密钥是十六进制密钥     wep_key1=0102030405     wep_key2="1234567890123"     wep_tx_keyidx=0     priority=5   }      # 共享WEP密钥连接方式(无WPA和IEEE802.1X),使用共享密钥IEEE802.11验证方式   network={     ssid="static-wep-test2"     key_mgmt=NONE     wep_key0="abcde"     wep_key1=0102030405     wep_key2="1234567890123"     wep_tx_keyidx=0     priority=5     auth_alg=SHARED   }      # 在IBSS/ad-hoc网络中使用WPA-None/TKIP   network={     ssid="test adhoc"     mode=1     proto=WPA     key_mgmt=WPA-NONE     pairwise=NONE     group=TKIP     psk="secret passphrase"   }