小硕vxworks网络驱动开发笔记_第1页
小硕vxworks网络驱动开发笔记_第2页
小硕vxworks网络驱动开发笔记_第3页
小硕vxworks网络驱动开发笔记_第4页
小硕vxworks网络驱动开发笔记_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

1、【精品文档】如有侵权,请联系网站删除,仅供学习与交流小硕vxworks网络驱动开发笔记.精品文档.目录第1章 操作系统基本概念41.1实时操作系统和分时操作系统的区别41.2嵌入式操作系统VxWorks简介41.3 VxWorks的特点51.3.1可靠性51.3.2实时性51.3.3 可裁减性61.3.4对一个实时内核的要求61.4 VxWorks的整体构架7第2章 vxWorks驱动开发预备72.1 VxWorks映像82.2 BSP主要文件目录的组成及作用:112.3系统启动顺序142.4 Vxworks驱动概要17第3章 vxWorks 网络驱动开发213.1驱动类别223.2 Vxwo

2、rks 下网络驱动开发243.3 VxWorks网络驱动配置及分析60第4章 VxWorks系统中常见问题65前言 在通信,电子领域,目前主流的嵌入式操作系统为linux 和vxworks。Linux多用于消费电子产品,像大家熟悉的andriod,原始系统就是linux,也就是说andriod也是一种linux系统。还有大家熟悉的MP3,也是使用linux操作系统的。Linux因为价格便宜(开源的,不需要付licence),稳定性好占据了一定的市场份额。 Vxworks是风河系统1983开发的一款嵌入式实时操作系统,多用于通信,导航,航天等领域。因为这些领域对实时性要求非常高,比如现在LTE

3、系统就是使用vxworks系统,因为是采用TDD模式,而这种模式,显然对实时性要求非常高。也就注定了vxwroks 在这些领域的特有优势。选择linux还是vxworks看自己的专业方向,还有自己的兴趣所有。每个领域只要研究透彻,都是很有前途的。既然两者都是主流的嵌入式操作系统,其还是有很多相似性。小编也初步接触过linux,发现具备一定的linux基础对日后深入学习vxworks很有好处,很多思想都是相似的。另外,本人系小硕,目前的研究领域是vxworks驱动开发,主攻网络驱动开发。在平常的日常学习中,结合各位网友提供的资料(自己在百度上收集的),还有workbench 提供的documen

4、t(自己翻译,特别是针对网络驱动部分),希望对广大嵌入式驱动开发者有所帮助。声明: 此文档并不适合于vxworks初学者,因为这里,小编省去了很多vxworks下的基本知识,包括内核中常用的进程,信号量等等支持。也没有提及集成开发环境tornado/vworkbench. 这里的探索重点是vxwroks底层的东西,包括启动过程,BSP开发等。 附录:Vxworks的应用领域嵌入式Vxworks系统的主要应用领域主要有以下几方面: 1.数据网络:如:以太网交换机、路由器、远程接入服务器等 2.远程通讯:如:电信用的专用分组交换机和自动呼叫分配器,蜂窝电话系统等 3.医疗设备:如:放射理疗设备 4

5、.消费电子:如:个人数字助理等 5.交通运输:如:导航系统、高速火车控制系统等 6.工业:如:机器人 7.航空航天:如:卫星跟踪系统 8.多媒体:如:电视会议设备 9.计算机外围设备:如:X终端、I/O 系统等 总之,VxWorks的系统结构是一个相当小的微内核的层次结构。内核仅提供多任务环境、进程间通信和同步功能。这些功能模块足够支持VxWorks在较高层次所提供的丰富的性能的要求。第1章 操作系统基本概念1.1实时操作系统和分时操作系统的区别     从操作系统能否满足实时性要求来区分,可把操作系统分成分时操作系统和实时操作系统。  

6、60; 分时操作系统按照相等的时间片调度进程轮流运行,分时操作系统由调度程序自动计算进程的优先级,而不是由用户控制进程的优先级。这样的系统无法实时响应外部异步事件。 实时操作系统能够在限定的时间内执行完所规定的功能,并能在限定的时间内对外部的异步事件作出响应。 分时系统主要应用于科学计算和一般实时性要求不高的场合。实时性系统主要应用于过程控制、数据采集、通信、多媒体信息处理等对时间敏感的场合。1.2嵌入式操作系统VxWorks简介VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),是嵌入式开发环境的关键组成部分。良好的持续发展能力、高性能

