版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、ARM映象文件及執(zhí)行機理學習報告這幾天為了弄清楚系統(tǒng)是如何運行相應的可執(zhí)行程序可謂費盡心機,整個五一假期都沒有休息,其中由于燒寫的軟件出了些問題,使得理解映象文件及執(zhí)行機理更加曲折,不過還好在自己的努力和論壇上兄弟的幫助下,終于還是成功了。作為進入系統(tǒng)設(shè)計的重要一步,我覺得這個過程是應該寫下來的,既是為了自己的總結(jié),也為了后來進入的人可以少走些彎路。我的開發(fā)板配置如下:l :芯片(核)l :1片16×1M位數(shù)據(jù)寬度的FLASH,共2M 字節(jié)Flash(MX29LV160BTC),速度70/90ns;位模式。l 內(nèi)存:片4M ×16位數(shù)據(jù)寬度的SDRAM(HY57V65162
2、0B TC-10S)構(gòu)成,共16M 字節(jié)SDRAM。2片16位拼做32位使用,共用一個片選。l 簡易調(diào)試,兩個串口,一個以太網(wǎng)口從我個人的學習經(jīng)過認為,初學者最難突破的應該是以下三個方面。所以,本文基本上從這三個方面來闡述。l 映象文件(包括文件和文件)的生成和組成l 映象文件下在中的狀態(tài)和運行時的狀態(tài)(加載域和運行時域)l 地址重映射本文基本圍繞附錄給出的那個串口發(fā)送程序而展開的。這個程序的初始化和地址重映射部分參考了的程序(:?),串口發(fā)送部分參考了的程序(那我自己寫了什么呢?J)。首先我們應該建立這樣一種概念,對于一個裸機(里什么都沒有)來說,所有的細節(jié)都得自己設(shè)置,不要指望芯片或開發(fā)工
3、具可以為你做些什么!所以從第一條指令開始,你就必須負責所有的工作。對于,上電或復位后從開始執(zhí)行指令,而硬件上我們把接在了的處,所以就是從的處開始取指令,那么我們就必須保證一開始可以取到正確的指令。小插曲:我前幾天就是被我的下載程序害死了,由于下載程序的時序問題,開始的多個字節(jié)里不能正常燒寫,結(jié)果老是為,而我剛剛開始也不懂得映象文件的內(nèi)涵,結(jié)果以為文件就是可執(zhí)行文件,將其燒入,所以程序真正的第一條指令在開始,不能正確燒寫的部分正好是文件的頭,沒有影響到真正的指令。程序有時也可以執(zhí)行(因為相當于空指令一樣,程序也可以執(zhí)行到真正的第一條指令),所以串口輸出的都是不對的亂碼或字母。一的映象文件初步認識
4、和文件這里我先談談的映象文件(即可執(zhí)行文件)的概念。我們生成的的映象文件有格式和格式兩種,有時容易被二者混淆。其實文件是真正的可執(zhí)行文件,而文件是特有的調(diào)試文件,里面除了包含文件的內(nèi)容之外,還附加了許多其他調(diào)試信息。首先讓我們來看看和的區(qū)別,圖圖是用打開的文件和文件的頭部和尾部。這兩個文件都是用生成的(選中中的:和中的:這兩個選項,就可以同時生成相應的和文件)。在生成這兩個映象文件時,請設(shè)置的選項:設(shè)為,設(shè)為,作用將在本文后面解釋。圖是文件,其中反顯處才是真正的第一條指令,開始的個字節(jié)都是文件頭,而圖的文件從就是真正的第一條指令(所以為什么說文件才是真正的可執(zhí)行文件)。關(guān)鍵是從第一條指令開始的
5、二個文件的比較了,哦,竟然是完全相同的,一直到文件的尾部,見圖和圖。即文件就是文件的。不過,二者的相應指令或數(shù)據(jù)的地址就不一樣了,先記住這一點伏筆。文件結(jié)束(圖反顯處),但文件還沒有結(jié)束(圖中反顯指示文件相應結(jié)束部分),其后還有很多相關(guān)的調(diào)試信息,這些調(diào)試信息可以用在或的的調(diào)試中。由于我們的燒寫工具是原封不動地將映象文件燒入中,所以,文件是不可以燒入的,否則的處就不是真正的第一條指令,而是頭部分。我們應該將文件燒入,保證的處是第一條指令。我個人猜測,文件應該可以通過“中的下載功能”下載到中運行,在下載的過程中可能經(jīng)過相應的內(nèi)部處理而導致真正燒入中的還是文件。到現(xiàn)在為止,我們只能感性認識一下映象
6、文件:文件和文件的不同,也就是說,文件是文件的一部分,最精華的一部分,那么到底哪部分是最精華的呢?文件中包含了哪些內(nèi)容呢?指令和數(shù)據(jù)到底放在映象文件的什么地方呢?下面接著分析。圖中打開的文件二進制形式(頭部部分)圖中打開的文件二進制形式(頭部部分)圖中打開的文件二進制形式(中間部分)圖中打開的文件二進制形式(尾部部分)映象文件的內(nèi)容討論到映象文件的內(nèi)容,就應該打開源程序并理解源程序的內(nèi)容了,這個程序比較簡單,我們這里講解的都是初級知識,給大家一個入門的啟示,復雜的以后可以再慢慢學。所以大家看到這篇文章不要老是想到復雜的情況,那樣本文有些闡述可能就不太對頭了:)首先我們可以先不看程序具體做了什么
7、,我們總應該可以看出這個簡單程序分為兩個部分,一個是部分,即指令代碼部分;另一部分是部分,即數(shù)據(jù)部分。,(代碼部分),(數(shù)據(jù)部分),書上說,映象文件一般由域組成,域由最多三個輸出段(,)組成,輸出段又由輸入段組成。那么我們來看看生成的映象文件到底怎么符合書上的概念,又怎么和上面源程序的代碼和數(shù)據(jù)部分對應起來的。先來看看圖吧,我覺得實物最可以給人以說服力。圖中打開的格式映象文件二進制形式(大部分)大家看到了吧,藍色反顯的前部其實就是源程序?qū)闹噶畲a部分,反顯后對應的就是源程序的數(shù)據(jù)部分。反顯處就是指令部分和數(shù)據(jù)部分的分界處。大家仔細看看,反顯開始的地方往后其實就是要從串口輸出的字符數(shù)據(jù)(由于
8、屏幕關(guān)系,沒有完全顯示出,大家可以自己用打開看看);而從開始至處是程序中的指令編碼(編譯好的二進制編碼)。所以,可以這么說,l 域:整個映象文件,也就是說這個簡單程序的映象文件只有一個域(加載域),其實大部分程序都是只有一個加載域l 輸出段:有兩個輸出段,和,沒有。這個我們從源程序和圖也可以看出。l 輸入段:兩個輸入段,即源程序的部分和部分。部分是,屬于輸出段,部分是,屬于輸出段。所以,域、輸出段和輸入段的關(guān)系如下圖:圖例子程序的域、輸出段和輸入段的關(guān)系在加載域中,直接跟在后面,那我們剛剛設(shè)置的連接選項:,有什么用呢?的確是從開始,可是卻從開始,和不同阿?到底這是怎么回事呢?二的映象文件的加載
9、域和運行時域所有這些,都是“連接”和“系統(tǒng)存儲器多樣化”惹的禍!連接器一個很重要的工作就是要解析目標文件中各種符號,也就是得到各符號的值。還是先來看看圖吧圖例子程序編譯連接的符號映射圖(一部分)這張圖是例子程序在中編譯連接后顯示出的符號映射的一部分(選中ARM學習報告001 杜云海 duyunhai 中選項卡的和即可),其中設(shè)置了,可以看到象,等符號的值都是相對于而定位的(在段中),而、和卻是相對于而定位的(在段中)。這些符號值是在映象文件開始運行時才起作用。如果僅僅是放在中或僅僅運行前面幾條初始化指令(加載域狀態(tài)),那么這些值還暫時不起作用,否則問題就麻煩了。所以真正運行時,就必須保證這些值
10、是對的!于是引出了“數(shù)據(jù)移動”。概念什么是加載域和運行時域呢?我個人認為用“域”這個詞實在很容易混淆。其實簡單明了的說,加載域就是最原始的文件,就是映象文件燒入時的狀態(tài),如圖所示,跟在后面;而運行時域就是經(jīng)過了改頭換面的映象文件,即由于運行了相應的初始化程序而把或拷貝到相應的地方,這是映象文件已經(jīng)四分五裂成至多三個部分,圖示意例子程序映象文件的兩個不同狀態(tài)。當然運行時域也可以和加載域相同,就是不設(shè)置,那么運行時不需要移動,依然跟在后面。0x01200000 0x00200000 0x00a000000x000002280x00000000 0x00000000 加載域運行時域圖例子程序加載域和
11、運行時域比較示意圖在加載域狀態(tài),地址是正確的,意味著指令可以正確執(zhí)行;但是不正確的(從圖可知),但是暫時的錯誤不影響程序初始化,源程序的都暫時沒有用到,所以程序還是可以正確運行,即使在處。程序終究是要用到的,那么怎么辦?其實只要來個“乾坤大挪移”就好了,在用到之前將移動到正確的位置即可。完成了這個“挪移”過程。當然移動前進行了地址重映射,不過,地址重映射和的數(shù)據(jù)移動其實是兩回事!在的中(即例子程序的),在映射前,將的備份拷到中,然后將重映射為,非常巧,指令運行不受任何影響!重映射后的地址為,此時主動權(quán)已經(jīng)到中的手上了!然后再將移動到相應的位置。哪里才是相應的正確位置呢?的數(shù)據(jù)移動有一個概念很重
12、要:“加載域狀態(tài)”的映象文件中、和的所在地址都是臨時的,他們所在的真正位置(即連接時設(shè)置的地址值)都必須在程序初始化時由相應程序,將他們ARM學習報告001 杜云海 duyunhai 移動到相應的地方。這個數(shù)據(jù)移動過程由完成!源程序由個部分組成:主要是執(zhí)行的初始化和內(nèi)存重映射,相關(guān)資料可以參考文章(:?)。主要是通過串口發(fā)送幾行字符,這里主要解釋一下和。;¥這六個全局變量分別是輸出段運行時起始地址,運行時存儲區(qū)域界限,輸出段運行時起始地址,運行時存儲區(qū)域界限,輸出段運行時起始地址,運行時存儲區(qū)域界限。引入的這六個變量可說是在映象文件編譯連接中起到至關(guān)重要的作用,這里我們就不說得非常復雜了,就簡
13、單用例子程序來舉例說明?,F(xiàn)在再讓我們回頭看看前面編譯連接時中的及圖的另外一部分。如圖。圖編譯連接后的映射表一部分其中:l ¥l ¥l ¥l ¥l ¥(其實是不存在的)l ¥大家把這些地址再和圖的文件(映象文件)對照看看,有哪些相似之處嗎?的和和在中打開的映象文件一樣,也就是說和燒在中的一樣了?。ず停っ黠@不對,不過,仔細看看,除了地址不對外,其實相對值還是一樣的,也就是說,只要把中的移到¥所指示的位置即可。¥是的存儲地址界限,其實是中的開始地址(加載域狀態(tài)時),因為加載域狀態(tài)時就是緊跟在后面!而¥是運行時的開始地址,二者是不同的。中正是通過判斷¥和¥是否相等來決定程序運行時是否需要“搬遷”,這個
14、例子中,二者是不等的,就是說,“程序運行時”不應該在中的這個位置的后面,那么初始化程序就必須在未使用前將移到正確的位置,例子程序中則將移到了處。從而使得編譯連接時和相關(guān)的標號值都正確。,¥,¥,¥,;,一旦被移動到處,那么圖中的、和等段的符號值都是正確的了!在生成加載域也就是映象文件(文件)時,是把緊接在后面,這并不是的實際地址,而僅僅是加載時,也就是燒寫到時的代碼和數(shù)據(jù)的臨時地址。而程序真正開始運行起來時也就是運行時域,一切情況又都發(fā)生了變化,該到什么地方的,就應該去什么地方,所以應該拷到處,以保證連接時的符號值都是正確的。三系統(tǒng)的地址重映射其實如果真正懂了上面兩個原理,那么理解地址重映射就
15、很容易了,雖然他們之間沒有什么聯(lián)系,但是,很多人不能理解地址重映射就是因為和映象文件的編譯連接地址搞得一團糊!地址重映射就是通過系統(tǒng)的存儲管理部件改變系統(tǒng)中各個存儲器的映射地址,在ARM學習報告001 杜云海 duyunhai 中,通過改變系統(tǒng)控制寄存器組來改變存儲器的映射地址。如果你對芯片的存儲管理部件還不是很熟的話,應該先把芯片資料再看看。一般的開發(fā)板都是將連接到處,這樣上電復位時讀的第一條指令是的處的值。例子程序中程序在運行時都沒有映射,在為了的的復制,特意初始化了和,具體設(shè)置如圖的加載域所示,為,從;為,從,其他系統(tǒng)控制寄存器則設(shè)置為(這個由設(shè)置)。;:;,;,;,;,;,;,;,;,;,;,;,;,地址重映射先來看看例子程序:;,;,;,;,;,;ARM學習報告0
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025版物流合作合同文檔大全
- 洛陽科技職業(yè)學院《醫(yī)學遺傳學醫(yī)學細胞生物學》2023-2024學年第一學期期末試卷
- 2025地產(chǎn)公司土地合同管理辦法
- 商業(yè)零售設(shè)備電路改造合同
- 管道安裝腳手架施工合同范本
- 2025店鋪裝修合同常用版樣本
- 個人展會用車租賃協(xié)議
- 醫(yī)療衛(wèi)生服務采購招投標樣本
- 地鐵安全乘車禮儀指南
- 環(huán)保工程項目管理準則
- 鋼化玻璃的MSDS英文報告
- 大學生情緒管理1500字論文2篇
- 2023廣東省成人高考《英語》(高升專)考試卷及答案(單選題型)
- 《德米安 埃米爾 辛克萊年少時的故事》讀書筆記思維導圖PPT模板下載
- 年產(chǎn)萬噸天然飲用水生產(chǎn)項目可行性研究報告
- 臨床藥理學第十四章 腎功能不全臨床用藥
- YS/T 682-2008釕粉
- GB/T 5976-2006鋼絲繩夾
- 麗聲妙想英文繪本第一級 My Dad課件
- 部編版五年級語文上-句子專項課件
- 初中語文人教九年級下冊《統(tǒng)一》PPT
評論
0/150
提交評論