目前使用的平台是pxa270+wince5.0,老板要求升级到wince6.0。我以前没有做过移植的工作,原来5.0的代码也不是我写的,硬着头皮接下了这个工作,看了几天,有些茫然,因此有些问题,请有经验的高手指教,你的一句话可能就让我省好多时间,先谢谢了。
1、我是否可以直接使用wince5.0的bootloader,而只需要将6.0的image的start address部分设置成和5.0的bootloader一致即可?我现在测试的情况是image似乎没有起来,不能确定是不是bootloader的问题。
2、关于6.0的启动流程,我也看了MSND和网上很多文章,我有一个疑问,这一部分是否需要针对不同的平台来做相应的修改呢?我用wince6.0自带的mainstoneIII的BSP结构做模板,来porting我现有的5.0的driver,我知道OAL部分肯定是需要修改的,但是前面的启动流程中,还有很多汇编代码?这些需要修改吗?
3、image的串口输出问题。在5.0中,我只要设置了调试串口,在platform\my platform\src\common\args和OAL的init.c中设置,image启动是就可以有串口信息输出,但是6.0中我也做了同样的设置,却没有信息出来。我也不知道image是否已经启动。
谢谢大家了!
1、bootloader不改也可以用
2、建议用原有5.0的BSP,然后把一些6.0的东西替换进去,再做debug工作,如何修改5.0的BSP可以参考帮助文档,讲得很详细的
3、这种问题自己慢慢查吧,别人也帮不了你什么
如果5.0也不是你做的,那移6.0还是有些难度的
第一个问题,我用的ATMEL 9261的bootloader是5、6通用的。
谢谢大家,非常感谢,我先要解决串口输出的问题,唉。
一,可通用没问题,
二,启动流程,MSDN上说得比这里所有的人都清楚:)
三,串口没出DEBUG估计是没起来IMAGE。
串口信息终于出来了,image应该是起来了。现在系统停在OALLib/intr.c中的BSPIntrActiveIrq,跑完了这个函数就不动了。还得继续努力。
我的串口调试信息如下:
Windows CE Kernel for ARM (Thumb Enabled) Built on Nov 25 2008 at 18:21:26
ProcessorType=0411 Revision=7
OEMAddressTable = 8049cc74
INFO:OALLogSetZones: dpCurSettings.ulZoneMask: 0xb
+DisplayInitialize
+DisplayInitialize --
+SplashImage
+SplashImageà?
DeviceId................. MAINSTN0
pArgs->flags............. 0xD
pArgs->devLoc.IfcType.... 0
pArgs->devLoc.LogicalLoc. 0x10000300
pArgs->devLoc.PhysicalLoc 0x10000300
pArgs->devLoc.Pin........ 0
pArgs->ip4address........ 0
pDevice->Name............ s
pDevice->ifcType......... 0
pDevice->id.............. 0x10000300
pDevice->resource........ 0
pDevice->type............ 2
pDevice->pDriver......... 0x81C99000
ERROR: LAN91CInit: Network Chip not found at 0xba700300
ERROR: KITL call to pfnInit failed
ERROR: OALKitlInit: KitlInit failed
======+BSPPowerOffInit(): After setting PSLR register==dummyRead 0xcc500000
Error Reporting Memory Reserved, dump size = 00020000
Setting up softlog at 0x87fdc000 for 0x800 entries
Booting Windows CE version 6.00 for (ARM)
&pTOC = 81ce7c1c, pTOC = 81c802bc, pTOC->ulRamFree = 81cec000, MemForPT = 00001000
Old or invalid version stamp in kernel structures - starting clean!
Configuring: Primary pages: 25313, Secondary pages: 0, Filesystem pages = 12656
cSections1=1
IRQ_GPIO0_ETHERNET event .
-BSPIntrActiveIrq(67)
IRQ_GPIO0_PCMCIA_S0detect.
-BSPIntrActiveIrq(74)
参考别人的正确的调试信息,出来“Old or invalid version stamp in kernel structures - starting clean!”之后应该有“Booting kernel with clean memory configuration”的信息,但是我的却没有。直接跳到中断部分,执行一下就停止了。我追踪了一下,在private\winceos\coreos\nk\kernel\loader.c中,KernelFindMemory函数,
RETAILMSG(1,(L"cSections1=%d\r\n",cSections));
for (i = 0; i
fspages = CarveMem((LPBYTE)LogPtr->fsmemblk.startptr,LogPtr->fsmemblk.extension,LogPtr->fsmemblk.length,fspages);
}
RETAILMSG(1,(L"cSections2=%d\r\n",cSections));
我加了两个信息,结果只有第条信息显示,是carvemem函数执行有问题吗?这个函数又是做什么的呢?
请问这个大概是什么问题呢?非常感谢!
PX270 再 Platforam Build 6.0 里面有现成的 BSP 你按照它的结构添加驱动和修改好了,这样更方便。
我现在就是按照MainstoneIII的BSP来改的,问题是我编译MainstoneIII,除了config.bib和改成和我的bootloader一致以外,其他代码都没有修改,结果image还是运行不下去,信息如我6楼所写的一样。我在网上搜索了一下,很多人总结了一下在OEMinit部分死机的原因,
1.OEMAddressTable中内存映射错误 。我的和5.0一致,使用Mainstone默认的。
2.Config.bib中内存分配错误 。 我的和5.0一致,为了配合5.0的bootloader
3.中断配置问题 。
4.系统时钟配置问题 。
5.底层内存管理配置问题(MMU,caching等)
6.使用了未初始化的指针
3~6我使用的MainstoneIII默认代码,什么都没有改。
为什么还会这样呢?请大家务必帮帮忙啊!
我不是这样改的,是自己拿5.0的BSP改,用6.0下面的目录替换了以前那些Public的目录,一切都很正常
Jerry,
我也遇到了类似的问题,你能把最后如何也用5.0来做的说得详细点吗?谢谢。