基于ARM的WIFI无线传输系统设计_第1页
基于ARM的WIFI无线传输系统设计_第2页
基于ARM的WIFI无线传输系统设计_第3页
基于ARM的WIFI无线传输系统设计_第4页
基于ARM的WIFI无线传输系统设计_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、清华大学2012届毕业设计说明书基于arm的wifi无线传输系统设计摘要随着数字信息技术和网络技术的高速发展,嵌入式系统的应用已经广泛渗透到人们日常生活的每一个角落。随着嵌入式应用中功能需求越来越复杂,硬件条件不断提高,选择嵌入式操作系统也就势在必行。引入操作系统后,开发者可以把精力集中在实现应用功能的用户程序,无需太多地考虑底层硬件的控制和操作。linux作为功能强大、源码公开的操作系统,在全世界爱好者的共同开发下从问世以来就得到迅猛发展。由于在嵌入式领域中的优点突出,越来越多的嵌入式产品都选择了linux作为内嵌的操作系统。本论文的主要任务是设计基于arm处理的无线数据传输的驱动程序以及网

2、络通讯应用程序的软件设计。硬件的主控制器采用arm,并顺利移植了linux操作系统作为软件开发平台,无线发送模块采用usb无线网卡即usb-wifi、并完成了基于arm处理器的无线网卡驱动的设计,能够驱动usb-wifi。网络通讯应用程序采用的是tcp/ip协议,并以无线的方式发送给pc机,使得网卡与pc机进行简单的wifi通信。关键词:嵌入式系统,linux,arm,usb-wifiabstractwith the fast development of digital information and network teehnologies,embedded system is sprea

3、ding out and getting popularly used in every field. modern embedded application becomes more and more complicated.excellent popular hard ware makes it possible to use embedded os (operating system) in embedded system,which is a good choice,based on embedded os,developers neednt think too much about

4、low-layer stuff.all is just to concentrate on the top-layer application programming.as an open os,linux boost up since its birth,many embedded productscomprise linux as the software platform because of its strong advantage in this field.the main task of this thesis is to design arm-based wireless da

5、ta transmission driveprocedure and network communication applications procedure. the host controller hardware using arm has successfully transplanted the linux operating system as a software development platform to facilitate the following software design.the wireless transmission module using usb w

6、ireless network card that is usb-wifi has completed the arm proecssor-based wireless network card driver design which has been proved to drive the usb-wifi smoothly . network communication applications using the tcp/ip protocol, send data wirelessly to the pc in which the network card has simple com

7、munication with pc.key word: embedded os,linux,arm,usb-wifi目 录1 绪论11.1研究背景11.2论文内容与结构22、wifi 无线通信的实现原理42.1 wifi42.1.1 wlan 技术介绍42.1.2 wlan 的组成单元42.1.3 wlan 的组成结构52.2 嵌入式系统开发介绍52.2.1 嵌入式系统的组成52.2.2 系统开发平台的选择62.3 wifi 无线通信总体设计方案63、wifi线通信系统硬件电路设计83.1总体硬件设计83.2 cpu的外围电路83.2.1 电源电路83.2.2复位电路93.2.3系统时钟电路

8、103.2.4存储器接口电路103.3系统的主要接口电路设计123.3.1串口电路123.2.2 usb接口电路123.3.3 jtag接口电路123.4 微处理器引脚连线图133.4.1 电源引脚连线图133.4.2 地址线、数据线以及主要外设引脚连线图144、微处理器移植linux操作系统154.1嵌入式linux操作系统的构成154.1.1应用程序154.1.2系统调用接口154.1.3 linux内核154.1.4硬件驱动154.2 linux操作系统的移植174.2.1 分区174.2.2安装 bootloader174.2.3 安装linux内核174.2.4 安装根文件系统174

9、.3 移植usb无线网卡驱动程序184.3.1 usb设备的接口、端点与配置184.3.2模块与设备文件194.3.3 usb设备工作机制205、网络通讯应用程序的设计285.1无线lan285.2网络编程基础285.2.1网络传输介绍与编程协议选择285.2.2面向连接的运输(tcp)305.2.3编程模型315.2.4编程接口325.3数据传输的软件实现335.3.1本论文的通信流程图345.3.2服务端的网络编程345.3.3客户端的socket编程376、论文总结40参考文献:41致谢43第ii页 共ii页1 绪论1.1 研究背景作为种无线联网技术,wifi已经得到了业界的关注。wif

