USB WIFI 腾达811M无线网卡 -RT5370移植

自己挖的坑,哭着也要填平!!!

软件环境:虚拟机ubuntu12.04

硬件环境:腾达811M无线网卡

OK6410:   512m  sdram  2g  nandflash   运行官方提供的3.0.1内核linux      wpa_supplicant版本0.7.3(官方内核自带)

RT5370驱动下载:http://download.csdn.net/detail/andylauren/9581594

先说一下为什么我要移植RT5370,因为4年前买了一个腾达811M的usb网卡,但是在windows下面需要安装一个官方的驱动,而且觉得驱动界面不是很友好,后来在街上扫码送了个360wifi,从此腾达的网卡就被搁置了。后来学习了嵌入式,一直就想做一个不用网线的开发设备,于是就想做个带wifi的,买了个二手的ok6410开发板,还买了一个sdio的无线网卡,但是说起来飞凌家的模块做的真是不太完善,开发板上有个带缺口的座,但是模块上的母座却是没有反正,只依靠一个小小的1脚标记区分正反面,可能是我在某次使用的时候插反了,导致这个sdio无线模块连接不稳定。于是就想起了腾达网卡,想能不能把他插上去当做网卡使用,答案一定是肯定的,但是我作为一个初学者,这个问题绝对是巨大的挑战。后来经过不懈的努力终于成功了!我的腾达在开发板上正常工作,能够上网,能够挂载nfs,下面就按照我从开始到最终移植的过程说一下,并把我在移植的过程中遇到的问题也说明一下,希望能够对后人有帮助。

首先我们来看下网卡的外观

就是这样的,在这个时候是不知道腾达811M使用的是什么网卡芯片,然后我把它拆开了,看到里面的芯片写着RT5370N

然后我就开始着手找RT5370驱动的移植资料,其中http://blog.csdn.net/lanyang123456/article/details/7370805   这篇博文对我的帮助很大,也建议先看一下这篇博文。

然后我们下载RT5370驱动的源码,下载地址在我这篇博客开始的地方。首先把rar文件中的文件夹解压到linux目录中,

修改驱动源码根目录下的Makefile

PLATFORM=SMDK

ifeq ($(PLATFORM),SMDK)

LINUX_SRC = /home/linux/sys/linux-3.0.1/(内核源码路径,内核需要被编译过)

CROSS_COMPILE = /home/linux/sys/arm-gcc-4.3.2/bin/arm-linux-(交叉编译工具链路径)

endif

这个时候就可以进行make了,不会报错,但是使用的时候是无法连接无线路由的。

这个地方花费了我大量的时间,而且在这种情况下运行wpa_supplicant只会提示失败,并且不停的尝试重新连接。

Trying to associate with a8:57:4e:0d:76:e6 (SSID=‘CMCC-PUB‘ freq=2412 MHz)

ioctl[SIOCSIWGENIE]: Operation not supported

Association request to the driver failed

Authentication with a8:57:4e:0d:76:e6 timed out.

下面我来说一下如何解决这个问题,需要更改./os/linux/config.mk文件中的几个配置选项,如下

# Support AP-Client function

HAS_APCLI=y

# Support Wpa_Supplicant

HAS_WPA_SUPPLICANT=y

# Support Native WpaSupplicant for Network Maganger

HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y

需要将这三项选为y。

现在编译出来的驱动文件仍然是无法使用的,在开发板上运行的时候会提示如下错误

rt5370sta: module license ‘unspecified‘ taints kernel.

Disabling lock debugging due to kernel taint

rt5370sta: Unknown symbol usb_alloc_urb (err 0)

rt5370sta: Unknown symbol usb_free_urb (err 0)

rt5370sta: Unknown symbol usb_alloc_coherent (err 0)

rt5370sta: Unknown symbol usb_register_driver (err 0)

rt5370sta: Unknown symbol usb_put_dev (err 0)

rt5370sta: Unknown symbol usb_get_dev (err 0)

rt5370sta: Unknown symbol usb_submit_urb (err 0)

rt5370sta: Unknown symbol usb_free_coherent (err 0)

rt5370sta: Unknown symbol usb_control_msg (err 0)

