WINCE6.0+S3C2443的启动过程---eboot1
WINCE6.0+S3C2443的啟動過程---eboot
?
我們知道從nboot把eboot從nandflash中拷貝到內存指定的地址后,就接著在這個地址處開始運行eboot了,之后,nboot的工作就完成了,那么那么eboot開始執行的地址在哪里呢?我們看看/Src/Bootloader/Eboot/boot.bib下面的配置
?
MEMORY
;???Name?????Start?????Size??????Type
;???-------??--------??--------??----
????ARGS?????80020800??00000800??RESERVED
????RAM??????80021000??0000B000??RAM????
????STACK????8002c000??0000A000??RESERVED
????EBOOT????80038000??00040000??RAMIMAGE
BINFS????80080000??00021000??RESERVED
我們根據EBOOT的這一項可以知道,EBOOT對應的虛擬起始地址就是0x80038000,實際的物理地址是0x30038000,根據/Src/Bootloader/Eboot/sources下面的內容
TARGETNAME=eboot
TARGETTYPE=PROGRAM
RELEASETYPE=PLATFORM
EXEENTRY=StartUp
可知eboot的入口是StartUp,下面兩個圖是從eboot.map的截取出來的
通過上圖可以知道eboot的入口地址是0x00009d68
根據上圖可知StartUp函數的地址是0x00009d68,所以可以確定eboot的入口地址就是Startup函數,也就是eboot從這個Startup函數開始執行。
?
1.startup函數
系統上電后第一步就是運行Startup函數的代碼,這是一個匯編語言函數,主要其最主要功能是執行芯片級初始化:禁止中斷,配置系統時鐘頻率,復制BootLoader鏡像到內存,設置存儲器的讀寫周期,構造內存映射表,啟用MMU,并啟用虛擬內存等操作。
?
Startup函數有兩條重要的地址定義,定義ram空間的物理基地址和頁表的基地址,這是startup函數主要操作的物理地址空間,如下所示
?
定義RAM空間的物理基地址和頁表的基地址
PHYBASE?EQU?0x30000000?;?physical?start
PTs?EQU?0x30010000?;?1st?level?page?table?address?(PHYBASE?+?0x10000)
;?save?room?for?interrupt?vectors.
?
?
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/xxxluozhen/archive/2010/08/03/5783705.aspx
⑴startup函數的入口
入口函數首先通過對協處理器的操作來清空TLB、指令Cache和數據Cache
p15是系統控制協處理器,主要是對內存還有cashe進行管理。mcr指令,把ARM寄存器中的值傳遞到協處理寄存器中。C8?是TLB?Control?寄存器,C7是Cache/Write?Buf?Control?寄存器,
ResetHandler
????;?Make?sure?that?TLB?&?cache?are?consistent
????mov?????r0,?#0
????mcr?????p15,?0,?r0,?c8,?c7,?0???????????;?flush?both?TLB
????mcr?????p15,?0,?r0,?c7,?c5,?0???????????;?invalidate?instruction?cache
mcr?????p15,?0,?r0,?c7,?c6,?0???????????;?invalidate?data?cache
下面為了更好去理解上面這段代碼,我們來學習相關知識:
①MCR和MRC
對CP15協處理器的操作使用mcr和mrc兩條協處理器指令,這兩條指令的記法是從后往前看:mcr是把r(CPU核寄存器)中的數據傳送到c(協處理器寄存器)中,mrc則是把c(協處理器寄存器)中的數據傳送到r(CPU核寄存器)中。對CP15協處理器的所有操作都是通過CPU核寄存器和CP15寄存器之間交換數據來完成的。
?
②TLB
TLB(translation?lookaside?buffer),旁路轉換緩沖區,或稱頁表緩沖,里面存放的是一些頁表文件(虛擬地址到物理地址的轉換表),TLB是MMU中的一塊高速緩存(也是一種cache),它緩存最近查找過的V對應的頁表項,如果TLB里緩存了當前VA的頁表項就不必做Translation?Table?Walk(也就是從發出VA到定位到PA的過程)了,否則去物理內存中讀出頁表項來保存在TLB中,TLB緩存可以減少訪問物理內存的次數。
?
③instruction?cache
instruction?cache(ICache),cache是高速緩沖存儲器,是介于CPU和主存之間的緩沖器,ICache是用于存在正在執行的指令地址附近的一部分指令,供CPU在一段時間內使用。
當系統上電或重起(Reset)的時候,ICaches功能是被關閉的,我們必須往lcr?bit置1去開啟它,lcr?bit在CP15協處理器中控制寄存器1的第12位(關閉ICaches功能則是往該位置0)。ICaches功能一般是在MMU開啟之后被使用的(為了降低MMU查表帶來的開銷),但有一點需要注意,并不是說MMU被開啟了ICaches才會被開啟,正如本段剛開始講的,ICaches的開啟與關閉是由lcr?bit所決定的,無論MMU是否被開啟,只要lcr?bit被置1了,ICaches就會發揮它的作用,見下圖
?
④data?cache
data?cache(DCache),cache是高速緩沖存儲器,是介于CPU和主存之間的緩沖器,DCache是用于存在正在執行的指令地址附近的一部分數據,供CPU在一段時間內使用。
?
?
ARM920T有16KB的ICache,也有16KB的DCache,另外外加4KB的steppingstone,那么S3C2440自帶的RAM有36KB.
?
與ICaches一樣,系統上電或重起(Reset)的時候,DCaches功能是被關閉的,我們必須往Ccr?bit置1去開啟它,Ccr?bit在CP15協處理器中控制寄存器1的第2位(關閉DCaches功能則是往該位置0)。與ICaches不同,DCaches功能是必須在MMU開啟之后才能被使用的。
Eboot是通過下面的操作來disable?ICache和DCache的
mcr?????p15,?0,?r0,?c7,?c5,?0???????????;?invalidate?instruction?cache
mcr?????p15,?0,?r0,?c7,?c6,?0???????????;?invalidate?data?cache
?
c7是個只寫寄存器,這個寄存器用來管理ICache和DCache,其中包括Invalidate?cache
見下圖我們就知道上面代碼的意義了。
?
?
?
?
--->后面待續
?
總結
以上是生活随笔為你收集整理的WINCE6.0+S3C2443的启动过程---eboot1的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 播放视频一会,出错并自动关闭
- 下一篇: WINCE5.0+S3C2443系统每隔