移植RT3070AP驱动程序

移植RT3070AP驱动程序

环境:

主机:ubuntu10.0.4

开发板:arm11---友善tiny6410

内核:linux2.6.38

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

2解压的文件中有三个文件夹,分别是MODULENETIFUTIL,移植需要做的工作就是对这三个文件夹内的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是采用小端格式的,把CFLAGSEXTRA_FLAGS中的-mbig-endian选项去掉)

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

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

4 编译成功后,在三个文件夹中会生成rt3070ap.kortutil3070ap.kortnet3070ap.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

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

#iwconfig ra0

ra0       RTWIFI SoftAP  ESSID:"RT2860AP"  Nickname:""

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

          Bit Rate=150 Mb/s

 

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

1

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

解决方法:通过查询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_allocusb_buffer_free未声明的错误

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

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

3 第一次移植的时候出现

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

 

参考的帖子:http://linfengdu.blog.163.com/blog/static/11771073201102093848182/

http://blog.sina.com.cn/s/blog_6e5e78bf0100rmbg.html

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值