您的位置:首页 > 其它

RT3070L无线网卡移植

2016-01-16 21:50 288 查看

RT3070L无线网卡移植

一、修改内核支持USB无线网卡

[*] Networking support --->

[*] Wireless --->

<*> cfg80211 - wireless configuration API

[*] Wireless extensions sysfs files

<*> Generic IEEE 802.11 Networking Stack(mac80211)

Device Drivers --->

[*]Network device support --->

[*] Wireless LAN --->

<*> IEEE 802.11 for Host AP (Prism2/2.5/3 andWEP/TKIP/CCMP)

[*] Support downloading firmware images withHost AP driver

[*] Support for non-volatile firmwaredownload

<*> Ralink driver support --->

<*> Ralink rt27xx/rt28xx/rt30xx (USB) support

二、移植RT3070L的驱动

2.1下载网卡驱动

2.2 解压文件

tar -xjf DPO_RT3070_LinuxSTA_V2.3.0.2_20100412.tar.bz2

由于文件名太长,重命名一下

mv DPO_RT3070_LinuxSTA_V2.3.0.2_20100412 rt3070l

2.3进入rt3070l目录,修改makefile

README_STA_usb 这个文件告诉了移植的方法,可以浏览一下

Platform 选择默认的PC

改变交叉编译路径和linux源码路径

2.4编译驱动程序

2.4.1 make之后出现如下错误

implicit declaration of function ' usb_buffer_free'

implicit declaration of function ' usb_buffer_alloc'

显示usb_buffer_alloc和'usb_buffer_free没有申明,这是由于Relink RT3070驱动支持linux 内核版本太旧的原因。

2.4.2 使用命令查找usb_buffer_free,解决错误

find . -name "*"|xargs grep "usb_buffer_free"

显示如下

./include/os/rt_linux.h:#define RTUSB_URB_FREE_BUFFER(pUsb_Dev, BufSize, pTransferBuf, Dma_addr) usb_buffer_free(pUsb_Dev, BufSize, pTransferBuf, Dma_addr)

./include/os/rt_linux.h:#define RTUSB_URB_FREE_BUFFER(pUsb_Dev, BufSize, pTransferBuf, Dma_addr) rausb_buffer_free(pUsb_Dev, BufSize, pTransferBuf, Dma_addr)

