嵌入式系統中引導程序的實現(上電到main)

在嵌入式系統的開發過程中,技術難點主要在於系統引導程序的編寫,爲此本文將詳細論述在ARM7基礎上開發嵌入式系統時引導程序的實現。

引導加載程序是系統加電後運行的第一段軟件代碼。當一個微處理器最初啓動時,他首先執行預定地址處的指令。通常這個位置是隻讀內存,其中存放着系統初始化或引導程序。在PC系統中,引導加載程序由BIOS(其本質就是一段固件程序)和位於硬盤MBR中的操作系統BootLoader(比如,LILO和GRUB等)一起組成。BIOS進行CPU初始化、配置其他硬件,並完成硬件檢測和資源分配。然後,BIOS判斷出哪一個磁盤包含有操作系統,再把硬盤MBR中的Boot Loader讀到系統的RAM中,然後將控制權交給操作系統BootLoader。BootLoader的主要運行任務就是將內核映象從硬盤上讀到RAM中,然後跳轉到內核的入口點去運行,也即開始啓動操作系統,並把控制權交給操作系統,再由操作系統引導其他應用程序。

在嵌入式系統中,通常並沒有像BIOS那樣的固件程序(注:有的嵌入式CPU也會內嵌一段短小的啓動程序),因此整個系統的加載啓動任務就完全由BootLoader來完成。比如在一個基於ARM7TDMIcore的嵌入式系統中,系統在上電或復位時通常都從地址0x00000000處開始執行,而在這個地址處安排的通常就是系統的BootLoader程序。

嵌入式系統的資源有限,程序通常都是固化在ROM中運行。ROM中程序執行前,需要對系統硬件和軟件運行環境進行初始化,這些工作由用彙編語言編寫的引導程序完成。引導程序是嵌入式程序的開頭部分,應與應用程序一起固化在ROM中,並首先在系統上運行。他應包含各模塊中可能出現的所有段類,併合理安排他們的次序。寫好引導程序是設計好嵌入式程序的關鍵,系統引導程序所執行的操作依賴於正在開發其軟件的系統,一般流程包括:
初始化端口,
屏蔽中斷,
把程序拷貝到SRAM中;
完成代碼的重映射;
配置中斷句柄,
連接到C語言人口,進入應用程序主循環。

發佈了84 篇原創文章 · 獲贊 165 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章