Vxworks嵌入式操作系统下网络设备驱动程序设计

发布时间:2010-11-16 15:40    发布者:eetech
关键词: VxWorks , 操作系统 , 嵌入式 , 驱动程序 , 网络设备
本文主要介绍在Vxworks操作系统下网络设备驱动程序设计、调试方法以及将其加入系统内核的配置方法。  

VxWorks操作系统是美国WindRiver公司于1983年设计开发的一种嵌入式实时操作系统(RTOS),是嵌入式开发环境的关键组成部分。良好的持续发展能力、高性能的内核以及友好的用户开发环境,在嵌入式实时操作系统领域占据一席之地。它以其良好的可靠性和卓越的实时性被广泛地应用在通信、军事、航空、航天等高精尖技术及实时性要求极高的领域中,如卫星通讯、军事演习、弹道制导、飞机导航等。
  
1 嵌入式系统

嵌入式系统是以嵌入式计算机为技术核心,面向用户、面向产品、面向应用,软硬件可裁减的,适用于对功能、可靠性、成本、体积、功耗等综合性严格要求的专用计算机系统。和通用计算机不同,嵌入式系统是针对具体应用的专用系统,目的就是要把一切变得更简单、更方便、更普遍、更适用;它的硬件和软件都必须高效率地设计,量体裁衣、去除冗余,力争在同样的硅片面积上实现更高的性能。  

嵌入式系统主要由嵌入式处理器、外围硬件设备、嵌入式操作系统以及特定的应用程序等四部分组成,是集软硬件于一体的可独立工作的“器件”;用于实现对其它设备的控制、监视或管理等功能。  

嵌入式系统应具有的特点是:要求高可靠性;在恶劣的环境或突然断电的情况下,要求系统仍然能够正常工作;许多嵌入式应用要求实时处理能力,这就要求嵌入式操作系统(EOS)具有实时处理能力;嵌入式系统中的软件代码要求高质量、高可靠性,一般都固化在只读存储器中或闪存中,也就是说软件要求固态化存储,而不是存储在磁盘等载体中。  

2 设备驱动程序  

Vxworks5.4中驱动程序主要分为三种:字符、块以及网络驱动程序。本文所介绍的网卡驱动程序则属于网络设备驱动程序。  

2.1 网络设备驱动程序设计  

网络的各功能部件图1所示,网络设备驱动程序实际上是处理硬件和上层协议之间的接口程序。网络传输协议层分发数据在应用程序接口和网络接口之间。网络化网络协议(如IP协议)发送数据在网络主机之间。连接/接口层使能主机隶属于硬件到相同物理媒质的通信。  

在Vxworks5.4中,网卡驱动程序又分为END(Enhanced Network Driver)和BSD两种。它们分别处于如图2所示结构中。  


  
2.1.1 BSD驱动程序设计  

在Vxworks5.4中,网络驱动程序都是基于BSD UNIX版本4.3基础上的,这些驱动程序都定义在一个全局例程中,那就是attach子程序,xxattach( )子程序中包含5个函数指针,它们都被映射到ifnet结构中,这5个函数可见表1,它们在IP协议层任何地方被调用。  

表1 网络接口处理  


驱动程序指定函数  

函数指针  

功能  


xxInit( )   

if_init   

初始化接口  


xxOutput( )  

if_output   

对要传输的输出分组进行排队  


xxIoctl( )  

if_ioctl   

处理I/O控制命令  


xxReset( )  

if_reset   

复位接口设备  


xxWatchdog( )   

if_watchdog (optional)   

周期性接口例程

驱动程序入口xxattach( )调用ether_attach( )来把上述5个函数映射到ifnet结构中,ether_attach( )调用如下:  

ether_attach(
(IFNET *) %26;amp; pDrvCtrl->idr,
unit,
"xx",
(FUNCPTR) NULL,
(FUNCPTR) xxIoctl,
(FUNCPTR) ether_output( ), /* generic ether_output */
(FUNCPTR) xxReset
);
pDrvCtrl->idr.ac_if.if_start = (FUNCPTR)xxTxStartup;

上述参数中,需要一个接口数据记录(Interface Data Record (idr)),unit号和设备名,下面四个参数就是相关驱动程序的函数指针。第一个函数指针指的是init( )例程,这个例程可要可不要,第二个函数指针指的是ioctl( )接口,它允许上层来控制设备状态;第三个函数指针指的是把数据包送到物理层;最后一个函数指针指的是如果TCP/IP堆栈决定需要复位的话,它就复位这个设备。  

