`
fp_moon
  • 浏览: 983097 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

rt3070 wifi arm+linux移植 --转

    博客分类:
  • wifi
 
阅读更多
rt3070 wifi arm+linux移植

软硬件平台:

宿主机:fedora10vmware虚拟机

目标版:tiny6410,linux2.6.38

交叉编译工具:arm-linux-4.5.1

网卡:Ralink3070模块


步骤:

1、编译驱动的预操作:编译arm版本的内核源码。

从tiny6410的光碟中获取内核源码,此内核源码已经经过友善之臂的移植,可以直接编译移植入tiny6410中。

cp linux-2.6.38-20110718.tar.gz/usr/src/kernels/

cd /usr/src/kernels

tar -zxvf linux-2.6.38-20110718.tar.gz

cd linux-2.6.38

cp config_mini6410_n43 .config

make menuconfig

进入内核配置界面,内核配置中需要做的修改如下:
  • 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

  •                      <M>   Ralink driver support  --->

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

    然后make,编译通过后会在arch/arm/boot/目录下生成可烧写入开发板的zImage内核镜像。


    2、编译rt3070模块的驱动

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

    tar –jxf2011_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_DPOrt3070

    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 NetworkMaganger

    HAS_NATIVE_WPA_SUPPLICANT_SUPPORT=y

    Makefile也要进行修改,芯片类型改为3070,默认的PLATFORM为PC,那么将后面的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/$(shelluname -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参数是必须的,否则在加载驱动的时候会报找不到版本信息的错误。




    3、烧写内核和加载驱动

    将之前编译好的zImage镜像通过dnw烧写入开发板中,将rt3070sta.ko和驱动源码目录下的RT2870STA.dat两个文件通过nfs或者sd卡下载到开发板中,RT2870STA.dat放入/etc/Wireless/RT2870STA/目录下,rt3070sta.ko放入任意合适的目录,我放在了/usr下。

    mkdir –p /etc/Wireless/RT2870STA/

    cp RT2870STA.dat / etc/Wireless/RT2870STA/

    cp rt3070sta.ko /usr

    加载驱动

    insmod /usr/rt3070sta.ko

    rtusb init rt2870 --->


    === pAd = d1502000, size = 513400 ===


    <-- RTMPAllocTxRxRingMemory, Status=0

    <-- RTMPAllocAdapterBlock, Status=0

    usbcore: registered new interface driverrt2870

    然后可以通过ifconfig–a可以看到系统已经正确识别网卡,名称为ra0。

    ifconfig –a

    ra0       Link encap:Ethernet  HWaddr00:00:00:00:00:00

              BROADCAST MULTICAST  MTU:1500  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:1000

              RX bytes:0 (0.0 B)  TX bytes:0(0.0 B)

    然后启动网卡,有如下信息输出,而后可以观察到模块的指示灯不停闪烁,此时网卡已经可以正常工作了。

    #ifconfig ra0 up

    (Efuse for 3062/3562/3572) Size=0x2d[2d0-2fc]

    RTMP_TimerListAdd: add timer obj d1549ba8!

    RTMP_TimerListAdd: add timer obj d1549bd8!

    RTMP_TimerListAdd: add timer obj d1549c08!

    RTMP_TimerListAdd: add timer obj d1549b78!

    RTMP_TimerListAdd: add timer obj d1549ae8!

    RTMP_TimerListAdd: add timer obj d1549b18!

    RTMP_TimerListAdd: add timer obj d151471c!

    RTMP_TimerListAdd: add timer obj d1503edc!

    RTMP_TimerListAdd: add timer obj d1503f14!

    RTMP_TimerListAdd: add timer obj d15147c0!

    RTMP_TimerListAdd: add timer obj d15146bc!

    RTMP_TimerListAdd: add timer obj d151478c!

    -->RTUSBVenderReset

    <--RTUSBVenderReset

    Key1Str is Invalid key length(0) or Type(0)

    Key2Str is Invalid key length(0) or Type(0)

    Key3Str is Invalid key length(0) or Type(0)

    Key4Str is Invalid key length(0) or Type(0)

    1. Phy Mode = 5

    2. Phy Mode = 5

    NVM is Efuse and its size =2d[2d0-2fc]

    phy mode> Error! The chip does notsupport 5G band 5!

    RTMPSetPhyMode: channel is out of range, usefirst channel=1

    (Efuse for 3062/3562/3572) Size=0x2d[2d0-2fc]

    3. Phy Mode = 9

    AntCfgInit: primary/secondary ant 0/1

    MCS Set = ff 00 00 00 01

    <==== rt28xx_init, Status=0

    0x1300 = 00064300

    至此网卡驱动移植成功。但是如果需要让网卡连接入目前常见的WPA加密的网络,还需要移植wpa_supplicant工具。

    另外还有一个名为wireless_tools的辅助工具,可以用它来检索在网卡所在的环境中存在的无线网络,如果对于要连接入的无线网络的ssid和相关信息已经清楚,可以不用移植,不过这个工具的移植很简单。


    4、移植wireless_tools

    源码下载地址:http://download.csdn.net/detail/colwer/4515005#comment(这个地址里的资源跟描述不一致……)

    tar zxvf wireless_tools.29.tar.gz

    cd wireless_tools.29

    vim Makefile

    PREFIX = /usr/local/wirelesstool

    CC = /usr/local/FriendlyARM/toolschain/4.5.1/bin/arm-linux-gcc

    AR = /usr/local/FriendlyARM/toolschain/4.5.1/bin/arm-linux-ar

    RANLIB = /usr/local/FriendlyARM/toolschain/4.5.1/bin/arm-linux-ranlib


    make

    make install

    在/usr/local/wirelesstool/lib目录下找到libiw.so.29,下载到开发板的/lib/目录下;/usr/local/wirelesstool/sbin目录下找到iwpriv、iwconfig、iwlist, iwevent, iwspy等命令,下载到开发板的/usr/sbin目录下。这时就应该可以使用这些命令通过网卡搜索到环境中的无线网络。

    ifconfig ra0 up

    iwlist ra0 scan

    Cell 06 - Address: 38:83:45:E5:CB:3E

                        Protocol:802.11b/g/n

                        ESSID:"idart-wlan311"

                        Mode:Managed

                        Frequency:2.437 GHz(Channel 6)

                        Quality=100/100  Signal level=-43 dBm  Noise level=-92 dBm

                        Encryption key:on

                        Bit Rates:22.5 Mb/s

                        IE: WPA Version 1

                            Group Cipher : CCMP

                            Pairwise Ciphers (1) :CCMP

                            Authentication Suites(1) : PSK

                        IE: IEEE 802.11i/WPA2Version 1

                            Group Cipher : CCMP

                            Pairwise Ciphers (1) :CCMP

                            Authentication Suites(1) : PSK

                        IE: Unknown:DD0E0050F204104A0001101044000102

              Cell 07 - Address: 58:66:BA:EE:DB:40

                        Protocol:802.11b/g/n

                        ESSID:"ChinaNet"

                        Mode:Managed

                        Frequency:2.437 GHz(Channel 6)

                        Quality=42/100  Signal level=-73 dBm  Noise level=-76 dBm

                        Encryption key:off

                        Bit Rates:54 Mb/s

              Cell 08 - Address: 58:66:BA:EE:DB:41

                        Protocol:802.11b/g/n

                        ESSID:"SYSUWLAN"

                        Mode:Managed

                        Frequency:2.437 GHz(Channel 6)

                        Quality=37/100  Signal level=-75 dBm  Noise level=-78 dBm

                        Encryption key:off

                        Bit Rates:54 Mb/s

    至此wireliss_tools移植成功。


    5、移植wpa_supplicant

    源码下载地址:http://hostap.epitest.fi/wpa_supplicant/

    它的移植还需要openssl,下载地址:http://www.openssl.org/source/

    我使用的是wpa_supplicant-0.6.10和openssl-0.9.8e。

    将两个包解压后,需要为opensll打上wpa的补丁,然后交叉编译

    cpwpa_supplicant-0.6.10/patches/openssl-0.9.8e-tls-extensions.patchopenssl-0.9.8e/

    cd openssl-0.9.8e

    mkdir /usr/local/ssl

    vim Makefile

    INSTALLTOP=/usr/local/ssl

    OPENSSLDIR=/usr/local/ssl

    ……

    CC= arm-linux-gcc

    AR= arm-linux- ar $(ARFLAGS) r

    RANLIB= arm-linux-ranlib

    make

    make install

    在/usr/local/ssl目录下安装了ssl库。

    然后进入到wpa_supplicant的目录,修改配置文件和Makefile

    cd ../wpa_supplicant-0.6.10/wpa_supplicant

    cp defconfig .config

    vim .config

    # Uncomment following two lines and fix thepaths if you have installed OpenSSL

    # or GnuTLS in non-default location

    CFLAGS += -I/usr/local/ssl/include

    LIBS += -L/usr/local/ssl/lib


    vim Makefile

    #ifndef CC

    CC=arm-linux-gcc

    #endif

    然后make,便可以在当前目录下得到需要的wpa_supplicant工具

    将wpa_supplicant和配置文件wpa_supplicant.conf下载到开发板中,wpa_supplicant替换掉原本开发板/usr/sbin/目录下的wpa_supplicant,wpa_supplicant.conf放在/etc目录下,对wpa_supplicant.conf文件进行编辑:

    ctrl_interface=/var/run/wpa_supplicant

    network={

            ssid="idart-wlan311"

            scan_ssid=1

            key_mgmt=WPA-EAP WPA-PSK IEEE8021X NONE

            pairwise=TKIP CCMP

            group=CCMP TKIP WEP104 WEP40

            psk="XXXXXXXX"

    }

    其中的psk为无线网的密码

    然后把文件末尾提供的一些example全部删除,否则在使用wpa_supplicant时会报一些类型无法识别的错误。

    最后进行测试,测试之前要关闭有线网卡eth0,原因是如果不关闭的话在之后添加默认路由时会被设置为有线网卡的默认路由,这个应该有别的解决方法,不过我没有仔细去查。

    ifconfig eth0 down

    ifconfig ra0 up

    ifconfig ra0 192.168.1.248 netmask255.255.255.0

    route add default gw 192.168.1.1

    wpa_supplicant -B -ira0 -c/etc/wpa_supplicant.conf –Dwext


    ===>rt_ioctl_giwscan. 28(28) BSSreturned, data->length = 3351

    ==>rt_ioctl_siwfreq::SIOCSIWFREQ(Channel=6)

    RTMP_TimerListAdd: add timer obj d15785c4!


    6、ping通外网

    ping www.google.com

    Rcv Wcid(1) AddBAReq

    Start Seq = 00000000

    RTMP_TimerListAdd: add timer obj d157a5e4!

    PING www.google.com (74.125.128.106): 56 databytes

    64 bytes from 74.125.128.106: seq=0 ttl=40time=86.383 ms

    64 bytes from 74.125.128.106: seq=1 ttl=40time=84.996 ms

    64 bytes from 74.125.128.106: seq=2 ttl=40time=102.010 ms

    64 bytes from 74.125.128.106: seq=3 ttl=40time=86.005 ms

    ^C

    --- www.google.com ping statistics ---

    4 packets transmitted, 4 packets received,0% packet loss

    round-trip min/avg/max =84.996/89.848/102.010 ms






    参考链接:

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

    http://blog.csdn.net/zhuqing_739/article/details/6259686

    http://blog.chinaunix.net/uid-26748719-id-3357068.html

    ================================End===============================
    分享到:
    评论

    相关推荐

      linux下rt3070wifi网卡的驱动移植

      对于无线网卡,尤其是像RT3070这样的设备,驱动移植是确保其能在Linux环境下正常工作的基础步骤。本文将深入探讨如何在Linux下移植RT3070无线网卡的驱动程序。 首先,了解RT3070芯片。RT3070是由Realtek公司生产的...

      rt3070无线网卡移植到开发板

      移植RT3070到开发板是为了实现无线网络连接功能,从而让开发板能够接入WiFi网络。 首先,我们需要了解RT3070的工作原理。RT3070集成了802.11b/g/n Wi-Fi标准,支持SoftAP模式,可以作为无线接入点。它包含一个MAC...

      mini2440 wifi驱动移植 linux-3.1.5

      本文旨在分享将WiFi驱动移植到基于ARM架构的mini2440开发板上的Linux-3.1.5内核的过程,具体涉及的是HTC_9217无线网卡的驱动移植。这一工作对于希望在mini2440平台上实现无线网络功能的开发者具有重要的参考价值。 ...

      基于arm的wifi移植

      在本文中,我们将深入探讨如何在基于ARM架构的S5PC100处理器上移植WiFi驱动,特别是针对RT73无线网卡的驱动移植。这个过程是嵌入式Linux系统开发中的一个关键环节,使得设备能够连接并使用WiFi网络。以下是一步步的...

      6410移植RT3070/2870无线模块,WPA加密方式,并开机自动加载

      4. **编译源码**:修改完配置后,可以执行 `make` 或者使用特定的命令如 `make CHIPSET=3070` 进行编译,在 `2011_0719_RT3070_RT3370_RT5370_RT5372_Linux_STA_V2.5.0.3_DPO/os/linux` 目录下会生成 `rt3070 sta.ko...

      rt3070驱动编译问题总结

      在进行基于AM3517 ARM板(cortex-A8核心)上的rt3070驱动移植过程中遇到了一系列的问题。这些问题不仅包括编译过程中的技术挑战,还涉及到了软件包管理、配置以及依赖项处理等方面。 #### 一、准备工作 **1. 必需...

      DM36x USB wifiRT5070驱动

      本话题将详细讲解如何在基于达芬奇(DM368)架构的嵌入式系统中移植USB WiFi驱动,特别是针对RT3070芯片的驱动。 **1. DM368处理器** DM368是德州仪器(TI)推出的一款高性能数字媒体处理器,主要应用于高清视频处理、...

      基于ARM_Linux的无线视频监控系统的设计与实现

      ### 基于ARM_Linux的无线视频监控系统的设计与实现 #### 一、系统概述 随着嵌入式技术和移动通信技术的飞速发展,视频监控系统正逐步向无线化、数字化以及网络化的方向演进。传统的有线视频监控系统在安装过程中...

      S3C2440实现wifi、3G上网和迷你无线路由的制作

      本文旨在通过 ARM 和 Linux 平台实现 S3C2440 开发板上的 WiFi 与 3G 上网功能,并进一步搭建一个基于 ADSL 和 3G 的迷你无线路由器。为了实现这一目标,我们将使用 RT2070/RT3070 芯片的无线模块或具备该芯片的 USB...

      嵌入式Linux开发手册

      对于某些需要严格时间响应的嵌入式应用,可能需要考虑Linux的实时性增强,如RTLinux或Preempt-RT补丁,以提高系统的确定性。此外,还需要关注服务质量(QoS)策略,以确保关键任务的优先级和延迟。 九、安全与调试 ...

    Global site tag (gtag.js) - Google Analytics