最近在研究rt1050程式燒寫相關的演算法,於是對程式啟動相關部分的知識進一步的學習理解,簡單的梳理一下這兩天查閱資料後對bootloader及啟動模式的一些了解;
bootloader:即引導引導程式,就是在執行韌體前需要進行執行的**,它主要是引導程式,及對映一些記憶體等一些作用。
(引用網上的一段話:在cpu剛上電啟動的時候,一般連記憶體控制器都沒有配置過,根本無法在記憶體中執行程式,更不可能處在linux核心的啟動環境中。為了初始化cpu及其他外設,使得linux核心可以在系統主存中跑起來,並讓系統符合linux核心啟動的必備條件,必須要有乙個先於核心執行的程式,他就是所謂的引導引導程式(boot loader)。
而boot loader並不是linux才需要,是幾乎所有的執行作業系統的裝置都具備的。
啟動方式:這裡以stm32為例,stm32有三種啟動模式
1.boot1=x boot0=0 從使用者快閃儲存器啟動,這是正常的工作模式。
2.boot1=0 boot0=1 從系統儲存器啟動,這種模式啟動的程式功能由廠家設定。
3.boot1=1 boot0=1 從內建sram 啟動,這種模式可以用於除錯。
啟動模式即晶元在啟動時把那部分的位址對映到0x00000000,stm32從0x00000000開始執行程式,比如模式1以快閃儲存器方式啟動,則將主flash位址0x08000000對映到0x00000000,然後從0x00000000開始啟動,但是你訪問0x0800000也同樣能訪問到其程式。
bootloader則是放在0x08000000的韌體中的頭部,需要我們在燒寫韌體的時候將其和我們的邏輯**鏈結在一起然後燒寫到flash中。cpu則先執行bootloader進行一些配置;
在說一下關於isp(在系統程式設計)和iap(在應用程式設計);
我現在對iap和bootloader有些迷惑,我現在的理解就是bootloader,就是我們設計後的bootloader,後續客戶直接進入到這段bootloader,而不再是進入到isp中。在我們設計bootloader時就可以去設計如何公升級更新我們的**。
即上述啟動模式中,執行模式1則進入到iap,進入到我們設計的bootloader中去引導程式的執行。
剛開始寫部落格,語言組織以及排版都很糟糕.
Bootloader介紹和啟動
一 bootloader的介紹 1.什麼是bootloader bootloader是硬體啟動的引導程式,是執行作業系統的前提。在作業系統核心或使用者應用程式執行之前執行的一段小 對硬體進行相應的初始化和設定,最終為作業系統準備好環境。2.bootloader的特點 bootloader不屬於作業系...
bootloader啟動流程
bootloader a.svc模式 關中斷 mmu cache 看門狗等 b.基本初始化 時鐘 串列埠 flash 記憶體 c.自搬移到記憶體 d.設定棧,調到c部分 e.大部分硬體初始化 網絡卡 sd卡 usb f.搬移核心到記憶體 g.執行核心 kernel a.自解壓核心 b.執行核心彙編部...
bootloader 核心啟動引數
一 啟動引數的傳遞過程 啟動引數是包裝在資料結構裡的,在linux kernel 啟動的時候 bootloader 把這個資料結構拷貝到某個位址 在改動pc 跳向核心介面的同時 通過通用暫存器 r2來傳遞這個位址的值 下面這句話就是 uboot 跳向linux kernel的 bootm 命令 th...