接着下面那一句代码表示添加数据传输例程到IDR,ether_output( )例程被调用后,传输开始例程就被TCP/IP协议堆栈调用。  

在这个入口驱动程序中还包括设备的初始化、发送和接收描述符的初始化等。  

2.1.2 END驱动程序设计  

END驱动程序是基于MUX模式,网络驱动程序被划分为协议组件和硬件组件。MUX数据链路层和网络层之间的接口,它管理网络协议接口和低层硬件接口之间的交互;将硬件从网络协议的细节中隔离出来;删除使用输入钩例程来过滤接收从协议来的数据包,和删除了使用输出钩例程来过滤协议包的发送;并且链路层上的驱动程序需要访问网络层(IP或其他协议)时,也会调用相关的MUX例程。值得注意的是,网络层协议和数据链路层驱动程序不能直接通讯,它们必须通过MUX。如图3所示:   


  


  




  
   
2.3将驱动程序加载到Vxworks系统中  

要对所设计的驱动程序进行测试,首先就必须把驱动程序加载到Vxworks IMAGE中,并且给设备分配一个IP,这样才能有利于网间测试。  
首先,修改configNet.h文件,添加如下代码:  

#ifdef INCLUDE_DM_9102_END   
#define DM_9102_BUFF_LOAN_0  1  
#define DM_9102_LOAD_FUNCsysDm9102EndLoad  
#define DM_9102_LOAD_STR_0   ""  
IMPORT END_OBJ * DM_9102_LOAD_FUNC (char *, void *);  
和END_TBL_ENTRY endDevTbl [] 中添加  
#ifdef INCLUDE_DM_9102_END  
{0, DM_9102_LOAD_FUNC, DM_9102_LOAD_STR_0, TRUE, NULL, FALSE},  
#endif /* INCLUDE_DM_9102_END */  
其次,编辑config.h文件,添加如下代码:  
#define INCLUDE_DM_9102_END  /* Davicom 9102 Fast Ethernet Controller */  
最后,编辑sysLib.c文件,添加如下代码:  
/* include dm9102 End driver support routines */  
#ifdef INCLUDE_DM_9102_END  
IMPORT STATUS sysDm9102PciInit (void);  
#endif /* INCLUDE_DM_9102_END */     
/* include dm9102End driver support routines */  
#ifdef INCLUDE_DM_9102_END  
#include "sysDm9102End.c"  
#endif /* INCLUDE_DM_9102_END */  
#ifdef INCLUDE_DM_9102_END  
   sysDm9102PciInit ();  
#endif /* INCLUDE_DM_9102_END */  

通过上述过程相应的添加程序,然后重新编译Vxworks,这样就将所设计的网卡驱动程序添加到Vxworks内核中了。  

2.4 PCI设备检测  

如果所设计的网卡是基于PCI总线的,那么在程序开始就需要对PCI设备进行检测,在Vxworks5.4中有专门的PCI函数来检测设备的总线号、设备号和功能号。首先利用pciFindDevice( )函数对给定VendorID和DeviceID的设备进行检测,检测完后同时给出了设备的总线号、设备号和功能号;接下来就是获得该设备的中断号、基地址(包括IO和内存)。Vxworks中pciConfigLib.h文件中定义PCI总线的常量。如中断号:PCI_CFG_BRG_INT_LINE,IO基地址:PCI_CFG_BASE_ADDRESS_0,内存基地址:PCI_CFG_BASE_ADDRESS_1等等。所以利用函数pciConfigInByte和pciConfigInLong就可以很容易地获得设备的中断号和基地址。  

2.5 调试方法  

为了方便调试网卡驱动程序,推荐利用串口对程序进行下载并将Vxworks image拷贝到软盘中以从软盘来加载它。调试的时候首先应该给网卡分配一个IP(利用usrNetIfConfig函数),然后利用ping来对网卡进行测试。  

3  结语  

利用上述方法所设计的网卡后,不久可以利用它来进行程序下载,而且能满足网卡所有的功能,包括对TCP/IP和UDP/IP(组播、广播和单播)进行了测试。
本文地址:https://www.eechina.com/thread-39727-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

相关视频

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表