wince 下网卡驱动开发问题求救

Seven_zhangxw 2008-10-27 07:20:41
各位大侠,小弟刚刚接触网卡驱动开发,有几个问题需要请教,请大侠们不吝指教啊。
1,注册表里的Sysintr做什么用的?可以去掉嘛?
[HKEY_LOCAL_MACHINE\Comm\CS89001\Parms]
"BusNumber"=dword:0
"BusType"=dword:0
"InterruptNumber"=dword:25
"Sysintr"=dword:1A
"DuplexMode"=dword:1
"IoBaseAddress"=dword:A7000300
"Transceiver"=dword:3
"CardType"=dword:1
因为我们通常在驱动里面,通过interrupt 号来获得sysintr的,如KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &dw_irq,...);这里直接指定这个Sysintr,
1),这个值(这里是0x1A)如何获得的,难道是自己随便写嘛?
2),这个值如何保证和系统里面的其他系统调用的KernelIoControl(IOCTL_HAL_REQUEST_SYSINTR, &dw_irq,...)返回的sysIntr不冲突?
3),我在CS8900代码里面没有看到哪个地方处理这个sysintr,那是不是意味着,这个值我可以忽略不计呢?
因为有了值,导致我后面其他驱动通过kernelIoControl()获得的sysIntr不能用,所以我想把这个给去掉,但去掉我又担心网卡中断又出问题,真是麻烦啊。。。

2,网卡加载成功后,除了上网,还有什么方式可以验证此网卡是否OK了呢?wince里自动支持了ping的功能嘛?现在我的网卡加载成功了,但从别的电脑ping这个板子总是timeout,此开发板上网也总是不成功,各位看看问题出在哪里呢?
1),中断?我在注册表里去掉了Sysintr这项。不知道这个有没有关系。但这个号跟我触摸屏的冲突啊,就是说,通过kernelIocontrol()方式获得的sysintr也是26,我该怎么办呢?随便改一个试试?
2),配置的问题?我只配置了platform.bib, platform.reg。看wince的文档,说配置project.bib, project.reg,config.bib。。。需要在这几个文件里面配置些什么项啊?文档好像没有描述到啊。各位给讲讲,谢谢啊。

100分求救。。。请各位大侠多多帮忙啊
...全文
846 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
duanxj_buaa 2009-04-27
  • 打赏
  • 举报
回复
小弟也正在做CS8900网卡驱动开发,学习一下
Seven_zhangxw 2008-10-29
  • 打赏
  • 举报
回复
楼上的效率真是高。来结贴给分啦。。。

但我还想保留我的讨论话题,又想给分,该怎么弄呢?

楼上的,我比较了一下你发来的2442A的CS8900代码,和我手头的2442的CS8900代码基本上没有什么区别的啊。为什么我的2442不行呢?
无论如何,我还是先给分再说,等下再开个讨论专题。
gooogleman 2008-10-29
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 Seven_zhangxw 的回复:]
gooogleman,今天能发过来嘛?急啊,谢谢了。
[/Quote]

怎么还没结贴给分呢?是不是我被忽悠了?
gooogleman 2008-10-29
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 Seven_zhangxw 的回复:]
gooogleman,今天能发过来嘛?急啊,谢谢了。
[/Quote]

刚才发了
Seven_zhangxw 2008-10-29
  • 打赏
  • 举报
回复
gooogleman,今天能发过来嘛?急啊,谢谢了。
gooogleman 2008-10-28
  • 打赏
  • 举报
回复
"Sysintr"=dword:1A --------这个是16进制的,对应着oalintr.h里面的东西,你仔细看看吧。
gooogleman 2008-10-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 Seven_zhangxw 的回复:]
怎么没有人帮我看了呢?gooogleman也不来了,唉。。。。。。。。。
[/Quote]

我刚才在看自己的问题,哪有时间来回帖啊。唉,以前的因为电路问题,都快完成了却功亏一篑,要换BSP,要修改SDRAM以及flash容量驱动,何等苦难。以后我不能像以前一样做得分机器了。哈哈
不过你这个帖子还是要回的。
你使用的是我给你的那个立宇泰的BSP?那个是4.2的版本。
这些东西我博客都有收藏,我把链接给你,你自己去看
wince添加中断
调试成功的按键中断流驱动(转)
如果你是5.0BSP
请看我刚才发的一个:丢人帖子------这个是我刚写的5.0和4.2中断的区别,你看这个完全会明白了,要更详细,请利用左上角的搜索功能“wince 中断”不用半天牛就会什么都明白了-----------给分,给分,太辛苦了。
最后奉劝你,网卡驱动到处是,4.2的驱动和5.0的很大差别的,最好不要随便移植,相当于自己写一个了。
zhujinqiang 2008-10-28
  • 打赏
  • 举报
