wifi模块调试笔记

移植wifi测试工具

wifi工具下载地址:http://w1.fi/

移植wpa_*系列工具

移植hostapd 工具

该工具依赖2个库:libnl、openssl;因此首先得先完成这两个库的移植,指定好这两个库的安装位置。


cd hostapd
cp defconfig .config

.config编译配置修改(在默认配置的基础上确认下述配置已打开):
(特别要在其中指定好上述libnl、openssl的头文件以及库文件路径)

CONFIG_DRIVER_NL80211=y
CONFIG_LIBNL20=y
CONFIG_WPS=y
CONFIG_DRIVER_RTW=y
CONFIG_IEEE80211N=y
CFLAGS += -I/opt/novatek-sdk/nt9833x/v3.03.103.uclibc/na51103_linux_sdk/code/lib/external/__install/include
LIBS += -L/opt/novatek-sdk/nt9833x/v3.03.103.uclibc/na51103_linux_sdk/code/lib/external/__install/lib

附录:AP模式密码错误问题

如果上述配置CONFIG_DRIVER_NL80211没有打开时,hostapd会使用默认driver创建AP。此时会导致手机连接该热点时报“密码错误”。
解决办法:
step1. 编译hostapd工具前,配置CONFIG_DRIVER_NL80211=y
step2. 在hostapd.conf中配置driver=nl80211

配置内核

--------------------------------------------------------------------------------------------------
Wifi增加802.11 协议栈的支持
[*] Networking support  --->
    [*]   Wireless  --->  (勾选)
        <*>  cfg80211 - wireless configuration API
          [*]     enable powersave by default (NEW) 
          [*]     cfg80211 wireless extensions compatibility
        <*>   Generic IEEE 802.11 Networking Stack (mac80211) 
          [*]   Enable mac80211 mesh networking (pre-802.11s) support
USB 支持WIFI 的配置
Device Drivers --->
  [*]usb support
       <*>     USB Wireless Device Management support
-----------------------------------------------------------------------------------------------------
配置 wireless Extension(不配置会有 error: unknown field 'private' specified in initializer 之类错误)
Device Drivers --->
    Network device support  --->
       [*]   Wireless LAN  --->
           <*>   USB ZD1201 based Wireless device support
-------------------------------------------------------------------------------------------------------
Wifi其它配置(配置项可能在menuconfig没有呈现出来,但是要保证下述配置项的状态为y):
[*] Networking support  --->
 	[*]  WIRELESS_EXT   (该选项在novatek平台上被选中时,会导致sta错误)
 		<*>  CONFIG_LIB80211
 		<*>   LIB80211_CRYPT_WEP
		<*>   LIB80211_CRYPT_CCMP
		<*>   LIB80211_CRYPT_TKIP
Device drivers -->
[*] Staging drivers  --->
	<*>   Support for rtllib wireless devices
    <*>     Support for rtllib CCMP crypto
    <*>     Support for rtllib TKIP crypto
	<*>     Support for rtllib WEP crypto
------------------------------------------------------------------------------------------------------
错误解决  rfkill是一个内核级别的管理工具,可以打开和关闭设备的蓝牙和wifi
CONFIG_RFKILL
rfkill: Cannot open RFKILL control device
 先选Device Drivers  --->
[*] Voltage and Current Regulator Support  --->
再
[*] Networking support  --->
<*>   RF switch subsystem support  --->
<*>   Generic rfkill regulator driver

移植wifi模块驱动

  1. 修改makefile指定交叉编译工具链、内核路径、输出路径
  2. make

注意:每当修改了与wifi模块相关的内核配置后(包括网络相关配置),都要重新编译wifi模块驱动。否则有可能会导致各种异常现象。现象包括(1、加载驱动则崩溃;2、调用驱动时崩溃;3、其它异常)。

测试

加载驱动

insmod 8188eu.ko

用作AP

