aben1223
驱动小牛
驱动小牛
  • 注册日期2004-11-29
  • 最后登录2007-06-01
  • 粉丝1
  • 关注0
  • 积分1000分
  • 威望201点
  • 贡献值0点
  • 好评度192点
  • 原创分2分
  • 专家分0分
阅读:886回复:0

做过网卡的大虾们看进来

楼主#
更多 发布于:2005-01-04 18:04
大家好,新年快乐。
来这儿问几个问题。
在做一个驱成,因为以前没有任何基础。
在BBS上问了一些关于怎么入手和应该看那些资料的问题。
具体了解到自己是在做一块网卡驱成,NDIS的,属于Miniport的NIC驱成。
看了DDK的文档,中文的。还有看了武安河的Windows 2000 WDM 驱动程序开发。
已经小试牛刀把一块FPGA板子的灯亮起来了,还往FIFO的寄存器写数据读数据。
都已经成功了。其他的还有DS带的源代码,其中的nmne2k和usbnic的例子。其中
nmne2k就是DDK里面的ne2000的例子。
我的这块网卡是光纤通讯的,点对点。我往一个32位的寄存器写数据,往一个32
位的寄存器读数据。其中这个寄存器的地址是一个FPGA可编程逻辑写的FIFO的端口(有两个FIFO,一个发送一个接收)。我觉得这是一个很典型的PIO方式的NIC。跟NE2000的例子很像。
下面是我总结的一些问题:(***代表很重要)
1.串行化和非串行化是由谁来决定的,是硬件吗?我看的是NE2000,里面的例子是非串行的,所以现在我在写的程序也是非串行的。但是在DS里面的WIZARD的选项中选上NDIS_WDM就一定要选上Deserialize。我一直觉得很奇怪,但是按F1也没有任何解释。我试着生成一个以后看看代码,它多生成了一些m_TxIrpPool,m_RxIrpPool,m_TopOfStackDeviceObject,m_PhysicalDeviceObject,m_BusDevice。我感觉这好像是可以提供如一些CTL_CODE给上层软件的接口,好像就是你可以编写一个上层软件,用writefile,readfile,deviceiocontrol来控制硬件。这个问题我没怎么搞懂,是不是这样的阿?如果是我就不用考虑串行化了好麻烦阿,如果不是应该怎么理解。谢谢。
2.一个不是网卡的硬件可以被系统看做是一块网卡吗?因为现在硬件还没开发出来,我只好在另一块FPGA的板子上试,往它的端口压数据和读数据。这个板子没有网线或者光纤的接口。我觉得修改注册表把类型改为NET就行了吧,想的比较天真见笑了。
3.以太网帧的格式前面是8位的前同步码,然后是6位的目的地址6位的源地址,然后是数据区和4位帧检验序列。可是我似乎能看到的就是NDIS提供给我的Packet和它的Buffer。上层的NDIS是不是帮我封装好了我不用去考虑这些,不用发送时去加上那个前同步码接受时去掉那个前同步码吧。
***4.Packet中的每个Buffer(除了最后一个)的长度一样吗?大概是多少?应该大于256吧至少第一个的长度要大于256吧,要不就只能是发送的包的第一个Buffer的长度等于对方接受的包的第一个Buffer的长度,第二个等于第二个的,第三个等于第三个的,由此类推。(用NdisEthindicatereceive的方法,使用DS封装好的KNdisLookahead类,我进去看过这个类的代码。)如果不是上述的情况,那么我看的例子的代码发送和接受极有可能是错误的,我不敢说一定错说不定还有我不知道的一些内容。
***5.使用KNdisLookahead类,里面的Indicate的函数里面的一个参数Packetlen,是怎么得到的,我觉得就是用DDK开发也应该需要取到这个值。在DS的例子中它是先接受进来4个字节,放到一个UCHAR recvheader[4]的数组里,然后Length=recvheader[3]|recvheader[2];Packetlen=Length-4;就可以了。这个4字节的数据到底是什么?好像是包描述符,一样也是4个内容第一个是FLAGS第二个是physicalpagecount,第三个totallength,第四个firstbuffer。我是这么猜的。而且第三个内容正是包的长度。但是又不像,因为数组的一个单位是8位那么长度最长也才128而已。不可能。我也糊涂了,有没有人解释一下阿.最主要的还是因为发送包的时候并没有特地去发送这四个字节,就只是取到上面NDIS给的包,得到第一个BUFFER就开始发送了,然后第二个第三个。接收后好像这四个字节也就没用丢弃了。
***6.是关于中断的,开始接受时中断,发送完成时也中断,这个部分我没考虑太清楚。等解决完发送接收问题再来问吧。


请帮忙回答一下,谢谢
特别有做过网卡驱成看过NE2000代码的同志帮我解决一下问题。
万分感谢了。
周维彬
游客

返回顶部