./include/os/rt_linux.h:extern void rausb_buffer_free(struct usb_device *dev,

./os/linux/rt_usb_util.c:void rausb_buffer_free(struct usb_device *dev,

./os/linux/rt_usb_util.c: usb_buffer_free(dev, size, addr, dma);

./os/linux/rt_usb_util.c:EXPORT_SYMBOL(rausb_buffer_free);

Vim ./include/os/rt_linux.h

usb_buffer_alloc 和 usb_buffer_free这两个函数已不在使用了,可以用usb_alloc_coherent 和 usb_free_coherent代替

2.4.3再次编译驱动

sudo make 之后会在 os/linux/ 目录下生成rt3070sta.ko驱动文件

下载相应的驱动文件到开发板

把RT2870STA.dat拷贝到/etc/Wireless/RT2870STA目录下

加载rt3070sta.ko驱动

insmod rt3070sta.ko

显示错误如下

/apps >: insmod rt3070sta.ko

rt3070sta: module license 'unspecified' taints kernel.

Disabling lock debugging due to kernel taint

rt3070sta: Unknown symbol usb_alloc_urb (err 0)

rt3070sta: Unknown symbol usb_free_urb (err 0)

rt3070sta: Unknown symbol usb_alloc_coherent (err 0)

rt3070sta: Unknown symbol usb_register_driver (err 0)

rt3070sta: Unknown symbol usb_put_dev (err 0)

rt3070sta: Unknown symbol usb_get_dev (err 0)

rt3070sta: Unknown symbol usb_submit_urb (err 0)

rt3070sta: Unknown symbol usb_free_coherent (err 0)

rt3070sta: Unknown symbol usb_control_msg (err 0)

rt3070sta: Unknown symbol usb_deregister (err 0)

rt3070sta: Unknown symbol usb_kill_urb (err 0)

insmod: can't insert 'rt3070sta.ko': unknown symbol in module or invalid parameter

这是有内核无法识别的原因,相应的内核没有LICENSE

找到OS/linux/rt_main_dev.c 在第一行加入 MODULE_LICENSE(“GPL”);

再次编译,加载模块,显示如下

~ >: insmod rt3070sta.ko

rtusb init --->

usbcore: registered new interface driver rt2870

表明内核加载成功

2.4.4使能网卡

ifconfig wlan0 up

显示

显示没有固件

找到common/rt2870.bin的固件,放入开发板的lib/firmware/目录下

使文件具有可执行的权限:chmod +x rt2870.bin

使能网卡: ifconfig wlan0 up

三、移植Wireless Tools

3.1下载源文件

wget http://www.hpl.hp.com/personal/Jean_Tourrilhes/Linux/wireless_tools.29.tar.gz

3.2解压问件

tar -xzf wireless_tools.29.tar.gz

3.3修改Makefile

5 ## Installation directory. By default, go in /usr/local.

6 ## Distributions should probably use /, but they probably know better...

7 ifndef PREFIX

8 PREFIX = ./ //库安装目录,我选择的是当前目录

9 endif

10

11 ## Compiler to use (modify this for cross compile).

12 CC = arm-linux-gcc //交叉编译器

13 ## Other tools you need to modify for cross compile (static lib only).

14 AR = arm-linux-ar //连接器

15 RANLIB = arm-linux-ranlib

3.4编译文件,移植库和工具

Make之后,将生成的libiw.so.29,移植到开发板的lib目录下

将ifrename,iwconfig, iwlist, iwgetid, iwevent,iwpriv, iwspy,工具移植到开发板的bin目录下

3.5移植工具的使用

参考博客:http://blog.sina.com.cn/s/blog_73739d500100oz2v.html

四、移植openss

4.1修改Makefile

安装目录就指定为默认目录

CC= arm-linux-gcc 修改交叉编译器

4.2 编译和安装

注意安装时切换到root用户,再make,make install

使用sudo 权限是不行的

五、移植wpa_supplicant

5.1 下载文件

Wget http://hostap.epitest.fi/releases/wpa_supplicant-0.7.3.tar.gz

5.2配置和修改

5.2配置修改,编译

进入/wpa_supplicant-0.7.3/wpa_supplicant/目录

#cp defconfig .config

#vi .config

增加这几行

CFLAGS += -I/openss/include/

LIBS += -L/openss/lib/

CC = arm-linux-gcc -L /openss/lib/

#make

5.3 移植文件

将wpa_supplicant 移植到开发板的bin目录下

将 修改的wpa_supplicant.conf文件放入etc目录下

chmod +x bin/wpa_supplicant

chmod +x etc/wpa_supplicant.conf

执行wpa_supplicant -B -iwlan0 -c /etc/wpa_supplicant.conf -Dwext命令

显示如下

~ >: wpa_supplicant: symbol '__ctype_tolower': can't resolve symbol

>

> wpa_supplicant: symbol '__ctype_b': can't resolve symbolchmod +x bin/wpa_suppl

icant

这个应该是开发板缺少相应wpa_supplicant需要的动态库文件,

目前我找到的解决方法是静态连接

修改 .config 文件

CFLAGS += -I/openss/include/

LIBS += -L/openss/lib/

CC = arm-linux-gcc -L /openss/lib/ -static //选择静态连接

5.4 执行命令,配置网络

再次编译之后,将 wpa_supplicant,放入开发板的bin目录

修改权限chmod +x wpa_supplicant

再次执行

wpa_supplicant -B -iwlan0 -c /etc/wpa_supplicant.conf -Dwext

出现了一个问题:暂时不知道什么原因

~ >: cfg80211: Calling CRDA for country: US

cfg80211: Regulatory domain changed to country: US

cfg80211: (start_freq - end_freq @ bandwidth), (max_antenna_gain, max_eirp)

cfg80211: (2402000 KHz - 2472000 KHz @ 40000 KHz), (300 mBi, 2700 mBm)

cfg80211: (5170000 KHz - 5250000 KHz @ 40000 KHz), (300 mBi, 1700 mBm)

cfg80211: (5250000 KHz - 5330000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)

cfg80211: (5490000 KHz - 5600000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)

cfg80211: (5650000 KHz - 5710000 KHz @ 40000 KHz), (300 mBi, 2000 mBm)

cfg80211: (5735000 KHz - 5835000 KHz @ 40000 KHz), (300 mBi, 3000 mBm)

cfg80211: (57240000 KHz - 63720000 KHz @ 2160000 KHz), (N/A, 4000 mBm)

解决方法:找到内核目录net/wireless/reg.c文件,注释相应的打印信息。

查看状态:

#iwconfig

显示如下

~ >: iwconfig

lo no wireless extensions.

eth0 no wireless extensions.

wlan0 IEEE 802.11bgn ESSID:"16-912A"

Mode:Managed Frequency:2.412 GHz Access Point: 38:83:45:51:4F:AA

Bit Rate=6.5 Mb/s Tx-Power=27 dBm

Retry long limit:7 RTS thr:off Fragment thr:off

Encryption key:off

Power Management:on

Link Quality=63/70 Signal level=-47 dBm

Rx invalid nwid:0 Rx invalid crypt:0 Rx invalid frag:0

Tx excessive retries:0 Invalid misc:8 Missed beacon:0

证明连接到了网络

设置ip地址

#ifconfig wlan0 192.168.1.230 netmask 255.255.255.0

ping 192.168.1.1

~ >: 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=262.313 ms

64 bytes from 192.168.1.1: seq=1 ttl=64 time=45.464 ms

64 bytes from 192.168.1.1: seq=2 ttl=64 time=45.511 ms

64 bytes from 192.168.1.1: seq=3 ttl=64 time=44.479 ms

64 bytes from 192.168.1.1: seq=4 ttl=64 time=44.560 ms

在电脑上ping 开发板

C:\Users\Administrator>ping 192.168.1.230

正在 Ping 192.168.1.230 具有 32 字节的数据:

来自 192.168.1.230 的回复: 字节=32 时间=129ms TTL=64

来自 192.168.1.230 的回复: 字节=32 时间=258ms TTL=64

来自 192.168.1.230 的回复: 字节=32 时间=278ms TTL=64

来自 192.168.1.230 的回复: 字节=32 时间=186ms TTL=64

192.168.1.230 的 Ping 统计信息:

数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),

往返行程的估计时间(以毫秒为单位):

最短 = 129ms,最长 = 278ms,平均 = 212ms

由此说明无线网卡已经移植成功了。

六、动态获取ip地址

6.1在busybox中选中相应选项:

6.2

/home/zhanghaijun/fl2440/3rdparty/busybox-1.20.2/examples/udhcp目录下的simple.script

重命名为dedault.script并拷贝到开发板usr/share/udhcpc/目录下,修改权限。

6.3 执行动态分配ip地址

udhcpc -i wlan0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: