ARM體系下BOOT程序功能原理簡介


一、功能簡介

  Boot程序主要功能就是系統各方面的初始化,主要包含如下幾方面。

1、      設置CPU模式

  在ARM體系中CPU工作模式主要分為7種,分別是:

  (1)    用戶模式(usr,User Mode):ARM處理器正常的程序執行狀態。

  (2)    快速中斷模式(fiq,Fast Interrupt Request Mode):用於高速數據傳輸或通道處理,當出發快速中斷時進入該模式。

  (3)    外部中斷模式(irq,Interrupt Request Mode):用於通用的中斷處理,當觸發外部中斷時進入該模式。

  (4)    管理模式(svc,Supervisor Mode):操作系統使用的保護模式,在系統復位或者執行軟中斷指令SWI時進入。

  (5)    數據訪問終止模式(abt,Abort Mode):當數據或指令預取終止時進入該模式,可用於虛擬存儲及存儲保護。

  (6)    系統模式(sys,System Mode):運行具有特權的操作系統任務。

  (7)    未定義指令終止模式(und,Undefined Mode):當未定義的指令執行時進入該模式,可用於支持硬件協處理器的的軟件仿真。

  在此過程中主要是將CPU設置成SVC模式。

2、      關閉看門狗

  看門狗(watch dog)一般是個硬件模塊,其作用是,在嵌入式操作系統中,很多應用情況是系統長時間運行且無人看守,為防止系統死機,看門狗會幫自動重啟系統。其實現原理簡單來說就是硬件上有個記錄超時的功能,然后要求用戶每隔一定的時間對其進行操作,比如往里面寫入一些固定的值之類的,俗稱“喂狗”,當硬件判斷超時了還沒有被喂狗,看門狗就會重新啟動系統,而我們在boot初始化階段,要是不關閉看門狗的話就需要單獨寫一個喂狗程序,相比寫喂狗程序而言,關掉它更實在些。

3、      關閉中斷

  關中斷即將對應的中斷寄存器設置為disable即可。

4、      設置堆棧SP指針

  設置SP指針就只一個動作,即讓SP等於某個地址即可,但背后的邏輯是自己要先弄清楚當前系統是如何使用堆棧的,堆棧生長方向是向上還是向下。在給SP賦值前要確保對應的地址空間是專門分配給堆棧使用的,保證堆棧的大小相對合適。

5、      清除BSS段

  在計算機系統中數據會按照不同的用途存放在不同的區域,其區域主要分為如下幾類。

  (1)    bss段(bss segment):通常是指用來存放程序中為初始化的全局變量的一塊內存區域。bss段屬於靜態內存分配。

  (2)    text段(code/text segment):通常是指用來存放程序執行代碼的一塊內存區域。該部分區域大小在程序運行前就已經確定了,通常該區域屬於只讀(某些架  構也允許寫,及允許修改程序)。

  (3)    堆(heap):堆是用於存放進程運行中被動態分配的內存段,它的大小並不固定,可動態擴張或縮減。當進程調用malloc等函數分配內存時,新分配的內存就添加到堆上(堆被擴張);當利用free等函數釋放內存是,被釋放的內存從堆中被剔除(堆被縮減)

  (4)    棧(stack):棧又稱堆棧,是用戶存放程序臨時創建的局部變量,其特點是先進后出,所以棧方便用來保存/恢復調用現場。

該過程中就是將對應的bss段都設置為0,其對應的地址空間就是哪些未被初始化的全局變量之類的地址。

6、      異常中斷處理

  該過程就是實現對應的常見的那些處理中斷的部分內容,boot在初始化的時候,主要目的只是初始化系統及引導系統,所以中斷處理部分的代碼往往相對比較簡單。

 

Uboot源碼中start.S源碼詳解

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM