1 硬件系统构成
1.1 USB无线网卡介绍
无线网卡是无线局域网(WLAN)的重要组成部分,WLAN的物理层及MAC层是用无线网卡的硬件及其软件完成的,而LLC层以上各层均由计算机软件来实现。WLAN包括进行通信的网络接口卡(简称无线网卡)和接人点/桥接器(AP/网桥)。其中,无线网卡提供了最终用户设备(手持设备)与接人点/桥接器之间的接口。目前,无线网卡主要以PCMCIA,CompactFlash(CF)卡的形式广泛应用。大多数可用的无线网卡都是基于Intersil Prism或Lucent Hermes芯片组的,其中USB设备的无线网卡则由Ateml芯片组支持。该系统采用D-Link的WLG-122无线网卡,芯片组为Prism2,它通过USB host port接入。
1.2 系统构成
主控制器采用Atmel 9261,工作频率180 MHz,具有16 KB数据cache和16 KB指令cache,外接64 MBNAND FLASH和64 MB SDRAM,外围接口由10/100 Mb/s自适应以太网卡,3个USB 2.0接口,2个通用异步收发器(UART),LCD接口以及串行外围接口(SPI)等组成,可以方便地外接工作设备。操作系统采用Linux 2.6.15;Bootloader采用U-boot;根文件系统采用ramdisk。系统启动后挂载yaffs文件系统,该系统采用Ateml公司的Atmel 9261开发板,外围接口包括2个USB host接口,其中一个外接USB无线网卡。无线路由器采用Cisco-Linksys的WRTl60N,支持802.11g标准、TCP协议和TFTP协议。
2 USB无线网卡驱动
2.1 Linux USB驱动模块结构
对于接入系统中的USB无线网卡,从CPU的角度首先看到的是USB总线,然后才是网卡芯片,所以USB驱动要先于网卡驱动实现。USB设备接口有主机端与设备端区别,因而USB驱动程序也有USB主机端驱动程序与USB设备端驱动程序之分。在主控机方面,主要有UHCI和OHCI两种规范。
上层的应用软件对系统的USB设备进行访问是通过文件系统的形式进行的。每个连接到系统总线上的USB设备可以同时对应一个或多个驱动程序,即每个USB设备可以在Linux系统上设置一个或多个节点供应用程序使用。
由于USB接口为主从方式和多设备连接的树状网络结构,所以USB主机必须具备对所有连接在总线上不同类型的USB设备进行配置管理的功能。LinuxUSB主机驱动程序可以同时支持多路USB总线功能,每路USB总线独立工作。USB主机驱动由USB主机控制器驱动(HCD),USB驱动(USBD)和不同的USB设备类型驱动三部分组成。
2.2 LinUX网络驱动程序结构
所有的Linux网络驱动程序都遵循通用的接口。设计时采用面向对象的方法,即一个设备就是一个对象(net device结构),它内部有自己的数据和方法。一个网络设备最基本的方法有初始化、发送和接收。Linux网络驱动程序的结构可以划分为网络协议接口、网络设备接口、设备驱动功能和网络媒介四层。网络驱动程序中最主要的工作就是完成设备驱动层功能,使其满足所需要的功能。
2.2.1 USB无线网卡驱动设备的访问和控制
与PCI,ISA等设备不同,USB,1394等新一代总线没有IO/MEM映射、中断和DMA硬件资源,取而代之的是抽象出来的硬件资源概念。对USB设备来说,资源主要包括配置(configuration)、接口(interface)和端点(endpoint)。这些资源中,端点对于USB设备有着最重要的意义,实际的数据传输就是通过端点的读写实现的。驱动程序通过描述符来获取这些资源。在初始化时,USB驱动程序从设备端点0读取描述符,经过解析后保存这些资源的属性,为传输数据做准备。
3 编译与测试
3.1 无线网卡驱动编译
该系统的Linux内核版本为2.6.15,在宿主机上进行内核配置,通过“make menuconfig"将内核中不必要的功能去掉,增加对WLAN的支持。依次点击De-Vice Driver→Network device suppor→Wireless LAN(non-hamradio)→选中Wireless Lan driners(non-hamradio)&Wireless Extensions;然后进入通用USB-WLAN驱动程序源码,修改makefile,将内核文件夹选项重新定位在刚才编译好的Linux内核下,通过“make"在该文件夹下编译生成rt73.ko驱动模块。
在ARM嵌入式Linux开发中文件的传输方式有多种,比如TFTP服务和NFS文件系统。在此采用将rt73.ko驱动模块下载至开发板,由于Linux支持模块的动态加载,所以可以很方便地将该模块用“insmod”加载至内核,通过“lstood”查看加载的模块,之后rt73模块已经被成功加载。
在开发板文件系统中添加无线管理应用程序,和iwconfig,iwapy,iwlist等,用于配置频率、网络、ID、ES-SID、接受灵敏度、接人模式、无线网络标准、加密开关。
最后编写无线网络启动和自配置程序,实现自动配置IP地址和无线网卡。至此整个无线网卡驱动程序全部编译完成。