- 記憶體開機是搜尋 NVRAM 上的開機程式來執行,支援的裝置有 SD/MMC (MMC0, MMC1)、NOR Flash、NAND Flash 及 SPI0 Flash。
- 週邊開機則是下載程式來執行,支援的裝置有 UART0、Ethernet (EMAC1) bootp/tftp、USB0 slave 成 RNDIS Ethernet 作 tftp。
一些名詞
SPL:Second Program Loader,也就是 Second bootloader
MLO:是 Memory Loader 縮寫?x-load?
一般開機流程:
- 內部 ROM 載入 SPL
- SPL 載入 bootloader
- bootloader 載入 OS
- OS 掛載根目錄,執行各種應用程式。
ROM
AM335x 第一個執行的程式位於處理器內部的 ROM (稱為 1st bootloader),會依照開機組態接腳 SYSBOOT[4:0] 設定的開機裝置的順序去嘗試開機程式。例如 SYSBOOT[4:0] =
- 10111:MMC0→SPI0→UART0→USB0
- 11100:MMC1→MMC0→UART0→USB0 (Beaglebone Black 沒按 BOOT 鍵通電,MMC1 是 eMMC、MMC0 是 µSD)
- 11000:SPI0→MMC0→USB0→UART0 (Beaglebone Black 按著 BOOT 鍵通電)
如果開機裝置是 NOR Flash,程式是可以直接執行 (XIP, eXecute In Place),可以跳過 SPL。
SPL 和 bootloader
SPL 由於容量的限制,只能有一些陽春的 bootloader 功能,主要就是讓外部 SDRAM 可以使用,然後載入較大的程式來執行。這個較大的程式可以是最後的 OS 或應用程式,但通常是一個較完整的 bootloader,可以有彈性的設定、可以做網路下載、可以更新、解壓縮程式等功能。在開發過程中,這些 bootloader 完成後通常不太需要去更動。SD Card 開機
SD Card 是常見開機裝置,裡面有一個稱為 boot 的 FAT 分割,用來放開機檔案。內部 ROM 會找這個分割裡叫 MLO 的檔案,載入作為 SPL。通常 MLO 是精簡版的 u-boot,會去載入另一個檔案 u-boot.img (不確定 u-boot.bin 是不是也可以) 作為 3rd bootloader,是完整版的 u-boot 。u-boot 預設會去執行 bootcmd 指定的指令,載入 uEnv.txt 的設定、zImage 及 dtb 檔,設定 Linux kernel 參數,最後執行 Linux kernel。Linux kernel 會掛載另一個分割,通常為 ext2/3/4 檔案系統,作為 rootfs。
SD 卡內容
- FAT 分割:boot
- 根目錄:MLO、u-boot.img、(optional) uEnv.txt
- ext3 分割:rootfs
- boot 目錄:zImage、(optional) dtb 檔
SD Card 有 FAT 分割的好處是電腦都支援,可以透過 SD 讀卡機接到電腦,方便置換、修改檔案。
SPL 除了用 FAT 模式的 MLO 外,也可以用 raw 模式,放在 SD card 的第 0、256、512、768 sector,也就是第 0、128 KB、256 KB、384 KB。雖然 eMMC/eSD 跟 SD 非常相似,但只能用 raw 模式,BeagleBon Black 就有 on-board eMMC 支援開機。
USB slave 開機
BeagleBoot Project PageUART 開機
UART0參考
- http://jchuang1977.pixnet.net/blog/post/30848988 (解釋 MLO/SPL,有些錯誤。MLO 是 SPL 沒錯,但 SPL 未必是 MLO)
- http://beagle.s3.amazonaws.com/esc/Uboot-esc-chicago-2010.pdf
- AM335x ARM® Cortex™-A8 Microprocessors (MPUs) Technical Reference Manual
- http://processors.wiki.ti.com/index.php/The_Boot_Process
- SPI Flash 接 BeagleBone Black 的 P9-17, 18, 21, 22,以及 P8-43 接 jumper 及 100 ohm 接地來選擇開機模式。
沒有留言:
張貼留言