linux 系統啓動 第一課

linux系統從上電到系統運行起來(一)

預備知識

1、常見存儲器
存儲器根據掉電時數據是否丟失分爲RAM-RandomAccessMemory(隨機存取存儲器)和ROM-ReadOnlyMemory(只讀存儲器)兩大類
RAM掉電數據就會丟失,但是訪問的速度較快,常見比如計算機的內存
ROM掉電數據不丟失

RAM又可分爲SRAM-Static RAM和DRAM-DynamicRAM
SRAM速度非常快,是目前讀寫最快的存儲設備了,但是它也非常昂貴,所以只在要求很苛刻的地方使用,譬如CPU的一級緩衝,二級緩衝
DRAM分爲EDORAM、SDRAM、DDR RAM、RDRAM等,DRAM訪問的速度慢於SRAM,但是價格便宜很多,計算機內存就是DRAM
而通常所說的SDRAM 是DRAM 的一種,它是同步動態存儲器,利用一個單一的系統時鐘同步所有的地址數據和控制信號。使用SDRAM不但能提高系統表現,還能簡化設計、提供高速的數據傳輸。在嵌入式系統中經常使用。
Flash也是一種非易失型存儲器,它擦寫方便,訪問速度快,已大大取代了傳統的EPROM的地位。由於它具有和ROM一樣掉電不會丟失的特性,因 此很多人稱其爲Flash ROM。FLASH存儲器又稱閃存,它結合了ROM和RAM的長處,不僅具備電子可擦出可編程(EEPROM)的性能,還不會斷電丟失數據同時可以快速讀取數據,U盤和MP3裏用的就是這種存儲器。在過去的20年裏,嵌入式系統一直使用ROM(EPROM)作爲它們的存儲設備,然而近年來Flash全面代替了ROM(EPROM)在嵌入式系統中的地位,用作存儲bootloader以及操作系統或者程序代碼或者直接當硬盤使(U盤)。
目前來說主流的flash分爲NorFlash和NandFlash兩種。NOR Flash的讀取和我們常見的SDRAM的讀取是一樣,用戶可以直接運行裝載在NOR FLASH裏面的代碼,這樣可以減少SRAM的容量從而節約了成本。NAND Flash沒有采取內存的隨機讀取技術,它的讀取是以一次讀取一塊的形式來進行的,通常是一次讀取512個字節,採用這種技術的Flash比較廉價。用戶不能直接運行NAND Flash上的代碼,因此好多使用NAND Flash的開發板除了使用NAND Flah以外,還作上了一塊小的NOR Flash來運行啓動代碼。
NAND是高數據存儲密度的理想解決方案,NOR一般只用來存儲少量的代碼;NOR主要應用在代碼存儲介質中。NOR的特點是應用簡單、無需專門的接口電路、傳輸效率高,它是屬於芯片內執行(XIP, eXecute In Place),這樣應用程序可以直接在(NOR型)flash閃存內運行,不必再把代碼讀到系統RAM中。在1~4MB的小容量時具有很高的成本效益,但是很低的寫入和擦除速度大大影響了它的性能。NOR flash帶有SRAM接口,有足夠的地址引腳來尋址,可以很容易地存取其內部的每一個字節。NOR flash佔據了容量爲1~16MB閃存市場的大部分。NAND結構能提供極高的單元密度,可以達到高存儲密度,並且寫入和擦除的速度也很快。應用NAND的困難在於flash的管理和需要特殊的系統接口。
Nor Flash有自己的地址線和數據線,可以採用類似於memory的隨機訪問方式,在Nor Flash上可以直接運行程序,所以Nor Flash可以直接用來做boot,採用Nor Flash啓動的時候會把地址映射到0x00上。
Nand Flash是IO設備,數據、地址、控制線都是共用的,需要軟件區控制讀取時序,所以不能像Nor Flash、內存一樣隨機訪問,不能EIP(片上運行),因此不能直接作爲boot。

Nand Flash:適合大容量數據存儲,類似硬盤;
Nor Flash:適合小容量的程序或數據存儲,類似小硬盤;
SDRAM:主要用於程序執行時的程序存儲、執行或計算,類似內存,主要應用於嵌入式系統中。
SRAM :主要應用於計算機緩存;
DRAM :主要應用於計算機內存;

2、ARM啓動
不論是arm的何種處理器,其都是從0x0000 0000地址處開始執行程序的!

啓動流程

本文主要針對2440進行分析,不同的處理器的方式並不一定相同,但是大致的流程都相似
首先看下芯片手冊上芯片支持的幾種確定方式(一般都是由硬件決定啓動方式,具體參照各個芯片的手冊!)
2440支持的啓動方式如下:
在這裏插入圖片描述
可見,支持2種模式。NandFlash和非NandFlash(這裏是norflash,幾乎所有的嵌入式設備都支持的啓動方式! )

地址佈局如下:
在這裏插入圖片描述
從圖中可以看出左邊是norflash啓動的地址佈局,右邊是nandflash啓動的地址佈局。
回顧上述關於存儲器的知識,可以看出如果啓動模式是選擇從norflash啓動的話,直接通過存儲控制器將外部norflash的地址映射到0地址處,即可完成啓動。如果是從nandflash啓動的話,由於nandflash是無法運行程序的,因此處理器內部集成了4k的片內ram,也稱爲BootSRAM(又叫做stepping stone墊腳石),設備啓動後,發現是nandflash的啓動模式,首先硬件會自動把nandflash的前4K數據copy到片內ram,然後在運行boot代碼。(nandflash的首頁是不會有壞塊的!)

處理器啓動後,就這樣一步步的跳轉到boot!

附:由於各個soc設計上的不同,不同的處理器啓動方式不完全相同!由於2440年代較早,啓動模式較單一,讀者在做開發時,仔細研讀芯片手冊爲主要手段!雖然設備一般都支持從nandflash啓動,但nand的壞塊率較高,從可靠性上考慮,儘管norflash價格較貴,一般的嵌入式的設備都會選擇從norflash來做啓動。
設備跳轉到uboot之後的事情,下次在分享

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章