回复
关注,帮顶!
Seven_zhangxw 2008-10-28
  • 打赏
  • 举报
回复
怎么没有人帮我看了呢?gooogleman也不来了,唉。。。。。。。。。
Seven_zhangxw 2008-10-28
  • 打赏
  • 举报
回复
可以啊。分数没有问题的。。。你发到我信箱吧。seven_zhangxw@yahoo.com.cn
发完告诉我一声。
你能告诉我QQ和MSN吗?方便交流啊
gooogleman 2008-10-28
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 Seven_zhangxw 的回复:]
呵呵,我用的正是wince5.0啊。我加了这个处理,还是不行。
刚刚量了硬件信号,居然硬件没有报中断,我晕。。。
难道CS8900参考代码的寄存器和我开发板上的CS8900寄存器不一致?这下晕大了。

gooogleman,我把你代码和我拿到的2442的CS8900代码比较了一下,两者基本上一摸一样,所以我就直接拷贝过来,先修改了GPIO,CS配置和时序,硬件中断号等,然后修改了platform.bib, .reg,最后编译了下载的,本来以为很快就能搞定的…
[/Quote]

4.2还是有些区别的。我本来打算移植SD卡驱动,后来不得不放弃。我干脆全部直接到wince5.0去弄。
对了,你不要用我那个4.2的代码,在给150分我,哈哈。顺便咱们一起看,我虽然不干那个网卡驱动,但是我晚上还是有时间看的。我再给你一个wince5.0标准BSP你,上次你问我没有,现在老同学给了我一个,他说可以用,我正打算在上面修改,我的4.2那个我想彻底抛弃他了。
Seven_zhangxw 2008-10-28
  • 打赏
  • 举报
回复
呵呵,我用的正是wince5.0啊。我加了这个处理,还是不行。
刚刚量了硬件信号,居然硬件没有报中断,我晕。。。
难道CS8900参考代码的寄存器和我开发板上的CS8900寄存器不一致?这下晕大了。

gooogleman,我把你代码和我拿到的2442的CS8900代码比较了一下,两者基本上一摸一样,所以我就直接拷贝过来,先修改了GPIO,CS配置和时序,硬件中断号等,然后修改了platform.bib, .reg,最后编译了下载的,本来以为很快就能搞定的。你的意思是说,wince5.0的CS8900驱动和wince4.2有很大区别,不能直接用?

我得先研究CS8900A datasheet再说,硬件不产生中断,再好的驱动也是白搭啊。。。
gooogleman 2008-10-28
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 ggsddu_1997 的回复:]
楼主,我觉得你应该作个中断映射。把虚拟地址和物理地址绑定起来。调用OALIntrStaticTranslate(SYSINTR_ETHERNET, IRQ_EINT9);这样应该就行了。
[/Quote]

好人,你的是在标准的5.0 BSP下的中断映射方法,但是楼主的是4.2的,那个BSP区别太大了,估计帮不上忙,越看越晕。
ggsddu_1997 2008-10-28
  • 打赏
  • 举报
回复
再给你一个文章,希望对你有帮助。
把下面的cs8900r压缩包解压到 \WINCE500\PUBLIC\COMMON\OAK\DRIVERS\NETCARD下
makefile文件存放在\WINCE500\PUBLIC\COMMON\CESYSGEN目录下,注意,也可以把用于编译cs8900的命令,添加到自己的makefile里。
逻辑中断号和物理中断号,要在程序里对应。。。。
在这个路径下\WINCE500\PLATFORM\SMDK2410\SRC\KERNEL\OAL,找到init.c文件里的,函数BSPIntrInit()。添加下面
OALIntrStaticTranslate(SYSINTR_ETHERNET, IRQ_EINT9);
上面分别是逻辑中断号,物理中断号。
注意,修改dirs文件。
注册表的修改方法:
; added for CS8900
[HKEY_LOCAL_MACHINE\Comm\CS8900]

"DisplayName"="CS8900"

"Group"="NDIS"

"ImagePath"="CS8900.dll"

[HKEY_LOCAL_MACHINE\Comm\CS8900\Linkage]

"Route"=multi_sz:"CS89001"

[HKEY_LOCAL_MACHINE\Comm\CS89001]

"DisplayName"="CS8900"

"Group"="NDIS"

"ImagePath"="CS8900.dll"

[HKEY_LOCAL_MACHINE\Comm\CS89001\Parms]

"BusNumber"=dword:0

"BusType"=dword:0

"InterruptNumber"=dword:25

"SysIntr"=dword:21

"IoBaseAddress"=dword:A7000300

"Transceiver"=dword:3

"CardType"=dword:1

[HKEY_LOCAL_MACHINE\Comm\CS89001\Parms\TcpIp]

"EnableDHCP"=dword:0

