WinCE啟動順序解析_第1頁
WinCE啟動順序解析_第2頁
WinCE啟動順序解析_第3頁
WinCE啟動順序解析_第4頁
WinCE啟動順序解析_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、一、stepldrstepldr流程分為以下幾步。setupcopysection(ptoc) mmu_enableicache() 使能 icache port_init()gpio端口初始化uart_init()初始化 uart (調(diào)試端口)nf_init()初始化 nand flash接口將 image 從 flash拷貝到 ram (pfn_image_launch)(load_address_physical)()跳轉(zhuǎn)二、ebootmain()調(diào)用bootloadermain()調(diào)用kernelrelocate()將全局變量定位到ramoemplatforminit()平臺初始化(時

2、鐘,驅(qū)動等)oemdebuginit()初始化調(diào)試端口(串口)oempredownload()初始化以太網(wǎng),判斷是否要下載oemlaunch()啟動操作系統(tǒng)downloadimage()下載文件要下載1 eboot的工作流程從 eboot 目錄中的 startup.s中的 starup 函數(shù)開始。startup 函數(shù)需要完成的工作:把 cpu 設(shè)置為合適的運行狀態(tài)作(特權(quán)態(tài),supervisor mode ),這一狀態(tài)下可以沒有限制的訪問內(nèi)存和硬件。在 cpu 級別關(guān)閉所有中斷。確保 mmu 和 tlb都已經(jīng)關(guān)閉。使 cache和 write buffer失效。初始化內(nèi)存控制器。初始化其它的片

3、上設(shè)備,例如時鐘。只需要做最基本的初始化。設(shè)置棧指針,后面c語言執(zhí)行環(huán)境需要用到。設(shè)置并打開 mmu 進行物理和邏輯地址映射,并打開cache 。把 eboot的代碼復(fù)制到 ram 中,然后跳轉(zhuǎn)到 ram 中的 eboot 代碼。跳轉(zhuǎn)到 c語言的 main 函數(shù)。2 跳轉(zhuǎn)到 c語言的 main 函數(shù)后,有八個函數(shù)需要執(zhí)行。main.c() 中的五個函數(shù):main 函數(shù),oemdebuginit 函數(shù), oemplatforminit 函數(shù), oempredownload 函數(shù),oemlaunch 函數(shù)和blcommon.c () 中的三個函數(shù):bootloadermain 函數(shù), kernel

4、relocate 函數(shù), downloadimage 函數(shù)其中:kernelrelocate():把 boot loader 中的全局變量重定位到ram 中。由描述了整個 rom 的幾乎所有信息的結(jié)構(gòu)體的指針ptoc 決定如何移動數(shù)據(jù)、移動多少數(shù)據(jù)。oemdebuginit() :初始化調(diào)試輸出用的硬件端口,eboot 后面的代碼中就可以用 oemwritedebugstring() 等函數(shù)輸出調(diào)試信息。oemplatforminit():初始化目標板上的設(shè)備,主要有以下作用. initdisplay() lcd初始化并顯示一張圖片initusb() usb 初始化isr_init()usb

5、和 dma isr初始化,使能 dma 中斷bp_init 初始化 boot partition(flash )toc_read 、toc_init 確認 ptoc 信息有效在規(guī)定時間內(nèi)等待按鍵(空格或者回車)mainmenu 根據(jù)按鍵情況,決定是否打印選擇菜單,并等待選擇initethdevice根據(jù)情況初始化以太網(wǎng)控制器oempredownload() :完成以太網(wǎng)下載之前的一些準備工作,包括通過dhcp獲得 ip 地址、初始化 tftp服務(wù)等oalkitlcreatename為設(shè)備創(chuàng)建名字根據(jù)需要獲取 ip 地址和初始化 tftp downloadimage():用來從遠程開發(fā)機上下載操

6、作系統(tǒng)映像。oemlaunch() :跳轉(zhuǎn)到操作系統(tǒng)映像。首先, eboot會在這一步試圖把下載的映像寫入nand flash中。寫 flash 功能是調(diào)用 fmd 驅(qū)動程序?qū)崿F(xiàn)的。接下來 oemlaunch() 調(diào)用了 eboot 庫中的 ebootwaitforhostconnect()函數(shù)來獲得 platform builder的一些用戶配置信息,主要獲得了kitl 的啟動方式(主動還是被動),并把它們記錄下來。最后,把啟動配置信息寫入flash 之后,oemlaunch() 會調(diào)用 launch() 函數(shù)進行實際的跳轉(zhuǎn)。三、nk1 startup.s()中的 sartup 函數(shù)先對硬件

7、進行基本的初始化,然后跳轉(zhuǎn)到oal的主控函數(shù) kernelstart()開始執(zhí)行。2 armtrap.s()中的krnelstart函數(shù)初始化虛擬地址和物理地址的映射表,打開mmu 和 cache 。設(shè)置異常向量跳轉(zhuǎn)表。3 mdarm.c ()中的arminit 函數(shù)kernelrelocate(ptoc) 將全局變量定位到ram oeminitdebugserial()初始化調(diào)試端口(串口)oeminit() 初始化硬件?設(shè)置drwatson的內(nèi)存大小? oalcacheglobalsinit()設(shè)置全局 cache ? oalintrinit()中斷初始化aoalintrmapinit()

8、irq和 sysintr 映射初始化b屏蔽所有中斷,清除中斷標志,使能系統(tǒng)時鐘中斷(timer4 )? oaltimerinit 初始化系統(tǒng)時鐘? configuregpio() 配置 gpio ? initdisplay()lcd初始化并顯示一張圖片? oalkitlstart()初始化 kitl 連接kernelfindmemory() 將 ram 分成對象存儲和用戶ram 4 kwin32.c ()中的kernelinit函數(shù)kernelinit函數(shù)用來初始化操作系統(tǒng)。先初始化系統(tǒng)api 函數(shù)調(diào)用表,然后kernelinit()會依次調(diào)用 heapinit()、initmemorypool()、procinit()和schedinit()來初始化系統(tǒng)堆、內(nèi)存池、第一個進程和線程。5 mdarm.c 中的 handleexce

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論