日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WINCE6.0+S3C2443的启动过程---eboot1

發(fā)布時間:2025/4/16 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WINCE6.0+S3C2443的启动过程---eboot1 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

WINCE6.0+S3C2443的啟動過程---eboot

?

我們知道從nboot把eboot從nandflash中拷貝到內(nèi)存指定的地址后,就接著在這個地址處開始運行eboot了,之后,nboot的工作就完成了,那么那么eboot開始執(zhí)行的地址在哪里呢?我們看看/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

我們根據(jù)EBOOT的這一項可以知道,EBOOT對應(yīng)的虛擬起始地址就是0x80038000,實際的物理地址是0x30038000,根據(jù)/Src/Bootloader/Eboot/sources下面的內(nèi)容

TARGETNAME=eboot

TARGETTYPE=PROGRAM

RELEASETYPE=PLATFORM

EXEENTRY=StartUp

可知eboot的入口是StartUp,下面兩個圖是從eboot.map的截取出來的

通過上圖可以知道eboot的入口地址是0x00009d68

根據(jù)上圖可知StartUp函數(shù)的地址是0x00009d68,所以可以確定eboot的入口地址就是Startup函數(shù),也就是eboot從這個Startup函數(shù)開始執(zhí)行。

?

1.startup函數(shù)

系統(tǒng)上電后第一步就是運行Startup函數(shù)的代碼,這是一個匯編語言函數(shù),主要其最主要功能是執(zhí)行芯片級初始化:禁止中斷,配置系統(tǒng)時鐘頻率,復(fù)制BootLoader鏡像到內(nèi)存,設(shè)置存儲器的讀寫周期,構(gòu)造內(nèi)存映射表,啟用MMU,并啟用虛擬內(nèi)存等操作。

?

Startup函數(shù)有兩條重要的地址定義,定義ram空間的物理基地址和頁表的基地址,這是startup函數(shù)主要操作的物理地址空間,如下所示

?

定義RAM空間的物理基地址和頁表的基地址

PHYBASE?EQU?0x30000000?;?physical?start

PTs?EQU?0x30010000?;?1st?level?page?table?address?(PHYBASE?+?0x10000)

;?save?room?for?interrupt?vectors.

?

?

本文來自CSDN博客,轉(zhuǎn)載請標(biāo)明出處:http://blog.csdn.net/xxxluozhen/archive/2010/08/03/5783705.aspx

⑴startup函數(shù)的入口

入口函數(shù)首先通過對協(xié)處理器的操作來清空TLB、指令Cache和數(shù)據(jù)Cache

p15是系統(tǒng)控制協(xié)處理器,主要是對內(nèi)存還有cashe進行管理。mcr指令,把ARM寄存器中的值傳遞到協(xié)處理寄存器中。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

下面為了更好去理解上面這段代碼,我們來學(xué)習(xí)相關(guān)知識:

①MCR和MRC

對CP15協(xié)處理器的操作使用mcr和mrc兩條協(xié)處理器指令,這兩條指令的記法是從后往前看:mcr是把r(CPU核寄存器)中的數(shù)據(jù)傳送到c(協(xié)處理器寄存器)中,mrc則是把c(協(xié)處理器寄存器)中的數(shù)據(jù)傳送到r(CPU核寄存器)中。對CP15協(xié)處理器的所有操作都是通過CPU核寄存器和CP15寄存器之間交換數(shù)據(jù)來完成的。

?

②TLB

TLB(translation?lookaside?buffer),旁路轉(zhuǎn)換緩沖區(qū),或稱頁表緩沖,里面存放的是一些頁表文件(虛擬地址到物理地址的轉(zhuǎn)換表),TLB是MMU中的一塊高速緩存(也是一種cache),它緩存最近查找過的V對應(yīng)的頁表項,如果TLB里緩存了當(dāng)前VA的頁表項就不必做Translation?Table?Walk(也就是從發(fā)出VA到定位到PA的過程)了,否則去物理內(nèi)存中讀出頁表項來保存在TLB中,TLB緩存可以減少訪問物理內(nèi)存的次數(shù)。

?

③instruction?cache

instruction?cache(ICache),cache是高速緩沖存儲器,是介于CPU和主存之間的緩沖器,ICache是用于存在正在執(zhí)行的指令地址附近的一部分指令,供CPU在一段時間內(nèi)使用。

當(dāng)系統(tǒng)上電或重起(Reset)的時候,ICaches功能是被關(guān)閉的,我們必須往lcr?bit置1去開啟它,lcr?bit在CP15協(xié)處理器中控制寄存器1的第12位(關(guān)閉ICaches功能則是往該位置0)。ICaches功能一般是在MMU開啟之后被使用的(為了降低MMU查表帶來的開銷),但有一點需要注意,并不是說MMU被開啟了ICaches才會被開啟,正如本段剛開始講的,ICaches的開啟與關(guān)閉是由lcr?bit所決定的,無論MMU是否被開啟,只要lcr?bit被置1了,ICaches就會發(fā)揮它的作用,見下圖

?

④data?cache

data?cache(DCache),cache是高速緩沖存儲器,是介于CPU和主存之間的緩沖器,DCache是用于存在正在執(zhí)行的指令地址附近的一部分?jǐn)?shù)據(jù),供CPU在一段時間內(nèi)使用。

?

?

ARM920T有16KB的ICache,也有16KB的DCache,另外外加4KB的steppingstone,那么S3C2440自帶的RAM有36KB.

?

與ICaches一樣,系統(tǒng)上電或重起(Reset)的時候,DCaches功能是被關(guān)閉的,我們必須往Ccr?bit置1去開啟它,Ccr?bit在CP15協(xié)處理器中控制寄存器1的第2位(關(guān)閉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

見下圖我們就知道上面代碼的意義了。

?

?

?

?

--->后面待續(xù)

?

總結(jié)

以上是生活随笔為你收集整理的WINCE6.0+S3C2443的启动过程---eboot1的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。