5.0移植到6.0

参考:http://topic.csdn.net/u/20090202/16/D6E58288-E056-408F-B162-89CD9586C27B.html

http://topic.csdn.net/u/20090417/13/e021bf63-a070-4c65-bedd-18b39a73aefc.html

首先向大家问声新年好!
最近老板让我把2410上的wince5.0移植到wince6.0,研究了一下,觉得有两种方式可行,一是根据6.0的PQOAL架构,参考6.0下BSp目录结构,直接把5.0的BSP移植到6.0;二是先clone已有的DEVICEEMULATOR(这是wince6.0安装完成后就存在的BSP,是模拟2410的,正好和自己的板子一样,所以就想到这个方法),然后再把原来的5.0BSP移植过来;刚接触6.0移植方面的工作,所以不太熟悉,请移植过的同行们指点一下,先谢谢了!!
 
 

第一种不要轻易尝试,等你对ce6完全熟悉后再考虑。

第二种更方便,因为可以确保基本的bsp是可用的,然后的移植难度就小多了。

 

WINCE600/PLATFORM目录下的DEVICEEMULATOR BSP就是以2410移的,以此为参考clone一个BSP修改就可以了,可节省很大工作量。

 

 

经过大概一周时间,终于只有驱动部分没有搞定了,有几个驱动一直编译通不过. 请各位大侠指点一下,争取在本周内搞顶,立即揭贴,在线等啊,如果分数不够,可以再开个贴子!!
我的bsp是优龙5.0的bsp,符合5.0标准,现在的问题是
1. 编译Pwrbutton(matrixkb.dll)驱动时候,出现
BUILD: [01:0000000055:ERRORE] matrixkb.obj : error LNK2019: unresolved external symbol keybd_event referenced in function SendKey
BUILD: [01:0000000056:ERRORE] E:/WINCE600/platform/My2440A/target/ARMV4I/debug/matrixkb.dll : fatal error LNK1120: 1 unresolved externals
未找到解决办法,将其暂时注销

2.编译CS8900驱动的时候,找不系统库 ndis.lib
TARGETLIBS=                                                    /
  $(_PROJECTROOT)/cesysgen/sdk/lib/$(_CPUINDPATH)/ndis.lib      /
  $(_PROJECTROOT)/cesysgen/sdk/lib/$(_CPUINDPATH)/ntcompat.lib  /
  $(_PROJECTROOT)/cesysgen/sdk/lib/$(_CPUINDPATH)/coredll.lib /
  $(_PROJECTROOT)/cesysgen/oak/lib/$(_CPUINDPATH)/ceddk.lib  /

U1073: don't know how to make
  'E:/WINCE600/OSDesigns/OSDesign2/Wince600/My2440A_ARMV4I/cesysgen/sdk/lib/ARMV4I/debug/ndis.lib'
3.编译usb fuction驱动时候
BUILD: [01:0000001429:ERRORE] NMAKE :  U1073: don't know how to make 'E:/WINCE600/OSDesigns/OSDesign2/Wince600/My2440A_ARMV4I/cesysgen/oak/lib/ARMV4I/debug/ufnmdd.lib'
BUILD: [01:0000001431:ERRORE] NMAKE.EXE TargetLibFiles  -i -c BUILDMSG=Stop.  BUILDROOT=E:/WINCE600/PLATFORM/My2440A CLEANBUILD=1 LINKONLY=1 NOPASS0=1 failed - rc = 2

4.编译Battdrvr
BUILD: [01:0000000084:ERRORE] battdrvr_lib.lib(battdrvr.obj) : error LNK2019: unresolved external
symbol PowerPolicyNotify referenced in function BatteryThreadProc

 

先公布这段时间遇到的问题和解决方法:
1.编译eboot连接时候找不到函数__security_cooks 
    在加入$(_COMMONOAKROOT)/lib/$(_CPUINDPATH)/gsnull.lib /后,该问题解决。
2 . 全局变量CEProcessorType不能访问,包含头文件"NKarm.h"后 找不到该头文件。
  从init.c中去掉该变量
3. 找不到“OALKitlPowerOff referenced in function OEMPowerOff”和
  error LNK2019: unresolved external symbol OALKitlStart referenced in function OEMInit
  这些都是kitl部分的代码,将其从相关地方移去就可以了
4.在makeimg阶段产生
  regcomp: Error: InitRegistry FAILED on or near line 2160 of E:/WINCE600/OSDesigns/OSDesign2/RelDir/M
  y2440A_ARMV4I_Debug/reginit.ini
  将file/Intltrns 从其他地方拷贝这个文件夹到对应目录下。
  解决方法:修改paltform.reg中相关的行。在这里是因为 “ "FriendlyName"=LOC_DISPLAYNAME_COM1”中未被定义,
5. 编译Pwrbutton(matrixkb.dll)驱动时候,出现
BUILD: [01:0000000055:ERRORE] matrixkb.obj : error LNK2019: unresolved external symbol keybd_event referenced in function SendKey
BUILD: [01:0000000056:ERRORE] E:/WINCE600/platform/My2440A/target/ARMV4I/debug/matrixkb.dll : fatal error LNK1120: 1 unresolved externals

