版權聲明:本文為博主原創文章,未經博主允許不得轉載。 http://www.cnblogs.com/ahcc08/p/8495286.html
最近要給攝像頭做一個軟ap,讓手機能夠連上這個熱點,從而能夠與攝像頭進行通信。
1、什么是hostapd :
hostapd能夠使得無線網卡切換為master模式,模擬AP(通常可以認為是路由器)功能,也就是我們說的軟AP(Soft AP)。
Hostapd的功能就是作為AP的認證服務器,負責控制管理stations(通常可以認為帶無線網卡的PC)的接入和認證。
通過Hostapd可以將無線網卡切換為AP/Master模式,通過修改配置文件,可以建立一個開放式的(不加密)的,WEP,WPA或WPA2的無線網絡。
並且通過修改配置文件可以設置無線網卡的各種參數,包括頻率,信號,beacon包時間間隔,是否發送beacon包,如果響應探針請求等等。還可以設置mac地址過濾條件等。
下面是無線網卡常見的工作模式及其作用。
2、編譯移植
基於RTL8188EUS無線網卡的驅動程序
版本:wpa_supplicant_hostapd-0.8_rtw_r7475.20130812
進入hostapd目錄,修改Makefile 找到如下語句:
ifndef CC CC=gcc endif
刪除上面的語句,改成自己編譯服務器的gcc,然后make。
CROSS_COMPILE=arm-xxxx-linux- CC=$(CROSS_COMPILE)gcc
生成hostapd和hostapd_cli
3、運行hostapd,創建軟AP
vi /etc/hostapd.conf
1)、創建不需要密碼的AP
ctrl_interface=/var/run/hostapd interface=wlan0 driver=rtl871xdrv ssid=Ap117081234000009 channel=8 macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0
2)、創建wep加密類型的AP
ctrl_interface=/var/run/hostapd interface=wlan0 driver=rtl871xdrv ssid=Ap117081234000009 channel=8 macaddr_acl=0 auth_algs=2 ignore_broadcast_ssid=0 wep_key0=1234567891200 wep_default_key=0
3)、創建wpa psk加密類型的AP
ctrl_interface=/var/run/hostapd interface=wlan0 driver=nl80211 ssid=Ap117081234000009 channel=1 macaddr_acl=0 auth_algs=1 ieee80211n=1 hw_mode=g ignore_broadcast_ssid=0 wpa=2 wpa_passphrase=123456789 wpa_key_mgmt=WPA-PSK wpa_pairwise=TKIP rsn_pairwise=CCMP
運行命令: ./hostapd -B /etc/hostapd.conf -dd
電腦可以搜到這個wifi,但是連接不上 手機也可以搜到
連不上的原因是沒有dhcpserver為其分配IP。
關於dhcpserver的移植編譯見下章
這個版本使用的驅動是rtl871xdrv,不支持wpa_psk的加密類型,即使創建了wpa_psk的加密類型的AP,也是無法連接成功的。
重新下載了另一個版本wpa_supplicant_8_M_6.x_rtw_r17190.20160415,這個版本使用的nl80211驅動,是可以的。
不過編譯起來有點麻煩。
進入hostapd目錄,cp defconfig .config
修改Makefile
ifndef CC CC=gcc endif
將上面的刪除,改成
CROSS_COMPILE=arm-XXX-linux- CFLAGS = -mcpu=arm926ej-s -mno-unaligned-access -fno-aggressive-loop-optimizations LIBS+= -L../../project/Trunk/Libs/hiXXX/opensource/ -lssl -lcrypto -lnl CC=$(CROSS_COMPILE)gcc -L../../project/Trunk/Libs/hiXXX/opensource/ -DCONFIG_WPS CFLAGS+= -I../../common-headers/Trunk/libnl-1.1.4
然后make,報如下錯誤:
undefined reference to symbol 'pthread_rwlock_rdlock@@GLIBC_2.4'
error adding symbols: DSO missing from command line
collect2: error: ld returned 1 exit status
在Makefile添加如下語句:
LDFLAGS +=-Wl,--gc-sections -Wall -lpthread -lc -ldl
※這個版本的hostapd需要依賴libopenssl.a和libnl.a開源庫
我是把用到的開源庫放到了../../project/Trunk/Libs/hiXXX/opensource目錄里的
這樣make生成的hostapd是支持wpa_psk加密類型的。
把hostapd開源庫編譯成靜態鏈接庫,可以給其他項目進行調用
方法如下:
修改Makefile
添加
AR = $(CROSS_COMPILE)ar RANLIB = $(CROSS_COMPILE)ranlib
把 ALL=libhostapd libhostapd_cli
改成ALL=libhostapd.a libhostapd_cli.a
在
hostapd_cli: $(OBJS_c) $(Q)$(CC) $(LDFLAGS) -o hostapd_cli $(OBJS_c) $(LIBS_c) @$(E) " LD " $@
下面添加:
libhostapd.a: .config $(OBJS) $(AR) -r $@ $(OBJS) $(RANLIB) $@ libhostapd_cli.a: $(OBJS_c) $(AR) -r $@ $(OBJS_c) $(RANLIB) $@