最近,一直在做ramdisk,把arm linux的啟動過程完整的看了一遍,收穫不少,心想可以寫點原創了。
考慮到網上的文件雖然有介紹arm linux的啟動過程的,但是一般沒有給出流程圖,也講的十分零星,沒有乙個全貌,我就主要以流程圖的方式給出,再一點一點的詳解每個過程,剛剛接觸嵌入式arm linux,很多問題理解不深,可能有錯誤的地方,還望各位高手指出,一起討論,一起進步,開源萬歲!
一 引言
在專用的嵌入式板子執行 gnu/linux 系統已經變得越來越流行。乙個嵌入式 linux 系統從軟體的角度看通常可以分為四個層次:
1. 引導引導程式。包括固化在韌體(firmware)中的 boot **(可選),和 boot loader 兩大部分。
2. linux 核心。特定於嵌入式板子的定製核心以及核心的啟動引數。
3. 檔案系統。包括根檔案系統和建立於 flash 記憶體裝置之上檔案系統。通常用 ram disk 來作為 root fs。
4. 使用者應用程式。特定於使用者的應用程式。有時在使用者應用程式和核心層之間可能還會包括乙個嵌入式圖形使用者介面。常用的嵌入式 gui 有:microwindows 和 minigui 懂。
引導引導程式是系統加電後執行的第一段軟體**。回憶一下 pc 的體系結構我們可以知道,pc 機中的引導引導程式由 bios(其本質就是一段韌體程式)和位於硬碟 mbr 中的 os boot loader(比如,lilo 和 grub 等)一起組成。bios 在完成硬體檢測和資源分配後,將硬碟 mbr 中的 boot loader 讀到系統的 ram 中,然後將控制權交給 os boot loader。boot loader 的主要執行任務就是將核心映象從硬碟上讀到 ram 中,然後跳轉到核心的入口點去執行,也即開始啟動作業系統。
而在嵌入式系統中,通常並沒有像 bios 那樣的韌體程式(注,有的嵌入式 cpu 也會內嵌一段短小的啟動程式),因此整個系統的載入啟動任務就完全由 boot loader 來完成。比如在乙個基於 arm7tdmi core 的嵌入式系統中,系統在上電或復位時通常都從位址 0x00000000 處開始執行,而在這個位址處安排的通常就是系統的 boot loader 程式。
——摘自詹榮開《嵌入式系統boot loader技術內幕》
二.基本概念
1.什麼是loader?。
2.什麼是boot?
boot是裝置每次上電或復位後執行的第一段**,也用於引導u-boot。是每個裝置必須的一小段**。我把它理解為bios,當然不能完全這樣理解,畢竟boot和u-boot合起來才完成了bios的工作。
兩者的區別與聯絡:
區別:loader通常在sdram裡執行,只執行一次。不需要每次都執行
boot通常存放在不丟失介質,如flash裡,在上電後,從flash複製到sdram裡執行
注:當然對於有些flash(如nor flash)也可以在flash中執行,但是在sdram裡執行更快,一般會copy到sdram裡再執行
聯絡:兩者都是為了引導u-boot而設計的
3.什麼是u-boot?
u-boot功能非常強大,可以初始化硬體裝置、建立記憶體空間的對映圖,可以使用各種命令,從而將系統的軟硬體環境帶到乙個合適的狀態,以便為最終呼叫作業系統核心準備好正確的環境。我覺得u-boot的核心目標就是引導linux kernel。
4.什麼是linux kernel?
kernel ——作業系統核心:是大多數作業系統的核心部分。它由作業系統中用於管理儲存器、檔案、外設和系統資源的那些部分組成。作業系統核心通常執行程序,並提供程序間的通訊。當然linux kernel並不像說的這麼簡單,但是對程式設計師來說就像天堂,我覺得是整個作業系統的精華所在,也是成為程式高手的捷徑,我也要看核心原始碼,修煉內功!^_^
5.什麼是ramdisk檔案系統?
所謂的ram驅動器,實際上是把系統記憶體劃出一部分當作硬碟使用。對於作業系統來講記憶體的訪問速度遠遠大於機械磁碟,所以ram驅動器肯定要比機械的硬碟快得多。
三.啟動過程全流程
AT91RM9200的啟動過程
系統上電,檢測bms,選擇系統的啟動方式,如果bms為高電平,則系統從片內rom啟動。at91rm9200的rom上電後被對映到了0x0和0x100000處,在這兩個位址處都可以訪問到rom。由於9200的rom中固化了乙個bootloaer程式。所以pc從0x0處開始執行這個bootloaer 準...
AT91RM9200啟動機制簡析
at91rm9200啟動機制簡析 本文以h9200m開發板為例,簡單分析一下at91rm9200處理器的啟動機制 一 h9200m開發板簡介 at91rm9200晶元的pa31 bms引腳的電平高低來決定選擇哪種啟動模式 at91rm9200 atmel 公司生產的基於arm9核的soc處理器.以下...
AT91RM9200新增串列埠驅動
uart串列埠驅動程式移植 uart串列埠驅動程式移植 仇潔婷,陳儒軍 在嵌入式控制系統採集站的設計方案中,需要用到 at91rm9200的5 個uart 串列埠,就會涉及到多個中斷的優先順序分配問題,而且也可能造成序列通訊的中斷不能及時響應,從而造成資料丟失。在 linux2.6.21 核心中,u...