添加模块 core os->CEBASE ->shell and interface ->shell ->graph shell->stardard shell

6.编译CS8900驱动的时候,找不系统库 ndis.lib
TARGETLIBS=                                                    /
  $(_PROJECTROOT)/cesysgen/sdk/lib/$(_CPUINDPATH)/ndis.lib      /
  $(_PROJECTROOT)/cesysgen/sdk/lib/$(_CPUINDPATH)/ntcompat.lib  /
  $(_PROJECTROOT)/cesysgen/sdk/lib/$(_CPUINDPATH)/coredll.lib /
  $(_PROJECTROOT)/cesysgen/oak/lib/$(_CPUINDPATH)/ceddk.lib  /

U1073: don't know how to make
  'E:/WINCE600/OSDesigns/OSDesign2/Wince600/My2440A_ARMV4I/cesysgen/sdk/lib/ARMV4I/debug/ndis.lib'
模块未加进去:
    将core os->CEBASE ->shell and interface ->user interface ->network user interfacer 选上就可以解决问题了。
7.编译usb fuction驱动时候
BUILD: [01:0000001429:ERRORE] NMAKE :  U1073: don't know how to make '
E:/WINCE600/OSDesigns/OSDesign2/Wince600/My2440A_ARMV4I/cesysgen/oak/lib/ARMV4I/debug/ufnmdd.lib'
BUILD: [01:0000001431:ERRORE] NMAKE.EXE TargetLibFiles  -i -c BUILDMSG=Stop.
BUILDROOT=E:/WINCE600/PLATFORM/My2440A CLEANBUILD=1 LINKONLY=1 NOPASS0=1 failed - rc = 2
对应模块没有加进去:将 device drivers->usb function -> usb function client ->serial 这个选上就可以了

8.编译Battdrvr
BUILD: [01:0000000084:ERRORE] battdrvr_lib.lib(battdrvr.obj) : error LNK2019: unresolved external
symbol PowerPolicyNotify referenced in function BatteryThreadProc

添加模块 core os->CEBASE ->shell and interface ->shell ->graph shell->stardard shell

 

 

还有一个强人的移植笔记
一:OAL.H修改
1)在OAL.H中注释掉下面两个头文件
#include "oal_profiler.h"
#include "oal_nkxp.h"
2)在OAL.H中加入下面两个头文件
#include <nkexport.h>
#include "oemglobal.h"

二:watchdog.c 修改
注释掉下面的语句
extern void (* pfnOEMRefreshWatchDog) (void);  // function pointer to refresh watchdog
extern DWORD  dwOEMWatchDogPeriod;            // watchdog period
extern DWORD  dwNKWatchDogThreadPriority;      // watchdog thread priority, default is 100, set by kernel. OEM can adjust as desired

三:init.C修改
注释掉下面的语句
extern DWORD CEProcessorType;

四:SMDK2440A/Src/Common/Smartmedia/Dll中的sources文件修改
在SOURCELIBS语句段中原有的两个库的基础上增加下面的库
$(_COMMONOAKROOT)/lib/$(_CPUINDPATH)/fmdhooklib.lib /

五:显示驱动修改
修改内容较多,请把附件中的驱动复制过去就可以用了
本驱是是800×480的,如果你的屏参数不一样的话请自行修改

六:OAL-KERNEL修改
1:在/WINCE600/PLATFORM/SMDK2440A/Src目录下新建个Oal文件夹
2:将Src目录下的DIR文件中的Kernel语句改成Oal,使编译系统识别并编译Oal文件夹
3:将/WINCE600/PLATFORM/SMDK2440A/Src/Kernel目录下Oal文件夹复制到新建的Oal目录下,并更名为Oallib
4:将/WINCE600/PLATFORM/SMDK2440A/Src/Kernel目录下Kern文件夹复制到新建的Oal目录下,并更名为Oalexe
5:在Oal文件夹下新建一个dir文件
  将下面语句加入dir文件中
  DIRS=Oallib    /
  Oalexe    /
6:Oalexe修改
  1):在/WINCE600/PLATFORM/SMDK2440A/Src/Oal/Oalexe目录下的sources文件找到下面语句
    SOURCES=/
    kitl.c
    修改为
    NOLIBC=1
    SOURCES=
  2):打开/WINCE600/PLATFORM/SMDK2440A/Src/Oal/Oalexe目录下的sources文件
  在TARGETLIBS= /语句段中去掉下面的库
  $(_COMMONOAKROOT)/lib/$(_CPUDEPPATH)/nk.lib /
  并新增下面三个库
  $(_COMMONOAKROOT)/lib/$(_CPUDEPPATH)/nkstub.lib /
  $(_COMMONOAKROOT)/lib/$(_CPUDEPPATH)/nkldr.lib /
  $(_COMMONOAKROOT)/lib/$(_CPUDEPPATH)/oemmain.lib /
