当前位置:首页 > 通信技术 > 通信技术
[导读]随着嵌入式系统中无线局域网的接入,既可以实现对嵌人式系统的无线控制和数据传输,又可以满足一些特殊应用的场合。这里通过对USB无线网卡的Linux设备驱动的深入理解和分析,成功地移植在Atmel 9261 ARM处理器上。实

随着嵌入式系统中

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描述了Linux USB驱动程序的结构。Linux定义了通用请求块(UniversalReqlaest Block,URB),用来在USB设备类驱动程序与USBD,USBD与HCD间进行数据传输。
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读取描述符,经过解析后保存这些资源的属性,为传输数据做准备。

2.2.2 USB网络设备驱动程序设计
USB无线网卡驱动程序首先向USB子系统注册自己,然后通过vendor id和device id来判断硬件设备是否已经插入总线,摄像头驱动程序需要创建一个



当无线网卡插入USB总线时,USB core就会调用Probe方法来检测被传递进来的信息,以确定无线网卡设备是不是与驱动程序匹配,同时填充struct net_device完成对该网络设备的初始化。当无线网卡被拔出时,USB core就会调用Disconnect方法来完成清除工作。驱动程序通过显示模块的初始化和消除函数注册与注销模块调用module_init来初始化一个模块,并在卸载时调用moduel_exit函数。


其中,open函数主要完成对描述网卡硬件数据结构pAd的初始化,包括urb包接收函数、接口配置函数、初始化发送接收数据结构和MAC地址拷贝函数,以及最后开始的net_dev数据发送接收函数。RTMPSend-Packets函数负责发送包装好的网络数据包。无线网卡驱动与USB core的通信则通过中断/批量的方式来传送。

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地址和无线网卡。至此整个无线网卡驱动程序全部编译完成。
3.2 测试结果及分析
启动无线网络,编写测试带宽程序。该测试程序采用C/S设计模式,客户端运行在ARM开发板上,服务器运行在局域网内一台Linux PC上。改测试程序的工作流程主要如下,客户端分别发送不同大小的字节流,经服务器处理计算出对应的带宽,可以得到一条宽带曲线,进而得到网络实际能够达到的最大带宽。经反复测试,该无线网卡能够稳定工作,在距离AP 50 m的半径内下带宽为6 Mb/s,距离理论值54 Mb/s还有一定距离,具体原因正在分析中。测试结果如图3所示。

4 结 语
Linux作为当今市场上嵌入式系统使用比例最高的操作系统,其驱动模式支持模块堆叠技术,内核开发者已提供了一些通用模块。现从工程应用出发,研究并移植了Linux下USB无线网卡的设备驱动,以此为基础既可以构建嵌入式无线局域网,又可以用于有线网络无法延伸或难以安装,以及有可灵活移动和临时性使用等要求的、诸如外加摄像头和图像处理芯片的场合,还可以用于工业现场中的远程无线视频监控。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

Arm CPU正在从根本上推动AI变革,并造福地球。Arm架构是未来AI计算的基石。​

关键字: ARM AI

近日,Arm推出了Arm® Ethos™-U85神经网络处理器(NPU)和Arm Corstone™-320物联网参考设计平台,旨在满足海量的数据处理和大规模计算,加速推进边缘AI的发展进程。

关键字: ARM

为了赶超云计算市场上的竞争对手,谷歌正试图通过定制的Arm服务器芯片降低云计算服务成本。

关键字: 谷歌 ARM 定制芯片

嵌入式开发作为一个融合了计算机软硬件和系统工程的综合性领域,其成功与否往往取决于三个核心要素的有效整合与协调。这三个要素分别是:硬件平台的选择与设计、软件开发及其优化、以及系统级的设计与集成。深入理解并熟练掌握这三个方面...

关键字: 嵌入式开发 ARM

随着汽车软件数量爆发式的增长,整个行业都需要重新思考汽车产品的开发流程。为此,Arm推出了丰富的硬件IP、新的系统IP,以及全新的汽车计算与计算子系统产品路线图,旨在为各种汽车应用实现性能、功能安全、可扩展等方面的支持。

关键字: ARM 汽车电子

在这篇文章中,小编将为大家带来台式机的相关报道。如果你对本文即将要讲解的内容存在一定兴趣,不妨继续往下阅读哦。

关键字: 台式机 无线上网 无线网卡 网卡

知名移动芯片设计公司ARM最近迈出重要一步,它正式推出汽车芯片设计。ARM推出的芯片设计方案名叫Neoverse,随同芯片一起推出的还有面向汽车制造商、汽车供应商的新系统。

关键字: ARM 汽车芯片 芯片

USB摄像头是一种采用USB接口的视频采集设备,其优点在于即插即用、操作简便,无需额外驱动程序,支持笔记本电脑,并且成本较低,可以支持远程网络观看。

关键字: usb摄像头 驱动程序

随着通用人工智能的发展,数据中心的计算需求逐步提高。针对多模态数据、大模型的推理和训练需要更高的算力支持,而随着算力提升与之而来的还需更关注在功耗方面的优化。对于头部云计算和服务厂商而言,针对专门用例提高每瓦性能变得至关...

关键字: ARM 服务器 AI Neoverse CSS

一直以来,riscv架构都是大家的关注焦点之一。因此针对大家的兴趣点所在,小编将为大家带来riscv架构的相关介绍,详细内容请看下文。

关键字: riscv ARM riscv架构
关闭
关闭