10、i终端涉及手机、pc(笔记本电脑)、平板电视、数码相机、投影机等众多产品。由于其在数字家庭的构建中能够起到重要作用,所以无论是市场调查机构还是终端企业,都认为wifi在数字家庭市场蕴藏着不小的潜力。作为宽带无线接入网的一种重要网络形态,wifi最适合在家庭中应用。随着wifi应用领域的不断扩展、产品类型的日益丰富以及wifi设备逐步应用,消费者将获得高速、方便与丰富的使用体验。无线局域网是宽带无线接入网的一种重要网络形态,可实现局部区域内的高速无线接入,传输速率从当前的54mbps正在向更高的600mbps迈进。同时,无线局域网还具有网络结构简单、建设方便快捷等特点,得到了人们的关注。随着近年

11、来嵌入式技术和网络技术的发展,音频视频通信已经获得了广泛的应用。下一代网络已成为网络通信发展的方向,语音业务在数据通信网上已经不能满足人们的要求,视频业务也急需发展,并且对实时性要求越来越高。与此同时,wlan(无线局域网)技术的迅猛发展,wlan的主流技术已经从802.11发展到802.11n,接入速率从最高的1mbps发展到54mbps,并提供可靠的qos保证。而且技术成熟,成本低廉,普及率提高迅速,得到了众多国际厂商的支持和市场的广泛认同。另外,网络技术的发展为嵌入式系统提供了一个新的研究领域,如何更好地利用丰富的网络资源是当今嵌入式系统的应用热点。嵌入式系统与tcp/ip 协议栈的结合

12、是在嵌入式系统引入网络的基础。从20世纪80年代开始,出现了如vxworks、psos、nueleus、palmos和windowsce等商用嵌入式操作系统。但这些专用操作系统都是商业化产品,其价格高昂;而且,源代码封闭性也大大限制了开发者的积极性,因为这些eos(embedded operating system)提供给编程人员的,往往只有api(application programming interface)应用编程接口,一般以函数形式提供,这些函数均不能修改的。鉴于这些商用操作系统的这些缺点,因而,本系统选用的操作系统为源代码开放的linux,选择linux有如下几个原因:第一、li

13、nux可用于多种硬件平台,linux己经被移植到多种硬件平台,这对受开销、时间限制的研究与开发项目是很有吸引力的。原型可以在标准平台上开发,然后移植到具体的硬件上,加快了软件与硬件的开发过程。第二、linux可以随意配置而不需任何的许可证或商家的合作关系,源代码可以免费得到,这样可以节省大量的开发费用。第三、linux具有优异的网络支持。微内核直接提供网络支持,而不必像其它操作系统要外挂tcp/ip协议包。因为linux本身就是在网络基础上发展起来的。 正是凭借linux在嵌入式应用中得天独厚的优势,嵌入式linux正在迅猛地发展,目前己经开发成功带操作系统的嵌入式产品中,大约有一半选择使用l

14、inux作为操作系统平台。 鉴于arm有如下优点:arm运行速度快、存储空间大、很方便与internet互联等,所以用它来作为中间的控制器能提高整个系统的运行处理速度,并且能完成复杂的路由算法,同时也方便与现在的网络进行数据传递。因而,本系统选用了32位的arm芯片s3c2440做本系统的cpu。arm与操作系统linux的结合,在很多方面都有优势:第一,方便。主要在后期的开发,即在操作系统上直接开发应用程序。第二,安全。这是linux的一个特点,linux的内核与用户空间的内存管理分开,不会为用户的单个程序错误而引起系统瘫痪。第三 高效。引入进程的管理调度系统,使系统运行更加高效。1.2 论

15、文内容与结构本文介绍了无线通信的系统设计,从两方面介绍了整个wifi无线通信系统-硬件与软件。硬件方面:阐述了wifi无线通信的硬件平台设计,重点研究了一些基本电路设计,主要的接口设计。软件方面:研究了linux在arm上的移植,以及怎样搭建嵌入式开发的软件平台,研究了无线网卡芯片的linux驱动程序的开发,以及wifi无线通信系统的应用程序开发。第1章:绪论,阐述了该论文的开发背景和意义,总体概述了本论文的结构和内容安排等。第2章:wifi无线通信的系统设计,阐述了系统的总体结构,对各功能模块的硬件软件分析,研究了wifi通信的工作流程。第3章:设计一些基本外围电路设计,无线通信协调器硬件电

16、路及外围硬件电路,以及常用的接口电路设计。第4章:阐述嵌入式linux的移植到协调器硬件平台的过程,研究linux移植到arm芯片的过程,论述了usb无线网卡的驱动设计与移植。第5章:基于arm&linux的wifi无线通信系统的软件设计,介绍了tcp/ip协议栈,socket通信程序的编写。第6章:论文工作总结和展望。最后是参考文献和致谢。2 wifi 无线通信的实现原理2.1 wifi无线网络技术wifi实质上是一种商业认证,它是目前应用最广泛的wlan标准,具有wifi标准认证的产品都符合ieee 802.11b无线局域网络规范。下面首先介绍wlan技术和ieee 802.11b无线局域

