欢迎来到天天文库
浏览记录
ID:10917966
大小:54.00 KB
页数:3页
时间:2018-07-08
《vxworks嵌入式操作系统下网络设备驱动程序设计》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、Vxworks嵌入式操作系统下网络设备驱动程序设计
2、第1Email:cai_yangetang.摘 要:本文主要介绍在Vxalstyle="TEXT-INDENT:21pt;mso-char-indent-count:2.0;mso-char-indent-size:10.5pt">2.1.1BSD驱动程序设计在Vxalstyle="TEXT-INDENT:21pt;mso-char-indent-count:2.0;mso-char-indent-size:10.5pt">表1网络接口处理驱动程序指定函数函数
3、指针功能xxInit()if_init初始化接口xxOutput()if_output对要传输的输出分组进行排队xxIoctl()if_ioctl处理I/O控制命令xxReset()if_reset复位接口设备xxsoNormal>if_al>周期性接口例程驱动程序入口xxattach()调用ether_attach()来把上述5个函数映射到if结构中,ether_attach()调用如下:ether_attach((IF*)pDrvCtrl->idr,unit,"xx",(FUNCPTR)NULL,(F
4、UNCPTR)xxIoctl,(FUNCPTR)ether_output(),/*genericether_output*/(FUNCPTR)xxReset);pDrvCtrl->idr.ac_if.if_start=(FUNCPTR)xxTxStartup;上述参数中,需要一个接口数据记录(InterfaceDataRecord(idr)),unit号和设备名,下面四个参数就是相关驱动程序的函数指针。第一个函数指针指的是init()例程,这个例程可要可不要,第二个函数指针指的是ioctl()接口,它允许
5、上层来控制设备状态;第三个函数指针指的是把数据包送到物理层;最后一个函数指针指的是如果TCP/IP堆栈决定需要复位的话,它就复位这个设备。接着下面那一句代码表示添加数据传输例程到IDR,ether_output()例程被调用后,传输开始例程就被TCP/IP协议堆栈调用。在这个入口驱动程序中还包括设备的初始化、发送和接收描述符的初始化等。2.1.2END驱动程序设计END驱动程序是基于MUX模式,网络驱动程序被划分为协议组件和硬件组件。MUX数据链路层和网络层之间的接口,它管理网络协议接口和低层硬件接口之间的交互
6、;将硬件从网络协议的细节中隔离出来;删除使用输入钩例程来过滤接收从协议来的数据包,和删除了使用输出钩例程来过滤协议包的发送;并且链路层上的驱动程序需要访问网络层(IP或其他协议)时,也会调用相关的MUX例程。值得注意的是,网络层协议和数据链路层驱动程序不能直接通讯,它们必须通过MUX。如图3所示:2.3将驱动程序加载到Vxal>要对所设计的驱动程序进行测试,首先就必须把驱动程序加载到Vxal>首先,修改configNet.h文件,添加如下代码:#ifdefINCLUDE_DM_9102_END#defineDM
7、_9102_BUFF_LOAN_01#defineDM_9102_LOAD_FUNCsysDm9102EndLoad#defineDM_9102_LOAD_STR_0""IMPORTEND_OBJ*DM_9102_LOAD_FUNC(char*,void*);和END_TBL_ENTRYendDevTbl[]中添加#ifdefINCLUDE_DM_9102_END{0,DM_9102_LOAD_FUNC,DM_9102_LOAD_STR_0,TRUE,NULL,FALSE},#endif/*INCLUDE_DM
8、_9102_END*/其次,编辑config.h文件,添加如下代码:#defineINCLUDE_DM_9102_END/*Davi9102FastEtherController*/最后,编辑sysLib.c文件,添加如下代码:/*includedm9102Enddriversupportroutines*/#ifdefINCLUDE_DM_9102_ENDIMPORTSTATUSsysDm9102PciInit(void);#endif/*INCLUDE_DM_9102_END*//*includedm910
9、2Enddriversupportroutines*/#ifdefINCLUDE_DM_9102_END#include"sysDm9102End.c"#endif/*INCLUDE_DM_9102_END*/#ifdefINCLUDE_DM_9102_ENDsysDm9102PciInit();#endif/*INCLUDE_DM_9102_END*/通过上述过程相应的添加程序,然后
此文档下载收益归作者所有