1. 程式人生 > >初探嵌入式(arm9 2440)linux之一——載入u-boot

初探嵌入式(arm9 2440)linux之一——載入u-boot

嵌入式系統區別與簡單的微控制器(如stc89c51、stm32等),主要在於載入了linux系統。當然,不可忽略stm32可以載入ucOS(Micro Control Operation System)。ucOS是一個基本的帶任務排程的實時作業系統(RTOS),用來做嵌入式入門比較合適。我會在後期有時間整理部分ucOS資料。對於裸板程式來說,arm的開發跟stc89c51和stm32區別不大。

現在個人PC基本都是windows系統(用蘋果的土豪請無視我),有裝系統經驗的人應該知道計算機進入BIOS之後會通過GRUB進行系統引導,引導的就是我們的win7,win8,win10系統。同樣的道理,本文所說的u-boot起得也是一個系統引導的作用,而引導的是linux系統。u-boot全稱是Universal Boot Loader。嗯,其實就是一個boot loader。看其原始碼可以發現,它的大部分是從相應的linux核心中簡化形成的。程式碼在git上可以查閱下載,但是在github上居然沒有找到,希望有找到的同志告知一下,謝謝。

u-boot可以支援linux、NerBSD、VsWorks、QNX、RTEMS、ARTOS、LynxOS、Android(這裡面有很多我也不瞭解,想深究的建議Google),其中對linux的支援最為完善。u-boot可以在PowerPC、ARM、x86、MIPS這些CPU上執行。據百度百科的說法是,以PowerPC的支援最為豐富。但我感覺那是前幾年的情況。近幾年PowerPC漸漸勢弱,可能是功耗相對於x86過大的緣故。看一些相關資料就會發現,曾經無比強大的PowerPC將很有可能慢慢被淘汰。扯遠了,總之u-boot支援ARM,我們可以在ARM上用,這就可以了。此外,u-boot提供了許多裝置驅動原始碼。以我最近(2016年9月3號)下載的原始碼來看,足足提供了48個(在drivers資料夾中)。

下面來分析一下u-boot的載入方式。u-boot的工作模式分兩種:啟動載入模式和下載模式。

u-boot的啟動流程分為stage1和stage2兩個部分。

依賴CPU體系結構的程式碼在stage1階段,以組合語言實現。它包括:
1. 定義入口點
2. 設定異常向量
3. 設定CPU速度、時鐘頻率及中斷控制暫存器
4. 初始化記憶體控制器
5. 將ROM中程式複製到RAM中
6. 初始化堆疊
7. 使用“ldrpc”指令轉到RAm中執行

stage2階段以C語言實現了一系列初始化並將環境引數讀入記憶體。在很多資料上看到以前版本的啟動函式在lib_arm資料夾下的board.c檔案中,但是最近(2016年9月3日)的版本中沒有這個資料夾,board.c檔案倒是不少,不過都是增減過之後的。