Vxworks嵌入式操作系统下网络设备驱动程序设计
初始化接口
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 *) & 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驱动程序设计
《Vxworks嵌入式操作系统下网络设备驱动程序设计(第2页)》