wince4.2到5.0(一)

wince4.2到5.0(一)

两天时间将系统从4.2移植到5.0。主要是驱动程序要做改动,幸好有4.2的基础,还算顺利,现在调通了屏的驱动、网卡驱动、bootloader,主要还差个键盘驱动。

5.0 相对于4.2的BSP部份目录结构做了较大的改动。网上也有基出4.2目录的bsp下载,据说是可以用的。但我没用,我是基于周立功的5.0bsp进行修 改的,此bsp用dm9000代替cs8900的驱动并且增加了一些无用的驱动,如can,gpio等。本来我是想自已做一个全新的2410bsp,但是 发现工作量太大。暂时放弃,等现在用的完全调通后,再进行重新构造一个全新的bsp.

1.wince5.0的安装
须要将platform builder 5.0 的iso文件解压至硬盘目录内,再进行安装,并且须要dotnet的支持,是1.1的版本。安装包内函有版本的安装文件。

2.将pb5自带的smdk2410bsp备份后,导入周立功的zy2410bsp。新建一个工程,接下来的首要工作是对语言支持的修改,默认使用的是英文,将中文选上后,可以将其它不用的语言全部不选,以减小nk.bin文件的大小。此外设置在setting菜单中。

3.eboot.
我 还是使用的是4.2的eboot,因为我简单对比了两个版本的eboot,发现并无太大差异,为了减少移植时间,就用了4.2的版本,这样我可以继续使用 xiaoyunsoftBootLoader来启动。我在对比的过程中发现了一些原来没有仔细研究的细节:如果nk.bin文件过小,会导致无法烧录到 flash中。
那具体小到多少呢,看一下代码,在eboot的main.c文件中的OEMVerifyMemory函数中:
// Is it a ram image?
else if ((dwStartAddr >= ROM_RAMIMAGE_START) &&
((dwStartAddr + dwLength - 1) < (ROM_RAMIMAGE_START + ROM_RAMIMAGE_SIZE)))
{
RETAILMSG(1, (TEXT("Downloading RAM image/r/n")));
g_ImageType = IMAGE_TYPE_RAMIMAGE;
return TRUE;
}

// HACKHACK: get around MXIP images with funky addresses
g_ImageType = IMAGE_TYPE_RAMIMAGE|IMAGE_TYPE_BINFS;
RETAILMSG(1, (TEXT("*** Downloading UNKNOWN image type ***/r/n")));
return TRUE;

注 意g_ImageType这个变量在这里很重要,如果需要在下载完成后烧写到flash中,必须使这个变量有IMAGE_TYPE_BINFS属性。因为 在OEMLanuch函数中会对这个值进行检查。具体可以查看eboot的代码,eboot的流程比较易懂。花点时间可窥大概。

真希望有时间可以做个eboot流程的代码注解。

4.lcd display的驱动
运 气比较好,在没有更改bsp相关lcd驱动代码下,正常点亮了屏,也正常工作。此bsp中的相关代码是驱动640*480的屏,而我手上的屏刚好也是此分 辩率。驱动参数也能工作。只是感觉有点卡。这里的驱动与4.2下的不太一样,4.2下的bsp,在内核初始化的时候,也就是OEMInit()函数中会调 用InitDisplay()函数对lcd相关寄存器进行赋值初始化,但是在5.0的bsp中,相关的初始化代码是放在display驱动代码中的。这里 没有太大的花头,修改好屏对应的参数就行了。

5.网卡
由于我板子用的是cs8900芯片,而5.0的bsp里带的是dm9000 芯片,而且没有源码。这样我就需要完全移植到5.0。4.2与5.0的网卡驱动程序使用的模型应该是一样的,这样我就把cs8900在4.2的下代码直接 拷贝至5.0下。进行相应修改(只需要将4.2bsp里的s2410.h文件拷过来,后更改8900目录下的source文件,对s2410.h的位置进 行说明),即可编译通过,只是编译后的目标文件暂时为lib,需要转换成dll文件。4.2下是使用nmake命令,但前提对于编译环境进行过设置,也就 是将cs8900加入。5.0下我暂时没有找到方法,为了减小不必要的额外时间(明后天公司放假),我把4.2下编译好的cs8900.dll直接拿过来 用了。

然后修改platform.bib文件,使nk.bin包函cs8900.dll,再修改相应的注册表信息,烧写后发现系统能找到 8900网卡,但是网卡不能正常工作。开始是以为mac地址没有设置正确,因为从串口输出的信息看,只有一条说是mac地址错误的关于网卡的信息。然后查 找原因,发现是启动kitl时输出的信息,目前我暂时不打算用kitl,所以只能继续找原因。查找到感觉是中断的问题,我用的是eint11中断,原来的 是eint9中断。然后找中断初始化的代码,发现中断初始化的一些代码跟4.2下的完全不一样。

4.2下的中断相关代码位于bsp下kernel目录内的cfw.c与armint.c文件中。主要有OEMInterruptHandler,OEMInterruptEnable。。。等函数。前者是isr,后者是配合前者的一些铺助函数。
在 4.2中,这些函数会对传进来的参数(当前发生的中断号)进行分别处理。比如OEMInterruptHandler函数会专门判断当前是否是网卡中断, 如果是,则返回SYSINTR_ETHER,告诉系统产生了网卡中断。所以这些函数会显得很冗杂,但是一目了然。很容易就能找到你想要的中断处理相关代 码。

然而,在5.0中,OEMInterruptHandler函数位于wince500/platform/common /...samsung/2410xx/irq.c文件中,他们都没有专门为哪个中断进行判断,都是统一代码,根据用户注册的中断号进行动态处理中断行 为。也有可以进行静态映射的中断操作,代码位于5.0bsp/src/kernel/oal/intr.c文件的BSPIntrInit()函数中,我们 的cs8900中断也是须要在这里更改硬件cpu中断号与逻辑中断SYSINTR_ETHERNET的对应。
// Add static mapping for Built-In OHCI
OALIntrStaticTranslate(SYSINTR_OHCI, IRQ_USBH);
OALIntrStaticTranslate(SYSINTR_ETHERNET, IRQ_EINT0);//将这个IRQ_EINT0改成IRQ_EINT11,注意这里的SYSINTR_ETHERNET的值定义在 INC/bsp_cfg.h中,为0x16,此值需要用来修改注册表信息。


由于我没有带电脑回来,暂时无法贴上5.0的中断处理代码。回公司后补上。

改了网卡的中断静态映射后,需要更改相关注册表信息,可以参考5.0下dm9000.reg格式与4.2下platform.reg,注意有个关于中断号的键值要改成0x16,也就是SYSINTR_ETHERNET的实际值。烧写后网卡正常工作。

6.需要继续的工作:
1>5.0下的中断流程搞清楚。
2>网卡将lib转成dll
3>实现注册表永久保存与另建空白分区以供使用。
4>键盘驱动
5>kitl相关

6>wince6.0的移植

我估计以上5条至少得花半个月的时间才能弄清楚,只是现在事情太多,怕是没时间继续深入研究了。4.2的bsp看来一时半会也不可能不用。linux2.6马上要去用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值