Nand Flash的VIVI裝載器的解析及改進_第1頁
Nand Flash的VIVI裝載器的解析及改進_第2頁
Nand Flash的VIVI裝載器的解析及改進_第3頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

NandFlash的VIVI裝載器的解析及改進NandFlash的VIVI裝載器的解析及改進引言在操作系統(tǒng)啟動前,要先運行一段程序.這段程序就是BootLoader,即啟動裝載程序,它相當(dāng)于PC機上的BIOS。通過這段程序,可以實現(xiàn)硬件設(shè)備的初始化,建立內(nèi)存卒問映射等一系列初始化工作,從而將系統(tǒng)的軟硬件環(huán)境初始化為一個合適的狀態(tài).以便為裝載操作系統(tǒng)作好準(zhǔn)備。在系統(tǒng)加電或復(fù)位后,CPU通常都是從一個預(yù)先定義的地址上取指令,而在嵌入式系統(tǒng)中,通常將某種類型的固態(tài)存儲設(shè)備(如ROM、FIash等)映射到此地址處。通過燒寫工具把BootLoader的映像燒寫到這種固態(tài)存儲設(shè)備上,在系統(tǒng)加電或復(fù)位后CPU就可以從這種固態(tài)存儲設(shè)備上取指令執(zhí)行BootLoader以實現(xiàn)系統(tǒng)的啟動。由于在ROM及Flash等存儲設(shè)備中程序的執(zhí)行速度與效率不及程序在RAM中的執(zhí)行速度與效率,因此在嵌入式程序設(shè)計中,通常都會有程序拷貝的操作。所謂程序拷貝,就是在程序運行過程中,通過軟件的方法將周化在ROM或Flash中的程序拷貝到RAM中,然后再跳轉(zhuǎn)到RAM相應(yīng)地址繼續(xù)執(zhí)行程序。1系統(tǒng)硬件平臺及VIVI簡介本實驗平臺的處理器采用的是SamSung公司的S3C2410.它是基于ARM920T內(nèi)核的處理器,片外存儲器采用了64MB的SDRAM、32MB的NandFlash、2MB的NorFlash及4KB的片上SRAM,其中SDRAM映射到基地址為Ox30000000的存儲空間,本實驗平臺支持兩種方式啟動,即NandFIash啟動和NorFlash啟動,這兩種啟動方式以跳線方式進行選擇。VIVI是由韓國Mizi公司開發(fā)的一種針對ARM9的BootLoader,支持S3C2410。與其它的Bootloader相比,它具有容易理解,易于移植等優(yōu)點。它有兩種工作模式:啟動加載模式和下載模式。它的啟動分為兩個階段,Stage1階段和Stage2階段。Stage1主要用匯編語言編寫,主要進行與CPU核有關(guān)的一些寄存器的配置以及進行一些必要的初始化工作,這部分代碼與具體的CPU體系結(jié)構(gòu)依賴性很大。Stage2用一般的C語言編寫,用來實現(xiàn)一些初始化工作,如建立內(nèi)存映射,初始化驅(qū)動等,這部分代碼會被拷貝到RAM中執(zhí)行。本文要研究和論述的主要在Stage1階段。2NandFlash啟動過程分析NandFlash使用I/O口串行地存取數(shù)據(jù),它不映射到存儲空間中任何一個BANK區(qū)域上.對NandFlash的瀆寫操作通過串行數(shù)據(jù)總線進行傳輸。NandFlash以頁(page)為單位進行讀寫,以塊(block)為單位進行擦除,本文用到的NandFlash頁(page)大小為(512+16)Byte,塊(block)大小等于32個頁的大小。每頁的最后16Byte不用于存儲程序數(shù)據(jù),它主要用于存儲ECC校驗、標(biāo)志位等信息。對NandFlash的操作主要是通過向NandF1ash控制器發(fā)送命令來進行的,對不同型號的NandFlash,其命令有所不同。由于NandFlash以塊(block)為單位進行擦除,以頁為單位進行寫入,所以擦除與寫入的速度都很快。由于NandFlash不能芯片內(nèi)執(zhí)行,S3C2410必須提供一種機制支持從NandFlash啟動。S3C2410提供了這樣一種機制,當(dāng)設(shè)置為Nandflash啟動時,系統(tǒng)加電或復(fù)位后,使能NandFlash控制器的自動啟動模式,NandFlash中的前4KB代碼自動地被拷貝到位于CPU內(nèi)部的稱為Steppingstone的SRAM中,這是啟動代碼的第一次拷貝,這次拷貝由硬件自動完成.然后這塊SRAM被映射到存儲空間中的0x00000000處,CPU從這個地址處開始執(zhí)行啟動代碼。由于CPU內(nèi)部的SRAM僅有4KB,不能保證整個VIVI都被從NandFlash中拷貝到CPU內(nèi)部的SRAM中,所以這前4KB的代碼要保證完成把整個VIVI從NandFlash拷貝到執(zhí)行效率更高的RAM中運行以及程序的跳轉(zhuǎn)任務(wù),此時從NandFlash到SDARM的拷貝過程就是所謂的軟件拷貝。3程序拷貝過程分析3.1VIVI的編譯與鏈接編澤器對程序的處理要經(jīng)過預(yù)編譯階段、編譯階段、匯編階段及鏈接階段,每個目標(biāo)文件都有一系列段(section),輸入文件的段(section)稱為輸入段(inputsection).輸出文件的段(section)則稱為輸出段(outputsection)。在VIVI的鏈接過程中,用到了一個鏈接腳本文件,它描述了各個輸入文件的各個段(section)如何映射到輸出文件的各個(section)中,并控制輸出文件中secrion和符號的內(nèi)存布局,此內(nèi)存布局決定了VlVI的運行時域。在此階段,鏈接器LD利用鏈接腳本把各種目標(biāo)文件和庫文件鏈接起來,并重定向它們的數(shù)據(jù),完成符號解析,最后把所有的目標(biāo)文件鏈接成為一個可執(zhí)行的目標(biāo)文件,即為可燒寫到Flash中的VIVI映像。針對本系統(tǒng)開發(fā)板的VIVI鏈接腳本對原鏈腳本進行了改進,添加了第行,下文的論述會用到此處的變量viviend。SECTIONS{.=0x33f00000;.text

:{*(.text)}.dataALlGN(4):{*(.data)}.bssALIGN(4):{*(.bss)*(COMMON)}vivi_end=.:}其中:SECTIONS表示段。第行表示當(dāng)前地址為0x33f00000,它是text段的起始地址,也是運行時域的起始地址。第行用了通配符*表示所有字符,這里的意思就是說指定的每個目標(biāo)文件的textsection的內(nèi)容都放到同一個.text中。第行表示指定的每個目標(biāo)文件的datas

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論