17、网络规范,在此基础之上,介绍 wifi无线网络工作原理以及组网模式。2.1.1 wlan 技术介绍wlan是指通过无线通信技术将分布在一定范围内的计算机设备或者其它智能终端设备互联起来,构成可以实现资源共享和互相通信的网络体系。wlan最大的特点是不再使用网络电缆将计算机与网络终端连接起来,而是使用无线的连接方式,使得网络的组建和终端的移动更加方便灵活。2.1.2 wlan 的组成单元一个无线局域网络通常由工作站、无线介质(wireless medium,wm)、无线接入点和主干分布式系统(ds,distribution system)等几部分组成。现将各部分的功能与特点描述如下:(1)工作站

18、(sta):它是无线局域网最基本的组成单元,是集成了无线网络设备的计算机或智能设备终端。其无线网络设备的作用是接收无线信号,连接到无线接入点,实现计算机或智能终端之间的无线连接。根据应用的不同,无线网络设备可以分为无线局域网卡、无线上网卡和蓝牙适配器等。(2)无线接入点(ap):无线接入点可以是无线ap(access point),也可以是无线路由器,主要负责连接所有无线工作站进行集中管理、收发无线信号实现数据交换、实现无线工作站和有线局域网之间的互联等工作,具有有线网络中交换机的作用。(3)无线介质(wm):无线介质是wlan中sta和sta、sta和ap之间通信时发送的无线电波的传输媒质。

19、wlan中的无线介质由无线局域网物理层标准定义,最常见的是空气,用来传输无线电波。(4)主干分布式系统(ds):一个wlan所能覆盖的区域称为基本服务区域(basic service set,bss),它是构成wlan的最小单元。为了使无线局域网络覆盖的区域更大,需要把多个bss连接起来,形成一个扩展服务区(extended service area,esa),分布式系统用来连接不同的bss形成esa。2.1.3 wlan 的组成结构wlan网络主要分为无中心网络和有中心网络两种,组建这两种类型的无线局域网络所需的设备不同,而且网络结构也很不一样。(1)无中心网络无中心网络又称ad-hoc网络

20、,用于多台无线工作站之间的直接通讯。一个ad-hoc网络由一组具有无线网络设备的计算机组成,这些计算机具有相同的工作组名、密码和ssid,只要互相都在彼此的有效范围之内,任意两台或多台计算机都可以建立一个独立的局域网络。该网络不能接入有线网,是最简单的wlan网络结构。(2)有中心网络有中心网络又称结构化网络,它由sta、wm和ap组成,所有的工作站在本bss以内都可以直接通信,但在和本bss以外的工作站通信时都要通过本bss的ap连接到有线网络来实现。wlan可以使通过无线设备联网的用户充分共享有线网络中的所有资源。2.2 嵌入式系统开发介绍2.2.1 嵌入式系统的组成嵌入式系统一般由嵌入式

21、硬件和软件组成。嵌入式硬件通常由微处理器和外围设备组成,而嵌入式软件则由实时多任务操作系统、各种专用软件和应用程序组成。嵌入式系统硬件分为嵌入式处理器、存储设备、电源电路、通信接口以及外围设备等几个部分。嵌入式系统软件可分为应用层、os层和bsp三层结构。板级支持包(bsp,board support packet)主要完成底层硬件相关的初始化以及加载实时操作系统等工作,包含了bootloader 和系统硬件正常工作所需的部分驱动。目前常用的实时操作系统主要有 linux、wince、ucos、symbian、vxworks 等,开发者根据开发需要选择合适的操作系统,然后对所选择的嵌入式操作系

22、统进行裁剪、移植。应用层软件是针对用户特定的应用而制定的,其中文件系统必须要有,图形界面程序和其它应用程序依具体开发而定。2.2.2 系统开发平台的选择本嵌入式wifi无线通信终端的设计与实现所依赖的软硬件开发平台选择如下:(1)微处理器选择s3c2440,s3c2440是韩国三星公司生产的,基于arm920t的16/32位risc嵌入式处理器,是目前市场上应用非常广泛的一款嵌入式处理器。s3c2440的频率是400mhz,其arm920t核由arm9tdmi、存储管理单元(mmu)和高速缓存三部分组成。其中,mmu可以管理虚拟内存,高速缓存由独立的16kb地址和16kb数据高速cache组成

