阅读:1610回复:10
这个项目该怎么做?
本人主要搞嵌入式系统的开发,因为项目开发的关系要在PC上开发关于以太网驱动的东西,以前我从来没有接触过PC驱动方面的内容,完全是个新手。从朋友那里知道了这里,就到这里向各位大虾请教。 这个项目大概是这样的:
在自己开发的板子上已经实现TCP/IP协议栈、PPPoE协议、Ethernet驱动,也就是说已经可以在板子上进行ADSL拨号上网。现在要把这套东西移植到PC上做个Simulator,在PC上模仿出板子上的LCD界面(包括触摸屏,用鼠标点击模拟,还有GUI),然后还要使用用在板子上已经开发出的TCP/IP协议栈,PPPoE协议,只是在最底层的Ethernet驱动方面板子上和PC上会有所区别,但必须保证这个驱动提供给上层的接口跟板子上是统一的,以保证上层的一致性,这个驱动只要最基本的读出、写入、中断功能就可以了,连ARP也要用自己开发的。请问这个驱动我应该如何入手,请哪位大虾指条明路,多谢了! |
|
沙发#
发布于:2005-07-07 20:51
说的有点乱,你的simulator都要实现什么?
|
|
板凳#
发布于:2005-07-08 09:22
多谢多谢,终于有人回了。我整理了上面的问题,讲的比原来清楚一点,多谢了!
|
|
地板#
发布于:2005-07-08 10:29
看了一下DDK的文档,似懂非懂,好像如果我要作这个驱动的话,应该在 Miniport NIC drivers 或者 Intermediate drivers 层上做,对吗?
|
|
地下室#
发布于:2005-07-08 13:09
我想可能有2种方法:
1、在你的设备上再加一个RS232口或USB口,然后在PC机上做一界面,和一RS232口或USB口的驱动,然后把界面得到的数据通过RS232口或USB口传递给你的设备,然后你的设备按照正常的程序处理即可。 2、就是做一个网卡的驱动,DDK上叫MINIPOR driver,然后在网卡的驱动里实现你的协议栈,但是该MINIPOR driver的upper edge 不能按照NDIS规范暴露给WINDOWS 系统,否则WINDOWS 系统就认为他是一个普通的网卡驱动就会豪不客气的在他的上面挂接自己的tcpip protocol or pppoe protocol,这样显然是不行的。然后该驱动暴露一个你自己定义的接口,给你的界面程序,此时该网卡对WINDOWS是不可用的,但你的界面程序可以和该驱动通讯,换句话说,任何应用程序只要遵循该接口,就可以和驱动交流。 严格来讲,此时的驱动已经不是一般意义的网卡驱动了,虽然他驱动了一块网卡。 |
|
5楼#
发布于:2005-07-08 14:19
多谢楼上的回答,我理解了一下:
1)第一个方案相当于要在板子上再开发一个bridge一样的程序,用来把PC通过RS232或者USB传来的数据转发给Ethernet芯片(我板子上是RTL8019AS),这样的话,就不用在PC上开发Ethernet驱动,还用板子上的就行了。我觉得这个相对简单一些。 2)第二个方案要难一点,也是我这个项目想实现的。那我还有两个问题就是,这样开发出的一个驱动,具有平台兼容性吗,也就是我如果换块儿网卡或者换台电脑还能用吗?另外,4楼所说的“该网卡对WINDOWS是不可用的”具体是什么意思,是不是说windows从此就不能接入网络了? 再次感谢4楼的热心回答! |
|
6楼#
发布于:2005-07-08 15:10
在你的驱动里实现要TCPIP、PPPOE和MINIPROT DRIVER工作量多了点。另外你的MINIPROT DRIVER要兼容所有的网卡是不可能的,但一般的网卡都有一个通用的标准,只要你的驱动也遵循该标准,我想兼容性也不是问题。
我又想到一点,就是写一个常规网卡驱动的FILTER,把系统发到该网卡的PACKET统统DROP掉,防止干扰你的协议。然后开一个接口给你的应用界面,这样就可以在应用层实现你的TCPIP协议,驱动只是一个转发的作用,也可以在驱动中实现TCPIP,怎么着都行。要注意的是,你的驱动利用了系统提供的MINIPORT,所以你的驱动必须严格遵循NDIS,还有一点就是你的应用程序不能使用SOCKET了,也许可以通过SPI挂接SOCKET,这我没研究过。如果只和你自己的应用程序配合,这些已经够了。 |
|
7楼#
发布于:2005-07-08 15:38
asmsys老兄实在是太热心了!
我这个项目里不需要再开发TCPIP协议栈,这些已在我前面做的项目中实现(在那个项目里,用自己的TCPIP、PPP,再加上串口驱动来使用Modem拨号上网),所以我现在这个项目就是把底层用Ethernet替换Modem。 还有就是我这边协议栈部分的API跟windows的socket的API几乎完全一样,连函数名也一样(比如socket、send、recv、bind等等),所以看应用层的程序就好象调用的windows API一样,实际上我include的头文件都是自己的(如果再include windows的头文件的话,就要报重定义错误了)。 你第三个建议很不错,我跟项目成员讨论一下。 不知道该怎么感谢了! |
|
8楼#
发布于:2005-07-08 16:05
原来这样呀,工作量少多了,如果你熟悉NDIS接口的话,一天也要不了就可以开始调试了。哈哈。。。
|
|
9楼#
发布于:2005-07-08 16:24
我就是不熟悉NDIS编程才很迷茫(我是搞嵌入式系统开发的,要不然为什么要费那么大劲搞TCPIP协议栈),听老兄这么一说,信心倍增,而且也对PC驱动产生了兴趣。我们部门挺缺这方面的人,周围没有人可问,看来还是这里大牛多呀。我一天肯定搞出来不行的(基础太差了,要看点基础知识),来这个网站最初的目的是问一下这样做的可行性,顺带看看有没有解决方案,asmsys老兄给我添了不少信心。
再次严重感谢!!! |
|
10楼#
发布于:2005-07-08 18:10
你可以做一个中间层驱动,如果如果是你的模拟器的包,你剥掉windows的协议层,以RAW协议使用标准miniport NIC。这样应用层和网卡兼容性都兼顾到了。
|
|