文章导读
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)了解更多内容。
——陈景序 敬上