一般需要用到2个工具(hostapd,udhcpd);这两个工具分别对应两个配置文件(rtl_hostapd_2G.conf,udhcpd.conf)
hostapd:初始化wifi模块,并生成热点
udhcpd:(dhcp服务器)用于分配IP地址

rtl_hostapd_2G.conf
##### hostapd configuration file ##############################################

interface=wlan0
ctrl_interface=/var/run/hostapd
ssid=rtwap
channel=6
#wpa=0 //open mode
wpa=2
wpa_passphrase=87654321
#bridge=br0



##### Wi-Fi Protected Setup (WPS) #############################################

eap_server=1

# WPS state
# 0 = WPS disabled (default)
# 1 = WPS enabled, not configured
# 2 = WPS enabled, configured
wps_state=2

uuid=12345678-9abc-def0-1234-56789abcdef0

# Device Name
# User-friendly description of device; up to 32 octets encoded in UTF-8
device_name=RTL8192EU

# Manufacturer
# The manufacturer of the device (up to 64 ASCII characters)
manufacturer=Realtek

# Model Name
# Model of the device (up to 32 ASCII characters)
model_name=RTW_SOFTAP

# Model Number
# Additional device description (up to 32 ASCII characters)
model_number=WLAN_CU

# Serial Number
# Serial number of the device (up to 32 characters)
serial_number=12345

# Primary Device Type
# Used format: <categ>-<OUI>-<subcateg>
# categ = Category as an integer value
# OUI = OUI and type octet as a 4-octet hex-encoded value; 0050F204 for
#       default WPS OUI
# subcateg = OUI-specific Sub Category as an integer value
# Examples:
#   1-0050F204-1 (Computer / PC)
#   1-0050F204-2 (Computer / Server)
#   5-0050F204-1 (Storage / NAS)
#   6-0050F204-1 (Network Infrastructure / AP)
device_type=6-0050F204-1

# OS Version
# 4-octet operating system version number (hex string)
os_version=01020300

# Config Methods
# List of the supported configuration methods
config_methods=label display push_button keypad


##### default configuration #######################################

#driver=rtl871xdrv  #该rtl871xdrv会导致手机连接时报密码错误
driver=nl80211 #启用nl80211,当提示不存在该driver时,在编译hostapd工具是,在.config文件中配置启用。
#driver=wext
beacon_int=100
hw_mode=g
ieee80211n=1
wme_enabled=1
ht_capab=[SHORT-GI-20][SHORT-GI-40][HT40+]
wpa_key_mgmt=WPA-PSK WPA-EAP
wpa_pairwise=CCMP TKIP
rsn_pairwise=CCMP TKIP
max_num_sta=8
wpa_group_rekey=86400
udhcpd.conf
# Sample udhcpd configuration file (/etc/udhcpd.conf)
# Values shown are defaults

# The start and end of the IP lease block
start		192.168.0.20
end		192.168.0.254

# The interface that udhcpd will use
#interface	eth0
interface	wlan0

# The maximum number of leases (includes addresses reserved
# by OFFER's, DECLINE's, and ARP conflicts). Will be corrected
# if it's bigger than IP lease block, but it ok to make it
# smaller than lease block.
#max_leases	254

# The amount of time that an IP will be reserved (leased to nobody)
# if a DHCP decline message is received (seconds)
#decline_time	3600

# The amount of time that an IP will be reserved
# if an ARP conflict occurs (seconds)
#conflict_time	3600

# How long an offered address is reserved (seconds)
#offer_time	60

# If client asks for lease below this value, it will be rounded up
# to this value (seconds)
#min_lease	60

# The location of the pid file
#pidfile	/var/run/udhcpd.pid

# The location of the leases file
#lease_file	/var/lib/misc/udhcpd.leases

# The time period at which udhcpd will write out leases file.
# If this is 0, udhcpd will never automatically write leases file.
# Specified in seconds.
#auto_time	7200

# Every time udhcpd writes a leases file, the below script will be called
#notify_file			# default: no script
#notify_file	dumpleases	# useful for debugging

# The following are bootp specific options
# next server to use in bootstrap
#siaddr		192.168.0.22	# default: 0.0.0.0 (none)
# tftp server name
#sname		zorak		# default: none
# tftp file to download (e.g. kernel image)
#boot_file	/var/nfs_root	# default: none

# Static leases map
#static_lease 00:60:08:11:CE:4E 192.168.0.54
#static_lease 00:60:08:11:CE:3E 192.168.0.44

# The remainder of options are DHCP options and can be specified 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.
# Examples:
#opt	dns	192.168.10.2 192.168.10.10
opt	dns	0.0.0.0
option	subnet	255.255.255.0
#opt	router	192.168.10.2
opt	router	192.168.0.2
#opt	wins	192.168.10.10
opt	wins	0.0.0.0
option	dns	129.219.13.81	# appended to above DNS servers for a total of 3
option	domain	local
option	lease	864000		# default: 10 days
option	msstaticroutes	10.0.0.0/8 10.127.0.1		# single static route
option	staticroutes	10.0.0.0/8 10.127.0.1, 10.11.12.0/24 10.11.12.1
# Arbitrary option in hex form:
option	0x08	01020304	# option 8: "cookie server IP addr: 1.2.3.4"

# Currently supported options (for more info, see options.c):
#opt lease      NUM
#opt subnet     IP
#opt broadcast  IP
#opt router     IP_LIST
#opt ipttl      NUM
#opt mtu        NUM
#opt hostname   STRING		# client's hostname
#opt domain     STRING		# client's domain suffix
#opt search     STRING_LIST	# search domains
#opt nisdomain  STRING
#opt timezone   NUM		# (localtime - UTC_time) in seconds. signed
#opt tftp       STRING		# tftp server name
#opt bootfile   STRING		# tftp file to download (e.g. kernel image)
#opt bootsize   NUM		# size of that file
#opt rootpath   STRING		# (NFS) path to mount as root fs
#opt wpad       STRING
#opt serverid   IP		# default: server's IP
#opt message    STRING		# error message (udhcpd sends it on success too)
#opt vlanid     NUM		# 802.1P VLAN ID
#opt vlanpriority NUM		# 802.1Q VLAN priority
# Options specifying server(s)
#opt dns        IP_LIST
#opt wins       IP_LIST
#opt nissrv     IP_LIST
#opt ntpsrv     IP_LIST
#opt lprsrv     IP_LIST
#opt swapsrv    IP
# Options specifying routes
#opt routes     IP_PAIR_LIST
#opt staticroutes   STATIC_ROUTES # RFC 3442 classless static route option
#opt msstaticroutes STATIC_ROUTES # same, using MS option number
# Obsolete options, no longer supported
#opt logsrv     IP_LIST	# 704/UDP log server (not syslog!)
#opt namesrv    IP_LIST	# IEN 116 name server, obsolete (August 1979!!!)
#opt cookiesrv  IP_LIST	# RFC 865 "quote of the day" server, rarely (never?) used
#opt timesrv    IP_LIST	# RFC 868 time server, rarely (never?) used
# TODO: in development
#opt userclass  STRING		# RFC 3004. set of LASCII strings. "I am a printer" etc
#opt sipserv    STRING LIST	# RFC 3361. flag byte, then: 0: domain names, 1: IP addrs
AP测试脚本
#!/bin/sh
ifconfig wlan0 up
ifconfig wlan0 192.168.0.1 netmask 255.255.255.0
udhcpd -fS /etc/udhcpd.conf &
hostapd  /etc/rtl_hostapd_2G.conf -B
#设置路由表
echo 0 > /proc/sys/net/ipv4/ip_forward
iptables -F
iptables -X
iptables -F -t nat
iptables -X -t nat
#桥接对外网卡
iptables -t nat -A POSTROUTING  -o usb0 -j MASQUERADE
#iptables-restore < /mnt/flash/1111
echo 1 >/proc/sys/net/ipv4/ip_forward
附录:hostapd的加密方式

参考:https://www.ibm.com/developerworks/cn/linux/l-wifiencrypthostapd/#resources
参考:https://www.cnblogs.com/zhuwenger/archive/2011/03/11/1980294.html
参考: https://www.21ic.com/tougao/article/585.html
hostapd有三种加密方式:WEP、WPA/WPA2、WPA-PSK/WPA2-PSK

WEP

比较差的加密方式,已被破解并且不支持80211n。

配置文件中wep加密为:

wep_key0=“xxxx”
WPA/WPA2

WPA/WPA2是一种比WEP强壮的加密算法,挑选这种安全类型,路由器将选用Radius服务器进行身份认证并得到密钥的WPA或WPA2安全形式。因为要架起一台专用的认证服务器,价值对比贵重且保护也很杂乱,所以不推荐普通用户运用此安全类型。

WPA-PSK/WPA2-PSK

WPA-PSK/WPA2-PSK安全类型其实是WPA/WPA2的一种简化版别,它是依据同享密钥的WPA形式,安全性很高,设置也对比简单,合适普通家庭用户和小型企业运用。

常见家用路由器的加密方式有:

WPA-Personal(TKIP+AES、AES)

WPA2-Personal(AES)

WPA2-Personal Mixed(TKIP+AES)

配置文件中加密实现:

auth_algs=1

wpa=3

wpa_key_mgmt=WPA-PSK

wpa_pairwise=CCMP TKIP

wpa_passphrase=12345678

当wpa=3时,

是WPA2-Personal Mixed模式,即

WPA-PSK-CCMP+TKIP WPA2PSK-CCMP+TKIP

当wpa=2时,

WPA2PSK-CCMP+TKIP

当wpa=1时,

WPAPSK-CCMP+TKIP

这儿格外需求阐明的是,三种无线加密办法对无线网络传输速率的影响也不尽相同。因为IEEE 802.11n规范不支持以WEP加密或TKIP加密算法的高吞吐率,所以假如用户挑选了WEP加密办法或WPA-PSK/WPA2-PSK加密办法的TKIP算法,无线传输速率将会主动限制在11g水平。

也就是说,假如用户运用的是契合IEEE 802.11n规范的无线商品,那么无线加密办法只能挑选WPA-PSK/WPA2-PSK的AES算法加密,不然无线传输速率将会显着下降。而假如用户 运用的是契合IEEE 802.11g规范的无线商品,那么三种加密办法都能够极好的兼容,不过仍然不主张我们挑选WEP这种较老且现已被破解的加密办法,最好能够晋级一下无线路由。

附录:AP模式下,热点配置为加密方式,密码错误

参考:https://www.cnblogs.com/tid-think/p/9110620.html
解决办法已确认:编译hostapd工具前要确定是否配置启用nl80211的driver

附录:udhcpd.conf参考

参考自 https://www.xuebuyuan.com/2044396.html

start 192.168.0.2
end 192.168.0.100
interface wlan1 #default: eth0
max_leases 20 #default: 254
remaining yes #default: yes
auto_time 7200 #default: 7200 (2 hours)
decline_time 3600 #default: 3600 (1 hour)
conflict_time 3600 #default: 3600 (1 hour)
offer_time 60 #default: 60 (1 minute)
min_lease 60 #defult: 60
lease_file /etc/udhcpd.leases
opt dns 10.221.0.11 8.8.8.8
option subnet 255.255.255.0
opt router 192.168.0.1

作为STA

一般需要用到三个工具(wpa_passphrase ,wpa_supplicant ,udhcpc )
wpa_passphrase :用于根据wifi用户名及密码生成配置文件,如下:wpa_supplicant_rtw.conf。
wpa_supplicant :初始化wifi设备并接入热点。
udhcpc:(dhcp客户端程序)自动获取“由DHCP服务器分配的IP地址”

