一、功能簡介
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在初始化的時候,主要目的只是初始化系統及引導系統,所以中斷處理部分的代碼往往相對比較簡單。