23、。arm920t有两个内部协处理器:cp14和cp15。cp14用于调试控制,cp15用于存储系统控制以及测试控制。该处理器是一个多用途的通用芯片,它内部集成了微处理器和常用外围组件,具有较高的性价比。 (2)嵌入式操作系统选择linux,内核版本为2.6.32.2。选择linux实时操作系统最主要的原因是它的开源性,不仅可以从网上免费获取内核源码,还能获取很丰富的驱动代码,降低了开发难度。(3)无线通信模块选择usb接口的无线网卡tl-wn321g+。它支持usb1.1/usb2.0标准;遵循ieee802.11b/g无线通信标准协议;支持tcp/ip、ndis3、ndis4、ipx、net

24、beui通信协议;支持两种工作模式;点对点模式和基本结构模式;最大传输速率可达54mbps。该网卡即插即用,方便快捷。2.3 wifi 无线通信总体设计方案按照系统需求,对本wifi无线通信终端的总体方案进行了设计,其软硬件结构由无线移动终端由s3c2440+tl-wn322g 为核心搭建而成,从功能上无线移动终端可以分成三个子系统:(1)arm嵌入式子系统,主要包括arm9芯片以及周边存储电路、接口转换电路和供电、时钟、复位电路组成,该部分驱动无线网卡和运行socket通信程序进行wifi通信,并且提供人机交互接口,接受上位pc 机的监控(通过串口);(2)wlan 子系统,无线网卡部分(t

25、l-wn321g+),负责无线信号的发送,功率放大/滤波,混频,基带处理等功能,并且与arm子系统通过usb接口进行快速有效的数据通信;(3)pc机部分,主要负责2.4ghz无线信号的接收并显示。系统的整体结构框架如图2.1 所示。 s3c2440 pc机无线网卡无线传输 wifi信道 2.1 系统总体框图3 wifi线通信系统硬件电路设计3.1 总体硬件设计总体设计方案如图3.1所示,该系统的核心部分是s3c2440,外围包括基于802.11的usb无线模块串行接口、sdram和flash以及uart接口和jtag接口等。jtags3c2440nand flashusb无线网卡sdramua

26、rt图3.1 硬件电路总体框图3.2 cpu的外围电路3.2.1 电源电路在设计系统电源电路之前对s3c2440的电源引脚进行分析:vddalive引脚给处理器复位模块和端口寄存器提供l.2v电压;vddi和vddiarm为处理器内核提供1.2v电压; vddop和vddmop分别为处理器端口和处理器存储器端口提供3.3v电压;vdda_adc为处理器内的adc系统提供3.3v电压;vddrtc为时钟电路提供3.3v电压,该电压在系统掉电后仍需要维持。由此可见,在该系统中,需要使用3.3v和1.2v的直流稳压电源。为简化系统电源电路设计,要求整个系统的输入电压为高质量的5v直流稳压电源。vdd

27、33v提供给cpu的vddmop、vddop、vddadc和vcc引脚,vddrtc提供给主芯片s3c2440的vdd_rtc引脚,vdd1.25v提供给cpu的vddi。5v直流输入电压经过dc-dc转换器可以完成5v到3.3v的转换;把3.3v做为max8860的输入电压,添加电容和电阻组成如图所示电路,输出为1.25v。系统中rtc(实时时钟)所需要电压由3.3v电源和后备电源共同提供。图3.2 3.3v电压产生电路图3.3 1.25v电压产生电路3.2.2 复位电路在系统中,复位电路主要完成系统的上电复位和系统在运行时用户的按键复位功能。复位电路可以由简单的rc电路构成,也可以使用其它

28、的相对比较复杂,但功能更完善的电路。图3.4 复位电路3.2.3 系统时钟电路该微处理器的主时钟由外部振荡器提供。图3.5 系统时钟3.2.4 存储器接口电路本系统中涉及两钟外部存储器:即flash存储器和sdram存储器,分别为系统的flash存储器、sdram电路。flash闪存是非易失存储器,可以对存储单元块进编程。任何flash器件进行写入操作前都必须执行擦除操作。flash存储器又分为nor flash和nand flash。而在本系统中由于设计需要未设计nor flash。因为协调器需要需要移植linux操作系统、并且需要为以后的功能扩展留有空间,所以选用的nand flash存储

