目录

  • MT7601的简述
  • WPA_SUPPLICANT的移植
  • 移植的大概思路
  • 编译mt7601驱动
  • 测试驱动

MT7601的简述

硬件选型的方案是360wifi二代 现在360wifi已经到三代了,二代还有卖大概十几就可以买到。

芯片是MT7601U MT是联发科的,这是联发科的一个产品。

最近发现开发板插网线太麻烦了,用wifi方便多了。

WG209是一兼容802.11 b/g/n WiFi标准的USB接口 WiFi模块,基于MT7601单芯片全新架构,集成了CPU和内存,可以在片上运行更多的WiFi功能。

android wifi 驱动功能 手机wifi驱动_arm

android wifi 驱动功能 手机wifi驱动_linux_02

USB2.0高速接口。

数据速率

802.11b:1,2,5.5和11Mbps

802.11g:6,9,12,18,24,36,48,54Mbps

802.11n:20MHz信道:1Nss:65Mbps @ 800GI,72.2Mbps @ 400GI(最大值)。

40MHz信道:1Nss:135Mbps @ 800GI,150Mbps @ 400GI(最大)

WPA_SUPPLICANT的移植

wpa_supplicant只是一个工具(用于连接WIFI的),在开发板的QT/E根文件系统中自带的有wpa_supplicant工具,可以找一找就省去了移植的工作。在大家自带的光盘资料中可以找到。 或者可以自己移植一个,并没有多麻烦。↓↓↓

参考文章:→→文章链接

• WPA_SUPPLICANT工具 – wpa_supplicant就是WiFi驱动和用户的中转站外加对协议和加密认证的支 持 – 实现用户通过socket来编程 • wpa_supplicant的移植网上教程一大堆,对应可以使用的版本就成, 一个不行多试几个。 – wpa_supplicant工具涉及到版本问题。

→→已经编译好的链接←

移植的大概思路

找到驱动源码

  • 找到官方开发包
  • 关注一下源码支持内核版本和驱动源码版本以及编译平台
  • 源码支持内核版本
  • 驱动源码版本
  • 编译平台
  • Makefile的配置
  • 找到了内核源码目录和对应编译器
  • 对应平台
  • 编译器配置位置
  • 内核源码路径设置
  • 对WPA_SUPPLICANT的支持:
  • 驱动源码中修改两个ID

芯片的配置

  • 找到使用文档和配置脚本或者配置程序和配置脚本

WPA_SUPPLICANT工具

配置网络和测试

找到联发科官网:→→联发科官网 找到驱动源码包:→→驱动源码包

下载:源码包:DPO_MT7601U_LinuxSTA_3.0.0.4_20130913.tar.bz2

android wifi 驱动功能 手机wifi驱动_android wifi 驱动功能_03

发现需要在Makefile中设置"MODE = STA"和目标TARGET = LINUX

发现需要在os/linux/config.mk文件中设置'HAS_WPA_SUPPLICANT=y'和'HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y用来支持wpa_supplicant工具来连接WiFi。

发现需要在Makefile中设置对应支持的平台三星(根据十几情况来设置),Makefile 找到PLATFORM = SMDK取消其注释,并且注释掉原来的PLATFORM = PC这个要用#来注释掉。

把360WiFi插在开发板上获取两个ID:

android wifi 驱动功能 手机wifi驱动_android wifi 驱动功能_04

获得ID是idVendor=148f, idProduct=760b

阅读文档还发现需要复制/RT2870STA.dat文件到开发板的/etc/Wireless/RT2870STA/RT2870STA.dat

编译mt7601驱动

直接使用Qt的根文件系统,跳过WPA_SUPPLICANT的移植。

1 确认配置 确认os/linux/config.mk中的'HAS_WPA_SUPPLICANT=y' 和'HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y'是否配置。

android wifi 驱动功能 手机wifi驱动_嵌入式_05

2 配置文件复制

cp RT2870STA.dat  /etc/Wireless/RT2870STA/RT2870STA.dat

android wifi 驱动功能 手机wifi驱动_android wifi 驱动功能_06

3 Makefile修改

  • #PLATFORM: Target platform,默认=PC肯定不行。 在49行看到SMDK–这个是三星开发板的意思,这个要配置为SMDK。 操作: 注释掉PLATFORM = PC 取消注释PLATFORM = SMDK

android wifi 驱动功能 手机wifi驱动_arm_07

  • 搜索SMDK:

找到:

ifeq ($(PLATFORM),SMDK)
LINUX_SRC = /home/bhushan/itcenter/may28/linux-2.6-samsung
CROSS_COMPILE = /usr/local/arm/4.2.2-eabi/usr/bin/arm-linux-
endif

改为:(根据自己的内核路径、交叉编译工具来设置)

ifeq ($(PLATFORM),SMDK)
LINUX_SRC = /home/topeet/android4.0/iTop4412_Kernel_3.0
CROSS_COMPILE =	arm-none-linux-gnueabi-
endif

android wifi 驱动功能 手机wifi驱动_linux_08

4 驱动源码中修改两个ID

idVendor=148f, idProduct=760b 在无驱动的情况下插入usb的wifi,获取两个ID:0x148f,0x760b

源码中搜索USB_DEVICE( 使用命令grep -rn "USB_DEVICE(*" * 添加到源码中 在common/rtusb_dev_id.c:中添加两个ID

android wifi 驱动功能 手机wifi驱动_android wifi 驱动功能_09

android wifi 驱动功能 手机wifi驱动_嵌入式_10

4 编译

编译出的ko文件在os/linux/ko目录中

make -j2
os/linux/mt7601Usta.ko

android wifi 驱动功能 手机wifi驱动_嵌入式_11

编译完成:

android wifi 驱动功能 手机wifi驱动_linux_12

在os/linux找到驱动mt7601Usta.ko文件

android wifi 驱动功能 手机wifi驱动_嵌入式_13

测试驱动

拷贝驱动到开发板:

android wifi 驱动功能 手机wifi驱动_linux_14

挂载驱动:

android wifi 驱动功能 手机wifi驱动_arm_15

挂载成功:

android wifi 驱动功能 手机wifi驱动_网络_16

找到360wifi的网卡ra0:

android wifi 驱动功能 手机wifi驱动_android wifi 驱动功能_17

查看当前的网络:

android wifi 驱动功能 手机wifi驱动_linux_18

关闭eth0网卡:

android wifi 驱动功能 手机wifi驱动_linux_19

打开wifi:

android wifi 驱动功能 手机wifi驱动_网络_20

开启成功:

android wifi 驱动功能 手机wifi驱动_linux_21

编辑要连接wifi信息的脚本:

ssid是wifi名、psk是wifi密码

android wifi 驱动功能 手机wifi驱动_网络_22

连接wifi命令 wpa_supplicant -B -i ra0 -c wpa_supplicant.conf

-B选项可以把wifi挂到后台不占用当前的控制台窗口。

android wifi 驱动功能 手机wifi驱动_android wifi 驱动功能_23

连接成功:

android wifi 驱动功能 手机wifi驱动_linux_24

在ping之前要动态获取IP:udhcpc -i ra0

android wifi 驱动功能 手机wifi驱动_arm_25

获得wifi路由器分配的IP 192.168.0.106

android wifi 驱动功能 手机wifi驱动_arm_26

ping测试:

大型ping百度现场:

android wifi 驱动功能 手机wifi驱动_linux_27