arm core:為執行匯編程序的核心部件
rom:廠家固化的代碼,用於在arm上電後執行,將nand flash中大小如sram的前面代碼(bootloader代碼)拷貝到sram中,並cpu跳到sram的0x0位置
sram:在執行nand flash中前小段代碼(4kb左右),初始化sdram/ddr,並將nand flash中剩余的bootloader代碼拷貝到sdram中,最後跳入sdram中繼續執行
sdram:即為內存,當從sram中進入sdram後,開始執行bootloader的其余代碼,加載內核到內存(內核存在於內存),加載完後進入內核繼續正常運行
Nor flash:帶有通用的sram的接口,可以直接訪問內存,啟動時候零地址指向norflash,適合做代碼存儲並EIP的
nand flash:常用於存放較大的數據
mini2440啟動時,從0x00開始執行,其分為nand flash和nor flash上啟動。
arm啟動的時候內部結構大致如下:
1.Nor flash的有自己的地址線和數據線,可以采用類似於存儲器的隨機訪問方式,在nor flash上可以直接運行程序,所以nor flash可以直接用來做boot,采用nor flash啟動的時候會把地址映射到0x00上。mini2440就是直接把vivi直接燒錄在nor flash上。
2.Nand flash是IO設備,數據、地址、控制線都是共用的,需要軟件區控制讀取時序,所以不能像nor flash、內存一樣隨機訪問,不能EIP(片上運行),因此不能直接作為boot。
Mini2440把Bootloader燒到nand flash上啟動,因為在mini2440裡有一個內置的SRAM,叫做stepping stone,系統啟動加電後,會把nand flash上的起始4KB的內容拷貝到SRAM裡執行,這樣就實現了從nand flash啟動。如果bootloader小於4KB的話(像vboot),在SRAM裡就能boot,大於4KB的話(u-boot,vivi),在SRAM裡做一些基本初始化後,再把bootloader的剩余部分拷貝到SDRAM裡(>0x30000000)。
我們使用mini2440的時候,經常通過nor flash啟動,進入vivi的菜單(mini2440的Nor flash已經燒錄好了vivi),之後通過vivi的usb下載功能,把其他的bootloader下在到nand flash裡,下載完成後,再通過nand flash啟動,測試我們的bootloader。