上表是基于ARM 的wince内核启动顺序.
粗体字表示OEM 需要定制的部分.
1. Startup() ->Startup.s
位于%_WINCEROOT%\Platform\<Hardware PlatformName>\Src\Kernel\OAL 目录下
这个函数是bootloader调转到run-time镜像后最先执行的代码,位于我们的BSP开发包中,由OEM定制.程序最后启动KernelStart().
2. KernelStart() -> Armtrap.s(Private)
位于
这个函数是内核的Main Entry 点.
位于 %_WINCEROOT%\Private\Winceos\Coreos\Nk\Kernel\ARM目录下
这个函数调用4,5来对Main Arm 进行初始化动作.
位置同上.
初始化串口,调用BSP包中的串口函数(由OEM定制的部分).
%_WINCEROOT%\Platform\<HardwarePlatform Name>\Src\Kernel\OAL
这个位于我们BSP开发包中,由OEM自行定制,不用多说,做过OAL开发的都知道.
%_WINCEROOT%\Private\Winceos\Coreos\Nk\Kernel目录下
该函数调用7,8,9,10函数对内进行初始化动作.
初始化内核堆.
%_WINCEROOT%\Private\Winceos\Coreos\Nk\Kernel目录下
初始化内核内存池
%_WINCEROOT\Private\Winceos\Coreos\Nk\Kernel
初始化内核进程.
_WINCEROOT\Private\Winceos\Coreos\Nk\Kernel
初始化调度管理器(scheduler),创建SystemStatupFunc线程.
%_WINCEROOT\Private\Winceos\Coreos\Nk\Kernel
启动调度管理器(scheduler), 调用SystemStartupFunc(),IOCTL_HAL_POSTINIT
%_WINCEROOT\Private\Winceos\Coreos\Nk\Kernel
当所有内核需要的初始化动作完成之后并且当系统准备启动和运行内核线程,SystemStartupFunc被调用.SystemStartupFunc以IOCTL_HAL_POSTINIT为参数调用OEMIoControl,OEMIoControl,
以上为wince 基于ARM cpu 的内核启动的过程.