本文簡單描述一下wince5.0核心的啟動流程,以mips cpu為例。msdn有一篇文章叫做microsoft windows ce 5.0 board support package,boot loader,and kernel startup sequence非常不錯,可以參考。
1. startup.首先,核心最先執行的**位於oal當中,叫做startup,這段**由微軟留給開發者定製。當然,各個參考bsp裡面都有現成的**,開發者只需在此基礎上改動。在startup()的末尾,會跳轉到kernelstart函式。
2. kernelstart. 位於winceroot/private/winceos/coreos/nk/kernel/mips/startup.s 這裡面是彙編**。是所有的mips開發板都要執行的操作。所以這裡面會根據不同cpu型別作判斷。雖然是彙編**,好在裡面還是有不少注釋,通過這些注釋,可以看出它裡面主要在幹什麼。
3. kernelrelocate. kernelstart在完成一些必要的初始化之後,會呼叫kernelrelocate函式,這是乙個比較重要的函式,位於winceroot/private/winceos/coreos/nk/kernel/loader.c. 它會把kernel用到的資料copy的ram裡面。具體的功能msdn裡面有解釋。 這裡的ram就是在config.bib裡面指定的具有ram屬性的儲存區域,不是ramimage. kernelrelocate以ptoc為引數,那麼ptoc的值從何而來呢?即便你搜尋完所有的檔案也找不到在那裡ptoc被賦值。因為ptoc是在makeimage階段被romimage.exe賦值的,也就是說ptoc並不是在**中被賦值的,是由外力(romimage.exe)改動nk.bin的內容賦值的。
4。mipsinit. kernelrelocate處理完成之後,mipsinit會被呼叫。位於winceroot/private/winceos/coreos/nk/kernel/mips/mdsched.c.這裡是通用的mips的處理,其中會呼叫oal當中的oeminitdebugserial去初始化除錯用的串列埠。
5。oeminit。接下來就是大名鼎鼎的oeminit了。這個函式由開發者定製。是c語言的。由上面的分析我們知道,在進入oeminit的時候,串列埠已經初始化完畢,所以現在我們已經可以通過串列埠列印出一些除錯資訊了。而在此之前,我們只能通過led的方式作一些簡單的顯示。
6。kernelfindmemory. 位於winceroot/private/winceos/coreos/nk/kernel/loader.c
oeminit返回之後呼叫該函式。這個函式主要是把ram劃分為兩部分:object store和應用程式可以使用的部分。object store就是用於存貯wince的ram file system的,例如開機以後我們看到的/windows目錄就是位於ram file system.
7。kernelinit. 位於winceroot/private/winceos/coreos/nk/kernel/kwin32.c
這部分跟cpu無關,是kernel要完成自己的初始化。至此,kernel得初始化全部完成,可以開始執行緒排程。
還有一點需要說明的時,kernel在完成初始化之後,會以ioctl_hal_postinit為引數呼叫oemiocontrol,所以我們可以在這裡列印出一句話表明kernel已經初始化完成。
除了kernel本身(nk.exe)之外,第乙個被建立的程序是誰呢,對,就是檔案系統,filesys.exe.
雖然他不是kernel本身的一部分,但是如果沒有檔案系統,wince也是玩不轉的,登錄檔的初始化就是由檔案系統來完成。
WinCE 5 0 核心啟動過程 中文版
標籤 wince microsoft 彙編object file windows 2009 07 08 09 58 837人閱讀收藏 舉報 arm9 24 wince 5.0 核心啟動過程 中文版 2008 08 23 11 19 分類 oal 字型大小 大中 小 wince 5.0 核心啟動過程 ...
wince 5 0 核心啟動順序 ARM
kernel startup sequence startup kernelstartup arminit oeminitdebugserial oeminit kernelinit heapinit initmemorypool procinit schedinit firstschedule s...
wince5 0核心的啟動流程(MIPS為例)
本文簡單描述一下wince5.0核心的啟動流程,以mips cpu為例。msdn有一篇文章叫做microsoft windows ce 5.0 board support package,boot loader,and kernel startup sequence非常不錯,可以參考。1.start...