rt3070 ap arm linux,移植RT3070AP驱动程序

移植RT3070AP驱动程序

环境:

主机:ubuntu10.0.4

开发板:arm11---友善tiny6410

内核:linux2.6.38

1下载AP驱动,并解压到相应位置

2解压的文件中有三个文件夹,分别是MODULE、NETIF、UTIL,移植需要做的工作就是对这三个文件夹内的Makefile和config.mk都进行相应修改,修改Makefile:(“-”表示删除的行,“+”表示添加的行,红色部分为需要修改的地方)

+#Makefile for RT3070 on MBC-SAM9G45

+#2010_11_13 by liyi

RT28xx_MODE =AP

TARGET = LINUX

CHIPSET = 3070

-PLATFORM = PC

+PLATFORM =IXP

………

ifeq ($(PLATFORM),IXP)

Linux_SRC = /(linux内核所在的路径)

CROSS_COMPILE =arm-linux-(交叉编译器)

+LINUX_SRC = /home/Embest_SAM9G45/linux-2.6.30

+CROSS_COMPILE = /usr/local/arm2007q1/bin/arm-none-linux-gnueabi-

endif

修改config.mk

ifeq ($(PLATFORM),IXP)

- WFLAGS += -DRT_BIG_ENDIAN

+#WFLAGS += -DRT_BIG_ENDIAN

endif

ifeq ($(PLATFORM),IXP)

CFLAGS := -v -D__KERNEL__ -DMODULE -I$(LINUX_SRC)/include -I$(RT28xx_DIR)/include -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fno-strict-aliasing -fno-common -Uarm -fno-common -pipe -mapcs-32 -D__LINUX_ARM_ARCH__=5 -mcpu=xscale -mtune=xscale -malignment-traps -msoft-float $(WFLAGS)

EXTRA_CFLAGS := -v $(WFLAGS) -I$(RT28xx_DIR)/include

export CFLAGS

endif

(由于ARM是采用小端格式的,把CFLAGS和EXTRA_FLAGS中的-mbig-endian选项去掉)

还有就是要在AP驱动中找到usb_main_dev.c,在开头加上MODULE_LICENSE(“GPL”),将该模块声明为GPL

3进行编译:make ARCH=arm KBUILD_NOPEDANTIC=1

4编译成功后,在三个文件夹中会生成rt3070ap.ko,rtutil3070ap.ko,rtnet3070ap.ko,将这三个文件和RT2870AP.dat下载到开发板中,并将其移到相应位置。

#mkdir /etc/Wireless/

#mkdir –p /etc/Wireless/RT2870AP/

#cp /mnt/rt2870ap.dat /etc/Wireless/RT2870AP/RT2870AP.dat

#cp /mnt/rt3070ap.ko /home/root

#cp /mnt/rtutil3070ap.ko /home/root

#cp /mnt/rtnet3070ap.ko /home/root

5进入root目录中加载模块:顺序一定要对

#cd /home/root

#insmod rtutil3070ap.ko

#insmod rt3070ap.ko

#insmod rtnet3070ap.ko

6开启WIFI

#ifconfig ra0 up

这样就能看到一个默认的ESSID为RT2860的网络就建立起来了

#iwconfig ra0

ra0RTWIFI SoftAP  ESSID:"RT2860AP"  Nickname:""

Mode:Managed  Channel=11  Access Point: 00:0C:43:41:6F:A6

Bit Rate=150 Mb/s

注:移植过程中出现的问题汇总

1

0818b9ca8b590ca3270a3433284dd417.png

这个致命的错误说明该模块中用的函数rcu_read_unlock是GPL的

解决方法:通过查询linux2.6.38的内核源码http://lxr.linux.no/#linux+v2.6.38/kernel/rcutiny_plugin.h#L532,找到rcu_read_unlock的出处,将所有的

EXPORT_SYMBOL_GPL(__rcu_read_lock);

EXPORT_SYMBOL_GPL(__rcu_read_unlock);

修改为:

EXPORT_SYMBOL(__rcu_read_lock);

EXPORT_SYMBOL(__rcu_read_unlock);

然后重新编译内核,再重新编译WIFI模块驱动,问题解决

2出现usb_buffer_alloc和usb_buffer_free未声明的错误

原因:linux2.6.38的内核已经对这两个函数进行了修改,所以得替换函数名

解决方法:找出AP驱动中的rt_usb_util.c文件,将usb_buffer_alloc和usb_buffer_free分别改为usb_alloc_coherent和usb_free_coherent,问题解决。

3第一次移植的时候出现

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

现在还不知道是什么原因,有网友说是因为没有在config.mk中将对齐方式改为小端格式造成的,本人还没测试过,假如哪位遇到这个问题解决好的请支告一声。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值