wifi模块: RTL8188GU/RTL8192FM/RTL8811CU
硬件平台: Hi3559A
软件平台: Linux-4.9
一、 WIFI模块驱动移植
1、SDIO 模块 rtl8189FTV
下载驱动
网址 http://linux-sunxi.org/Wifi
或者下载:
git clone https://github.com/jwrdegoede/rtl8189ES_linux.git
cd rtl8189ES_linux.git
git checkout -B rtl8189fs origin/rtl8189fs
编译
进入rtl8189ES_linux:
make -j4 ARCH=arm64 CROSS_COMPILE=aarch64-himix100-linux- KSRC=../../osdrv/opensource/kernel/linux-4.9.y_multi-core/
得到 rtl8192eu.ko
2、成品USBWIFI
A、USB-AC57 (0B05 :1841)
驱动源码 :rtl88x2BU_WiFi_linux_v5.3.1_27678.20180430_COEX20180427-5959
编译:
make -j4 ARCH=arm64 CROSS_COMPILE=aarch64-himix100-linux- KSRC=../../../../Hi3559A/Hi3559AV100_SDK_V2.0.1.0/osdrv/opensource/kernel/linux-4.9.y_multi-core/
B、USB-AC68
源码: rtl8814AU_linux_v4.3.21.1_24835.20171031
编译: make -j4 ARCH=arm CROSS_COMPILE=aarch64-himix100-linux- KSRC=../../../../Hi/Hi3531A/Hi3531A_SDK_V2.0.2.0/osdrv/opensource/kernel/linux-3.10.
C、Tenda_u6
源码:rtl8192EU_WiFi_linux_v5.2.7_22739.20170615_COEX20170113-0046_Tenda_u6
编译: make -j4 ARCH=arm CROSS_COMPILE=aarch64-himix100-linux- KSRC=../../../Hi/Hi3531D/Hi3531DV100_SDK_V2.0.4.0/osdrv/opensource/kernel/linux-3.18.y/
3、移植RTL8821CS
厂家给驱动 rtl8821CS_linux_v5.2.3_20744.20161226_BTCOEX20161208-0c0c.tar.gz ,因不支持 linux-4.9,需要修改代码,如下:
修改Makefile ,
修改include/rtw_wifi_regd.h
//shenghuai add
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 7, 0))
#define ieee80211_band nl80211_band
#define IEEE80211_BAND_2GHZ NL80211_BAND_2GHZ
#define IEEE80211_BAND_5GHZ NL80211_BAND_5GHZ
#define IEEE80211_NUM_BANDS NUM_NL80211_BANDS
#endif
修改ioctl_cfg80211.c,增加
// shenghuai add
#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 8, 0))
struct cfg80211_scan_info info = {
.aborted = aborted,
};
cfg80211_scan_done(pwdev_priv->scan_request, &info);
#else
cfg80211_scan_done(pwdev_priv->scan_request, aborted);
#endif
修改rtl8821c.mk 去掉
#EXTRA_CFLAGS += -DCONFIG_MP_VHT_HW_TX_MODE
#CONFIG_MP_VHT_HW_TX_MODE = y
二、移植工具 libnl-3.2.25
./configure --host=aarch64-himix100-linux --prefix=$(pwd)/../3rd_lib/libnl --enable-shared --enable-static
./configure --host=arm-hisiv400-linux --prefix=$(pwd)/../3rd_lib/31D/libnl --enable-shared --enable-static
cp /mnt/wifi/59a/libnl-3.so* . -Rdp
三、移植openssl
四、移植wpa_supplicant
使用王刚给的 工具包 wpa_supplicant_8_O_8.x_rtw_r26589.20180301.tar.gz
1、sudo apt-get install libnl-3-dev
2、vi .config
CC=aarch64-himix100-linux-gcc
CFLAGS += -I/home/shenghuai/WorkSpace/O.Source/3RD/3rd_lib/openssl-1.0.1t/include/
LIBS += -L//home/shenghuai/WorkSpace/O.Source/3RD/3rd_lib/openssl-1.0.1t/lib
CFLAGS += -I/home/shenghuai/WorkSpace/O.Source/3RD/3rd_lib/libnl/include/libnl3
LIBS += -L//home/shenghuai/WorkSpace/O.Source/3RD/3rd_lib/libnl/lib
3、make
wpa_supplicant 和wpa_cli两个文件,需要增加两个库文件
libnl-genl-3.200
libnl-3.so.200
4、copy wpa_supplicant和wpa_cli 及libnl-genl-3.200 、libnl-3.so.200 到目标板上
五、运行
1、wpa_supplicant -D nl80211 -i wlan0 -c /etc/wpa_supplicant.conf -B
/etc/wpa_supplicant.conf 初始内容为:
ctrl_interface=/var/run/wpa_supplicant
update_config=1
network={
ssid="Optus"
psk="Zonekey123"
}
运行后自动连接
2、手动配置ip
ifconfig wlan0 192.168.18.202
route add default gw 192.168.18.254
六、测试:
移植iperf-2.0.5
下载:git clone git://git.code.sf.net/p/iperf2/code iperf2-code
编译:./configure --host=aarch64-himix100-linux --prefix=$(pwd)/../install
PC上 apt-get install iperf
测试方法 :
请看 Hi3559A 资料库中: WiFi 使用指南.pdf
TCP:
1、PC上 运行
iperf -s
2、目标板运行:
iperf -c 192.168.18.200 -t 10 -i 1
iperf -c 192.168.18.13 -t 10 -i 1 -w 1M
七、调试相关命令
启动wpa_supplicant应用
wpa_supplicant -D nl80211 -i wlan0 -c /etc/wpa_supplicant.conf -B
wpa_supplicant -D nl80211 -i wlan0 -c /etc/wissless/wpa_supplicant.conf -B
或者
wpa_supplicant -i wlan0 -Dwext -c /etc/wpa_supplicant.conf -dd &
/etc/wpa_supplicant.conf文件里,添加下面代码:
ctrl_interface=/var/run/wpa_supplicant
update_config=1
启动wpa_cli应用
wpa_cli -i wlan0 scan // 搜索附近wifi网络
wpa_cli -i wlan0 scan_result // 打印搜索wifi网络结果
wpa_cli -i wlan0 add_network // 添加一个网络连接
如果要连接加密方式是[WPA-PSK-CCMP+TKIP][WPA2-PSK-CCMP+TKIP][ESS] (wpa加密),wifi名称是name,wifi密码是:psk。
wpa_cli -i wlan0 set_network 0 ssid '"Optus"'
wpa_cli -i wlan0 set_network 0 psk '"Zonekey123"'
wpa_cli -i wlan0 set_network 0 ssid '"LTE_ZQ"'
wpa_cli -i wlan0 set_network 0 psk '"0987612345"'
wpa_cli -i wlan0 enable_network 0
如果要连接加密方式是[WEP][ESS] (wep加密),wifi名称是name,wifi密码是psk。
wpa_cli -i wlan0 set_network 0 ssid '"name"'
wpa_cli -i wlan0 set_network 0 key_mgmt NONE
wpa_cli -i wlan0 set_network 0 wep_key0 '"psk"'
wpa_cli -i wlan0 enable_network 0
如果要连接加密方式是[ESS] (无加密),wifi名称是name。
wpa_cli -i wlan0 set_network 0 ssid '"name"'
wpa_cli -i wlan0 set_network 0 key_mgmt NONE
wpa_cli -i wlan0 enable_network 0
分配ip/netmask/gateway/dns
udhcpc -i wlan0 -s /etc/udhcpc.script -q
执行完毕,就可以连接网络了。
保存连接
wpa_cli -i wlan0 save_config
断开连接
wpa_cli -i wlan0 disable_network 0
连接已有的连接
wpa_cli -i wlan0 list_network 列举所有保存的连接
wpa_cli -i wlan0 select_network 0 连接第1个保存的连接
wpa_cli -i wlan0 enable_network 0 使能第1个保存的连接
断开wifi
ifconfig wlan0 down
killall udhcpc
killall wpa_supplicant