- 内核配置
[*] Networking support --->
-*- Wireless --->
<*> cfg80211 - wireless configuration API
[ ] nl80211 testmode command
[ ] enable developer warnings
[ ] cfg80211 regulatory debugging
[ ] enable powersave by default
[ ] cfg80211 wireless extensions compatibility
<*> Generic IEEE 802.11 Networking Stack (mac80211)
Default rate control algorithm (Minstrel) --->
[ ] Enable mac80211 mesh networking (pre-802.11s) support
[ ] Trace all mac80211 debug messages
[ ] Select mac80211 debugging features ----
Device Drivers --->
[*] Network device support --->
[*] Wireless LAN --->
<*> USB ZD1201 based Wireless device support
[*]USBsupport--->
<*> Support for Host-side USB
<*> EHCI HCD (USB 2.0) support
[ ] Root Hub Transaction Translators
[*] Improved Transaction Translator scheduling
<*> Generic EHCI driver for a platform device
- 驱动修改
- 解压驱动源码,vi ./Makefile进入Makefile需修改如下:
-
- 修改以下代码确保驱动模式为station
-
- 解压驱动源码,vi ./Makefile进入Makefile需修改如下:
WIFI_MODE = STA
ifeq ($(WIFI_MODE),)
RT28xx_MODE = STA
#RT28xx_MODE = AP
#RT28xx_MODE = APSTA
else
RT28xx_MODE = $(WIFI_MODE)
Endif
2. 添加相关平台信息
#PLATFORM = PANDA
#PLATFORM = MSTAR
PLATFORM = HISILICON
#SUB_PLATFORM=HI3518EV200
#SUB_PLATFORM=HI3516CV300
#SUB_PLATFORM=AK3918EV200
#SUB_PLATFORM=HI3516D
SUB_PLATFORM=HI3521D
3.添加编译工具链及内核目录
ifeq ($(PLATFORM),HISILICON)
PREALLOC = YES
ifeq ($(SUB_PLATFORM),HI3521D)
LINUX_SRC = /home/SDK/linux-3.18.y_3521D_SPC040
CROSS_COMPILE = /opt/hisi-linux/x86-arm/arm-hisiv500-linux/target/bin/arm-hisiv500-linux-
endif
export ARCH=arm
endif
-
- vi include/os/rt_linux.h 修改rt_linux.h文件
-
- 修改STA_PROFILE_PATH,后续驱动编译成功后须将编译生成的MT7601USTA.dat文件拷贝到当前目录下
-
- vi include/os/rt_linux.h 修改rt_linux.h文件
-
- 修改完文件后返回驱动最上层目录开始编译,如无意外便可以编译成功,拷贝当前目录下的MT7601USTA.dat文件及os/linux/目录下的mtprealloc.ko、mt7601Usta.ko至开发板,
- WIFI驱动加载
- 插上usb网卡后,正常情况下会有如下打印:
usb 1-1: new high-speed USB device number 20 using ehci-platform
也可用lsusb命令查看相关usb信息打印如下:
Bus 001 Device 020: ID 148f:7601
Bus 001 Device 001: ID 1d6b:0002
Bus 002 Device 001: ID 1d6b:0001
本网卡固定ID为148f:7601
加载驱动,先安装 mtprealloc.ko,insmod mtprealloc.ko正常会有如下打印
==>[73]:PreBuff:0xc5600000, DmaAddr:0x85600000
==>[74]:PreBuff:0xc5608000, DmaAddr:0x85608000
==>[75]:PreBuff:0xc5610000, DmaAddr:0x85610000
==>[76]:PreBuff:0xc5618000, DmaAddr:0x85618000
==>[77]:PreBuff:0xc5420000, DmaAddr:0x85420000
==>[78]:PreBuff:0xc5428000, DmaAddr:0x85428000
==>[79]:PreBuff:0xc5430000, DmaAddr:0x85430000
==>[80]:PreBuff:0xc69cbc00, DmaAddr:0x869cbc00
install prealloc ok
再安装mt7601Usta.ko ,insmod mt7601Usta.ko正常会有如下打印
STA Driver version-JEDI.MP1.mt7601u.v1.6
Compile time-Sep 5 2018,09:05:08
==>WaitForAsicReady MAC_CSR0=0x76010500
==>WaitForAsicReady MAC_CSR0=0x76010500
NVM is EFUSE
Endpoint(8) is for In-band Command
Endpoint(4) is for WMM0 AC0
Endpoint(5) is for WMM0 AC1
Endpoint(6) is for WMM0 AC2
Endpoint(7) is for WMM0 AC3
Endpoint(9) is for WMM1 AC0
Endpoint(84) is for Data-In
Endpoint(85) is for Command Rsp
80211> RFICType = 3
NumOfChan ===> 58
80211> Number of channel = 0x44
80211> Number of rate = 12
80211> CurTxPower = 0 dBm
80211> TxStream = 0
crda> requlation requestion by core: 00
80211> CFG80211_Register
usbcore: registered new interface driver rt2870
-
- 驱动加载正常后即可用ifconfig wlan0 up命令拉起网卡,再用ifconfig 查看相关网卡信息会有如下打印
wlan0 Link encap:Ethernet HWaddr 14:6B:9C:02:CB:79
inet6 addr: fe80::166b:9cff:fe02:cb79/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:87 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:17788 (17.3 KiB) TX bytes:0 (0.0 B)
至此无线网卡加载完成
- 网络连接
目前可以使用wireless-tools 或wpa_supplicant工具来配置无线网络。请记住重要的一点是,对无线网络的配置是全局性的,而非针对具体的接口。
wpa_supplicant是一个较好的选择,但缺点是它不支持所有的驱动。请浏览wpa_supplicant网站获得它所支持的驱动列表。另外,wpa_supplicant目前只能连接到那些你已经配置好ESSID的无线网络。wireless-tools支持几乎所有的无线网卡和驱动,但它不能连接到那些只支持WPA(目前大部分路由都是WPA/WPA2 加密)的AP
-
- wpa_supplicant工具
https://blog.csdn.net/andylauren/article/details/52155927(具体可以参考此博客)
1、首先解压wpa_supplicant-0.7.3.tar.gz,在解压得到的文件夹中找到patches目录,
2、解压openssl-0.9.8e.tar.gz,把wpa_supplicant-0.7.3里面的patches文件夹下的openssl-0.9.8e-tls-extensions.patch文件拷贝到openssl-0.9.8e目录下,运行:pathc–p1<openssl-0.9.8e-tls-extensions.patch
3、编译openssl
首先建立openssl的安装目录,建议安装在openssl-0.9.8e目录下,因为生成的库等只在交叉编译wpa_supplicant时使用,这样可以保持系统干净。我建立的目录为openssl-arm。
进入openssl-0.9.8e目录修改Makefile,修改如下:
CC=arm-linux-gcc
INSTALLTOP=刚才你建立的安装目录,要使用绝对路径,不然在make install的时候会出错
OPENSSLDIR=刚才你建立的安装目录,要使用绝对路径,不然在make install的时候会出错
我的配置为
然后执行make和make install
会在openssl-arm目录中生成我们移植wpa_supplicant需要的头文件和库文件。
4、编译wpa_supplicant
首先进入wpa_supplicant目录,建立配置文件:
cp defconfig .config
然后修改.config,增加以下内容:
CC=arm-linux-gcc -L/home/linux/arm/wpa-supplicant/openssl-arm/lib
CFLAGS+= -I/home/linux/arm/wpa-supplicant/openssl-arm/include
LIBS+= -L/home/linux/arm/wpa-supplicant/openssl-arm/lib
CC是指定交叉编译链,并且通过-L指定刚刚编译好的openssl的库文件目录
CFLAGS是通过-I指定刚刚编译好的openssl的头文件目录
LIBS通过-L指定刚刚编译好的openssl的库文件目录
设置好了之后就可以保存退出,进行make
make后会在该文件夹下生成我们需要的二进制可执行文件
wpa_supplicant,wpa_cli,wpa_passphrase
我们将wpa_supplicant文件拷贝到开发板的/data目录下
5、编写wpa_supplicant.conf文件
在该文件夹下有无线网卡配置文件wpa_supplicant.conf需要我们修改后并拷贝到开发板的/data目录下。
修改内容如下:
ctrl_interface=/var/run/wpa_supplicant
network={
ssid="HSNVR68443"
scan_ssid=1
psk="lspassword"
key_mgmt=WPA-PSK
}
ssid为需要连接路由的ssid,key_mgmt为路由的加密方式,psk为路由的连接密码
-
- wireless-tools工具
解压wireless_tools.30.rtl.tar.gz,vi Makefile 修改Makefile
CC = arm-hisiv500-linux-gcc
make编译将编译出的iwconfig、iwlist工具拷贝到开发板
-
- wifi连接
由于wpa_supplicant工具编译出的wpa_cli工具是以命令台的形式使用的,所以我们用wpa_supplicant命令来连接WiFi,用iwconfig、iwlist命令来查看相关信息。
-
-
-
- iwlist wlan0 scanning 扫描AP,打印如下:
-
-
-
-
-
- 用wpa_supplicant命令连接wifi
-
-
配置好wpa_supplicant.conf文件后可用如下命令
wpa_supplicant -iwlan0 -Dwext -c/data/wpa_supplicant.conf -dd &
wpa_supplicant -iwlan0 -Dwext -c/data/wpa_supplicant.conf &
这两条指令中的任意一个,-dd的会输出更过的信息,打印如下
-
-
-
- 用udhcpc或ifconfig手动分配IP
-
-
使用udhcpc -i wlan0 打印如下
-
-
-
- 用ifconfig和iwconfig查看wifi信息,打印如下
-
-