rt5370sta: Unknown symbol usb_deregister (err 0)

rt5370sta: Unknown symbol usb_kill_urb (err 0)

insmod: error inserting ‘rt5370sta.ko‘: -1 Unknown symbol in module

第一句话指出这个模块对内核是有污染的,其实就是没有声明使用GPL协议,需要更改os/linux下的usb_main_dev.c文件,在开头的地方写上

MODULE_LICENSE("GPL");

然后make

LD [M]  /home/linux/16021/RT5370_RT5372_Linux_STA_V2.5.0.1/2011_0225_RT5370_RT5372_Linux_STA_V2.5.0.1_DPO/os/linux/rt5370sta.ko

出现这句话说明编译成功。

将/os/linux/目录下的rt5370sta.ko拷贝到开发板上,并将驱动根目录下的RT2870STA.dat拷贝到开发板的/etc/Wireless/RT2870STA/目录下,前提是需要自己手动创建/etc/Wireless/RT2870STA/目录

# mkdir /etc/Wireless/RT2870STA/ -p

将这两个文件拷贝到开发板上之后,需要修改wpa_supplicant的wpa_supplicant.conf文件,这个文件在开发板的/etc/wpa_supplicant.conf路径下。

这里说一下wpa_supplicant

wpa_supplicant主要是用来支持WEP,WPA/WPA2和WAPI无线协议和加密认证的,由于linux本身并不支持WPA的加密,所以需要移植wpa_supplicant来使wifi能够连接WPA加密的无线路由上,简单的说,wpa_supplicant就是WiFi驱动和用户的中转站外加对协议和加密认证的支持。由于ok6410的3.0.1内核已经移植好了wpa_supplicant的0.7.3版本,所以对于wpa_supplicant的移植这里就不做讲解。

接着说wpa_supplicant.conf文件的内容,这里的问题我也是解决了很久。官方给的例程是这样的

ctrl_interface=/var/run/wpa_supplicant

network={

ssid="max" //填写无线网络的的用户名

key_mgmt=WPA-PSK

proto=WPA

pairwise=TKIP

group=TKIP

psk="1234567890" //填写密码

}

我使用这个模板出现了skip WPA IE - PTK cipher mismatch这个问题,在找到路由之后,提示密码错误,后来查看了路由器发现原来密码也有几种加密方式。TKIP和AES两种,上面的写法就是被固定为TKIP方式,TKIP方式的带宽很低,所以现在都采用的是AES方式加密,在wpa_supplicant中AES加密方式对应的是CCMP,也就是需要把TKIP改为CCMP,这个我没有验证过,我使用的是下面的方法,不声明使用的是哪种加密方式,让wpa_supplicant去自适应。

ctrl_interface=/var/run/wpa_supplicant

update_config=1

network={

ssid="mingzi"

key_mgmt=WPA-PSK

psk="mimamimamima"

}

我使用这个配置成功的连接了AES加密方式 的路由器。

然后我们将驱动加载进内核

insmod rt5370sta.ko

然后可以使用

wpa_supplicant -ira0 -Dwext -c/etc/wpa_supplicant.conf -dd &

wpa_supplicant -ira0 -Dwext -c/etc/wpa_supplicant.conf &

这两条指令中的任意一个,-dd的会输出更过的信息。

在出现

Trying to associate with a8:57:4e:0d:76:e6 (SSID=‘CMCC-PUB‘ freq=2412 MHz)

ioctl[SIOCSIWGENIE]: Operation not supported

Association request to the driver failed

Associated with a8:57:4e:0d:76:e6

WPA: Key negotiation completed with a8:57:4e:0d:76:e6 [PTK=CCMP GTK=CCMP]

CTRL-EVENT-CONNECTED - Connection to a8:57:4e:0d:76:e6 completed (auth) [id=0 id_str=]

后并且无线网卡的灯也亮了起来说明已经可以正常使用了,这时候需要禁用有线网卡eth0。如果使用的是nfs挂载的文件系统建议最后禁用有线网卡,因为一旦禁用就没有文件系统了,开发板就没办法操作了。

ifconfig eth0 down

这时候无线网卡还没有ip,可以使用静态分配的方式

ifconfig ra0 192.168.1.20

