`
tibaloga
  • 浏览: 870503 次
文章分类
社区版块
存档分类
最新评论

Windows CE 6.0 启动过程分析

 
阅读更多

在理顺了上述文件的相互之间的关系之后,再来分析Windows CE 6.0的启动过程可能就比较容易啦。
1、Startup函数:
从Windows CE 6.0的帮助文档可以看出,WinCE6.0的启动只与oal.exe和kernel.dll有关,至于kitl.dll,只有将操作系统编译成具有 KITL功能时才用到。分析Windows CE 6.0的启动过程实际上找到编译oal.exe和kernel.dll的源码位置。
oal.exe的通过Startup函数完成硬件的初始化。Startup.s代码与该硬件平台的Bootloader启动代码共用,其中PreInit 函数主要完成将ARM处理器工作模式切换到管理员模式、同时关闭MMU,并检测系统启动原因,如果是热启动、即在该函数调用之前已经启动了 Bootloader程序,相当基本硬件初始化已经完成,则直接跳转到OALStartUp函数中;否则需要进行硬件中断屏蔽、内存、系统时钟频率、电源管理等硬件的基本初始化过程。
2、OALStartUp函数:
在系统硬件初始化完毕之后,Startup调用OALStartUp函数,OALStartUp函数主要完成将OEMAddressTable表传递给内核;然后调用KernelStart函数跳转到内核 OEMAddressTable表的主要作用表的每一个入口都定义了一个内存中的物理位置、内存的大小以及映射这物理地址的静态虚拟地址;
◆静态虚拟内存地址被定义在缓冲存储器的范围之内;
◆内核可以创建非缓冲的内存地址指向到相同的物理地址;
◆对于同一物理地址,既有一个缓冲的虚拟内存地址,也有一个非缓冲的虚拟内存地址;
◆OEMAddressTable最后必须以0结尾;
◆对于MIPS和SHx类型的CPU,物理地址与虚拟地址的映射由CPU完成,无需创建OEMAddressTable;
3、KernelStart函数主要作用:
◆完成OEMAddressTable表中的物理地址到虚拟地址和虚拟地址到物理地址之间的映射;
◆对存储器页表和内核参数区存储空间(RAM或DRAM)进行清零处理。
◆读出CPU的ID号,内核需要根据该ID决定ARM的MMU处理,因为ARMV6和ARMV6之前的ARM处理器的MMU处理过程有所区别;
◆设置并开启MMU和Cache,因为在Startup函数关闭MMU和Cache;
◆设置ARM处理器工作模式的SP指针,ARM处理器共用7种不同的工作模式(USER、FIQ、IRQ、Supervisor、Abort、 Undefined、System),除用户模式(USER)和系统模式(System)之外,其他5种工作模式都有具有特定的SP指针寄存器(ARM处理器称其为影子寄存器);
◆读取内核启动所需要的KDataStruct结构体;
◆调用ARMInit函数重新定位Windows CE内核参数pTOC和初始化OEMInitGlobals全局变量;
◆利用mov pc, r12指令跳转到kernel.dll的入口位置,即NKStartup函数中。
5、NKStartup函数:
硬件平台初始化完成后,oal.exe的启动任务基本完成,余下的启动工作由内核相关且独立于内核的OAL层实现体kernel.dll接管。kernel.dll主要作用:
◆从结构体参数KDataStruct * pKData提取内核启动时所必须的全局变量,同时初始化内核全局变量;
◆定位对Windows CE 6.0特有的OEMGLOBAL结构体的初始化函数OEMInitGlobals地址,该结构体构建了内核和OAL层之间进行通信的桥梁。在 OEMGLOBAL结构体定义了OAL层所必须的函数,该结构体在oemglobal.c文件中被初始化,并被编译在OEMMain.lib和 OEMMain_StaticKITL.lib两个库中,如果OAL链接这两个库,则必须要有该结构体中函数实现体;
◆通过调用ARMSetup设置物理地址和非缓冲的虚拟内存地址的映射、ARM中断向量以及内核模式所需要的堆栈。
◆调用OEMInitDebugSerial函数初始化调试串口;
◆调用OEMInit进行平台初始化;
需要注意的时,NKStartup函数调用OEMInitDebugSerial和OEMInit函数的过程与Windows CE 6.0之前的版本完全不同,这是因为在Windows CE 6.0以前的版本中,由于内核(kernel)、OAL和KITL编译在一个可执行的文件中,它们之间的共享变量只需简单利用extern关键字申明便可相互之间进行访问,而在Windows CE 6.0中,由于内核(kernel)、OAL和KITL被编译成不同的可执行文件,变量之间的相互访问无法使用extern关键字实现共享,即内核无法使用extern DWORD varX方法访问OAL层的变量varX,当然OAL层的实现体同样无法通过同样的方式访问内核变量。为实现内核和OAL访问共享信息,Windows CE 6.0定义了OEMGLOBAL和GLOBAL两个结构体。
在 Windows CE 6.0的内核启动时,OS找到OAL的入口位置,然后调用入口函数与全局块进行指针交换,这样内核才能使用OAL层中的信息,同样OAL层才能访问内核(kernel)导出的函数。
所以上述两个函数的调用实际上通过OEMGLOBAL结构体实现的。实际调用位置为$(_PRIVATEROOT)/winceos/coreos/nk /oemstub/oemstub.c中的OEMInitDebugSerial和OEMInit,这两个函数中通过OEMGLOBAL结构体指针访问 OAL层中的OEMInitDebugSerial和OEMInit。
调用KernelFindMemory()函数分割RAM区域,在Windows CE操作系统中,RAM空间主要分为存储内存和程序内存,存储内存主要为文件的存储空间,包括内核文件和复制到系统中所有目标文件,程序内存为运行程序时所需要的存储空间。
◆KernelStart ()启动内核。
6、KernelSstart函数:
这里的KernelStart函数与前面的KernelStart函数的属于两个完全不同的函数,NKStartup函数中调用的KernelStart 函数为$(_PRIVATEROOT)/WINCEOS/COREOS/NK/KERNEL/ARM/armtrap.s文件中的KernelStart 函数,主要完成调用内核初始化函数KernelInit,并跳转到操作系统的第一个启动的任务。
7、KernelInit函数:
Windows CE 6.0的内核初始化函数同其他版本的内核初始化函数基本相近,主要完成在启动第一个线程前对内核进行初始化,主要包括API函数集初始化、堆的初始化、初始化内存池、进程初始化、线程初始化和文件映射初始化等操作。
8、FirstSchedule:
FirstSchedule函数为Windows CE操作系统启动过程中最后无条件跳转的一个函数,windows CE进行第一个调度,实际为一个空闲线程,因为windows CE系统还没有完成启动,只有当windows CE完全启动并进入稳定状态,然后启动文件系统filesys.dll,设备管理device.dll,窗体图像子系统gews.dll和shell程序 explore.exe.

分享到:
评论

相关推荐

    Windows CE6.0启动过程分析

    讲述windows CE6.0的启动过程,列举在启动过程中调用的函数,并对函数做详细的剖析。

    Windows CE 6.0嵌入式高级编程

    本书全面深入地介绍了Windows Embedded CE 6.0...项目开发部分主要介绍了瘦客户端应用程序、家庭自动化控制应用、RFID安全访问、机器人应用、Windows网络投影仪,以及CE 6.0设备的构建和部署过程。... 备注:英文版的

    windows ce 6.0 截图软件2

    1.该工具可以在PC端快速的启动Windows CE上面的程序(确保你的电脑上已经装了同步软件ActiveSync,Win7的同步软件是Windows Mobile) 2. 在电脑上打开WceUiLauncher,浏览找到要启动的windows CE的应用程序,然后点...

    Windows CE 6.0嵌入式高级编程(中文版)

    第20章 部署CE6.0设备 20.1 Windows网络投影仪 20.2 Windows网络投影仪OS设计 20.3 Windows网络投影仪的使用 20.4 小结 附录A Windows Embedded CE资源 附录B 安装和软件 附录C 示例应用程序和OS设计项目

    Windows Embedded从入门到精通系列课程(46) Windows CE 6.0的BootLoader的启动流程.part2.rar

    Windows Embedded从入门到精通系列课程(46) Windows CE 6.0的BootLoader的启动流程.part2.rar

    windows ce 6.0 截图工具

    windows ce 6.0 截图工具,该工具可以在PC端快速的启动Windows CE上面的程序(确保你的电脑上已经装了同步软件ActiveSync,Win7的同步软件是Windows Mobile)

    Windows Embedded从入门到精通系列课程(46) Windows CE 6.0的BootLoader的启动流程.part1.rar

    Windows Embedded从入门到精通系列课程(46) Windows CE 6.0的BootLoader的启动流程.part1.rar

    Windows Embedded CE6.0 考试准备指南[CN]

    在本准备指南(用于 Microsoft 认证技术专家 (TS) 考试 70-571 的“Windows ...我们希望这本书能够加速您的考前准备,就像 Windows Embedded CE 6.0 加 速了您的开发过程一样。Microsoft 开发团队在此给予最大的祝福!

    微软推出Windows Embedded CE 6.0 R2操作系统

    微软公司在“2007年嵌入式技术研讨会(Embedded Technology 2007)”上宣布推出其Windows Embedded CE 6.0 R2操作系统,旨在帮助开发商和设备制造商快速创建智能、连接、硬实时的商用和家用电子设备。凭借针对设备应用...

    基于Windows CE 6.0 LOGO的实现与优化

    为解决在Windows CE系统启动过程中的黑屏现象,提出了一种基于Windows CE 6.0下Bootloader中添加启动画面的设计方法,避免在系统启动时间内显示屏幕上无画面输出,减小了在实际产品启动过程中的时延造成客户的视觉...

    Windows Embedded CE 6.0 Fundamentals

    MS发布的介绍WinCE6.0开发技术资料,包括开发环境,编译环境,驱动开发,系统启动过程等。

    WindowsEmbedded CE 6.0 R2操作系统(微软)

    微软公司在“2007年嵌入式技术研讨会(Embedded Technology 2007)”上宣布推出其Windows Embedded CE 6.0 R2操作系统,旨在帮助开发商和设备制造商快速创建智能、连接、硬实时的商用和家用电子设备。凭借针对设备...

    车机导航系统WinCE6.0下Wceload工具软件

    用于安装CAB文件,WinCE6.0下...1.修改注册表文件wceload.reg中wceload.exe的路径,默认为\\Windows\\目录,可以修改为\\NAND\\或者\\SDMMC\\等目录。 2.使用WinCE驱动调试助手DM2.9.exe,导入注册表文件 3.双击cab文件

    wince6.0上的.net framework 3.5安装包

    一般wince系统经过裁剪后,不一定支持.netframwork,即使支持也很可能是低版本的,要自已定制.netframework3.5的系统非常麻烦,经研究发现,可以在wince6系统启动以后手动安装....只是每次wince6启动以后都要安装一下。

    微软WinCE6.0认证技术专家(MCTS)中文资料

    欢迎阅读 Microsoft Windows Embedded CE 6.0 考试准备指南。该准备指南的目 的是帮助 Windows Embedded CE 开发人员准备 Microsoft Certified Technology Specialist ( 微软认证技术专家) (MCTS) Windows Embedded ...

    Windows CE 6.0 Multi-bin的设计与实现

    Windows CE操作系统存在启动速度慢的现象。为此在解析系统镜像文件和研究镜像文件下载函数的基础上,设计了一种在Windows CE系统Bootloader中实现Multi-bin的方法。通过调用Bootloader中的BootPart支持库的接口函数...

    嵌入式系统/ARM技术中的Windows Embedded CE 6.0 R2操作系统(微软)

    微软公司在“2007年嵌入式技术研讨会(Embedded Technology 2007)”上宣布推出Windows Embedded CE 6.0 R2操作系统,旨在帮助开发商和设备制造商快速创建智能、连接、硬实时的商用和家用电子设备。...

    wince6.0模拟器|wince软件6.0模拟器下载(附使用方法) - 软件学堂

    wince6.0模拟器是一个车载式PC模拟器,英文全称为:windows embedded ce6.0,主要是使用在3D地图及软件模拟方面,像车载凯立德导航就可以完全的在wince6.0模拟器中使用。另外它集成了GPS模拟器(Virace GPS),可以...

    WINCE6.0中文版模拟器带sqlserverce三种分辨率

    开发wince程序时,如果手上没有设备,可以用wince6.0模拟器...如果没有弹出windows mobile设备中心,请先找一个wince6.0设备连接上windows,windows会自动安装驱动并安装好windows mobile设备中心程序,才能正常使用。

Global site tag (gtag.js) - Google Analytics