阅读:7823回复:22
移植dm9000驱动遇到困难(已解决,非dm9000本身问题)
原来没有wince的开发经验,公司的板子换了网络芯片和flash芯片,需要我来解决
eboot的dm9000的驱动和flash驱动摸索着搞了两个星期总算弄出来了 但是nk.bin中的dm9000驱动就是搞不定了,找不到什么入手的方法 具体情况是这样的: 1:从dm9000官方下的wince500的驱动包含device.h/commom.h/dm9isa.h/dm_types.h/driver.h/wince.c/common.cpp/devoce.cpp/d9isa.cpp/driver.cpp 2:据说只要修改入口地址和中断号就可以了,于是我按照readme的说明,在平台文件夹/files下修改了platform.reg和platform.bib加入了相关的表项,设置了入口地址和中断号(本来想是不是要在代码中改中断号和入口地址,但没有找到) 3:编译生成nk.bin,看log可以发现dm9isa,dll确实编进去了,但下载后,系统无法启动,log见后 4:我的问题就是看到这个log不知道该做什么了,也许该查查device101和function35,但是wince的代码不比eboot,根本找不到来源,请求有经验的前辈们提示一下吧 log: Download successful! Jumping to image at 0x9CA01000 (phyWindows CE Kernel for ARM (Thumb Enabled) Built on Jun 24 2004 at 18:25:00 ProcessorType=0411 Revision=7 sp_abt=ffff5000 sp_irq=ffff2800 sp_undef=ffffc800 OEMAddressTable = 9ca05abc Sp=ffffc7cc OEMIoControl: Unsupported Code 0x101008c - device 0x0101 func 35 Data Abort: Thread=83fa2bb0 Proc=80126300 'device.exe' AKY=00000005 PC=03d92784(ceddk.dll+0x00002784) RA=028b16f4(dm9isa.dll+0x000016f4) BVA=05fff260 FSR=000004f6 RaiseException: Thread=83fa2bb0 Proc=80126300 'device.exe' AKY=00000005 PC=03f8dff4(coredll.dll+0x0001dff4) RA=9ca060f4(NK.EXE+0x000060f4) BVA=00000001 FSR=00000001 DeviceFolder::LoadDevice!Enumerate Found deprecated load instructions at (Drivers\BuiltIn\AFD). Driver cannot be unloaded. DeviceFolder::LoadDevice!Enumerate Found deprecated load instructions at (Drivers\BuiltIn\PPP). Driver cannot be unloaded. Done getting Registry values: bpp: 0x10 CxScreen: 0x280 CyScreen: 0x1e0 Display Type: VGA640X480 Display Driver Initialization Complete Display Driver Initialization Complete OEMIoControl: Unsupported Code 0x10100fc - device 0x0101 func 63 Lyg.p: Layout Manager successfully initialized to 1 Maximum Allowed Error 5: |
|
沙发#
发布于:2007-12-04 12:04
如果把dm9000驱动去掉(没有网络驱动)的log是这样的
Download successful! Jumping to image at 0x9CA01000 (phyWindows CE Kernel for ARM (Thumb Enabled) Built on Jun 24 2004 at 18:25:00 ProcessorType=0411 Revision=7 sp_abt=ffff5000 sp_irq=ffff2800 sp_undef=ffffc800 OEMAddressTable = 9ca05abc Sp=ffffc7cc OEMIoControl: Unsupported Code 0x101008c - device 0x0101 func 35 OEMIoControl: Unsupported Code 0x10100d0 - device 0x0101 func 52 OEMIoControl: Unsupported Code 0x10100f8 - device 0x0101 func 62 DeviceFolder::LoadDevice!Enumerate Found deprecated load instructions at (Drivers\BuiltIn\AFD). Driver cannot be unloaded. DeviceFolder::LoadDevice!Enumerate Found deprecated load instructions at (Drivers\BuiltIn\PPP). Driver cannot be unloaded. Done getting Registry values: bpp: 0x10 CxScreen: 0x280 CyScreen: 0x1e0 Display Type: VGA640X480 Display Driver Initialization Complete Display Driver Initialization Complete OEMIoControl: Unsupported Code 0x10100fc - device 0x0101 func 63 Lyg.p: Layout Manager successfully initialized to 1 Maximum Allowed Error 5: |
|
板凳#
发布于:2007-12-04 13:13
驱动加载不成功。
在芯片的初始化函数中打些输出语句看看。像设备ID什么的,读出来到底对不对。 确保连线都正确。 DM9000上的CS#片选控制脚,读写控制脚,还有就是CMD脚连到你的总线的哪个脚上, (A1的话IOBASE偏2,A2的话IOBASE偏4,这个想想就知道了) |
|
|
地板#
发布于:2007-12-04 13:32
引用第2楼saint_bxg于2007-12-04 13:13发表的 : 多谢,你给我了一个方向 看来我要了解一下驱动加载的流程了 我会继续探索,等有结果我会把解决办法贴上来 |
|
地下室#
发布于:2007-12-04 14:56
再问一下,kitl相关的东西需要改动吗?跟这个应该没有关系吧
另外,根据这个log,是不是并没有进入(找到)initialize函数? 我觉得这个是关键,如果找到了我觉得就好办了,无非是改改配置, 找不到我就不知道该怎么搞了, nk也没有main函数,一些变量赋值都找不到,根本没法跟踪啊 |
|
5楼#
发布于:2007-12-04 16:43
要用KITL的话,bootloader中当然也要改动了。
initialize函数是不会找不到,就看它操作正确不正确。你可以先跟踪一下(0x000016f4),看到底是哪个函数出错了。也在初始化函数中多打些输出,便于分析。 |
|
|
6楼#
发布于:2007-12-05 11:34
引用第5楼saint_bxg于2007-12-04 16:43发表的 : 非常感谢!我现在从driverentry顺藤摸瓜地往下找了 |
|
7楼#
发布于:2007-12-06 09:43
1.BSP部分中,DM9000AE的中断是否有对应的代码?如果没有,你通过注册表传递过去的中断号也无用.
2.总线连接是否正确?验证方法就是读出DM9000AE的ID.--这个在驱动的dm9isa.cpp 的EdeviceRegisterIoSapce函数中有.试试用RETAILMSG打印出来结果看看. |
|
8楼#
发布于:2007-12-06 11:36
谢谢楼上,我的eboot已经能下载内核了,所以总线连接应该是没有问题的,
昨天没能搞出来,今天继续 |
|
9楼#
发布于:2007-12-07 13:41
继续调,加了许多打印信息,但是很奇怪,dm9000的iobase如果要设成BA600000的话就出现data abort,<DM9:--EDeviceRegisterIoSpace>这个下面接着还有一句话都没有打印出来,而且还把BA600000映射到2900000上,十分不解
iobase=BA600000的logDM9000 WindowsCE.NET 5.0 (NDIS8.0) Driver V2.0 Build#1111 DM9000 :POSITION0 DM9000 :POSITION1 DM9000 :POSITION2 DM9000 :POSITION3 DM9000 :STATUS=0 <DM9:++MiniportIntialize> <DM9:++EDriverIntialize> m_pLower=0 <DM9:m_pLower=250448 <DM9:m_pLower=250448 <DM9:++DeviceSetDefaultSettings> <DM9:++DeviceRetriveConfigurations> <DM9:++EDeviceValidateConfigurations> <DM9:--EDeviceValidateConfigurations> <DM9:before NdisCloseConfiguration <DM9:before Enqueue <DM9:before EDeviceRegisterIoSpace <DM9:++EDeviceRegisterIoSpace> <DM9:Tries to map io space with BA600000> <DM9:The mapped address is 290000> <DM9:--EDeviceRegisterIoSpace> Data Abort: Thread=83f9ebb8 Proc=80126300 'device.exe' AKY=00000005 PC=03d92784(ceddk.dll+0x00002784) RA=02781ff0(dm9isa.dll+0x00001ff0) BVA=05fff260 FSR=000004f6RaiseException: Thread=83f9ebb8 Proc=80126300 'device.exe' AKY=00000005 PC=03f8dff4(coredll.dll+0x0001dff4) RA=9ca060f4(NK.EXE+0x000060f4) BVA=00000001 FSR=00000001 DeviceFolder::LoadDevice!Enumerate Found deprecated load instructions at (Drivers\BuiltIn\AFD). Driver cannot be unloaded. DeviceFolder::LoadDevice!Enumerate Found deprecated load instructions at (Drivers\BuiltIn\PPP). Driver cannot be unloaded. iobase=10000000的log |
|
10楼#
发布于:2007-12-10 11:13
还是没有调出来,每天以不同的方式浪费时间,我都快要疯了
芯片的id都可以读出来,为什么就启动不了呢? 不知道有人调过dm9000官方网站上下的驱动吗?到底那个该死的驱动需要改哪里?????? 我已经调不下去了 第一:程序不具有可重复性,同样的内核,烧三遍可能就有三种结果,无法启动(还没到初始化网络芯片就死掉);进入初始化函数能打印,但出来就不打印;和初始化函数成功结束 第二:加上一部分语句,读取芯片id也成功了,但是内核还是起不来 第三:我试图在每个函数中加入打印语句,初始化的时候会提示内存不足 |
|
11楼#
发布于:2007-12-10 11:16
中间居然还成功起来一次,但就这一次
Download successful! Jumping to image at 0x9CA01000 (physical 0x101000)... Got EDBG_CMD_JUMPIMG Got EDBG_CMD_CONFIGWindows CE Kernel for ARM (Thumb Enabled) Built on Jun 24 2004 at 18:25:00 ProcessorType=0411 Revision=7 sp_abt=ffff5000 sp_irq=ffff2800 sp_undef=ffffc800 OEMAddressTable = 9ca05abc Sp=ffffc7cc OEMIoControl: Unsupported Code 0x101008c - device 0x0101 func 35 OEMIoControl: Unsupported Code 0x10100d0 - device 0x0101 func 52 OEMIoControl: Unsupported Code 0x10100f8 - device 0x0101 func 62 DM9000 WindowsCE.NET 5.0 (NDIS8.0) Driver V2.0 Build#1111 DM9000 :POSITION0 DM9000 :POSITION1 DM9000 :POSITION2 DM9000 :POSITION3 Data Abort: Thread=83f9ebb8 Proc=80126300 'device.exe' AKY=00000005 PC=03d92784(ceddk.dll+0x00002784) RA=027b18d4(dm9isa.dll+0x000018d4) BVA=05fff260 FSR=000004f6 RaiseException: Thread=83f9ebb8 Proc=80126300 'device.exe' AKY=00000005 PC=03f8dff4(coredll.dll+0x0001dff4) RA=9ca060f4(NK.EXE+0x000060f4) BVA=00000001 FSR=00000001 DeviceFolder::LoadDevice!Enumerate Found deprecated load instructions at (Drivers\BuiltIn\AFD). Driver cannot be unloaded. DeviceFolder::LoadDevice!Enumerate Found deprecated load instructions at (Drivers\BuiltIn\PPP). Driver cannot be unloaded. Done getting Registry values: bpp: 0x10 CxScreen: 0x280 CyScreen: 0x1e0 Display Type: VGA640X480 Display Driver Initialization Complete Display Driver Initialization Complete OEMIoControl: Unsupported Code 0x10100fc - device 0x0101 func 63 Lyg.p: Layout Manager successfully initialized to 1 Maximum Allowed Error 5: INFO: Setting PCCARD slot 0 voltage to 0v (off). Prefetch Abort: Thread=83e17000 Proc=80126300 'device.exe' AKY=00000005 PC=00000000(???+0x00000000) RA=028653a8(pcc_serv.dll+0x000053a8) BVA=00000000 FSR=000004f0 MSIM: IM_ReadRegistry read KB 5 Explorer(V2.0) taskbar thread started. 接着重启再开又不行了 Download successful! Jumping to image at 0x9CA01000 (phyWindows CE Kernel for ARM (Thumb Enabled) Built on Jun 24 2004 at 18:25:00 ProcessorType=0411 Revision=7 sp_abt=ffff5000 sp_irq=ffff2800 sp_undef=ffffc800 OEMAddressTable = 9ca05abc Sp=ffffc7cc OEMIoControl: Unsupported Code 0x101008c - device 0x0101 func 35 DM9000 WindowsCE.NET 5.0 (NDIS8.0) Driver V2.0 Build#1111 DM9000 :POSITION0 DM9000 :POSITION1 DM9000 :POSITION2 DM9000 :POSITION3 Data Abort: Thread=83fa2bb0 Proc=80126300 'device.exe' AKY=00000005 PC=03d92784(ceddk.dll+0x00002784) RA=027b18d4(dm9isa.dll+0x000018d4) BVA=05fff260 FSR=000004f6 RaiseException: Thread=83fa2bb0 Proc=80126300 'device.exe' AKY=00000005 PC=03f8dff4(coredll.dll+0x0001dff4) RA=9ca060f4(NK.EXE+0x000060f4) BVA=00000001 FSR=00000001 DeviceFolder::LoadDevice!Enumerate Found deprecated load instructions at (Drivers\BuiltIn\AFD). Driver cannot be unloaded. OEMIoControl: Unsupported Code 0x10100d0 - device 0x0101 func 52 OEMIoControl: Unsupported Code 0x10100f8 - device 0x0101 func 62 DeviceFolder::LoadDevice!Enumerate Found deprecated load instructions at (Drivers\BuiltIn\PPP). Driver cannot be unloaded. Done getting Registry values: bpp: 0x10 CxScreen: 0x280 CyScreen: 0x1e0 Display Type: VGA640X480 Display Driver Initialization Complete Display Driver Initialization Complete OEMIoControl: Unsupported Code 0x10100fc - device 0x0101 func 63 Lyg.p: Layout Manager successfully initialized to 1 Maximum Allowed Error 5: |
|
12楼#
发布于:2007-12-10 11:17
你留个邮件,我给你发一个dm9000驱动,告诉你需要针对硬件该哪些
|
|
13楼#
发布于:2007-12-10 11:30
lester94@163.com
多谢!!!!! |
|
14楼#
发布于:2007-12-10 11:57
已发,照着该一下就可以用了
|
|
15楼#
发布于:2007-12-10 15:14
照着改了,但是还是不行,我给你发了一封email,麻烦你看一下吧
|
|
16楼#
发布于:2007-12-10 16:28
DM9:Tries to map io space with BA600000>
<DM9:The mapped address is 290000 从BA600000影射到290000?BA600000已经是你影射过的非缓冲地址了 |
|
17楼#
发布于:2007-12-10 17:16
iobase物理地址应该是0x10000000,虚拟地址(uncached)是BA600000,但无论用那个一样都会映射到2900000去,我真的很ft
唉,牢骚归牢骚,还是要继续搞出来的 我现在真的很怀疑io映射,甚至eboot的flash驱动了,但是前者原来一直是好的,换eth驱动也影响不到它呀 |
|
18楼#
发布于:2007-12-11 10:49
引用第16楼gerryzhou于2007-12-10 16:28发表的 : 我看了你的驱动的代码,原来你把EDeviceRegisterIoSpace函数中的映射的地方注释掉了 #if 0 if(!(uBase = (U32)MmMapIoSpace(phyAddr, 16, FALSE))) THROW((ERR_STRING("Fails to map io space"))); #endif //edit by gerryzhou,11/13/2007 |
|
19楼#
发布于:2007-12-11 19:30
系统终于起来了,原来......我搞的dm9000驱动从来就没有问题,周兄给的也很好,为什么系统起不来?是因为pcmcia
但是为什么原来pcmcia没事而现在却导致不能启动?无从得知 而且现在系统并不稳定,有时候上得去网,有时候上不去,有时候能启动,有时候又启动不了,看来我还要干上一段时间了.......后面还有nor flash的注册表保存和往我的设备中放一个文件夹和几个文件,要是顺利的话再玩一玩xip吧 谢谢所有关注过这个帖子的人,尤其感谢周兄的无私帮助! |
|
上一页
下一页