29、器为k9f1208,其存储容量为64m,数据宽度为8位,以8位(字模式)数据宽度的方式工作,仅需要3.3v电压即可完成在系统的编程和擦除工作,通过对其内部的命令寄存器写入标准的命令序列,可对flash进行编程(烧写)、整片擦除、按扇区擦除,以及其它操作。图3.6 flash管脚连线图与flash存储器相比较,sdram不具有掉电保持数据的特性,但由于其存储速度大大高于flash存储器,且具有读写的属性,因此,srdram在系统中主要用作程序的运行空间、数据以及堆栈区。当系统启动时,cpu首先从复位地址0x00处读取启动代码,在完成系统的初始化后,程序代码一般应调入sdram中运行,以提高系统的

30、运行速度。同时,系统及用户堆栈、运行数据也都放在sdram中。本设计使用的sdram存储器为hy57v561620,为16位数据宽度,单片容量位32mb,系统选用两片hy57v561620并联构成32位的sdram存储器系统,共64mb的sdram空间,可满足嵌入式操作系统及各种相对复杂的算法的运行要求。3.7 sdram的连线图3.3 系统的主要接口电路设计3.3.1 串口电路 串行接口的设计,rs232是应用最广泛的uart接口,可以方便的实现与计算机的数据通信,系统的电平转换芯片采用的是max3232芯片,通信协议为rs-232协议。串行口的通信方式采用8位异步通信方式,波特率采用115

31、200bps。 图3.8 串口电路连线图3.2.2 usb接口电路图3.9 usb接口电路3.3.3 jtag接口电路 图3.10 jtag连线图 3.4 微处理器引脚连线图 3.4.1 电源引脚连线图图3.11 s3c2440的电源引脚连线图 3.4.2 地址线、数据线以及主要外设引脚连线图图3.12 s3c2440引脚连线图4 微处理器移植linux操作系统在同一个硬件平台上可以嵌入不同的嵌入式操作系统,就好比pc既可以安装windows又可以安装linux一样。同样,有些操作系统经过移植后可以运行在不同的硬件平台上。如果一个系统可以在不同硬件平台上运行,那么这个系统就是可移植的。使某一个

32、平台的代码运行在其他平台上的过程就叫做移植。在做移植工作前,必须对整个linux操作系统有所了解,同时必须了解它的文件结构,这样才能知道那些文件是跟cpu体系密切相关的,哪些是通用的即无需更改就可以直接移植的。4.1 嵌入式linux操作系统的构成从总体上看,运行在计算机硬件系统之上的linux操作系统可分为linux内核与应用程序两大部分,其结构所示,从上自下分别是:4.1.1 应用程序应用程序是运行在linux操作系统上的一个庞大的软件集合,它由系统应用程序和用户应用程序组成。这里的系统应用程序指的是与linux操作系统密切相关的应用程序,例如shell、图形界面、系统管理和维护程序以及g

33、cc编译程序等,这些系统应用程序是用户使用linux的接口,用户通过这些程序来访问和控制linux操作系统的运行。这里的用户应用程序指的是用户为完成某一特定工作或解决某一具体问题而编写的程序。4.1.2 系统调用接口系统调用接口是linux内核的一部分,它是应用程序与linux内核间的接口,各种应用程序通过这个接口调用内核提供的功能和服务,以实现特定的任务。4.1.3 linux内核linux内核是linux操作系统的核心和灵魂,它负责管理磁盘的文件、内存、启动并运行程序以及从网络上接收和发送数据包等。4.1.4 硬件驱动硬件驱动包括了linux安装和运行时需要和管理的各种物理设备驱动,如cp

34、u、内存、硬盘、网络硬件等的驱动程序。linux内核主要由五个子系统组成:进程调度,内存管理,虚拟文件系统,进程间通信。进程调度(sched):控制进程对cpu的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。可运行进程实际上是仅等待cpu资源的进程,如果某个进程在等待其它资源,则该进程是不可运行进程。linux使用了比较简单的基于优先级的进程调度算法选择新的进程。内存管理(mm):允许多个进程安全的共享主内存区域。linux的内存管理支持虚拟内存,即在计算机中运行的程序,其代码,数据,堆栈的总量可以超过实际内存的大小,操作系统只是把当前使用的程序块保留在内存中,其余的程序块

35、则保留在磁盘中。必要时,操作系统负责在磁盘和内存间交换程序块。内存管理从逻辑上分为硬件无关部分和硬件有关部分。硬件无关部分提供了进程的映射和逻辑内存的对换;硬件相关的部分为内存管理硬件提供了虚拟接口。虚拟文件系统(virtual file system,vfs):隐藏了各种硬件的具体细节,为所有的设备提供了统一的接口,vfs提供了多达数十种不同的文件系统。虚拟文件系统可以分为逻辑文件系统和设备驱动程序。逻辑文件系统指linux所支持的文件系统,如ext2,fat等,设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。网络接口(net):提供了对各种网络标准的存取和各种网络硬件的支持。网络

