网站导航: 首页 > 设计参考 > 正文 文章搜索
RT73 USB无线网卡驱动在armlinux平台上的移植实例
 
文章编号:
091118204218
文章分类: 单片机 ARM
点 击:
...
关 键 词: RT73 USB,无线网卡armlinux
文章来源:
网络
摘 要:
最近想搞一个无线的网络收音机玩玩,有现成的at91sam9261ek板子,linux操作系统是2.6.20,mplayer前几天已经成功移植到该平台,使用网线连接播放电台已经成功

       最近想搞一个无线的网络收音机玩玩,有现成的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如下:
 

 
  1.  CROSS-COMPILE = arm-linux-   
  2.  CC=$(CROSS-COMPILE)gcc   
  3.  obj-$(CONFIG_RT73) +=rt73.o   
  4.   
  5.  rt73-objs := rtmp_main.o mlme.o connect.o rtusb_bulk.o rtusb_io.o    
  6.                     sync.o assoc.o auth.o auth_rsp.o rtusb_data.o    
  7.                     rtmp_init.o sanity.o rtmp_wep.o rtmp_info.o    
  8.                     rtmp_tkip.o wpa.o md5.o   
  9.   
  10. KDIR    := /home/at91sam9261ek/linux-2.6.20   
  11. PWD     := $(shell pwd)   
  12. default:    
  13.     $(MAKE) -C $(KDIR) M=$(PWD) modules   
  14. clean:   
  15.       rm -rf *.o *~ core .depend .*.cmd *.ko *.mod.c .tmp_versions *.symvers test   
  16. nstall:   
  17.        scp rt73.ko   192.168.2.46:/home/nfs/usr   


4.   修改drivers/usb/net/Kconfig 加入下面的项:
 

 
  1. config RT73   
  2. tristate "support rt73 wireless usb network device"  
  3. depends on USB && NET && USB_USBNET   


5. 修改drivers/usb/net/Makefile 加入下面的项:
 

 
  1. obj-$(CONFIG_RT73)              += rt73/   


6. 重新配置内核选中rt73设备。
 

 
  1. make menuconfig   


7. 编译:
             如果选中为M 使用 make modules 编译rt73.ko 运行时候手工加载。
            如果选中为*    使用make uImage       直接把rt73设备编译到内核去。

8. 插入rt73
           提示找不到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修改后如下:
 

 
  1. #####################################################################   
  2. #       Module Name: Makefile   
  3. #       Abstract: Makefile for rt73 linux driver on kernel series 2.6    
  4. ######################################################################   
  5.   
  6. WFLAGS := -Wall -Wstrict-prototypes -Wno-trigraphs   
  7. CFLAGS += $(WFLAGS)   
  8.   
  9. obj-m := rt73.o   
  10.   
  11. 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   
  12.   
  13. ND_CONF=/etc/sysconfig/network-scripts/ifcfg-rausb0   
  14.   
  15. ifdef NDDIR   
  16.         NDDIR := $(NDDIR)   
  17. else  
  18.         NDDIR := /etc/sysconfig/network-scripts   
  19. endif   
  20.   
  21. ifdef MOD_CONF   
  22.         MOD_CONF := $(MOD_CONF)   
  23. else  
  24.         MOD_CONF := /etc/modprobe.conf   
  25. endif   
  26. KDIR    := /home/at91sam9261ek/linux-2.6.20   
  27. all:    
  28. #       make -C $(KDIR)   SUBDIRS=$(shell pwd) modules   
  29.         make -C $(KDIR) 'EXTRA_CFLAGS=-DRTMP_EMBEDDED -I.' SUBDIRS=$(shell pwd) modules   
  30.   
  31. clean:   
  32.         rm -rf *.o *~ .*.cmd *.ko *.mod.c .tmp_versions built-in.o   
  33.            
  34. install:   
  35.         make -C /lib/modules/$(shell uname -r)/build    
  36.         INSTALL_MOD_DIR=extra SUBDIRS=$(shell pwd)    
  37.         modules_install    
  38.            
  39.         @echo "Network device directory $(NDDIR)";    
  40.         @echo "Module configuration file $(MOD_CONF)";    
  41.            
  42.         @if [ -d "$(NDDIR)" ] ; then    
  43.                 if [ ! -f "$(ND_CONF)" ]; then    
  44.                         echo "Create 'ifcfg-rausb0' in $(NDDIR)/";    
  45.                         cp ifcfg-rausb0 $(NDDIR)/ ;    
  46.                 fi;    
  47.         fi   
  48.            
  49.         @if ! grep -q 'rausb0' $(MOD_CONF) ; then    
  50.                 echo "append 'alias rausb0 rt73' to $(MOD_CONF)";    
  51.                 echo "alias rausb0 rt73" >> $(MOD_CONF) ;    
  52.         fi   
  53.         /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)
         函数,修改后如下:
 

 
  1. VOID    RTMPMoveMemory(   
  2.         OUT PVOID       pDest,   
  3.         IN      PVOID   pSrc,   
  4.         IN      ULONG   Length)   
  5. {   
  6.   
  7. #ifdef RTMP_EMBEDDED   
  8.         if(Length <= 8){   
  9.                 unsigned char *dest,*src;   
  10.                 int i;   
  11.                 dest = pDest;   
  12.                 src = pSrc;   
  13.                 for(i=0;i<Length;i++){   
  14.                     *(dest++) = *(src++);   
  15.                 }   
  16.         }   
  17.         else  
  18.                 memcpy(pDest, pSrc, Length);   
  19. #else   
  20.   
  21.         memcpy(pDest, pSrc, Length);   
  22. #endif   
  23. }   
  24.   


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

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

 
相关文章:

 
最新开源项目
 
 
  查看更多...  
 
本站相关产品   淘宝网店
 




 
  查看更多...  

 

本站程序由百合电子工作室开发和维护
Copyright @ baihe electric studio
渝ICP备09006681号-4