udhcpc.script
#!/bin/sh
# udhcpc script edited by Tim Riker <Tim@Rikers.org>

RESOLV_CONF="/etc/resolv.conf"

[ -n "$1" ] || { echo "Error: should be called from udhcpc"; exit 1; }

NETMASK=""
[ -n "$subnet" ] && NETMASK="netmask $subnet"
BROADCAST="broadcast +"
[ -n "$broadcast" ] && BROADCAST="broadcast $broadcast"

case "$1" in
	deconfig)
		echo "Setting IP address 0.0.0.0 on $interface"
		ifconfig $interface 0.0.0.0
		;;

	renew|bound)
		echo "Setting IP address $ip on $interface"
		ifconfig $interface $ip $NETMASK $BROADCAST

		if [ -n "$router" ] ; then
			echo "Deleting routers"
			while route del default gw 0.0.0.0 dev $interface ; do
				:
			done

			metric=0
			for i in $router ; do
				echo "Adding router $i"
				route add default gw $i dev $interface metric $metric
				: $(( metric += 1 ))
			done
		fi

		echo "Recreating $RESOLV_CONF"
		# If the file is a symlink somewhere (like /etc/resolv.conf
		# pointing to /run/resolv.conf), make sure things work.
		realconf=$(readlink -f "$RESOLV_CONF" 2>/dev/null || echo "$RESOLV_CONF")
		tmpfile="$realconf-$$"
		> "$tmpfile"
		[ -n "$domain" ] && echo "search $domain" >> "$tmpfile"
		for i in $dns ; do
			echo " Adding DNS server $i"
			echo "nameserver $i" >> "$tmpfile"
		done
		mv "$tmpfile" "$realconf"
		;;
esac

exit 0
STA测试
#!/bin/sh
#step1: select ap
wpa_passphrase Test_Jinny 88889999 | tee -a /etc/wpa_supplicant_rtw.conf
#wpa_passphrase TL-TEST TL12345678 | tee -a /etc/wpa_supplicant_rtw.conf
#step2: connect ap
ifconfig wlan1 up
wpa_supplicant -i wlan1 -D wext -c /etc/wpa_supplicant_rtw.conf  -B
#wpa_supplicant -i wlan1 -D nl80211 -c /etc/wpa_supplicant_rtw.conf  -B
#step3: get ip
udhcpc -i wlan1 -s /etc/udhcpc.script &
#route add default gw 192.168.80.254

用作P2P

确认我们编译好的wap工具是否支持p2p功能

根据wpa_supplicant源码中的README-P2P可知,需要使能下述的配置:

CONFIG_DRIVER_NL80211=y
CONFIG_CTRL_IFACE=y
CONFIG_P2P=y
CONFIG_AP=y
CONFIG_WPS=y

修改源码下的.config文件,将上述配置使能,接着重新编译wpa工具

wpa_p2p.conf:

ctrl_interface=/run/wpa_supplicant
ap_scan=1
device_name=mwifiex-p2p-device
device_type=1-0050F204-1
p2p_listen_reg_class=81
p2p_listen_channel=1
p2p_oper_reg_class=81
p2p_oper_channel=1
p2p_no_group_iface=1
p2p_go_intent=15
ctrl_interface=/var/run/wpa_supplicant
update_config=1
device_name=mint
device_type=2-0050F204-1
p2p_listen_reg_class=81
p2p_listen_channel=1
p2p_oper_reg_class=81
p2p_oper_channel=1
p2p_go_intent=1
p2p_no_group_iface=1
wpa_supplicant -i p2p0 -c wpa_p2p.conf -Dnl80211
wpa_cli -i p2p0
p2p_find 10
p2p_peers
 

附录 (仅用作参考,不一定有效,未验证)

参考自:it610.com/article/1279353238881058816.htm
1、准备好Realtek提供的RTL8188EUS驱动源码;

