您的位置:首页 > 其它

wince 5.0 内核启动顺序(ARM)

2013-11-01 22:46 453 查看




上表是基于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)

位于 %_WINCEROOT%\Private\Winceos\Coreos\Nk\Kernel\ARM目录下

这个函数是内核的Main Entry 点.

3.
ARMInit() -> Mdarm.c (Private)

位于 %_WINCEROOT%\Private\Winceos\Coreos\Nk\Kernel\ARM目录下
这个函数调用4,5来对Main Arm 进行初始化动作.

4.
OEMInitDebugSerial() -> Mdarm.c(Private)

位置同上.
初始化串口,调用BSP包中的串口函数(由OEM定制的部分).

5.
OEMInit() -> Init.c
%_WINCEROOT%\Platform\<HardwarePlatform Name>\Src\Kernel\OAL
这个位于我们BSP开发包中,由OEM自行定制,不用多说,做过OAL开发的都知道.

6.KernelInit() -> Kwin32.c(Private)
%_WINCEROOT%\Private\Winceos\Coreos\Nk\Kernel目录下
该函数调用7,8,9,10函数对内进行初始化动作.

7.
HeapInit() -> Heap.c(Private)
%_WINCEROOT%\Private\Winceos\Coreos\Nk\Kernel目录下
初始化内核堆.

8.
InitMemoryPool() -> Physmem.c(Private)
%_WINCEROOT%\Private\Winceos\Coreos\Nk\Kernel目录下
初始化内核内存池

9.
ProcInit() -> Schedule.c(Private)
%_WINCEROOT\Private\Winceos\Coreos\Nk\Kernel
初始化内核进程.

10.
SchedInit() -> Schedule.c(Private)
_WINCEROOT\Private\Winceos\Coreos\Nk\Kernel
初始化调度管理器(scheduler),创建SystemStatupFunc线程.

11.
FirstSchedule() -> Schedule.c(Private)
%_WINCEROOT\Private\Winceos\Coreos\Nk\Kernel
启动调度管理器(scheduler), 调用SystemStartupFunc(),IOCTL_HAL_POSTINIT

12.
SystemStartupFunc() -> Schedule.c(Private)
%_WINCEROOT\Private\Winceos\Coreos\Nk\Kernel
当所有内核需要的初始化动作完成之后并且当系统准备启动和运行内核线程,SystemStartupFunc被调用.SystemStartupFunc以IOCTL_HAL_POSTINIT为参数调用OEMIoControl,OEMIoControl,

13. OEMIoControl,这个我也不多说了,由我们OEM定制.
以上为wince 基于ARM cpu 的内核启动的过程.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: