PXF0248-WinCE_5.0_内核启动过程_

Shanghai Passiontech Tech, 021-51870017, sales@51Lm.cn

     
     
     

WinCE_5.0_内核启动过程_


型号: PXF0248


简介:/* Generator: eWebEditor */p.MsoNormal, li.MsoNormal, div.MsoNormal {margin:0cm;margin-bottom:.0001pt;text-align:justify;text-justify:inter-ideograph;font-size:10.5pt;font-family:"Times New Roman";}div.Section1 {page:Section1;}/* Generator: eWebEditor */p.MsoNormal, li.MsoNormal, div.MsoNormal {margin:0cm;margin-bottom:.0001pt;text-align:justify;text-justify:inter-ideograph;font-size:10.5pt;font-f...
品牌 葩星 葩星
产地中国
型号PXF0248
折扣其他电询

WinCE 5.0 内核启动过程 k‑m9l8  
本文简单描述一下wince5.0内核的启动流程,以mips cpu为例。msdn有一篇文章叫做Microsoft Windows CE 5.0 Board support Package,Boot Loader,and Kernel Startup Sequence非常不错,可以参考。


 91B:mK  
1. startup.首先,内核最先执行的代码位于oal当中,叫做startup,这段代码由微软留给开发者定制。当然,各个参考bsp里面都有现成的代码,开发者只需在此基础上改动。在startup()的末尾,会跳转到kernelstart函数。 $,.7MpZ  
2. kernelstart.
位于WINCEROOT\Private\winceos\coreos\nk\kernel\mips\startup.s 这里面是汇编代码。是所有的mips开发板都要执行的操作。所以这里面会根据不同cpu类型作判断。虽然是汇编代码,好在里面还是有不少注释,通过这些注释,可以看出它里面主要在干什么。 !W
+Vbw  
3. KernelRelocate. kernelstart
在完成一些必要的初始化之后,会调用KernelRelocate函数,这是一个比较重要的函数,位于WINCEROOT\Private\winceos\coreos\nk\kernel\loader.c. 它会把kernel用到的数据copyram里面。具体的功能msdn里面有解释。 这里的ram就是在config.bib里面指定的具有ram属性的存储区域,不是ramimage. kernelRelocatepToc为参数,那么pToc的值从何而来呢?即便你搜索完所有的文件也找不到在那里pToc被赋值。因为pToc是在makeimage阶段被romimage.exe赋值的,也就是说pToc并不是在代码中被赋值的,是由外力(romimage.exe)改动nk.bin的内容赋值的。 8@CgF)9,  
4.MIPSInit. KernelRelocate
处理完成之后,MIPSInit会被调用。位于WINCEROOT\Private\winceos\coreos\nk\kernel\mips\mdsched.c.这里是通用的mips的处理,其中会调用oal当中的OEMInitDebugSerial去初始化调试用的串口。 arDG]r@­p  
5.OEMInit.
接下来就是大名鼎鼎的OEMInit了。这个函数由开发者定制。是c语言的。由上面的分析我们知道,在进入OEMInit的时候,串口已经初始化完毕,所以现在我们已经可以通过串口打印出一些调试信息了。而在此之前,我们只能通过led的方式作一些简单的显示。 YjloW8P  
6.KernelFindMemory.
位于WINCEROOT\Private\winceos\coreos\nk\kernel\loader.c p
: $DER
 
OEMInit
返回之后调用该函数。这个函数主要是把ram划分为两部分:object store和应用程序可以使用的部分。object store就是用于存贮winceram file system的,例如开机以后我们看到的\windows目录就是位于ram file system. -R'j~h}d  
7.KernelInit.
位于WINCEROOT\Private\winceos\coreos\nk\kernel\kwin32.c $o`RjT&u  
这部分跟cpu无关,是kernel要完成自己的初始化。至此,kernel得初始化全部完成,可以开始线程调度。 .WV#j>/:+s  
   
还有一点需要说明的时,kernel在完成初始化之后,会以IOCTL_HAL_POSTINIT为参数调用OEMIoControl,所以我们可以在这里打印出一句话表明kernel已经初始化完成。 4m'w@ssZG  
除了kernel本身(nk.exe)之外,第一个被创建的进程是谁呢,对,就是文件系统,filesys.exe. n
U-7d5
 
虽然他不是kernel本身的一部分,但是如果没有文件系统,wince也是玩不转的,注册表的初始化就是由文件系统来完成。

免责声明/版权申明 Passiontech

所有文章为网上搜集或私下交流学习之用,任何涉及商业盈利目的均不得使用,否则产生的一切后果由您自己承担!

本站仅仅提供一个观摩学习的环境,将不对任何资源负法律责任。所有资源请在下载后24小时内删除。

若无意中侵犯到您的版权利益,请来信联系我们,我们会在收到信息三天内给予处理!

 

 


url: http://www.51lm.cn/p/templates/cn/show.php?cid=905&aid=248

 

电话400-878-1895, 传真:021-51561359 邮箱:sales@51LM.cn
sales@51LM.cn 上海徐汇区斜土路2601号嘉汇广场T1-11B