wince4.2系统启动流程
原创
©著作权归作者所有:来自51CTO博客作者rightsoft的原创作品,请联系作者获取转载授权,否则将追究法律责任
在bootloader把nk放到ram的适当位置之后,会跳到其中去执行。
第一个程序文件(platform/xxx/kernel/hal/arm/fw.s)。首先也是做一些基本的设置操作,之后会走到KernelStart,这个函数也是在(private/winceos/coreos/nk/kernel/arm/armtrap.s)文件中实现。该函数主要处理流程如下: The OEM layer will setup any platform or CPU specific configuration that is; required for the kernel to have access to ROM and DRAM and jump here to start up; the system. Any processor specific cache or MMU initialization should be completed.; The MMU and caches should not enabled.; This routine will initialize the first-level page table based up the contents of; the MemoryMap array and enable the MMU and caches.; NOTE: Until the MMU is enabled, kernel symbolic addresses are not valid and must be; translated via the MemoryMap array to find the correct physical address.; Entry (r0) = pointer to MemoryMap array in physical memory; Exit returns if MemoryMap is invalid。接下来就是在虚拟地址空间的操作了(也是在armtrap.s中),主要的就是3个函数ARMInit;KernelInit;FirstSchedule。
ARMInit在private/winceos/coreos/nk/kernel/arm/madarm.c中实现。又KernelRelocate了一把(这是一个比较重要的函数,位于\Private\winceos\coreos\nk\kernel\loader.c. 它会把kernel用到的数据copy的ram里面。这里的ram就是在config.bib里面指定的具有ram属性的存储区域,不是ramp_w_picpath。kernelRelocate以pToc为参数,据说pToc是在makep_w_picpath阶段被romp_w_picpath.exe赋值的,也就是说pToc并不是在代码中被赋值的,是由外力(romp_w_picpath.exe)改动nk.bin的内容赋值的),初始化了调试串口(oal的OEMInitDebugSerial)等。在此之后的就是调用了OEMInit()。这个函数就非常熟悉了,在platform/xxx/kernel/hal/cfw.c文件中实现。主要完成映射IO_BASE,初始化display,并在其中操作framebuffer显示logo等操作。OEMInit之后是KernelFindMemory(位于WINCEROOT\Private\winceos\coreos\nk\kernel\loader.c),这个函数主要是把ram划分为两部分:object store和应用程序可以使用的部分。object store就是用于存贮wince的ram filesystem的,\windows目录就是位于ram file system。
KernelInit在private/winceos/coreos/nk/kernel/kwin32.c中实现。主要初始化heap,memory pool,process并为第一次调度做准备。这部分跟cpu无关,是kernel要完成自己的初始化。至此,kernel得初始化全部完成。kernel在完成初始化之后,会以IOCTL_HAL_POSTINIT为参数调用OEMIoControl。
FirstSchedule在private/winceos/coreos/nk/kernel/arm/armtrap.s中实现,第一次调度,进入相应的模式。我想这第一个调度的程序应该是kern.exe,然后就是传说中的filesys.exe,device.exe,gwes.exe等。
下一篇:虚拟地址匹配问题
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Android面试题之activity启动流程
Android面试题之activity启动流程总结
加载 初始化 Android 面试题 activity -
wince4.2下usb键盘
在调试usb键盘时,由于想的过于简单浪费了不少时间。
职场 键盘 usb 休闲 wince4.2 -
搞死人的wince4.2
靠,这两天尽是遇到怪事
职场 休闲 wince4.2 -
wince4.2内核热更新
当wince系统起来之后用应用程序来更新在flash中的nk.nb0(nk.bin)
职场 更新 内核 休闲 wince4.2 -
wince4.2内存管理理解
本文的平台基于arm,纯属个人理解,如有雷同纯属巧合,如有不当,请帮忙指出
职场 内存 管理 休闲 wince4.2 -
关于wince4.2(2410)自启动程序的奇怪问题
今天非常郁闷,碰到一个比较奇怪的问题,虽然解决了,但是不明白为什么会是这样的。
启动 职场 程序 休闲 wince4.2 -
wince4.2的中文输入法
终于将简体的中文输入法加到系统中去了
职场 输入法 中文 休闲 wince4.2 -
wince4.2访问局域网共享文件
项目要求能访问局域网上的pc机上的共享文件
局域网 共享 文件 休闲 wince4.2 -
中断代码结构比较之WinCE4.2 VS WinCE5.0
本文简单介绍下wince两个版本的中断系统的代码流程
代码 结构 休闲 WinCE4.2 WinCE5.0 -
wince4.2 dm9000问题解决(2440)
修改太容易了,然而分析定位的这个过程却用了我两周的时间
问题 解决 休闲 wince4.2 dm9000