(转)TL-WN321G (rt73)USB无线网卡驱动在armlinux平台上_懒惰人的懒惰事 ...
最近想搞一个无线网络收音机玩玩,有现成的at91sam9261ek板子,linux操作系统是2.6.20,mplayer前几天已经成功移植到该平台,使用网线连接播放电台已经ok。
       去科技京城赛格4楼转了一圈询问商家usb类型的无限网卡,好象仅有的几个有usb无线网卡的商户卖的都是TL-WN321G或者是TL-WN322G类型的。呵呵其实我还不知道上海卖这些电脑周边配件的集散地
在哪里?因为比较熟悉赛格。 网上找了一圈算是还有收获,TL-WN321G使用的是rt73芯片,还好有rt73的开源linux驱动
1 .从   http://rt2x00.serialmonkey.com/wiki/index.php?title=Downloads   下载:rt73 (USB)代码
2 . 解压到内核源代码的drivers/usb/net/rt73目录下。
3 .删除其Makefile文件。重新编写Makefile如下:


      CROSS-COMPILE = arm-linux-
      CC=$(CROSS-COMPILE)gcc
      obj-$(CONFIG_RT73) +=rt73.o

      rt73-objs :=   rtmp_main.o mlme.o connect.o rtusb_bulk.o rtusb_io.o \
                         sync.o assoc.o auth.o auth_rsp.o rtusb_data.o \
                         rtmp_init.o   sanity.o rtmp_wep.o rtmp_info.o \
                         rtmp_tkip.o wpa.o md5.o

     KDIR     := /home/at91sam9261ek/linux-2.6.20
     PWD      := $(shell pwd)
     default:
         $(MAKE) -C $(KDIR) M=$(PWD) modules
     clean:
           rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions *.symvers test
    install:
            scp rt73.ko    192.168.2.46:/home/nfs/usr
   4.    修改drivers/usb/net/Kconfig 加入下面的项:
             config RT73
             tristate 'support rt73 wireless usb network device'
             depends on USB && NET && USB_USBNET

   5. 修改drivers/usb/net/Makefile 加入下面的项:
              obj-$(CONFIG_RT73)               += rt73/
   6. 重新配置内核选中rt73设备
             make menuconfig
   7. 编译:
              如果选中为M   使用 make modules   编译rt73.ko 运行时候手工加载。
             如果选中为*     使用make uImage        直接把rt73设备编译到内核去。

8. 插入TL-WN321G+
            提示找不到rt73.bin ,应该是fireware加载有问题,可 是我一直没有处理掉,后来突然发现  
            http://www.ralinktech.com.tw/data/RT73_Linux_STA_Drv1.0.4.0.tar.gz   已经把rt73.bin文件
           转换为C语言数组存放在rtmp_init.c文件里,不需要使用hotplug事件去加载rt73.bin了。于是
          决定使用RT73_Linux_STA_Drv1.0.4.0.tar.gz 代码。
9. 下载RT73_Linux_STA_Drv1.0.4.0.tar.gz 。
   10. 修改makefile 适合编译到arm linux2.6.20上。
          代码原来的makefile没有考虑到arm上的移植不是很适合交叉编译的,我的makefile修改后如下:
        

######################################################################
#        Module Name: Makefile
#        Abstract: Makefile for rt73 linux driver on kernel series 2.6
######################################################################


WFLAGS := -Wall -Wstrict-prototypes -Wno-trigraphs
CFLAGS += $(WFLAGS)

obj-m := rt73.o

rt73-objs :=   rtmp_main.o mlme.o connect.o rtusb_bulk.o rtusb_io.o sync.o assoc.o auth.o auth_rsp.o rtusb_data.o rtmp_init.o   sanity.o rtmp_wep.o rtmp_info.o rtmp_tkip.o wpa.o md5.o

ND_CONF=/etc/sysconfig/network-scripts/ifcfg-rausb0

ifdef NDDIR
         NDDIR := $(NDDIR)
else
         NDDIR := /etc/sysconfig/network-scripts
endif

ifdef MOD_CONF
         MOD_CONF := $(MOD_CONF)
else
         MOD_CONF := /etc/modprobe.conf
endif
KDIR     := /home/at91sam9261ek/linux-2.6.20
all:
#        make -C $(KDIR)    SUBDIRS=$(shell pwd) modules
         make -C $(KDIR) 'EXTRA_CFLAGS=-DRTMP_EMBEDDED -I.'   SUBDIRS=$(shell pwd) modules

clean:
         rm -rf *.o *~ .*.cmd *.ko *.mod.c .tmp_versions built-in.o
        
install:
         make -C /lib/modules/$(shell uname -r)/build \
         INSTALL_MOD_DIR=extra SUBDIRS=$(shell pwd) \
         modules_install
        
         @echo 'Network device directory $(NDDIR)';
         @echo 'Module configuration file $(MOD_CONF)';  
        
         @if [ -d '$(NDDIR)' ] ; then \
                 if [ ! -f '$(ND_CONF)' ]; then \
                         echo 'Create 'ifcfg-rausb0' in $(NDDIR)/'; \
                         cp ifcfg-rausb0 $(NDDIR)/ ; \
                 fi; \
         fi
        
         @if ! grep -q 'rausb0' $(MOD_CONF) ; then \
                 echo 'append 'alias rausb0 rt73' to $(MOD_CONF)'; \
                 echo 'alias rausb0 rt73' >> $(MOD_CONF) ; \
         fi
         /sbin/depmod -a
      11. 重新编译RT73_Linux_STA_Drv1.0.4.0.tar.gz 。
           由于在Makefile gcc编译选项里加入    DRTMP_EMBEDDED 造成一个编译错误,要修改rtmp_init.c中
           VOID     RTMPMoveMemory(   OUT PVOID        pDest, IN       PVOID    pSrc, IN       ULONG    Length)
         函数,修改后如下:
VOID     RTMPMoveMemory(
         OUT PVOID        pDest,
         IN       PVOID    pSrc,
         IN       ULONG    Length)
{

#ifdef RTMP_EMBEDDED
         if(Length <= 8){
                 unsigned char *dest,*src;
                 int i;
                 dest = pDest;
                 src   = pSrc;
                 for(i=0;i                     *(dest++) = *(src++);
                 }

         }
         else
                 memcpy(pDest, pSrc, Length);
#else

         memcpy(pDest, pSrc, Length);
#endif
}
      12.   加载rt73.ko.
             insmod rt73.ko
             ifconfig rausb0 up
             udhcpc -i   rausb0
            可以从无线AP获取到ip地址ping 一下网关,scp一个文件都成功了。

     13.总结:
           看来其实移植这个usb无线网卡并不麻烦,网上有人说1.0.3版本的很难,移植好的代码 要收
           费,现在看来1.0.4是很好移植的并不难。


郑重声明:资讯 【(转)TL-WN321G (rt73)USB无线网卡驱动在armlinux平台上_懒惰人的懒惰事 ...】由 发布,版权归原作者及其所在单位,其原创性以及文中陈述文字和内容未经(企业库qiyeku.com)证实,请读者仅作参考,并请自行核实相关内容。若本文有侵犯到您的版权, 请你提供相关证明及申请并与我们联系(qiyeku # qq.com)或【在线投诉】,我们审核后将会尽快处理。
—— 相关资讯 ——