Wince讀核1 啟動流程1

2021-04-14 08:46:48 字數 1036 閱讀 2620

寫在前面

將近一年前,做過一段時間windows mobile,當時忙於專案,精力放在bsp的除錯上,對widnows ce系統了解不深刻,後來忙別的專案就把ce放下了。時隔將近一年,這幾天難得有點清閒,看了一點ce的源**,發現自己記性大不如前,正好這個blog很久沒有更新了,因此寫點東西吧。

以下內容基於ce5.0,arm體系結構。

參考

1. ce5.0源**和幫助文件

2. 《arm architecture reference manual》

索引

1. 從kernelstart開始

2. arm9虛擬位址到實體地址的轉換

3. ;;寫到再說

1. 從kernelstart()開始

2. arm9虛擬位址到實體地址的轉換

在這裡有必要介紹一點arm體系結構的基礎知識。在mmu使能後,cpu「看到」的位址都是虛擬位址,mmu的功能之一就是把虛擬位址轉換成實體地址(此處暫時忽略fcse),因為電氣訊號只認識實體地址。比如要訪問上面的虛擬位址0x80000000,在操作具體的位址匯流排時必須使用實體地址0xa0000000。

arm9系列cpu,有的不支援mmu而只有記憶體保護單元,有的支援mmu,後者還支援mmu的多種對映方式,具體可以參考文件2。ce目前的arm實現不僅利用了cpu的mmu功能,還使用了兩種mmu對映方式:最高的1mb(0xfff00000-0xffffffff),使用二級對映,並使用不同的page型別;而其餘位址空間,只使用一級對映。這樣做的原因是ce把高1mb空間用來給核心儲存記憶體對映表(page table),中斷向量表(exception vectors),不同模式下的stack和kdatastruct結構,而它們有不同的記憶體訪問方式(domains,c,b等,參考文件2),需要用二級對映加以細分;而其它位址空間為了簡化訪問,加快速度,採用一級對映。下面會結合**分析。

對於一級對映,參考下圖。

對於二級對映,參考下圖。

WinCE5讀核筆記

一 exception vector到底在 struct arm high是被wince5 kernel安放在0xfffd,0000位址的乙個結構體。這個結構體非常大,我說它大不是因為它的 member很多,而是它的每個member都是乙個非常大的陣列。主要是為了對齊到一些特殊的位址。我們知道在 c...

linux啟動流程 (1)

啟動流程一覽 1.載入bios的硬體資訊與進行自我測試,並依據設定取得第乙個可啟動的裝置 2.讀取並執行第乙個啟動裝置內mbr的boot loader 也就是grub,spfdisk等程式 3.依據boot loader的設定載入kernel,kernel會開始檢測硬體與載入驅動程式 4.在硬體驅動...

0 11LINUX讀核日記(1)

0.11linux讀核日記 1 之所以要讀linux核心是因為自己想完全弄懂計算機從載入電源到正常執行程式的過程。而選定0.11版本是因為手頭上有一本趙炯博士寫的 linux完全注釋 呵呵,閒話少說,還是轉到讀碼中。計算機在加電後,bios啟動乙個程式進行主機自檢,自檢結束後,自檢程式將控制權還給b...