原创 网络驱动

2011-4-6 17:42 1673 0 分类: MCU/ 嵌入式
3.2网络驱动接口的具体实现
实际网络驱动的编写,就是理解wincE下网络驱动程序的构架,然后针对实际的硬件编写代码,实现相应的中间层
Miniport
Driver接口函数。下面结合利用WinCE5.0内核在脉冲发生器嵌入式主板上移植编写嵌入式CS8900网卡驱动程序的实例,介绍网卡驱动程序
Miniport Driver接口的具体实现(由于本驱动的硬件设备是CS8900,所以在函数接口的取名上一律用CS8900代替Miniport
Driver)。
3.2.1网络驱动程序的入口函数
DriverEntry,该函数中首先调用
NdisMinitializeWrapper函数来通知NDIS
Library要注册一个Miniport。然后初始化MINIPORT结构体,所有的Miniport的相关接口函数都会赋到 MINIPORT
结构中, 最后调用NdisMRegisterMiniport来注册Miniport。通过此函数,实现了Miniport
Driver接口与NDIS接口的对接。
3.2.2网络设备的初始化接口
Miniportlnitialize,
该函数为调用函数CS8900RegisterAdapter来完成网络设备的初始化,而CS8900RegisterAdapter
又会调用CS8900Initialize,CS8900Initialize函数会相继调用:findCS,查找网络设备;resetCS,重启网络控
制器,并设置工作模式为16bit的I/0模式;InitIrq,开启网络控制器的中断;initCS,设置临时的物理地址,为网络控制器设置与嵌入式芯

片之间中断的硬件连接,以及总线读写的时序。

3.2.3网络数据包的发送
WinCE网络数据发送的流程:当上层协议驱动要发数据时,调用NdisSend请求NDIS发送数据包,NDIS将
会调用紧接其下的中间层驱动的CS8900Send,该函数首先调用NdisQueryPacket,得到需要发送包的数据信息,并拷贝到一个缓冲区暂
存,这样做的目的是保证包数据不被丢失。然后调用CS8900RequestTransmit,向网络控制器发送传送数据的请求,最后调用函数
CS8900CopyTxFrame完成数据包的发生。
3.2.4网络数据的接收和中断
网络设备的接收数据包时通过中断实现,当网络接口接收到新数据包时,发送完成或者报错误信息及连接状态都会出发中断,通常中断处理程序通过检测硬件状态寄存器判断是哪种情况。

网络设备有数据到来的时候,将触发中断,相应的中断处理程序接管中断后,将调用Miniport
Driver所注册的中断处理例程CS8900Isr,通过读取CS8900的中断寄存器判断是否是接收到数据中断,如果是就调用数据接收函数
CS8900ReceiveEvent。Miniport Driver通常在这里把网卡上的数据拷贝到Miniport
Driver缓冲区队列中去,出于效率的考虑,Miniport
Driver这时可能不会立即通知上层处理新的数据,因为很可能,马上还有随后的新的数据到来,当接收到的包的数量达到一定程度的时候,驱动程序的接收线
程会调用函数NdisMIndicateReceivePacket指示新的NDIS新数据的到来。
3.2.5Miniport Driver其他接口
  CS8900Reset,复位硬件网卡;
CS8900Querylnformation,网卡信息查询函数;
CS8900Setlnformation,设置网卡信息函数。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
0
关闭 站长推荐上一条 /1 下一条