7、的内核以及友好的用户开发环境,在嵌入式实时操作系统领域占据一席之地。它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。在美国的 F-16、FA-18 战斗机、B-2 隐形轰炸机和爱国者导弹上,甚至连1997年4月在火星表面登陆的火星探测器上也使用到了VxWorks。Ø VxWorks操作系统是一个嵌入式实时操作系统(RTOS)。Ø VxWorks与其它实时OS一样,基于以下两个重要机制:Ø 多任务环境及任务间通信。Ø 硬件中断处理。Ø VxWor

8、ks多任务内核完成的功能是:实时调度,任务间通信及互斥。Ø 其它功能则作为系统库围绕在内核周围,它们可根据需要进行剪裁。Ø VxWorks与非实时系统的不同之处在于:Ø VxWorks的优先抢占机制基于调度,Ø VxWorks对外部事件的反应和处理快,Ø VxWorks容量小并且可配置(微内核结构) 1.3 VxWorks的特点 1.3.1可靠性     操作系统的用户希望在一个工作稳定,可以信赖的环境中工作,所以操作系统的可靠性是用户首先要考虑的问题。而稳定、可靠一直是VxWorks的一个突出优点。自从对中国的销

9、售解禁以来,VxWorks以其良好的可靠性在中国赢得了越来越多的用户。1.3.2实时性     实时性是指能够在限定时间内执行完规定的功能并对外部的异步事件作出响应的能力。实时性的强弱是以完成规定功能和作出响应时间的长短来衡量的。     VxWorks 的实时性做得非常好,其系统本身的开销很小,进程调度、进程间通信、中断处理等系统公用程序精练而有效,它们造成的延迟很短。VxWorks 提供的多任务机制中对任务的控制采用了优先级抢占(Preemptive Priority Scheduling)和轮转调度(Round-Robin Sc

10、heduling)机制,也充分保证了可靠的实时性,使同样的硬件配置能满足更强的实时性要求,为应用的开发留下更大的余地。 1.3.3 可裁减性    用户在使用操作系统时,并不是操作系统中的每一个部件都要用到。例如图形显示、文件系统以及一些设备驱动在某些嵌入系统中往往并不使用。 VxWorks 由一个体积很小的内核及一些可以根据需要进行定制的系统模块组成。VxWorks 内核最小为 8kB,即便加上其它必要模块,所占用的空间也很小,且不失其实时、多任务的系统特征。由于它的高度灵活性,用户可以很容易地对这一操作系统进行定制或作适当开发,来满足自己的实际应用需要。 1.3.4对一

11、个实时内核的要求 一个实时操作系统内核需满足许多特定的实时环境所提出的基本要求,这些包括:多任务:由于真实世界的事件的异步性,能够运行许多并发进程或任务是很重要的。多任务提供了一个较好的对真实世界的匹配,因为它允许对应于许多外部事件的多线程执行。系统内核分配CPU给这些任务来获得并发性。抢占调度:真实世界的事件具有继承的优先级,在分配CPU的时候要注意到这些优先级。基于优先级的抢占调度,任务都被指定了优先级,在能够执行的任务(没有被挂起或正在等待资源)中,优先级最高的任务被分配CPU资源。换句话说,当一个高优先级的任务变为可执行态,它会立即抢占当前正在运行的较低优先级的任务。 任务间的通讯与同

12、步:在一个实时系统中,可能有许多任务作为一个应用的一部分执行。系统必须提供这些任务间的快速且功能强大的通信机制。内核也要提供为了有效地共享不可抢占的资源或临界区所需的同步机制。任务与中断之间的通信:尽管真实世界的事件通常作为中断方式到来,但为了提供有效的排队、优先化和减少中断延时,我们通常希望在任务级处理相应的工作。所以需要杂任务级和中断级之间存在通信。1.4 VxWorks的整体构架VxWorks 支持多种处理器,对硬件不做假设,可支持ARM.PPC,MPIS架构处理器。第2章 vxWorks驱动开发预备BSP定义:Board support packet ,为各种目标板的硬件功能提供了统一

