傳統的系統開機流程如下:
首先是圖中ROM方塊,又稱作Zero Stage Bootloader
CPU內部的ROM中會存放引導啟動程式,當開發版上電後,系統時脈開始震盪,CPU收到時賣訊號後,便會從這個ROM的位址(如0x08000000)開始讀取啟動程式碼。
這部分的啟動程式包含硬體中斷向量、SRAM的設定參數等等。
接著是LOADER部分,又稱作First Stage Bootloader
當SRAM被設定完成,CPU會把要執行的程式碼由外部的EEPROM或其他儲存媒介載入到SRAM中執行。由於CPU內部的ROM非常珍貴,因此比較主要的開機程序會在SRAM中執行。
這裡會再把板子上的DDRAM做初始化設定,並且載入下一階段的啟動程式。
下一步是RUNTIME程式,其全名是Runtime envoiroment,執行時系統
可以理解成所有應用程式會呼叫到共同程式碼,也就是標準Library。
在Linux系統中可以是glibc等等。
他是一種把半編譯的執行碼在目標機器上執行的環境,其包含SOC的安全設定以及Bootloader的設定等等。在RISC-V架構中,Runtime系統是由OpenSBI實作的。
最後在進入系統之前,要先載入Bootloader。
常見的Bootloader有U-Boot, GRUB, LinuxBoot等等。這層Bootloader做的事情是建立核心的檔案系統、網路設定、以及開機的選項設定等,有些也會加入顯示器設定等周邊裝置的參數。
最後,我們就能夠進入Operation System(OS)來做任何我們想要的操作。
RISC-V與傳統開機流程有些許不同,其中最大的差異是第二階段啟動