對Bootloader(引導引導程式)的幾點理解

2022-05-04 19:24:40 字數 1389 閱讀 6045

1、在加電復位之後,大多數處理器都會從乙個預設的位址處獲取**。比如mips結構的cpu會從0xbfc00000處取第一條指令,而arm結構的cpu則從位址0x00000000處取第一條指令。因此,在嵌入式開發板中,需要把儲存器件rom或flash等對映到這個預設的位址處,bootloader就存放在這個位址開始處,這樣一上電就可以執行bootloader。

2、當bootloader完成基本的處理器和平台初始化之後,它的主要任務是獲取並引導乙個完整的作業系統。它負責定位、載入以及將控制權移交給主作業系統。當作業系統獲得控制權之後,bootloader就會被覆蓋,不復存在了

3、在正確地初始化dram控制器和dram本身之前,嵌入式系統能做的事情很少。bootloader首先必須要做的工作之一就是啟用記憶體子系統。當記憶體初始化完成後,它就成為系統的可用資源。實際上,很多bootloader在完成記憶體的初始化之後,所做的第一件事就是將它們自身複製到dram中,以加快執行速度。

4、在系統加電後,bootloader獲得控制權時,不存在程式執行的基礎設施,bootloader必須創造它自身的執行環境,並且在必要時將自身移動到ram的合適位置。

5、當bootloader獲得控制權時,並不存在上下文或執行環境。在bootloader初始化處理器和相關硬體之前,系統中沒有任何dram可用。而在典型的c函式中,任何區域性變數都儲存在記憶體棧中。也就是說,在bootloader初始化處理器和相關硬體之前,是不能呼叫c語言編寫的**的。那麼,我們還可以推理出,bootloader是不可能完全使用c**編寫的,其必須首先使用彙編**初始化乙個合適c**執行的環境後才能跳轉到c**處執行。

6、在編譯和鏈結生成bootloader時,開發人員必須控制映象的構造和鏈結。尤其是當bootloader需要將其自身從快閃儲存器重新部署到ram中時,更是如此。開發人員必須傳遞很多引數給編譯器和聯結器,用於定義最終可執行映象的特徵和布局。**的組織結構需要符合處理器的引導要求(最初的可執行指令必須放在快閃儲存器中的乙個預定位置,這個位置取決於使用的處理器和硬體架構)。那麼,開發人員如何指定乙個二進位制映象的內部結構呢?可以傳遞給聯結器乙個鏈結描述檔案,也稱為聯結器命令指令碼。

7、硬體設計保證了處理器可以從快閃儲存器中正確獲取指令,並且保證了系統的時鐘頻率是某個預設值,除此之外,程式幾乎不能做任何假定。實際上,大多數處理器在啟動時都沒有可使用的dram來暫時儲存變數或是用作棧,然而,c程式的函式呼叫規範(calling convention)需要乙個棧。

什麼是引導引導程式?

引導引導程式 boot loader 會引導作業系統。當機器引導它的作業系統時,bios 會讀取引導介質上最前面的 512 位元組 即人們所知的 主引導記錄 master boot record,mbr 在單一的 mbr 中只能儲存乙個作業系統的引導記錄,所以當需要多個作業系統時就會出現問題。所以需...

GRUB 引導引導程式 20210209

在系統啟動的第二步中,開始執行引導程式,那引導程式是 來的呢?引導程式是grub安裝到mbr中。grub,乙個引導引導程式,屬於gnu專案。它是 多引導規範 的 參考實現 可以使用者在安裝了多個作業系統的主機上選擇要啟動的系統,或者選擇特定的核心配置。作業系統的核心通常儲存在檔案系統中的,但是bio...

如何使用KBOOT引導引導程式的CRC32校驗和

在 使用kinetis k22微控制器flash內建usb hid引導程式的方法 文章中,我介紹了如何使用tinyk22 或frdm k22f 的flash內建usb hid引導程式。為確保載入的應用程式不會以某種方式損壞,使用迴圈冗餘校驗和 crc 對其進行驗證非常重要。kboot bootloa...