hi3519v101平台搭建hostapd

以前是有建立过在Ubuntu下面建立hostapd,现在海思项目有这么个需求,需要移植.

1.wifi驱动移植,看上章.

2.我们需要工具:hostapd热点;udhcpd动态分配ip;wpa_supplicant配置sta,可以连接wifi.

      但是hostapd,wap_supplicant依赖于ssl和nl库.我所用的库openssl-1.0.2s , libnl-3.4.0, hostapd-2.8, udhcp-0.9.8 ,wpa_supplicant-2.8都是在他们官网上下载的.

       下面是Makefile:

###########################################################################################

DY_WIFI_ROOT:=$(shell pwd)
DY_WIFI_OWN_LIB_INTALL_DIR=wifi_lib_insdir
DY_WIFI_LIB_INSTALL_DIR=$(DY_WIFI_ROOT)/$(DY_WIFI_OWN_LIB_INTALL_DIR)
DY_SUB_LIBNL_INSTALL_DIR=$(DY_WIFI_LIB_INSTALL_DIR)/libnl-insdir
DY_SUB_OPENSSL_INSTALL_DIR=$(DY_WIFI_LIB_INSTALL_DIR)/openssl-insdir
DY_OPENSSL_DIR_NAME=openssl-1.0.2s
DY_LIBNL_DIR_NAME=libnl-3.4.0
DY_HOSTAPD_DIR_NAME=hostapd-2.8/hostapd
DY_UDHCP_DIR_NAME=udhcp-0.9.8
DY_WPA_SUPPLICANT_DIR_NAME=wpa_supplicant-2.8/wpa_supplicant

DY_LIBNL_SOURCE_DIR=$(DY_WIFI_ROOT)/$(DY_LIBNL_DIR_NAME)
DY_OPENSSL_SOURCE_DIR=$(DY_WIFI_ROOT)/$(DY_OPENSSL_DIR_NAME)
DY_HOSTAPD_SOURCE_DIR=$(DY_WIFI_ROOT)/$(DY_HOSTAPD_DIR_NAME)
DY_UDHCP_SOURCE_DIR=$(DY_WIFI_ROOT)/$(DY_UDHCP_DIR_NAME)
DY_WPA_SUPPLICANT_SOURCE_DIR=$(DY_WIFI_ROOT)/$(DY_WPA_SUPPLICANT_DIR_NAME)

DY_WIFI_OUT_DIR=$(DY_WIFI_ROOT)/outdir
DY_WIFI_EXCUTE_OUT_DIR=$(DY_WIFI_ROOT)/outdir/exe
DY_WIFI_LIB_OUT_DIR=$(DY_WIFI_ROOT)/outdir/lib


all:libopenssl libnl3_4 hostapd_targ udhcpd_targ wpa_supplicant_targ
    mkdir -p $(DY_WIFI_EXCUTE_OUT_DIR)
    mkdir -p $(DY_WIFI_LIB_OUT_DIR)
    cp $(DY_HOSTAPD_SOURCE_DIR)/hostapd $(DY_WIFI_EXCUTE_OUT_DIR)
    cp $(DY_HOSTAPD_SOURCE_DIR)/hostapd_cli $(DY_WIFI_EXCUTE_OUT_DIR)
    cp $(DY_UDHCP_SOURCE_DIR)/udhcpd $(DY_WIFI_EXCUTE_OUT_DIR)
    cp $(DY_UDHCP_SOURCE_DIR)/udhcpc $(DY_WIFI_EXCUTE_OUT_DIR)
    cp $(DY_WPA_SUPPLICANT_SOURCE_DIR)/wpa_supplicant $(DY_WIFI_EXCUTE_OUT_DIR)
    cp $(DY_WPA_SUPPLICANT_SOURCE_DIR)/wpa_cli $(DY_WIFI_EXCUTE_OUT_DIR)
    ##运行hostapd的时候需要以下库文件:拷贝到/usr/lib里面就好了!!!
    cp $(DY_SUB_LIBNL_INSTALL_DIR)/lib/libnl-3.so.200 $(DY_WIFI_LIB_OUT_DIR)
    cp $(DY_SUB_LIBNL_INSTALL_DIR)/lib/libnl-3.so.200.26.0 $(DY_WIFI_LIB_OUT_DIR)
    cp $(DY_SUB_LIBNL_INSTALL_DIR)/lib/libnl-genl-3.so.200 $(DY_WIFI_LIB_OUT_DIR)
    cp $(DY_SUB_LIBNL_INSTALL_DIR)/lib/libnl-genl-3.so.200.26.0 $(DY_WIFI_LIB_OUT_DIR)
    
    cp $(DY_SUB_OPENSSL_INSTALL_DIR)/lib/libssl.so.1.0.0 $(DY_WIFI_LIB_OUT_DIR)
    cp $(DY_SUB_OPENSSL_INSTALL_DIR)/lib/libcrypto.so.1.0.0 $(DY_WIFI_LIB_OUT_DIR)