7:Oallib修改
  打开/WINCE600/PLATFORM/SMDK2440A/Src/Oal/Oallib目录下的sources文件
  找到下面几句,删掉
    kitl.c /
    kitlser.c /
    kitlusbser.c /
8:先编译一下,可能会出现g_oalLogMask报错,找出并修改
  1):debug.c文件修改
  找到VOID OEMInitDebugSerial()函数中的下面两句
  logMask = g_oalLogMask;
  g_oalLogMask = 0;
  将其修改为
  logMask = dpCurSettings.ulZoneMask;
  dpCurSettings.ulZoneMask = 0;
  找到VOID OEMInitDebugSerial()函数中末尾的这句
  g_oalLogMask = logMask;
  将其修改为
  dpCurSettings.ulZoneMask = logMask;
  2):Oal_log.h文件修改
  找到#define OALZONE(n)          (g_oalLogMask&(1 < <n))语句
  将其修改为下面两句
  extern DBGPARAM dpCurSettings;
  #define OALZONE(n)          (dpCurSettings.ulZoneMask&(1 < <n))
找到extern UINT32 g_oalLogMask;将其注释掉
9:OALIoCtlVBridge错误的修改
  1):找到Ioctl_tab.h中下面的语句,将其注释掉
    { IOCTL_VBRIDGE_802_3_MULTICAST_LIST,      0,  OALIoCtlVBridge            },
    { IOCTL_VBRIDGE_ADD_MAC,                    0,  OALIoCtlVBridge            },
    { IOCTL_VBRIDGE_CURRENT_PACKET_FILTER,      0,  OALIoCtlVBridge            },
    { IOCTL_VBRIDGE_GET_ETHERNET_MAC,          0,  OALIoCtlVBridge            },
    { IOCTL_VBRIDGE_GET_RX_PACKET,              0,  OALIoCtlVBridge            },
    { IOCTL_VBRIDGE_GET_RX_PACKET_COMPLETE,    0,  OALIoCtlVBridge            },
    { IOCTL_VBRIDGE_GET_TX_PACKET,              0,  OALIoCtlVBridge            },
    { IOCTL_VBRIDGE_GET_TX_PACKET_COMPLETE,    0,  OALIoCtlVBridge            },
    { IOCTL_VBRIDGE_SHARED_ETHERNET,            0,  OALIoCtlVBridge            },
    { IOCTL_VBRIDGE_WILD_CARD,                  0,  OALIoCtlVBridge            },
    { IOCTL_VBRIDGE_WILD_CARD_RESET_BUFFER,    0,  OALIoCtlVBridge            },
    { IOCTL_VBRIDGE_WILD_CARD_VB_INITIALIZED,  0,  OALIoCtlVBridge            },
  2):找到Oal_Ioctl_tab.h中下面的语句,将其注释掉
    { IOCTL_VBRIDGE_802_3_MULTICAST_LIST,      0,  OALIoCtlVBridge            },
    { IOCTL_VBRIDGE_ADD_MAC,                    0,  OALIoCtlVBridge            },
    { IOCTL_VBRIDGE_CURRENT_PACKET_FILTER,      0,  OALIoCtlVBridge            },
    { IOCTL_VBRIDGE_GET_ETHERNET_MAC,          0,  OALIoCtlVBridge            },
    { IOCTL_VBRIDGE_GET_RX_PACKET,              0,  OALIoCtlVBridge            },
    { IOCTL_VBRIDGE_GET_RX_PACKET_COMPLETE,    0,  OALIoCtlVBridge            },
    { IOCTL_VBRIDGE_GET_TX_PACKET,              0,  OALIoCtlVBridge            },
    { IOCTL_VBRIDGE_GET_TX_PACKET_COMPLETE,    0,  OALIoCtlVBridge            },
  { IOCTL_VBRIDGE_SHARED_ETHERNET,            0,  OALIoCtlVBridge            },
    { IOCTL_VBRIDGE_WILD_CARD,                  0,  OALIoCtlVBridge            },
    { IOCTL_VBRIDGE_WILD_CARD_RESET_BUFFER,    0,  OALIoCtlVBridge            },
    { IOCTL_VBRIDGE_WILD_CARD_VB_INITIALIZED,  0,  OALIoCtlVBridge            },

七:sc2440pdd.cpp修改
  找到下面语句将其注释掉,共有两处
  SetProcPermissions(pTransfer->dwCallerPermissions);

八:sdiocontrollerbase.cpp修改
  1):找到下面两句注释掉,他们是成对出现的,共有四处共八句
  SD_SET_PROC_PERMISSIONS_FROM_REQUEST( pRequest ) {     
  } SD_RESTORE_PROC_PERMISSIONS();

九:Dma.h与S3c2440a_dmatransfer.h的修改
  找到两个文件中的下面语句注释掉即可,每个文件中有一处
  #define DMA_TRANSFER_IN_PROGRESS            0x00100000

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值