13、的软件接口它们包括:Ø 硬件初始化Ø 中断处理和产生Ø 硬件时钟和定时器管理Ø 内存映射和分配BSP还包括boot Rom和其它启动机制,sysLib和sysALib库是VxWorks可移植的核心,BSP库是硬件与软件的接口,处理硬件的初始化、中断处理与产生、硬件时钟与定时管理、局部和总线内存空间的映射、内存大小定义,等等2.1 VxWorks映像用户通过定制VxWorks组件和进行应用程序开发所生成 映像包括wind多任务微内核,也包括BSP的引导代码p Vxworks映像的三部分组成u BSS段(Block Started by Symbol,未手动

14、初始化的数据)u 代码段u 数据段p两大类Ø BootRom类型映像Ø VxWorks类型BootRom类型映像最小化、专用的VxWorks引导映像,实现最少的系统 初始化用于启动装载VxWorks映像,功能类似于PC机的BIOS。BootRom运行时建立起多任务环境usrRoot任务、网络任务(tNettask)、TFFS任务和FTP任务等。运行地点可能在ROM/Flash中执行(例如ROM驻留型引导映像),也可能在RAM 中执行。在系统中其对应的编译规则文件是rules.bspBootRom类型分为三种BootRom_res 一直运行在rom中的映象,只把data段拷贝

15、到ram里面。BootRom_uncmp 非压缩方式的映象,data段和text段都要拷贝到ram里 面,并在ram里面运行。BootRom压缩方式的映象,生成的时候编译器会把除掉romlnit.s 和bootInit.c之外的目标文件压缩并“汇编”成一个 bootrom.Z.s,最后和romInit.o,bootInit.o, version.o进行链接,生成bootrom映像。要全部拷贝到ram中,并必须要进行解压缩的工作。而这 些工作基本上都是在bootInit.c中进行的。VxWorks类型映像 系统的主映像,是系统最终要运行的映像该映像在运行时至少有一部分(如:数据段和BSS段)需要

16、在 RAM中运行。在系统中其对应的编译规则文件是rules.vxWorksVxworks 类型映像运行环境RAM运行的 压缩的ROM运行的 非压缩的VxWorks类型四种映像l VxWorks:RAM运行的VxWorks映像不包含引导程序,需要独立的引导程序从本地存储器或者经 由网络获取该映像,然后将其下载到RAM中的 RAM_LOW_LADRS处运行u VxWorks_romROM 自动RAM 运行的VxWorks映像,不需要BootRom辅 助u VxWorks_romResidentROM启动ROM运行的VxWorks映像,不需要BootRom辅助。包含引导代码,在重启时清空RAM,引导

17、代码只将data段拷 贝到RAM 中的RAM_LOW_ADRS处,系统的运行是在ROM 中进行的,启动速度快,需要的RAM 空间少,但是运行速度慢 。u VxWorks_romCompressVxWorks_rom的压缩形式VxWorks型vs BootROM型映像对于没有自启动功能的VxWorks类型映像(如 VxWorks型),映像运行前需一段程序将该映 像拷贝到RAM中运行,BootRom类型映像完成VxWorks系统下载, 完毕后BootRom的任务就结束了二者在系统初始化的时候,所做的功能基本相 同,BootRom类型映像调用bootConfig.c,而 VxWorks类型映像调用u

18、srConfig.c映像链接方式可被静态或动态链接VxWorks在开发阶段可动态地下载目标文件,并与 操作系统及其它目标文件动态链接。链接以后是浮动的,只在装载时才与绝对物理地址 相对应。静态VxWorks成品阶段是采用静态链接的。要对系统底层驱动清楚,也就是对CPU及相关的硬件有所了解.主要是32微处理器(上电启动过程, download image的方式方法,读写ROM,地址空间分配,MMU,寄存器,中断定义,.).参照硬件资料,多读一些源码会有所帮助.Tornado 2 开发调试环境协议框图主机开发(Host Development System)目标机(Target System)To

19、rnado 工具 WTX协议通信<=>EditorProjectShellDebuggerBrowserWindviewTarget Server|Target AgentVxWorks Target SimulatorWDB协议通信<=>ApplicationVxWorks OSVxWorks Target (WDB)Agent两个主要两个协议WTX协议(Wind River Tool eXchange): 用于开发机内部Tornado工具与Target Server之间通信.WDB协议(Wind DeBug): 用于主机Target Server与目标机之间的通信.

