桌面電腦剛加電時,一個叫做BIOS的軟件程序立刻獲得了處理器的控制權。(歷史上,BIOS是Basic Input/Output Software的縮寫,但現在這個單詞已經有了自身的含義,因為其完成的功能比以前復雜多了。)BIOS可能實際存儲在一塊閃存中,便於升級BIOS程序。
BIOS是一個復雜的系統配置軟件,它擁有硬件架構的底層信息。當電腦加電時,BIOS首先獲得處理器的控制權。它的主要任務是初始化硬件,特別是內存子系統,並且從PC的硬盤驅動器中加載操作系統。
在典型的嵌入式系統中,引導加載程序(bootloader)完成與BIOS相同的功能。對於定制嵌入式系統,你必須在開發計划中預留出時間,開發針對具體硬件板卡的引導加載程序。幸運的是,有幾個很好的開源引導加載程序可供選擇,你可以按照項目需求進行定制。
下面列出一些引導加載程序在系統加電時完成的重要任務:
初始化關鍵的硬件,比如SDRAM控制器、I/O控制器和圖形控制器。
初始化系統內存,並准備將控制權移交給操作系統。
為外設控制器分配必要的系統資源,比如內存和中斷電路。
提供一個定位和加載操作系統鏡像的機制。
加載操作系統,並將控制權移交給它,同時傳遞必要的啟動信息。這些信息可能包括內存總容量、時鍾頻率、串行端口速率和其他與底層硬件相關的配置數據。
需要注意的是:如果你的嵌入式系統基於定制的硬件平台,這些引導加載程序的功能必須由你,也就是系統的設計者來提供。
區別:與桌面PC的BIOS不同,大多數的嵌入式系統都采用這樣一種架構:當Linux內核掌握控制權時,引導加載程序就不復存在了。Linux內核要求收回那些之前被引導加載程序所占用的內存和系統資源。將控制權交回給引導加載程序的唯一方法就是重啟目標板。