36、接口可分为网络协议和网络驱动程序。网络协议部分负责实现每一种可能的网络传输协议。网络设备驱动程序负责与硬件设备通讯,每一种可能的硬件设备都有相应的设备驱动程序。进程间通讯(ipc):支持进程间各种通信机制。处于中心位置的进程调度,所有其它的子系统都依赖它,因为每个子系统都需要挂起或恢复进程。一般情况下,当一个进程等待硬件操作完成时,它被挂起;当操作真正完成时,进程被恢复执行。例如,当一个进程通过网络发送一条消息时,网络接口需要挂起发送进程,直到硬件成功成功地完成消息的发送,当消息被成功的发送出去以后,网络接口给进程返回一个代码,表示操作的成功或失败。其他子系统以相似的理由依赖于进程调度。4.2

37、 linux操作系统的移植 linux版本为2.6.32.6,下边的步骤是按照arm开发板的芯片资料安装的,在该芯片资料中,已经制作好了bootloader、linux内核以及文件系统。安装linux 系统主要有以下步骤:(1)对 nand flash 进行分区;(2)安装 bootloader;(3)安装内核文件;(4)安装文件系统。下面是详细的步骤:4.2.1 分区 (1) 连接好串口,打开超级终端,上电启动开发板,进入 bios 功能菜单;(2) 选择功能号f开始对 nand flash 进行分区。4.2.2 安装 bootloader友善之臂为该linux 系统提供了bootloade

38、r的版本为supervivi。(1)打开dnw程序,接上usb电缆,如果dnw标题栏提示usb:ok,说明usb连接成功,这时根据菜单选择功能号v开始下载supervivi。(2)点击“usb port-transmit/restore”选项,并选择打开文件supervivi(3)下载完毕,bios会自动烧写supervivi到nand flash分区中,并返回到主菜单4.2.3 安装linux内核 (1)在bios主菜单中选择功能号k,开始下载linux内核zimage;(2)点击“usb port-transmit”选项,并选择打开相应的内核文件zimage; (3)下载完毕,bios会自

39、动烧写内核到nand flash分区中,并返回到主菜单。4.2.4 安装根文件系统(1)在bios主菜单中选择功能号y,开始下载yaffs根文件系统映象文件;(2)点击“usb port-transmit/restore”选项,并选择打开相应的文件系统映象文件root_qtopia.img(3)下载过程如图所示,下载完毕,bios会自动烧写内核到nand flash分区中,并返回到主菜单。在bios主菜单中选择功能号b,将会启动系统。当把开发板的启动模式设置为 nand flash启动,则系统会在上电后自动启动。4.3 移植usb无线网卡驱动程序在嵌入式linux中,共支持两种类型的usb驱动

40、,即usb主机控制驱动程序与usb设备的驱动程序。他们的作用有所不同,usb主机驱动主要的功能是驱动芯片上的主机控制硬件,而usb设备的驱动程序的主要任务是控制本身如何作为一个设备并与主机能够以适当的方式进行消息的传递。usb设备驱动是指具体的例如usb鼠标、usb无线网卡等设备驱动。在linux驱动中,usb驱动处于最底层是usb主机控制器硬件。主机控制器硬件用来实现usb协议规定的相关操作,完成与usb设备之间的通信。在嵌入式系统中,usb主机控制器硬件一般集成在cpu芯片中。顾名思义,主机控制器就是用来控制usb设备与cpu之间通信的。通常计算机的cpu并不是直接和usb设备通信,而是和

41、主机控制器通信。cpu要对设备操作,会通知主机控制器,而不是直接发送指令给usb设备。主机控制器接受到cpu的命令后,回去指挥usb设备完成相应的任务。 4.3.1 usb设备的接口、端点与配置首先,要说明的是端点。在数学上,所有的区间边界点都可以统称为端点。在我们的计算机世界里,同样应用了这一概念。在计算机的usb设备世界里,端点是用来通讯的工具,它是连接两个设备的边界点,它是单向的,只能从一个方向写数据,然后从另外一个地方读数据,有点类似于pipe管道。同样,程序编程中也有管道这一概念,与现实世界的用法几乎差不多,这个概念是由一个写了linux的荷兰人引入的,并且管道在驱动程序编程、应用程