20、2.2 BSP主要文件目录的组成及作用:Install_direction/target/config/All: 这个目录下的文件是所有BSP文件共享的,不是特别需要不要更改里面的任何文件.configAll.h: 缺省定义了所有VxWorks的设置.如果不用缺省的设置,可在BSP目录下的config.h文件中用#define或#undef方式来更改设置.bootInit.c: 在romInit.s后,完成Boot ROM的第二步初始化.程序从romInit.s中的romInit()跳到这个文件中的romStart().来执行必要的解压和ROM image的放置.bootConfig.c: 完

21、成Boot ROM image的初始化和控制.usrConfig.c: VxWorks image的初始化代码.Install/target/config/comps/src: 涉及系统核心的components,主要由target/config/All中usrConfig.c中函数调用.intasll/target/config/bspname: 包含系统或硬件相关的BSP文件.Makefile 一些命令行控制images的生成,参见 BSP设置部分及生成下载READMEBSP发布纪录,版本,总的文档config.h包括所有涉及CPU主板的设置及定义(includes,definations

22、),参见 BSP设置文件及生成下载configNet.h网络驱动的主要设置文件,主要对END驱动设置.romInit.s汇编语言文件,是VxWorks Boot ROM和ROM based image的入口,参见 系统启动部分sysALib.s汇编语言文件,程序员可以把自己的汇编函数放在这个文件里,在上层调用.VxWorks image的入口点_sysInit在这个文件里,是在RAM中执行的第一个函数。 sysLib.c包含一些系统相关的函数例程,提供了一个board-level的接口,VxWorks和应用程序可以以system-indepent的方式生成.这个文件还能包含目录target/c

23、onfig/comps/src的驱动.sysScsi.c可选文件用于Scsi设备设置和初始化.sysSerial.c可选文件用于所有的串口设置和初始化.bootrom.hexASIC文件包含VxWorks Boot ROM代码VxWorks运行在目标机上,完整的,连结后的VxWorks二进制文件.VxWorks.sym完全的,连结后带有符号表的VxWorks二进制文件VxWorks.st完全的,连结后,standalone,带有符号表的VxWorks二进制文件BSP用"make"来编译连接生成(Created),而不是用Tornado的工具. BSP和应用程序都可以在&qu

24、ot;make"或"tornade"上开发(developed) 。BSP被设置包括以下驱动: ² 中断控制interrupt controller² 计时器timer(sys/aux)² 串口UART(serial)² 显示屏LCD² 键盘Keyboard(opt)² 触摸屏touch-screen(opt).2.3系统启动顺序 VxWorks image 分为在ROM中运行和在RAM中运行两种.两者启动顺序的区别在于sysInit()函数的调用.该函数在RAM运行的VxWorks中初始化RAM.ROM

25、中运行的VxWorks VxWorks在ROM中运行,即写入ROM中的VxWorks是非压缩的,不需要解压,系统直接跳到ROM的首地址,运行VxWorks.注意:ROM运行的VxWorks并不支持所有的主扳,应以主扳手册为准.文件romInit.s中的romInit()->文件bootInit.c中的romStart()->文usrConfig usrInit()->sysHwInit()->usrKernelInit()->KernelInit(usrRoot,.)。Vxwroks在ROM 中运行的优势   VxWorks在ROM中运行主要是

26、为了节省RAM空间,以便应用程序有更大的空间运行.只把VxWorks image的data段复制到RAM的LOCAL_LOW_ADRS, text部分留在ROM并在ROM中执行.。ROM中运行的VxWorks缺点是运行速度慢.RAM中运行的VxWorks VxWorks在RAM中运行,即写入ROM中的Boot或VxWorks Image是压缩的,需要先解压copy所有的text和data到RAM的LOCAL_LOW_ADRS中,下面sysInit()主要是初始化RAM用的,系统直接跳到RAM的首地址,运行VxWorksusrInit()前面不压缩,即romInit(),romStart()不能