2、将RTL8188EUS驱动源码拷贝进开发板的内核源文件目录/driver/net/wireless/rtl818x;

3、修改/driver/net/wireless/rtl818x目录下的Kconfig目录,增加配置语句:

config RTL8188EUS
tristate “rtl8188eus usb wifi”

4、修改/driver/net/wireless/rtl818x目录的Makefile,增加内容:

obj-$(CONFIG_RTL8188EUS) += rtl8188EUS/
5、在/driver/net/wireless目录的Kconfig末尾增加语句:

source “drivers/net/wireless/rtl818x/Kconfig”

6、在编译内核时,Make Menuconfig时进行编译配置。首先USB支持设备,是能HOST USB相关功能;然后配置WIFI设备勾选IEEE802.11 for Host AP,以及子目录;最后配置网络支持IEEE802.11与cfg80211 wireless extensions compatibility;勾选rtl8188eus usb wifi设备。

7、编译完内核后加载到开发板,确保USB WIFI设备已经安装到了USB插座。然后安装wireless tools与wpa_supplicant工具可以进行测试。注意 wpa_supplicant依赖于libopenssl,因此先安装libopenssl和libnl,最后安装wpa_supplicant。(编译后的文件库见上传的资料:需要将libnl、libopenssl的lib目录下的全部文件拷贝到开发板的文件系统对应目录即 /rootfs/usr/lib/内;在wpa_supplicant的config中指定编译器和这些libopenssl和libnl下的include和lib目录。)

  • 0
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
WIFI模块转换学习笔记 WIFI模块转换是一种将串口信号转换为WIFI信号的技术,可以实现无线通信和远程控制。WIFI模块通常包括芯片和天线两部分,芯片负责信号处理和转换,天线负责信号发射和接收。在学习WIFI模块转换之前,需要了解WIFI技术的基础知识和串口通信的基本原理。 1. WIFI技术的基础知识 WIFI技术是一种无线局域网技术,可以实现电子设备之间的无线通信。WIFI技术使用了IEEE 802.11协议,包括多种不同的标准,如IEEE 802.11a、IEEE 802.11b、IEEE 802.11g、IEEE 802.11n和IEEE 802.11ac等。这些标准都支持不同的频率、速率和传输距离,可以根据具体需求进行选择。 2. 串口通信的基本原理 串口通信是一种通过串行通信协议将数据传输到计算机的方法,其中数据位、停止位和奇偶校验位等参数会影响通信成功率。串口通信通常使用RS-232或RS-485标准通信协议。在Arduino开发板中,可以使用串口库函数来实现串口通信。 3. WIFI模块转换的基本原理 WIFI模块转换是一种将串口信号转换为WIFI信号的技术,可以实现无线通信和远程控制。常见的WIFI模块包括ESP8266和ESP32等。这些WIFI模块可以通过简单的AT指令控制,实现WIFI信号的连接和传输。在Arduino开发板中,可以使用ESP8266库或ESP32库函数来控制WIFI模块。 4. WIFI模块转换的实验 为了学习WIFI模块转换,我们可以进行一个简单的实验。首先,我们需要准备一个WIFI模块,如ESP8266或ESP32。接着,我们需要将WIFI模块连接到Arduino开发板中,可以使用杜邦线将WIFI模块的串口引脚(TX、RX)分别连接到Arduino开发板的数字引脚(D1、D2)上。然后,我们需要编写一个Arduino程序,调用ESP8266库或ESP32库函数,实现WIFI信号的连接和传输。在程序中,我们需要设置WIFI的SSID和密码,以及WIFI模块的AT指令。最后,我们可以使用串口调试助手来监控WIFI信号的传输情况,以确保程序的正确性。 总的来说,学习WIFI模块转换需要了解WIFI技术的基础知识和串口通信的基本原理,以及掌握WIFI模块的使用方法和编程技巧。通过实验的实践,可以更好地理解和应用WIFI模块转换技术,实现无线通信和远程控制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值