"DefaultGateway"="192.168.30.126"

"LLInterface"=""

"UseZeroBroadcast"=dword:0

"IpAddress"="192.168.30.21"

"Subnetmask"="255.255.255.128"

"DNS"="61.134.1.4"

[HKEY_LOCAL_MACHINE\Comm\Tcpip\Linkage]

"Bind"="CS89001"
ggsddu_1997 2008-10-28
  • 打赏
  • 举报
回复
楼主,我觉得你应该作个中断映射。把虚拟地址和物理地址绑定起来。调用OALIntrStaticTranslate(SYSINTR_ETHERNET, IRQ_EINT9);这样应该就行了。
gooogleman 2008-10-28
  • 打赏
  • 举报
回复
估计你要彻底搞懂这个需要一些时间了。哈哈,可惜我有项目要做,不然我和你一起看看。
Seven_zhangxw 2008-10-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 hzdysymbol 的回复:]
"Sysintr"=dword:1A
这个跟硬件没有任何关系,跟硬件相关的是IRQ号
所以说如果你驱动中是通过动态的方式获取的Sysintr,那注册表里的就应该没有用。这点你要仔细查看一下你自己驱动中的代码,看到底是用动态分配的还是用注册表中指定的Sysintr跟IRQ关联起来的
[/Quote]

在CS8900代码里面没有地方涉及到Sysintr这个值,只有一个NDIS函数涉及到物理中断号,但被NDIS给封装了,看不到了。
status = NdisMRegisterInterrupt(
&Adapter->Interrupt, //interrupt handle
Adapter->MiniportAdapterHandle, //miniport handle
Adapter->InterruptNumber, //interrupt number, physical int, eint9
Adapter->InterruptNumber, //skip --
TRUE, //share interrupt source
FALSE, //
NdisInterruptLatched
);
所以我猜想Sysintr这个值没有被NDIS用到的,但在我注册表里有它和没有它,跑起来的结果就是不一样。所以真是奇了怪了,难道NDIS会再扫描一次注册表?

hzdysymbol 2008-10-28
  • 打赏
  • 举报
回复
"Sysintr"=dword:1A
这个跟硬件没有任何关系,跟硬件相关的是IRQ号
所以说如果你驱动中是通过动态的方式获取的Sysintr,那注册表里的就应该没有用。这点你要仔细查看一下你自己驱动中的代码,看到底是用动态分配的还是用注册表中指定的Sysintr跟IRQ关联起来的
ggsddu_1997 2008-10-27
  • 打赏
  • 举报
回复
关注此问题,帮你顶!
Seven_zhangxw 2008-10-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 sunrain_hjb 的回复:]
这种情况应该就是中断的问题了。
建议先屏蔽掉别的驱动,测通网卡再说。

中断的使用由硬件决定,不是随便来的。
[/Quote]
首先,"InterruptNumber"=dword:25 我认为是正确的,它采用的是EINT9,在.h里面定义的37。原理图上也的确连的是EINT9。
我不能确定的是sysintr这个东西,刚刚把它给改成了随便的一个值,1A不行,我就改2A,这次没有冲突,但测试结果一样:
CS8900Send
+CS8900:CS8900QueryInformation: 0x10107
----> OID_GEN_LINK_SPEED
-CS8900:CS8900QueryInformation
+CS8900:CS8900QueryInformation: 0x10107
----> OID_GEN_LINK_SPEED
-CS8900:CS8900QueryInformation
+CS8900:CS8900QueryInformation: 0x10107
----> OID_GEN_LINK_SPEED
-CS8900:CS8900QueryInformation
+CS8900:CS8900QueryInformation: 0x10107
----> OID_GEN_LINK_SPEED
-CS8900:CS8900QueryInformation
CS8900Send
CS8900Send
CS8900Send
CS8900Send
CS8900Send
......
CS8900Send
CS8900Send


刚刚到控制面板里面看了一眼,的确有CS89001这个网卡了,而且IP地址等都是我注册表里面的配置。说明驱动是正常加载了;
使用IE访问网络总是尝试了很长时间后报“the page cannot be displayed”;
使用IE访问\\127.0.0.1,报地址invalid

刚刚上网浏览了网友的帖子,提到config.bib文件,怎么配这个文件?需要配些什么?我看里面都是地址reserved嘛,需要把我网卡需要到的空间researve起来嘛?

还有网友提到了CORE OS-->WINDOWS CE DEVICE-->Communication Service and Network选项等,因为我是选择mobile handle的,这些是不是就不用选择了?

另外,我的网卡的驱动完全是采用s3c2442的CS8900A的驱动来的,大家有没有用过三星相关芯片的网卡驱动,是不是不用修改就可以跑起来的?谢谢啦。。。
加载更多回复(2)

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