clean:libopenssl_clean libnl3_4_clean hostapd_targ_clean udhcpd_targ_clean wpa_supplicant_targ_clean
    rm -rf $(DY_WIFI_OUT_DIR)

###########编译openssl,去掉-m64,libclean用:rm -rf;因为我编译出现了错误,因此修改.

libopenssl:
    mkdir -p $(DY_SUB_OPENSSL_INSTALL_DIR);
    pushd $(DY_OPENSSL_SOURCE_DIR);./config no-asm shared no-async --prefix=$(DY_SUB_OPENSSL_INSTALL_DIR) --cross-compile-prefix=arm-hisiv500-linux-;sed -i 's/-m64//g' Makefile;sed -i '/^libclean/{n;s/rm -f \*\.map/rm -rf \*\.map/;}' Makefile;make;make install;popd
    
libopenssl_clean:
    pushd $(DY_OPENSSL_SOURCE_DIR);make clean;popd
    rm -rf $(DY_SUB_OPENSSL_INSTALL_DIR)

####编译nl3.4库

libnl3_4:
    mkdir -p $(DY_SUB_LIBNL_INSTALL_DIR);
    pushd $(DY_LIBNL_SOURCE_DIR); ./configure --host=arm-hisiv500-linux --prefix=$(DY_SUB_LIBNL_INSTALL_DIR);make;make install;popd
libnl3_4_clean:
    pushd $(DY_LIBNL_SOURCE_DIR);make clean;popd
    rm -rf $(DY_SUB_LIBNL_INSTALL_DIR)

########下面3个目录,Makefile需要修改:hostapd和wpa_supplicant修改:CC=arm-hisiv200-linux-gcc     ;    udhcpd修改:CROSS_COMPILE=arm-hisiv200-linux-

#######对于编译hostapd和wpa_supplicant,    需要对他们目录下的.config文件添加头文件和库路径:ssl和nl的库

###CFLAGS += -I../../wifi_lib_insdir/openssl-insdir/include/
###LIBS += -L../../wifi_lib_insdir/libnl-insdir/lib/
###LIBS += -L../../wifi_lib_insdir/openssl-insdir/lib/

hostapd_targ:
    pushd $(DY_HOSTAPD_SOURCE_DIR);cp dy_3519v101_ap_config .config;make;popd
hostapd_targ_clean:
    pushd $(DY_HOSTAPD_SOURCE_DIR);make clean;popd

udhcpd_targ:
    pushd $(DY_UDHCP_SOURCE_DIR);make;popd
udhcpd_targ_clean:
    pushd $(DY_UDHCP_SOURCE_DIR);make clean;popd

wpa_supplicant_targ:
    pushd $(DY_WPA_SUPPLICANT_SOURCE_DIR);cp dy_3519v101_wpa_supplicant_config .config;make;popd
wpa_supplicant_targ_clean:
    pushd $(DY_WPA_SUPPLICANT_SOURCE_DIR);make clean;popd

 

########################################################################################

3.编译完成了,那就是运行:和Ubuntu环境下差不多:

##################################udhcpd.conf配置文件#####################################