27、压缩. 启动过程文件romInit.s中的romInit()->文件bootInit.c中的romStart()->sysaLib.s中的sysInit()->文件usrConfig.c中的usrInit()->sysHwInit()->usrKernelInit()->KernelInit(usrRoot,.)。RAM运行的Boot或VxWorks image的text段或data段会从ROM复制到RAM,在RAM中运行。其中usrRoot()是VxWorks启动的第一个任务,由它来初始化 driver,network等。BootROM image 的启动

28、过程最少的系统初始化,主要用于启动装载VxWorks image.一般有压缩和不压缩两种形式,如bootrom和boot_uncmp.与VxWorks image的区别在于一个Bootrom调用bootConfig.c,而VxWorks调用usrConfig.c. 启动顺序文件romInit.s中的romInit()->文件bootInit.c中的romStart()->文件bootConfig中的usrInit()->sysHwInit()->usrKernelInit()->KernelInit(usrRoot,.)    其中

29、/target/config/all/bootConfig.c是Boot ROM设置模块.用于通过网络加载VxWorks image.usrRoot()->bootCmdLoop(void)命令行选择,或autobooting->bootLoad(pLine, &entry)载模块到内存(网络,TFFS,TSFS.)->netifAttach()->go(entry)->(entry)()从入口开始执行,不返回.系统启动中几个很重要的函数及其作用 romInit()-power up,disable interrupt,put boot type on t

30、he stack,clears caches.romStart()-load Image Segments into RAM.usrInit()- Interrupt lock out,save imformation about boot type,handle all the Initialization before the kernel is actually started,then starts the kernel execution to create an initial task usrRoot().This task completes the start up.sysH

31、wInit()-Interrup locked,Initializes hardware,registers,activation kernel.KernelInit(usrRoot,.)- Initializes and starts the kernel. Defines system memory partition. Activates a task tUsrRoot to complete initalization. Unlocks inierrupts. Uses usrInit() initate stack. usrRoot() 初始化内存分区表(memory partiti

32、on library) ,初始化系统系统时钟(system clock) 。初始化输入输出系统(I/O system)-可选 Create devices-可选 设置网络(Configure network)-可选 激活WDB目标通信(Activate WDB agent)-可选 调用程序(Activate application) VxWorks Image在RAM中解压的位置RAM Low AddressRAM High AddressVxWorks运行的位置Boot image由ROM解压后Copy的位置,即bootRom区RAM Low Address,RAM High Address

33、和有关定义在BSP,config.h,makefile文件中定义.可参见BSP配置文件及生成下载VxWorks 在ROM中的情况 ROM 低高地址位ROM 低地址位压缩的VxWorks Imgage没有压缩的romInit.s和romStart()在ROM的起始位置,系统power up后,从这个起始位开始执行,即执行romInit(),起始位置由硬件定义,一般为0x00000000注:浅蓝色为整个VxWorks Image.其中 RAM_LOW_ADRS, RAM_HIGH_ADRS 等一些地址在makefile 和BSP config.h中定义.可参见BSP配置文件及生成下载2.4 Vxw