如果路由器支持动态分配也可以使用动态分配

udhcpc -i ra0

之后会返回

udhcpc (v1.13.3) started

Sending discover...

Sending select for 192.168.1.104...

Lease of 192.168.1.104 obtained, lease time 7200

deleting routers

route: SIOCDELRT: No such process

adding dns 10.10.0.1

adding dns 124.207.160.106

表示分配IP成功,到这里我们的腾达无线网卡就已经可以正常使用了,想做什么都可以,完全和有线是一样的。

下面是我的终端显示的信息

[email protected]:/# insmod rt5370sta.ko
[email protected]:/# wpa_supplicant -ira0 -Dwext -c/etc/wpa_supplicant.conf &
[email protected]:/#
[email protected]:/#
[email protected]:/#
[email protected]:/# Trying to associate with a8:57:4e:0d:76:e6 (SSID='CMCC-PUB' freq=2412 MHz)
ioctl[SIOCSIWGENIE]: Operation not supported
Association request to the driver failed
Associated with a8:57:4e:0d:76:e6
WPA: Key negotiation completed with a8:57:4e:0d:76:e6 [PTK=CCMP GTK=CCMP]
CTRL-EVENT-CONNECTED - Connection to a8:57:4e:0d:76:e6 completed (auth) [id=0 id_str=]

[email protected]:/#
[email protected]:/#
[email protected]:/#
[email protected]:/#
[email protected]:/# ifconfig
eth0      Link encap:Ethernet  HWaddr 08:90:00:A0:90:90
          inet addr:192.168.1.232  Bcast:192.168.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:21757 errors:0 dropped:0 overruns:0 frame:0
          TX packets:9230 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:27797014 (26.5 MiB)  TX bytes:1513652 (1.4 MiB)
          Interrupt:108 Base address:0xc000 

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

ra0       Link encap:Ethernet  HWaddr C8:3A:35:CF:42:62
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:3 overruns:65015 frame:65015
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:164689 (160.8 KiB)  TX bytes:2226 (2.1 KiB)

[email protected]:/# udhcpc -i ra0
udhcpc (v1.13.3) started
Sending discover...
Sending select for 192.168.1.104...
Lease of 192.168.1.104 obtained, lease time 7200
deleting routers
route: SIOCDELRT: No such process
adding dns 10.10.0.1
adding dns 124.207.160.106
[email protected]:/# ping 192.168.1.1
PING 192.168.1.1 (192.168.1.1): 56 data bytes
64 bytes from 192.168.1.1: seq=0 ttl=64 time=5.951 ms
64 bytes from 192.168.1.1: seq=1 ttl=64 time=0.505 ms
^C
--- 192.168.1.1 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 0.505/3.228/5.951 ms
[email protected]:/# 

到这里就结束了,下载再提供一个开机自启动的脚本文件

#!/bin/sh 

insmod rt5370sta.ko&&wpa_supplicant -ira0 -Dwext -c/etc/wpa_supplicant.conf &
sleep 40&&udhcpc -i ra0&&ifconfig eth0 down

这个脚本是在最后才关闭有线网卡,所以即使使用nfs挂载根文件系统也可以。其中有一个sleep 40是等待无线驱动加载和无线网卡连接路由的时间,这个需要根据自己的实际情况去更改。

时间: 2024-10-18 18:54:47

USB WIFI 腾达811M无线网卡 -RT5370移植的相关文章

天嵌E9平台下进行USB Wifi模块RT3070驱动的移植

因为项目工作须要,要在天嵌E9平台下实现wifi的点对点,点对多点的传输. Wifi 模块芯片:雷凌3070芯片 嵌入式平台:E9(ARM) 交叉编译环境:arm-none-linux-gnueabi 1 首先下载了wifi模块的驱动 2011_0719_RT3070_RT3370_RT5370_RT5372_RT2070_Linux_STA_V2.5.0.3_DPO 2 对驱动进行交叉编译 a 打开驱动文件解压后的文件,假设须要WPA等功能,可打开./os/linux/config.mk进行编

树莓派学习笔记——USB wifi配置指南

