RT3070编译

前段时间搞了一下RT73与wpa_supplicant,调通了,无论是什么加密方式和认证类型,RT73都可以良好的工作。可又由于RT73停产了,被迫要使用RT3070。刚开始我以为应该和RT73差不多,果不其然,用法十分接近,但是也有一点点区别的。

1.首先RT73使用的是rausb0表示的,而RT3070使用ra0表示。

2.RT3070的驱动差不多是RT73的两倍多。

3.另外,在使用wpa_supplicant上也有点小区别,主要是wpa_supplicant版本的问题。

下面,我就说一下我的使用过程,希望可以帮助到大家!

首先是驱动的编译,从网上下了好多RT3070的驱动,都没交叉编译过去,只有2009_1106_RT3070_Linux_STA_V2.1.1.0.bz2这一版本的编译过去了,呵呵!

交叉编译过程:

1.tar -jxvf 2009_1106_RT3070_Linux_STA_V2.1.1.0.bz2

2. cd 2009_1106_RT3070_Linux_STA_V2.1.1.0

3.vi makefile

[c-sharp]  view plain copy print ?
  1. #PLATFORM: Target platform  
  2. #PLATFORM = PC  
  3. PLATFORM = 5VT  
  4. #PLATFORM = IKANOS_V160  
  5. #PLATFORM = IKANOS_V180  
  6. #PLATFORM = SIGMA  
  7. #PLATFORM = SIGMA_8622  
  8. #PLATFORM = INIC  
  9. #PLATFORM = STAR  
  10. #PLATFORM = IXP  
  11. #PLATFORM = INF_TWINPASS  
  12. #PLATFORM = INF_DANUBE  
  13. #PLATFORM = BRCM_6358  
  14. #PLATFORM = INF_AMAZON_SE  
  15. #PLATFORM = CAVM_OCTEON  
  16. #PLATFORM = CMPC  
  17. #PLATFORM = RALINK_2880  

 

[c-sharp]  view plain copy print ?
  1. ifeq ($(PLATFORM),5VT)  
  2. LINUX_SRC = /home/Hi3511_VSSDK_V1.1.2.2/pub/kbuild-FULL_REL  
  3. CROSS_COMPILE = arm-hismall-linux-  
  4. endif  

4.cd os/linux

5.vi config.mk

[c-sharp]  view plain copy print ?
  1. #ifdef WPA_SUPPLICANT_SUPPORT  
  2. # Support Wpa_Supplicant  
  3. HAS_WPA_SUPPLICANT=y  
  4. #endif // WPA_SUPPLICANT_SUPPORT //  
  5.  
  6. #ifdef NATIVE_WPA_SUPPLICANT_SUPPORT  
  7. # Support Native WpaSupplicant for Network Maganger  
  8. HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y  
  9. #endif // NATIVE_WPA_SUPPLICANT_SUPPORT //  

6.cd ../../common

vi rtusb_io.c:

[c-sharp]  view plain copy print ?
  1. if (ret < 0) {  
  2.     //DBGPRINT(RT_DEBUG_OFF, ("#/n"));  
  3.                 RTMPusecDelay(5000);  
  4.             }  

否则,加载驱动后会一直打印"#",很烦!!!!!

7.cd ../../..

8.make

这时,应该就编译通过了。在2009_1106_RT3070_Linux_STA_V2.1.1.0/os/linux目录下生成了rt3070sta.ko,也就是RT3070的驱动了。

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

加载驱动过程

insmod rt3070sta.ko

看一下打印消息:

[c-sharp]  view plain copy print ?
  1. rtusb init --->  
  2.   
  3.   
  4. === pAd = ca901000, size = 465920 ===  
  5.   
  6. <-- RTMPAllocAdapterBlock, Status=0  
  7. usbcore: registered new driver rt2870  

iwconfig看一下

[c-sharp]  view plain copy print ?
  1. ra0       RT2870 Wireless  ESSID:""  
  2.           Mode:Auto  Frequency=2.412 GHz  
  3.           Link Quality=10/100  Signal level:-256 dBm  Noise level:-143 dBm  
  4.           Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0  
  5.           Tx excessive retries:0  Invalid misc:0   Missed beacon:0  

注意wireless_tools之前要移植到开发板上!





其他工作:

把RT2870STA.dat文件复制到/etc/Wireless/RT2870STA 目录下

  mkdir -p /etc/Wireless/RT2870STA //创建多层目录。

  cp /mnt/rt5370/RT2870STA.dat  /etc/Wireless/RT2870STA


 ifconfig ra0 up

    启动网卡后,会不断出现错误:BIRIdx(1): RXDMALen not multiple of 4.[43507], BulkInBufLen = 416)
    修改./MODULE/include/iface/rtmp_usb.h问题就能够解决掉。
    #define RXBULKAGGRE_SIZE  12 该为8



在雷凌的官网下载linux版本的rt3070驱动2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO.bz2,解压后的目录名称太长,所以可以对其做修改方便使用,然后进入到目录中

tar –jxf 2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO.bz2

mv 2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO rt3070

cd rt3070

目录中的README_STA_usb文件介绍了编译和加载驱动的一些信息。需要对os/linux/目录下的conf.mk文件进行修改,这里只贴出要修改的部分:

vim os/linux/config.mk

# Support Wpa_Supplicant

HAS_WPA_SUPPLICANT=y

# Support Native WpaSupplicant for Network Maganger

HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y

Makefile也要进行修改,芯片类型改为3070,默认的PLATFORMPC,那么将后面的ifeq($(PLATFORM),PC)下的内核源码路径指定为上述的交叉编译过的内核源码目录,交叉编译工具指定为arm-linux-,当然之前应该把交叉工具链安装好,这里不再详述。

vim Makefile

ifeq ($(CHIPSET),)
CHIPSET = 3070
endif

……

ifeq ($(PLATFORM),PC)

# Linux 2.6

LINUX_SRC = /usr/src/kernels/linux-2.6.38

# Linux 2.4 Change to your local setting

#LINUX_SRC = /usr/src/linux-2.4

LINUX_SRC_MODULE = /lib/modules/$(shell uname -r)/kernel/drivers/net/wireless/

CROSS_COMPILE = /usr/local/FriendlyARM/toolschain/4.5.1/bin/arm-linux-

endif

然后如果直接make,会报如下错误:

/home/cabbage/Desktop/rt3070/os/linux/../../chips/rtmp_chip.c: In function 'RtmpChipOpsHook':

/home/cabbage/Desktop/rt3070/os/linux/../../chips/rtmp_chip.c:470: error: implicit declaration of function 'RT33xx_Init'

make[2]: *** [/home/cabbage/Desktop/rt3070/os/linux/../../chips/rtmp_chip.o] Error 1

make[1]: *** [_module_/home/cabbage/Desktop/rt3070/os/linux] Error 2

make[1]: Leaving directory `/usr/src/kernels/linux-2.6.38'

make: *** [LINUX] Error 2

在网上查到似乎是因为改变了CHIPSET所导致的错误。修改chips/目录下的rtmp_chip.c文件,定位到470行,修改后如下:

#ifdef RT30xx

        if (IS_RT30xx(pAd))

        {

                if (IS_RT3390(pAd))

                     ;//RT33xx_Init(pAd);

                else

                        RT30xx_Init(pAd);

        }

#endif /* RT30xx */

然后再make,编译通过后会在os/linux/下生成rt3070sta.ko,这就是模块的驱动。 但是这里我出现了一个问题,查看rt3070sta.ko这个文件的大小,居然达到了12m,这是不合理的,原因应该是包含了大量调试信息,用arm-linux-strip可将它的大小裁剪为750k左右。

#arm-linux-strip -S rt3070sta.ko

其中-S参数是必须的,否则在加载驱动的时候会报找不到版本信息的错误。



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值