42、序编程和文件操作等方面性能出色。其实linux编程的灵活性正是在于它的通信机制灵活多样,如管道、信号量以及消息、队列等。此端点最终会绑定下面要介绍的接口,并由接口处理一类逻辑连接。其次,将介绍的是接口,一个interface对应一个usb设备驱动程序。实际上,现在很多器件都会绑定很多其他功能器件,在编写驱动程序的时候,是否要为每一个器件单独编写一个驱动程序呢?回答是否定的,并不需要。事实上,在编写这类设备的驱动时是把多功能器件作为一个整体对待,因此只要一个驱动就可以了,那么如何实现了,这就是接口要完成的事情了。最后要说明的是配置。一个设备可能有一种或几种配置,并且可根据实际需要来改变配置,使设

43、备处于不同的状态,而且在一个时间点上,只能有一种配置有效。由于linux处理多配置usb设备不是太好,所以多配置并不多。4.3.2 模块与设备文件首先说明的是模块,这就不得不从驱动谈起了,早期驱动开发很不方便,为了开发一个驱动,必须不断的编译内核,并多次烧写,效率相当低下。后来,研究人员发明了模块,它其实就是一段己经编译的程序,并可在适当的时候供内核调用运行于内核空间的代码,作为模块的程序,无需主函数即main()函数,因为模块提供的仅仅是方法,供内核调用,准确的说操作系统是一个无限循环函数,内核中有主函数,模块只是作为内核主函数调用的一个方法而已。驱动程序以模块的形式,提供给内核。通常以两种

44、方法运行驱动程序即动态加载与直接将驱动编译进内核。在编写驱动的时候通常以动态加载的方式运行驱动,这样方便调试。当编译生成driver.ko文件时,可运行insmod driver.ko命令加载编译好的驱动模块为内核调用。如果编译好的模块顺利通过测试,便可重新编译内核将以编译好的模块加载进内核。linux驱动可根据他们的行为分为不同的类型。两种基本的类型是面向字符的设备与面向块的设备,对于字符设备和块设备的驱动程序,由于它是通过文件系统实现对设备的访问,因此可以通过系统调用工具mknod创建新的设备专用文件,这个设备文件当然是根据设备的驱动程序创建的,因为每当我们编写一个设备的驱动程序时,会通过

45、注册函数生成一个主设备号,这个主设备号会与唯一的驱动程序关联,因此若根据这个主设备号通过系统应用mknod创建相应的设备文件后,访问设备的操作将转化为对设备文件的操作。对于普通设备文件,当成功创建了设备文件后,就可通过read、write等函数对此设备进行操作了,实际上用户态的读写操作,最终会产生对内核态的相应函数进行调用。相对于这两类设备而言,网络设备的驱动程序并非如此,这两类驱动程序要么是面向顺序字节流的,要么是面向有请求缓冲区的随机数据的。而网络设备是面向报文的,它具有部分的块设备与字符设备的特征,但块设备的随机访问。实际上,在linux世界里,每一个网络设备对应一个网络接口如eth0、

46、wlan0或wlanl等。那么应用程序是如何对这个网络接口进行访问呢?实际上linux包装了一类网络函数接口,网络接口是用来实现与其他设备进行交互数据的,因此编写网络设备的驱动程序,实际上是对该网络接口的的驱动,主要任务是数据包的接受与发送操作。4.3.3 usb设备工作机制1)总线、设备与驱动总线、设备与驱动是linux设备模型三个很重要的概念,理解这些概念能够更有效的编写设备驱动因为这能让编写设备驱动的整个框架更清晰。总线是处理器与设备进行通信的高速公路,准确的说处理器并不直接与设备通信,他们之间的中介是总线,处理器把任务传递给总线,总线通知相应的设备进行工作,在总线与设备这一层的中介则是

47、驱动,驱动来完成对相应设备的具体操作。那么这三者之间到底存在怎样的微妙关系昵?这就不得不提到linux的设备模型了。在linux设备模型中有三类重要的数据结构即struct bus_type、struct device、struct device_driver,他们分别对应总线类型,设备以及设备驱动的结构体。首先要说明的是struct bus_type的结构体,它的主要数据结构如下如下:struct bus_typestruct module *owner;struct kset drivers;struct kset devices;struck klist klist_devices;st

48、ruck klist klist_drivers;int(*match)(struct device *dev,struct device_driver *dry);owner:模块指针,负责操作指向的总线,两个kset的结构体指已知总线的驱动与挂载在该总线上的所有设备。两个klist的结构分别对应于该总线相关的驱动程序链表以及挂载在该总线上的设备链表。此外要说明的是函数指针match。如有一个新的设备插入主机,或新的驱动被加载时,总线层的match函数会被调用,用以确定能够处理新接入的设备的驱动、或新加载的驱动能够处理哪些设备,若驱动与设备匹配成功,函数返回非o。其次是struct devi

