WINCE 启动OEMInit分析

发现问题:

      YC的BSP,WINCE启动开始输出如下信息:

Windows CE Kernel for ARM (Thumb Enabled) Built on Feb  8 2007 at 23:36:51
ProcessorType=0920  Revision=0
sp_abt=ffff5000 sp_irq=ffff2800 sp_undef=ffffc800 OEMAddressTable = 8c2013bc

Windows CE Firmware Init
INFO: Initializing system interrupts...
INFO: Initializing system clock(s)...
INFO: Initializing driver globals area...
LCD OUTPUT MODE 800*480.
OEMInit Done...

 

在smdk2440/KERNEL/HAL/CFW.C文件里发现

void OEMInit() 
{
 volatile IOPreg *s2440IOP = (IOPreg *)IOP_BASE;

 // Instead of calling OEMWriteDebugString directly, call through exported
 // function pointer.  This will allow these messages to be seen if debug
 // message output is redirected to Ethernet or the parallel port.  Otherwise,
 // lpWriteDebugStringFunc == OEMWriteDebugString.
 lpWriteDebugStringFunc(TEXT("/nWindows CE Firmware Init/r/n"));


#ifdef MODULE_CERTIFY

 pOEMLoadInit   = OEMLoadInit;
 pOEMLoadModule = OEMLoadModule;

 InitPubKey(g_bSignPublicKeyBlob,sizeof(g_bSignPublicKeyBlob));
#endif


    idleconv = 1;

 // Initialize interrupts.
 //
    lpWriteDebugStringFunc(TEXT("INFO: Initializing system interrupts.../r/n"));
 OEMInitInterrupts();


    lpWriteDebugStringFunc(TEXT("INFO: Initializing system clock(s).../r/n"));
    InitClock();

    // Initialize driver globals area.
 //
    lpWriteDebugStringFunc(TEXT("INFO: Initializing driver globals area.../r/n"));
    memset((PVOID)DRIVER_GLOBALS_ZEROINIT_START, 0, DRIVER_GLOBALS_ZEROINIT_SIZE);

 

lpWriteDebugStringFunc(TEXT("OEMInit Done.../r/n"));

 

分析问题:

      操作系统内核在启动之前需要初始化硬件,包括中断,时钟,LCD等等,显然硬件的初始化时靠首先调用OEMInit() 函数来实现的。

      在调用OEMInit()这个函数的时候,操作系统显然没有启动,只是在做启动前的硬件初始化,串口输出打印是靠lpWriteDebugStringFunc()实现的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值