---------------------------------------------------------------------------------------------------------------------------------
主机操作系统:centos 6.7
交叉编译器版本:arm-linux-gcc-4.5.4
开发板平台:fl2440
linux内核版本:Linux-3.0
开发 模板:ralink rt3070
Author: shaocongshuai <[email protected]>
---------------------------------------------------------------------------------------------------------------------------------
实现RT3070无线网卡STA模式并使开发板接入Wifi上网
兼容IEEE 802.11b/g/n三种标准,传输速率150Mbps
IEEE 802.11b,1999年,物理层补充(11Mbit/s工作在2.4GHz)。IEEE802.11g,2003年,物理层补充(54Mbit/s,工作在2.4GHz)。 IEEE 802.11n,2009年9月通过正式标准,WLAN的传输速率由802.11a及802.11g提供的54Mbps、108Mbps,提高到350Mbps甚至到475Mbps。
4针式连接插孔,支持USB2.0(接口)信号输出;
支持64/128/152位WEP数据加密,支持多种无线加密方式
2.412 - 2.484GHz;
RT3070的工作模式分为 STA(station)模式、SoftAP(Access Point)模式两种。
STA模式:笔记本上无线网卡模式,用来连接到无线路由器上上网。通俗点说,就是客户端模式(笔记本)
AP模式:即作为无线路由器,提供其他用户接入 (路由器)
所以我们的驱动有两种,分别支持无来线网卡工作在STA模式和AP模式。因为linux3.0以上的内核中已经含有了RT3070的通用mac80211驱动框架,所以我首先直接基于此并借助wpa_suppicant软件来实现Wifi的STA模式。
一、进入内核配置界面,内核配置中需要做的修改如下:
[*] Networking support ---> -*- Wireless --->
<*> cfg80211 - wireless configuration API
[*] Wireless extensions sysfs files
<*> Generic IEEE 802.11 Networking Stack (mac80211)
-*- Common routines for IEEE802.11 drivers
[*] enable powersave by default
[*] cfg80211 wireless extensions compatibility
Device Drivers --->
Generic Driver Options --->
[*] Include in-kernel firmware blobs in kernel binary
[*] Network device support --->[*] Wireless LAN --->
<*> IEEE 802.11 for Host AP (Prism2/2.5/3 and WEP/TKIP/CCMP)
[*] Support downloading firmware images with Host AP driver
[*] Support for non-volatile firmware download
<M> Ralink driver support --->
<M> Ralink rt27xx/rt28xx/rt30xx (USB) support
[*] Ralink debug output
nl80211 / cfg80211 / mac80211不再使用的ioctl,他们使用 netlink (译者注:基于 socket 通信)
- mac80211:是一个Linux内核子系统,是驱动开发者可用于为SoftMAC无线设备写驱动的框架。mac80211在内核空间实现STA模式,在用户空间实现AP模式(hostapd)。
- cfg80211:用于对无线设备进行配置管理,与FullMAC,mac80211和nl80211一起工作。
- nl80211:用于对无线设备进行配置管理,它是一个基本Netlink的用户态协议。
- MLME:即MAC (Media Access Control) Layer Management Entity,它管理物理层MAC状态机。
- SoftMAC:其MLME由软件实现,mac80211为SoftMAC实现提供了一个API。 即:SoftMAC设备允许对硬件执行更好地控制,允许用软件实现对802.11的帧管理,包括解析和产生802.11无线帧。目前大多数802.11设备为SoftMAC,而FullMAC设备较少。
- FullMAC:其MLME由硬件管理,当写FullMAC无线驱动时,不需要使用mac80211。
- wpa_supplicant:是用户空间一个应用程序,主要发起MLME命令,然后处理相关结果。
- hostpad:是用户空间一个应用程序,主要实现station接入认证管理。
fg80211是Linux 802.11配置API。cfg80211用于代码wext(Wireless-Extensions),nl80211用于配置一个cfg80211设备,且用于kernel与userspace间的通信。wext现处理维护状态,没有新的功能被增加,只是修改bug。如果需要通过wext操作,则需要定义CONFIG_CFG80211_WEXT。
cfg80211 and nl80211: 基于消息机制,使用netlink接口wext: 基于ioctl机制
mac80211
它是一个driver开发者可用于为SoftMAC无线设备写驱动的 框架,mac80211为SoftMAC设备实现了cfg80211回调函数,且mac80211通过cfg80211实现了向网络子系统注册和配置。配置由cfg80211通过nl80211和wext实现。mac80211在体系结构中的位置如下图所示:
所以,像 iw, hostapd 或 wpa_supplicant 之类的工具使用一些netlink的库(如 libnl 或 libnl-tiny)和netlink 接口通用头文件,当然这是 nl80211.h.
目前并没有多少相关的文档,但我建议你阅读 libnl documentation,和 iw source code (因为iw使用libnl)。
配置完之后
执行make
二:插入RT3070无线网卡并加载新内核启动
1>内核信息打印部分
usb 1-1.3: new full speed USB device number 3 using s3c2410-ohci
phy0 -> rt2x00_set_chip: Info - Chipset detected - rt: 3070, rf: 0005, rev: 0201.
2>使用lsusb命令查看:
~ >: lsusb
Bus 001 Device 001: ID 1d6b:0001
Bus 001 Device 002: ID 05e3:0606
Bus 001 Device 003: ID 148f:3070
3>如果是热插拔的话会,在插入的那一刻,串口会打印如下信息:
~ >: usb 1-1.3: USB disconnect, device number 3
usb 1-1.2: new full speed USB device number 4 using s3c2410-ohci
phy1 -> rt2x00_set_chip: Info - Chipset detected - rt: 3070, rf: 0005, rev: 0201.