




已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
FSBL代碼導讀一、main函數(shù)執(zhí)行之前FSBL模板的代碼是跟ISE的版本有關的,我用的是14.3,內容會比14.2版更多一點,但是基本過程是一樣的。板子上電之后,最先執(zhí)行的并不是FSBL中的main函數(shù),因為這個時候板子還沒有初始化,不具備執(zhí)行C語言的能力,此時只能執(zhí)行匯編代碼,所執(zhí)行的代碼是由BSP提供的。我們打開zynq_fsbl_bspps7_cortexa9_0libsrcstandalone_v3_07_asrc文件夾,里面有一個asm_vector.S文件,這個文件聲明了一個代碼段,位于地址0處。開機之后,PS自動執(zhí)行地址0處的指令,其第一句話就是一個跳轉:B _boot。如下:于是就跳轉到boot.S中執(zhí)行_boot標號下的代碼了,_boot會對系統(tǒng)做初始化,當它執(zhí)行完后,PS將具備執(zhí)行C代碼的能力,接著在_boot的代碼中,再次執(zhí)行了一個跳轉:_start標號位于xil.crt0.S中,仍然對系統(tǒng)進行設置,我們看到,第一句話就是跳轉到_cpu_init去執(zhí)行cpu初始化。代碼部分截圖如下: 在_start的末尾,BSP終于完成了自己的工作,PS將跳轉到main函數(shù)開始執(zhí)行。如下:二、main函數(shù)執(zhí)行過程終于系統(tǒng)進入了FSBL階段。我們打開zynq_fsblsrc文件夾,然后打開main函數(shù):Main函數(shù)首先是一些宏定義,接下來就是執(zhí)行ps7_int()函數(shù)。SDK是一個很智能的工具,圖中的灰色陰影部分是SDK判斷出了PEEP_CODE這個宏沒有定義,所以用灰顏色提示讀者這段代碼不用執(zhí)行。ps7_init函數(shù)位于ps7_init.c文件中。這個C文件是由XPS根據(jù)用戶的配置自動生成的。我們進入ps7_init函數(shù)看一下,這個函數(shù)很短:根據(jù)代碼,很明顯可以猜到,ps7_init函數(shù)其實執(zhí)行了mio,pll,clock,ddr和某些外設的初始化。我們接著看FSBL的main函數(shù),根據(jù)XPS自動生成的ps7_init.c執(zhí)行完初始化之后,F(xiàn)SBL將根據(jù)啟動狀態(tài)寄存器判斷是采用的哪種啟動模式。有四種啟動模式,分別是QSPI,NOR,JTAG,SD卡等模式。每種模式都有一段獨立的代碼,舉個例子,我們看SD卡模式的執(zhí)行代碼:可以看到,系統(tǒng)先對SD卡初始化,并且要求SD卡中必須要有BOOT.BIN文件。如果沒有,那么從SD卡啟動板子就會失敗。這也是為什么我們生成啟動鏡像必須命名為BOOT.BIN的原因。需要注意的是NAND啟動模式被禁用了,因為FSBL中有一個宏沒有定義,所以處于灰色狀態(tài)。接下來的代碼我們只看一下注釋就大概知道干什么了: 在明確了啟動模式之后,PS將在相應的flash中去尋找.bit文件和用戶程序,通過遍歷一些partition(最多15個),如果找到了.bit文件,那么就不重啟,直接配置PL,然后再找用戶程序。如果沒找到.bit就軟件復位一下,然后調整地址,接著驗證下一個partition。充分體現(xiàn)這個過程的,是這個函數(shù):PartitionMove函數(shù)很復雜,我們只看注釋:這個注釋說的就是找到了.bit文件就配置PL,找到了用戶程序就加載到內存。這個函數(shù)執(zhí)行完之后,返回值就是用戶程序的執(zhí)行地址。這個執(zhí)行地址位于用戶文件的文件頭中,是由編譯器或者ISE自己生成的。找到了用戶程序的執(zhí)行地址,那么FSBL函數(shù)就該交接了,完成這個過程的是FsblHandoff函數(shù):這個函數(shù)完成交接,并且一去不復返,再也不會返回,從此PS就開始執(zhí)行了用戶代碼。那么交接究竟是怎么完成的?其實我們直觀上很容易猜到肯定是一個跳轉指令。帶著猜測,我們深入FsblHandoff函數(shù),最后果然找到了:其中bx lr指令就是跳轉到用戶代碼執(zhí)行。3、 拓展FSBL事實上,在找到用戶程序的執(zhí)行地址后,F(xiàn)SBL并沒有馬上執(zhí)行跳轉,而是執(zhí)行了這個函數(shù):這是一個鉤子函數(shù),它只有函數(shù)定義,但是沒有任何內容,是個空函數(shù)。是FSBL提供給用戶自己擴展的,你可以在這個函數(shù)中填寫任何可執(zhí)行內容。該函數(shù)會在交接到用戶程序之前執(zhí)行。類似的函數(shù)還有FsblHookAfterHandoff( )。這樣在交接到用戶代碼之后也有鉤子函數(shù),同樣,在FSBL找到.bit文件配置PL前后,也有兩個鉤子函數(shù)。這幾個鉤子函數(shù)貌似只有14.3版本里面有,14.2里面沒有。4、 FSBL的限制FSBL有兩個限制,這是寫用戶程序的時候需要知道的:1,FSBL沒有重新映射內存,所以內存的基地址是1M,用戶代碼只能在1M以上的地址中執(zhí)行。根據(jù)我的理解,只要修改FSBL,定義ECC_ENABLE,讓如下代碼從被禁止狀態(tài)恢復成可執(zhí)行狀態(tài)就可以破解這個限制:原因在于,很多系統(tǒng)代碼都是這樣的,將1M以下的地址空間作為函數(shù)出錯的返回地址。FS
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年短視頻創(chuàng)作與制作師職業(yè)資格考試試卷及答案
- 僅用于求職面試的工作背景特別聲明(6篇)
- 戶外廣告牌合同協(xié)議書
- 保護環(huán)境從我做起抒情議論文10篇范文
- 金融行業(yè)投資經驗證明(8篇)
- 2025年第三方醫(yī)學實驗室項目申請報告
- 山間美景行記作文(11篇)
- 2025年工程測量員(一級)測繪項目管理與質量控制案例分析考試試卷
- 生活中的小事啟發(fā)了我話題作文7篇
- 2025年電動助力轉向裝置項目立項申請報告
- 《選礦廠安全生產標準化評分辦法》
- 2025年氨水市場需求分析
- 貴州省銅仁市2023-2024學年高二下學期7月期末質量監(jiān)測數(shù)學試題(含解析)
- 做課件教學視頻
- 2025安徽蚌埠市國有資本運營控股集團有限公司招聘4人筆試參考題庫附帶答案詳解析集合
- 期末試卷(含答案)2024-2025學年四年級下冊數(shù)學北師大版
- 2025年特種設備安全考試題庫特種設備安全管理人員法規(guī)應用試卷
- (2025)輔警招聘考試試題庫附答案詳解(綜合題)
- 合同協(xié)議書范本模板圖片
- 海洋法知到智慧樹章節(jié)測試課后答案2024年秋中國海洋大學
- 《客艙安全與應急處置》-課件:火災的基礎知識
評論
0/150
提交評論