# Sample udhcpd configuration file (/etc/udhcpd.conf)

# The start and end of the IP lease block

start         192.168.75.20    #default: 192.168.0.20
end        192.168.75.254    #default: 192.168.0.254


# The interface that udhcpd will use

interface    wlan0        #default: eth0

#DHCPD_ENABLE="yes"


# The maximim number of leases (includes addressesd reserved
# by OFFER's, DECLINE's, and ARP conficts

max_leases    200        #default: 254


# If remaining is true (default), udhcpd will store the time
# remaining for each lease in the udhcpd leases file. This is
# for embedded systems that cannot keep time between reboots.
# If you set remaining to no, the absolute time that the lease
# expires at will be stored in the dhcpd.leases file.

#remaining    yes        #default: yes


# The time period at which udhcpd will write out a dhcpd.leases
# file. If this is 0, udhcpd will never automatically write a
# lease file. (specified in seconds)

auto_time    2        #default: 7200 (2 hours)


# The amount of time that an IP will be reserved (leased) for if a
# DHCP decline message is received (seconds).

#decline_time    3600        #default: 3600 (1 hour)


# The amount of time that an IP will be reserved (leased) for if an
# ARP conflct occurs. (seconds

#conflict_time    3600        #default: 3600 (1 hour)


# How long an offered address is reserved (leased) in seconds

#offer_time    60        #default: 60 (1 minute)

# If a lease to be given is below this value, the full lease time is
# instead used (seconds).

#min_lease    60        #defult: 60


# The location of the leases file

#lease_file    /home/surpas1/actiontec/install-dir/hostapudhcpd.leases    #defualt: /var/lib/misc/udhcpd.leases

# The location of the pid file
#pidfile    /home/surpas1/actiontec/install-dir/hostapudhcpd.pid    #default: /var/run/udhcpd.pid

# Everytime udhcpd writes a leases file, the below script will be called.
# Useful for writing the lease file to flash every few hours.

#notify_file                #default: (no script)

#notify_file    dumpleases     # <--- usefull for debugging

# The following are bootp specific options, setable by udhcpd.

#siaddr        192.168.0.22        #default: 0.0.0.0

#sname        zorak            #default: (none)

#boot_file    /var/nfs_root        #default: (none)

# The remainer of options are DHCP options and can be specifed with the
# keyword 'opt' or 'option'. If an option can take multiple items, such
# as the dns option, they can be listed on the same line, or multiple
# lines. The only option with a default is 'lease'.

#Examles
#opt    dns    192.168.10.2 192.168.10.10
option    subnet    255.255.255.0
#opt    router    192.168.10.2
#opt    wins    192.168.10.10
#option    dns    129.219.13.81    # appened to above DNS servers for a total of 3
#option    domain    local
option    lease    864000        # 10 days of seconds


# Currently supported options, for more info, see options.c
#subnet
#timezone
#router
#timesvr
#namesvr
#dns
#logsvr
#cookiesvr
#lprsvr
#bootsize
#domain
#swapsvr
#rootpath
#ipttl
#mtu
#broadcast
#wins
#lease
#ntpsrv
#tftp
#bootfile

########################################################################################

 

############################hostapd.conf的配置文件##################################

interface=wlan0
##指定配置网卡。

ctrl_interface=hostapd-dir
#配置hostapd的目录,当前目录的"hostapd-dir"目录,主要用于hostapd-dir/wlan0进行与ctrl端通讯.目录不能与hostapd文件重复,不然会提示失败.

ssid=Surpass
#配置SSID

driver=nl80211
#指定网卡驱动。

#ieee80211n=1
#802.11n标准,支持2.4,5G。100M+速率。

#wmm_enabled=1
#音视频媒体优先

channel=1

#无线网卡选用1信道,一般为11.如2.4G(2.40-2.48)有14个信道(一个channel=22mhz),channel之间也是有重叠处,1-6-11不重叠。5g又有:34,36,38...64,100,104,108...140,149,153,157,161.

