在Raspberry Pi(以下簡稱rpi)板子上,那顆主晶片裡包含了CPU與GPU,接上電源開機時,最先動作的是GPU(聽起來有點怪,但卻是事實),晶片裡有ROM,含有GPU要執行的程式碼,這部份的開機程式碼為Stage 1。
Stage 1會把Stage 2的程式碼(位於SD記憶卡第一個分割區裡,檔名為bootcode.bin)載入L2 cache。
Stage 2負責啟動SDRAM,並載入Stage 3的程式碼(位於SD記憶卡第一個分割區裡,檔名為loader.bin)放進SDRAM。
Stage 3看的懂elf格式,負責載入start.elf(GPU韌體的主要部分)。
start.elf會讀取config.txt、cmdline.txt,並劃分記憶體給CPU與GPU使用,然後載入kernel.img(通常這就是linux kernel了),kernel.img是CPU第一份開始執行的程式碼。
更新:新版韌體已無loader.bin,也就是說,Stage 3與Stage 2合併了。
參考資料:
- Raspberry Pi Forum - Raspberry Pi boot process
- RPi config.txt - eLinux.org
- R-Pi Boot process « FreeBSD developer's notebook
- GitHub raspberrypi / firmware,rpi韌體的部份。
- GitHub dwelch67 / raspberrypi,不使用作業系統,直接與rpi低階硬體打交道。
No comments:
Post a Comment