跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

Windows CE 5.0启动过程,你真的了解吗?

文章导读

Windows CE 5.0的启动过程对于深入了解这个操作系统至关重要。本文将详细解析WinCE 5.0的启动过程,帮助大家从源头上理解操作系统的运作。读完这篇文章,你将对Windows CE 5.0的启动有更深入的认识。

Windows CE 5.0启动过程解析

1. CPU加电,跳转到复位向量;

2. 执行引导程序Startup();OAL中的Startup();

  • 完成最小的CPU和硬件初始化;
  • 关闭中断、缓存(Cache)和内存管理单元(MMU);
  • 调用内核启动函数KernelStart

3. 执行KernelStart();

  • 初始化OEMAddressTable内容中第一级存储器页表;
  • 打开MMU和Cache;
  • 为每一种操作模式初始化堆栈;
  • 依次调用ARMInit、KernelInit、FirstSchedule

4. ARMInit()内核主要初始化函数,负责调用OEM提供的初始化函数;

  • 调用OEMDebugInit初始化调试串口;
  • 调用OEMInit初始化目标硬件平台;

5. KernelInit()封装了所有的内核初始化,是内核初始化的入口,通过调用不同的内核初始化函数初始化内核组件;

  • 堆栈初始化-HeapInit();
  • 内存池初始化-InitMemoryPool();
  • 内核进程初始化-ProcInit();
  • 初始化内核调度器-SchedInit();并创建SystemStartupFunc线程;

6. FirstSchedule函数启动调度器;

7. 内核将查找并运行第一个进程-FileSys.exe;

8. 运行设备管理器进程-Device.exe:

9. 运行图像子系统进程-GWES.exe;

10. 启动并运行定制的Shell应用程序;

stepldr流程

  • SetupCopySection(pTOC);
  • MMU_EnableICache()——使能ICache;
  • Port_Init()——GPIO端口初始化;
  • Uart_Init()——初始化UART(调试端口);
  • NF_Init()——初始化nand flash接口;
  • 将Image从flash拷贝到RAM;
  • ((PFN_IMAGE_LAUNCH)(LOAD_ADDRESS_PHYSICAL))()——跳转;

EBOOT工作流程

  • Main()调用BootloaderMain();
  • BootloaderMain()调用KernelRelocate();
  • OEMPlatformInit()平台初始化(时钟,驱动等);
  • OEMDebugInit()初始化调试端口(串口);
  • OEMPreDownload()初始化以太网,判断是否要下载;
  • OEMLaunch()启动操作系统;
  • DownloadImage()下载文件;

NK启动过程

  • startup.s(Src/kernel/oal/)中的SartUp函数;
  • armtrap.s(WINCE500/PRIVATE/WINCEOS/COREOS/NK/KERNEL/ARM/)中的KrnelStart函数;
  • mdarm.c(WINCE500/PRIVATE/WINCEOS/COREOS/NK/KERNEL/ARM/)中的ARMInit函数;
  • Kwin32.c(WINCE500/PRIVATE/WINCEOS/COREOS/NK/KERNEL/)中的KernelInit函数;
  • mdarm.c中的HandleException函数;

小结与拓展

本文详细解析了Windows CE 5.0的启动过程,从CPU加电到第一个进程的运行,每个步骤都进行了详细的阐述。希望这篇文章能够帮助你更好地理解Windows CE 5.0的启动原理。如果你对相关技术有更深入的兴趣,欢迎关注我们的网站「websoft网络软件专家」(www.phpwebsoft.com)了解更多内容。

——陈景序 敬上

相关文章