0 前言 树莓派既可以使用有线网络又可以无线网络,如果使用有线网络不方便的话可以借助USB wifi无线网卡让树莓派也插上无线"翅膀".但是和使用有线网络即插即用的方式不同,USB wifi网卡需要进行一些配置.通过一天的配置实验,本文总结了树莓派wifi配置的两种方法--[1]使用wpa_gui工具方法和[2]修改配置文件方法. [1]使用wpa_gui工具方法 wpa_gui是一种linux平台常用的wifi配置工具,wpa_gui具有图形界面操作简单.由于,树莓派B板只有两个US

将小度WiFi改造为无线网卡(小度WiFi能够接收WiFi信号)

安装官方的小度WiFi的驱动器,只能让它当做无线信号的发射装置,但是我想通过小度WiFi让我的台式电脑能都接收无线信号,于是经过一番折腾终于成功了.我的是win7. 小度WiFi无法接受无线信号,不能像正常的无线网卡使用.于是就想出了一个办法:将小度WiFi改装成无线网卡.其实只要经过简单的修改就可以了. 1.安装官方的小度WiFi的驱动: 2.然后进入你的安装目录将drivers目录整个拷贝出来:drivers:链接: http://pan.baidu.com/s/1jIiCEdK 密码: 9

在orangepi-PC, ubuntu wily mini下使用usb wifi(rtl8188cu/rtl8192cu)

linux内核3.8以后加入了在内核态加载firmware的支持,因此systemd在v217以后去除了用户太加载firmware的支持 而orangepi到现在(2016年1月6日)仍然使用的是3.4.39内核,该内核不支持内核态加载firmware.而wily(ubuntu 15.10)使用的systemd是v225,不支持用户态加载firmware,因此在orangepi+wily的情况下,firmware是无法加载的. 要解决这个问题,我们需要使用udev的rule文件调用外部程序加载f

USB wifi调试笔记

本文以realtek 8192CU WiFi模块为例,介绍USB wifi在Jelly Bean 4.1的调试笔记. 1.WIFI打不开现象概述 WiFi打不开是指您在UI的settings下选中WiFi选项,将其置为on(打开),但最终结果是自动变成off(关闭).正在打开Wi-Fi.正在扫描等一系列不能正常打开WiFi的提示. 2.问题分析流程 WiFi打不开从硬件和软件两方面进行定位,一般是先硬件,然后软件.总体分析流程如图: 3.确认硬件可以识别 8192CU WiFi模块是基于usb接

How to solve BWM ICOM A2 USB WIFI setting problem

ICOM A2 Wifi A2+B+C 2014.4V Engineers Version is a professional and best diagnostic and programming OBD2 scanner for BMW. Recently, many fellows called me for Super BWM ICOM A2 USB WIFI setting problem. Here are some successful tips for sharing. 1.In

在Linux下使用usb wifi

今天购买了D-Link DWL-G122 usb wifi dongle.之前已经在网上查好了,该款设备可以被Linux支持,同时也找到了几种安装驱动的方法: 使用ndiswrapper直接安装Windows XP版(目前ndiswrapper只支持XP版的)的驱动程序文件(*.inf). 直接从Realtek上下载相应的驱动程序.事先可以在驱动光盘中找到Windows版驱动程序文件的名字,如net8192su.inf.然后在Realtek的官方网站上搜索8192su相应的Linux驱动. 从g

am335x system upgrade usb wifi rtl8188eus(十九)

1      Scope of Document This document describes how to port rtl8188eus driver to linux 4.14.y design. 2      Requiremen 2.1     Function Requirement Suport usb wifi rtl8188eus working in sta mode under linux 4.14.y kernel version 2.2     Performance

在orangepi-PC, ubuntu trusy mini下使用usb wifi(rtl8188cu/rtl8192cu)

orangepi-PC + ubuntu 14.04本身支持firmware的读取,之所以会无法加载rtl8192cu的firmware是因为orangepi-PC的ubuntu 14.04(trusty) 没有提供firmware 我们需要做的只是从其他地方拷贝firmware到orangepi的/lib/firmware中即可,我是从笔记本上跑的ubuntu中拷贝的firmware 当网卡加载后,因为没有界面,所以我们需要用命令行配置网卡,我使用的方法如下: 1. 更改/etc/networ