34、orks驱动概要总线类型PLB(processor local bus),VME,PCI,PCI-Express,RapidIO,Mii,Virtual,MF(multi function device bus),USB,IIC,SPI.驱动可以提供的服务配置 配置资源例如 ns83902VxbEnd.c 设备驱动中有这么一段devResourceGet (pHcf, "regWidth", HCF_RES_INT, (void *) &registerWidth;这里的registerwidth 就是资源配置参数vxbInstParamByNameGet (pIn

35、st, "jumboEnable", VXB_PARAM_INT32, &val); 这句话的意思是支持大包处理,jumboenable.这个就是参数配置又如rtl8169VxbEnd.c:中有这么一段LOCAL VXB_PARAMETERS rtgParamDefaults ="rxQueue00", VXB_PARAM_POINTER, (void *)&rtgRxQueueDefault,"txQueue00", VXB_PARAM_POINTER, (void *)&rtgTxQueueDefault,

36、"jumboEnable", VXB_PARAM_INT32, (void *)0,NULL, VXB_PARAM_END_OF_LIST, NULL内存管理系统启动过程中分配内存。 当系统早期启动的过程中,那些最初被初始化的设备驱动是不能使用malloc,calloc.memPartAlloc() 等函数分配内存的,因为这些方法要使用信号量等操作。这时,只能使用如下函数分配内存 hwMemAlloc( ) 从一个静态池中分配N 个字节,并清零。hwMemFree( )将内存分配给静态池。注意hwMemAlloc( ) 和hmMemFree()是在系统启动初期分配和释放内存

37、,一旦系统完成初始化,就可以使用标准的内存分配哈数进行分配。malloc( ), calloc( ), memPartAlloc( ),这里怎么没有memalign()硬件访问读写硬件寄存器 vxbRead8( ) vxbRead16( ) vxbRead32( ) vxbRead64( ) vxbWrite8( ) vxbWrite16( ) vxbWrite32( ) vxbWrite64( )使用vxbus 访问寄存器的宏定义在下面的路径installDir/vxWorks-6.x/target/src/hwif/h/vxbus/vxbAccess.h 采用vxbRegMap( ). 进

38、行映射/* find the memory mapped window for the device registers */for (i = 0; i < VXB_MAXBARS; i+)if (pInst->regBaseFlagsi = VXB_REG_MEM)break;pDrvCtrl->feiBar = pInst->pRegBasei; /* store the base address */vxbRegMap (pInst, i, &pDrvCtrl->feiHandle); /* map the window */这段程序完成的功能是首先

39、查找空间,找到VXB_REG_MEM 时,跳出,将地址存储到【pDrvCtrl 】中,同时调用函数完成映射,返回句柄,供继续读写用。中断处理vxbIntConnect( ) vxbIntDisconnect( ) vxbIntEnable( ) vxbIntDisable( )同步任务水平的同步采用信号量(这里说mux),spinlock,中断锁。中断水平的同步采用信号量(mux),添加item 到消息队列。当使用后者时,在ISR 中使用msgsend 时,timeout应该为zero。 中断水平的同步采用中断锁 intCpulock ,unCpuLockkey = intCpuLock ()

40、;/* access shared data structures. */intCpuUnlock (key); 注意 虽然中断锁很简单,很有效,但是现在不怎么使用中断锁了,因为以下两个原因1. 增加了系统开销。2. 在多个CPU 或vxwroks SMP 模式下中断锁不起作用。第3章 vxWorks 网络驱动开发 驱动说明风河早期的驱动采用legacy driver ,在早期的版即vxWorks5.x 中使用,在新的版本中已经不再提供legacy driver了,特别是使用SMP 的用户,风河强烈建议采用vxbus模型的驱动。驱动开发可利用到的资源包含网络驱动,总线控制,定时器驱动,串行设备

41、驱动。installDir/vxWorks-6.x/target/src/hwif/end/templateVxbEnd.cinstallDir/vxWorks-6.x/target/src/hwif/busCtlr/vxbTemplatePci.cinstallDir/vxWorks-6.x/target/src/hwif/timer/vxbTemplateTimer.cinstallDir/vxWorks-6.x/target/src/hwif/sio/vxbTemplateSio.c关于定时器驱动installDir/vxWorks-6.x/target/src/hwif/sio/vxb

42、TemplateSio.c这里的驱动采用vxbus 模型开发,是从legacy driver迁移到vxbus的。installDir/vxWorks-6.x/target/src/drv/timer/m8260Timer.c提供了PPC8260 的定时器驱动,采用legacydriver开发。3.1驱动类别注意开发驱动对vxWorks的I/O 系统也要有所了解。 通用类别: 串行设备。软件提供open(),write(),ioctl() 调用。串行设备驱动例程存放路径installDir/vxWorks-6.x/target/src/hwif/sio 存储设备 管理ram,tape ram,及

43、其板上的flash 设备,ATA 盘,串行ata 盘,scsi 盘,usb flash 盘等。路径:installDir/vxWorks-6.x/target/src/hwif/storage网络接口驱动MAC层驱动installDir/vxWorks-6.x/target/src/hwif/endMAC 驱动与MUX 相连。物理层驱动installDir/vxWorks-6.x/target/src/hwif/miiPHY 与MAC 之间由MII 相连。NVRAM (非易失性RAM )驱动installDir/vxWorks-6.x/target/src/hwif/nvram定时器驱动ins

44、tallDir/vxWorks-6.x/target/src/hwif/timer定时器驱动的作用:1. 告诉CPU 某事件已经消耗了指定时间2. 提供加减计数DMA 驱动installDir/vxWorks-6.x/target/src/hwif/dmaBus Controller Drivers(总线控制器驱动) 为不同的总线之间提供接口每一个CPU 在设计的时候都提供了一个与外界相连的接口,称为总线接口。一般情况下,不考虑CPU类型,直接与总线相连,称为PLB(processor local bus)。在某些情况下,需要将不同的总线之间进行桥接,用到PCE 或VME.installDir

45、/vxWorks-6.x/target/src/hwif/busCtlr作用: 总线控制器确定系统当前是那种总线在工作。2.总线控制器负责配置下行设备,使之能够工作。3.总线控制器负责管理地址映射。USB 驱动 USB 主机设配驱动 installDir/vxWorks-6.x/target/src/hwif/busCtlr/usb/hcd USB 类驱动installDir/vxWorks-6.x/target/src/drv/usbInterrupt Controller Drivers(中断控制器驱动) 作用:当设备产生中断时,中断控制器负责将中断传递个处理器,并且保证其他中断源不再送往

46、CPU当其正在处理当前中断时。installDir/vxWorks-6.x/target/src/hwif/intCtlrMultifunction DriversRemote Processing Element DriversinstallDir/vxWorks-6.x/target/src/hwif/cpuconsole 驱动installDir/vxWorks-6.x/target/src/hwif/consoleResource DriversinstallDir/vxWorks-6.x/target/src/hwif/resource资源驱动的功能是为外围设备及其配置资源其他类 A

47、/D D/A要写驱动,首先要知道驱动文件所在位置,这里有三个路径存放与驱动有关的文件installDir/vxWorks-6.x/target/3rdpartyVxBus model device drivers written by third party developers that are installed as add-ons to an existing VxWorks installation.installDir/vxWorks-6.x/target/src/hwifDrivers written in compliance with the VxBus device mod

48、el, distributed and supported by Wind River, and provided as part of a standard product,installation or patch.installDir/vxWorks-6.x/target/src/drvWind River legacy drivers (not in VxBus compliance).这里的驱动是采用legacy,模型(区别于vxbus模型),Legacy 模型用于驱动开发是应用在vxworks 早期版本中。驱动源文件提供某些实体的逻辑实现 Driver source fileins

49、tallDir/vxWorks-6.x/target/src/hwifThird-party drivers are found under:installDir/vxWorks-6.x/target/3rdpartyThe example in this section discusses the file locations3.2 Vxworks 下网络驱动开发 说明:vxworks下网络驱动开发,是本文档要讲述的重点。在本章节中,将重点介绍vxworks下驱动开发要完成的工作,熟悉驱动开发有关的源文件及其头文件,根据具体情况进行修改和配置。理解使用vxbus开发模型进行驱动开发的一般流程

50、。知道在系统初始化过程系统是如何对网络驱动进行初始化的,包括网络驱动的声明,注册等。在本章节中,读者要重点关注与网络驱动有关的头文件,源文件(对于命名中有end这样字眼的程序要多加留意),可以仔细研读,发现其中的一般性。最后结合风河代码,给出一款网卡驱动的开发方法。 vxWorks 网络协议栈 与windows 下TCP/IP 协议栈相比,vxWorks增加了MUX 层。VxWorks下网络驱动的开发要掌握的基本概念1. 网络驱动包括MAC 层驱动和PHY 驱动。MAC层和PHY 层通过MII 连接。MII 是meidia independent interface 的缩写,是一种连接机制。其

51、他媒介还有SGMII,GMII ,PLB 等等。可以通过配置MAC 相关的寄存器实现。2. Vworks 下网络驱动分为END 模型驱动和BSD 模型驱动。现在比较流行的还是END 模型驱动。3. 写vxWorks下的驱动只要实现模板函数完成的功能即可,如endload(),endunload(),endpollsend(),endpollreceive()等。具体函数看数据结构netfun,有需要实现的函数接口。这些接口在系统初始化硬件的过程中有mux层调用实现。驱动开发者只需关心底层的这几个函数实现,无须关心mux层的实现方法。4. Socket 与vxWorks网络驱动的关系Socket

52、 是在应用层调用。起始在vxworks下表现为一种文件。通过socket在不同进程之间传递信息。Socket 的发送接收功能,说到底最后还是调用底层的驱动send,receive实现。对vxwroks 网络驱动有一点了解之后,我们来重点学习END 驱动了解什么是MUX这个图表明MUX 在协议栈中的位置,与传统TCP/IP 协议栈相比,增加了一层MUX,是数据链路层与IP层之间的接口。这里的协议层是与传输层及其往上应用层的接口。与其他TCP/IP 协议相比VxWorks网络协议栈增加一层MUX层。MUX层是VxWorks为方便在网络接口硬件上实现多种协议而增加的一层 。它主要用于管理底层的多种硬

53、件的设备驱动,向上层不同协议提供统一的接口,降低了上层协议与底层物理硬件的藕合,使得网络驱动和上层协议彼此保持独立,既方便在现有硬件基础上实现新的上层协议,也利于用新的硬件支持原有的上层协议。MUX与END的交互是通过提供一套可供底层调用接口服务来实现的,实现END驱动必须遵循这套接口关系。如图所示。MUX 与END 的接口关系图3中右边框中列出的函数是驱动需要实现的函数,供MUX 层调用在必要的时间调用,如当上层使用该网卡发送数据时,MUX 会调用该网卡END 驱动提供的Send函数,将数据提交给网卡芯片硬件。缓冲池数据结构网络设备驱动与上层协议进行数据交换需要相应的内存缓冲,并且管理这些缓

54、冲也需要相应的函数。VxWorks提供了netBufLib函数库用于创建和管理网络设备用到的内存缓冲池,网络设备驱动可以直接使用也可以在此基础上设计自己特定的内存缓冲池。数据以簇的形式保存,数据结构mBlks(内存块)和clBlks(簇块)形成的数据链结构则用于指定各个簇。在clBlk之上是mBlk结构。该结构存储一个到clBlk的连接,也可以存储一个到另一个mBlk的连接。通过mBlk的连接,可以引用任意数量的数据,如图4所示。图4 mBlks 和clBlks 的数据结构装载及启动END 设备的系统函数主要用到以下几个:(1).muxDevLoad()该函数装载指定设备的驱动程序装载函数。如

55、果要装载END 设备,系统必须调用muxDevLoad()函数。(2).muxDevStart()启动设备函数(3).muxBind()muxBind()可以将协议绑定到指定的END 设备上。其调用过程是系统调用ipAttach()函数,而该函数调用muxBind()函数,绑定协议堆栈到MUX 上的一个指定的网络接口。当一个网络接口被关闭时,ipAttach()函数将释放网络接口所关联的TCP/IP 堆栈模块。装载及启动END 设备驱动程序的流程如下:使用指定的END 设备驱动程序的BSP 引导VxWorks 系统时,在引导过程中,系统将执行任务tUsrRoot 来完成如下各项:(1)初始化网

56、络任务的工作队列;(2)创建tNetTask 任务来处理网络任务工作队列的条目;(3)调用muxDevLoad()装载指定的网络驱动程序;(4)调用muxDevStart()启动指定的网络驱动程序。tUsrRoot 任务调用MUX 设备装载函数muxDevLoad()和设备启动函数muxDevStart(),通过这两个函数来装载和启动设备驱动程序。muxDevLoad()函数会根据网络设备表endDevTbl中的定义逐一调用各网络设备的装载函数,其中这个函数是muxDevLoad()的一个输入参数。muxDevStart()函数也会根据endDevTbl逐一调用网络设备所定义的设备开始函数。至此MUX 的初始化以及END 驱动程序的初始化工作已经完成。但是网络设备还是不可以使用,因为还需要将协议绑定到指定的END 指定的设备上,这一步需要用muxBind()函数实现。在VxWorks 中,系统通过usrRoot()函数调用usrNetInit()函数完成MUX 的初始化、装载网络设备表endDevTbl中描述的所有设备并将IP 协议绑定到网络引导设备上等工作。网络设备驱动程序的安装过程即图5 所示的网络初始化顺序。图5 网络初始化顺序发送数据在VxWorks 网络系统中,发送数据的流程如图6。图6 数据发送通过对图6 分析,主要包含以

温馨提示

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

评论

0/150

提交评论