49、ce,它的主要结构数据大致如下:struct device struct bus_type *bus;struct device_driver *driver;从device结构可以看出它包含两个结构体,分别为bus_type与device_driver。bus_type结构体说明该设备挂载在哪一类总线上,而device_driver则是这个设备所对应的驱动。最后要说明是本论文要设计的驱动,驱动的大体结构与struct_device相似,如下:struct device_driverstruct bus_type *bus;struct list_head devices;int(*probe

50、)(struct device*dev);注意到,device_driver同样包含bus_type类型的结构体,但却没有device_driver的结构体,原因是设备驱动可支持一类设备,因此这里去而代之的是struct list_head devices结构体。当有一个新的设备插入时,内核会根据插入的设备创建的设备结构体,并加进devices链表,当有一个新的驱动加入时,由驱动本身完成对drive:链表的填充,并通过match函数时两者得到匹配。2) bus与id设备表上一节简单说明bus、device与driver的结构体以及他们之间的关系,这一节将详细说明一下bus表是如何建立的。bus

51、的部分数据结构如下:struct bus_typestruct module *owner;struct kset drivers;struct kset devices;struct klist klist_devices;struct klist klist_drivers;int(*mateh)(struct device *dev,struct device_driver *dry);注意到struct bus_type的结构体内有两个struct klist的结构体,他们都是以链表的形式存在,那么这个链表是如何建立的呢?可以肯定的说这两个链表绝对不是天生就存在的。此外通过对比stru

52、ct device、struct device_driver结构体可知道他们都有struct bus_type类型的结构体,所不同的是struct device结构体多了个struct device_driver数据结构,而struet device_driver则是struct list_head device。其实这正是设备驱动的让人费解的地方。他们的每一类都会包含其他两类,这正是他们用来识别彼此的标签。那么这三类数据结构式如何被初始化的呢?以usb为例,那么这些初始化工作应该由usb内核来完成,usb core负责整个usb设备的初始化,首先usb core创建一个struct bus_

53、type,然后会扫描usb总线,如果有相应的设备,会根据相应设备的具体信息创建usb类型的struct device同时完成该设备结构体的初始化,并加入到struct bus_type的设备链表中,这样设备链表就完成了初始化。那么驱动链表是如何建立的呢?同样也是usb内核来完成的,但所不同的是,usb内核通过提供给usb驱动usb_register,驱动通过调用usb_register完成对struct bus_type的驱动链表的填充。实际上驱动结构体中已经指明了该驱动应该挂载的总线类型。那么设备与驱动是如何实现绑定的呢?这又是内核要做的事情了,内核通过多次调用match方法来寻找可能为指定

54、的设备服务的驱动。然后根据驱动里面的probe函数来测试此驱动是否能够服务该设备,如果能够匹配成功,则设备正常工作。const struct usb_device_id *idtable说明这个驱动能够支持哪些类型的设备,一般而占很多设备驱动的大部分源码是相同的,不同设备的差异很小,因此可以根据不同设备的代码单独实现,相同部分的共享,根据id去调用不同设备的差异部分,从而实现一个驱动可以支持多类相似功能的设备。id_table,它的具体内容是什么呢?设备与驱动如何实现匹配呢?这就要通过他们的中介id了,每一个设备在出厂时由厂家固化于芯片内的有产品厂家,产品型号以及该产品所遵循的一些标准协议或特

55、定的协议,编写驱动时,会根据芯片的具体信息添加到驱动的记表里,id表里的具体信息与固化在芯片内的信息一一对应,内核会根据驱动的id信息以及芯片的记信息、实现寻找匹配,如某一驱动的具体信息与某设备完全相同则将他们绑定,反之亦然。3)usb无线网卡驱动 对于usb设备而一言,接入主机时处理器首先识别的是usb总线,然后才是该设备本身。具体到usb无线网卡,主机首先探测到usb总线上有新的usb设备,其次才是usb接口上的网卡。因此对于usb无线网卡,首先应该实现的应是usb驱动,其次才是采用了usb接口的芯片驱动。不过幸运的是,usb驱动的大部分己经于usb内核实现,它主要包含主机端的usb驱动与

56、设备的usb驱动,在配置内核的时候,经常看到“hcd”的字样,它表示“host control driver”此即主机控制器驱动程序。对于usb无线网卡,linux系统的网络栈的架构如图3.4所示:用户空间application layersystem call interfaceprotocol agnostic interfacenetwork protocols内核空间device agnostics interfaceusb device driversusb host control drivers硬件physical device hardware图4.1 usb设备驱动结构图用户空间层也称为应用层,它通常是一个语义层,能够理解要传输的数据。中间

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论