#channel与hw_mode有密切的关系。如果channel与hw_mode不一致会导致AP启动失败。mode=1 chan=1-11(2.4g),mode=2 chan=36-165(5g)。如果用2.4gchannel对应的hw_mode=g,5gchannel对应的hw_mode=a.      802.11协议指定了802.11a对应5g,802.11g对应2g,其中802.11b也是2g,802.11n都支持。参考文档:http://wenku.baidu.com/link?url=K-I08AFxnJa0V3Y_2bW6EyvktIbkBUUfxpW6ZsjGdtD6Oxtw7kRR6x-nu2SaDeYRTJT_WdeexaTP270LiWYbSyG92u13w5t_F4bZmSPQPri

hw_mode=g
#网卡工作在802.11G模式(54M,2.4g,这样的和802.11n冲突。。) a,b,g选择  

ignore_broadcast_ssid=0
#This enables/disables broadcasting the ssid,1 disable.如果=0,广播ssid,sta可以扫描到他。=1不广播,扫描不到他。

wpa_group_rekey=86400
#指定86400s更新一次组密钥,如果手机等客服端不支持该功能,将会断开。

wpa=1
#认证方式为WPA1对饮TKIP CCMP

wpa_pairwise=TKIP CCMP
#加密方式为TKIP CCMP

#wpa=2
#wpa2对应CCMP
#rsn_pairwise=CCMP
#加密方式为TKIP CCMP

#WPA=0无加密

wpa_passphrase=12345678
#wpa密码

max_num_sta=5
#最多可以连接5个无线设备。


auth_algs=1

#auth_algs=1 只支持 WPA 身份验证算法。auth_algs=2 表示支持 WEP。永远不要使用有线等效加密 (wired equivalent privacy, WEP),因为它非常容易破解,并且多年前就已经被完全破解了。auth_algs=3 表示支持这两种方式。
#wpa=3
#wpa_key_mgmt=WPA-PSK
#wpa_pairwise=TKIP
#rsn_pairwise=CCMP

 

####################################启动脚本,不用桥接####################################

#!/bin/sh
echo "run hostapd shell!"

killall -9 udhcpd
killall -9 hostapd

pathDir=`pwd`
#下面两句解决nl80211: Could not configure driver mode问题。
##改变NetworkManager里的状态,关闭wifi,同时软锁定
#sudo nmcli nm wifi off

#启用wifi设备,不同于网络状态中的启用wifi(后者改变NetworkManager里的状态)
#sudo rfkill unblock wlan

ifconfig wlan0 192.168.75.1 netmask 255.255.255.0

ifconfig wlan0 down
#sudo ifconfig wlan0 up
sleep 1

echo "udhcpd!"
./udhcpd $pathDir/udhcpd.conf&

echo "hostapd!"
#-B后台运行,-d检测hostapd.conf正确性-B -d
./hostapd $pathDir/hostapd.conf&

sleep 1

ifconfig wlan0 up

#取消桥接:

#sudo ifconfig br0 down
#sudo brctl delif br0 wlan0
#sudo brctl delif br0 eth0
#sudo ifconfig br0 down

#sudo brctl delbr br0
#sudo dhclient eth0
#echo "bridge is down,now up it!"
#进行桥接:
#sudo brctl addbr br0
#sudo brctl addif br0 wlan0
#sudo ifconfig eth0 inet 0.0.0.0
#sudo brctl addif br0 eth0
#sudo ifconfig br0 up
#sudo dhclient br0
echo "finish!"

##############################成功连接和ping通############################
/xxx/outdir/exe # ping 192.168.75.20
64 bytes from 192.168.75.20: seq=0 ttl=64 time=14.303 ms
64 bytes from 192.168.75.20: seq=1 ttl=64 time=2.208 ms
64 bytes from 192.168.75.20: seq=2 ttl=64 time=1.997 ms
64 bytes from 192.168.75.20: seq=3 ttl=64 time=2.128 ms
64 bytes from 192.168.75.20: seq=4 ttl=64 time=1.971 ms

上一篇:将树莓派3B+变成WiFi热点


下一篇:hostapd、wpa_supplicant 交叉编译