rom
spl(secondary program loader)
u-boot
linux kernel
首先,第一步的 rom code 不可能太複雜,rom大小是乙個限制,最重要的還是因為其所能獲取的系統資訊太少,所以處理器只能使用簡單的方法去尋找能完成複雜功能的**,而後將處理器初始化工作交給它來完成。其次,spl 也不能很複雜,因為 rom code 只能將它載入到處理器內部 ram 中執行,一般處理器的內部 ram 都要小於128kb,其大小注定其不能完成很複雜的功能,所以 spl 需要初始化 ddr 再加更複雜的**載入到 ddr 中執行。
rom code 是晶元上電復位之後第一塊自動執行的**。rom code 固化在晶元中不能被使用者修改。
rom code 儲存在片上位址
0x40000000-0x40040000處。
rom code 有兩個主要的功能:
配置裝置並初始化主要的外設
建立堆疊
配置開門狗定時器1(設定到三分鐘)
配置 pll 和系統時鐘
為下一階段啟動做準備
為下一階段啟動檢查啟動源(spl)
把下一啟動階段的 bootloader **移動到記憶體中準備執行
rom code 針對不同的啟動源有不同的啟動過程,但最終還是為了把啟動源的**搬運至內部 ram 中執行,這裡我們主要解析下針對 mmc/sd 卡裝置,它的啟動過程是怎麼樣的。
初始化 mmc/sd 驅動
檢測是記憶體還是sd卡
配置位址
判斷儲存裝置是 raw 模式還是 fat 模式
如果是 fat 模式,就讀取主引導記錄並讀取啟動扇區查詢 mlo 檔案,並搬運到 ram 中執行
第二階段叫做 spl,但有些時候也叫 mlo。spl 是啟動 u-boot 前的乙個階段,並且必須從 啟動源(mmc、usb、sd、uart等)載入到內部 ram 中。spl 只有極少的功能,spl 主要的職責就是初始化 ddr,時鐘等最小系統,以讀取 u-boot 並載入到 ddr 中。
mlo 檔案是從哪來的呢?
在編譯 u-boot 的時候也會生成相應目標板的 mlo 檔案,好像老版本的 u-boot 沒有這功能。
u-boot 主要的工作就是正確載入 kernel。和 spl 類似,u-boot 也是要載入下乙個階段的 image,但是 u-boot 提供了更多外設的支援和更多的除錯工具。所以,u-boot 也要進行各個模組的配置,上述 spl 配置的部分,除了 ddr 外,u-boot 也會根據需求重新配置(這裡重置主要是u-boot 是乙個開源工程,其要相容某些特殊的晶元,從而需要做過載)。此外,u-boot 也會對網口,sd卡等根據需求進行配置。
完成配置後,u-boot 會從相應的儲存器或者外設讀取 kernel,並傳遞引數給 kernel,執行 kernel。
u-boot 允許使用者通過序列終端在核心啟動環境中做一些強大的基於命令的控制。使用者可以控制很多啟動引數和核心啟動命令。另外 u-boot 環境變數是可配置的,這些變數儲存在儲存媒介的
uenv.txt
中。am335x u-boot 使用者指南
。uimage 是與描述核心頭資訊交換過的核心映象。這個頭資訊是乙個 64kb的資訊塊,包含了目標架構、作業系統、核心尺寸、入口等資訊。u-boot 啟動 uimage的時候,頭資訊會在命令列輸出。
在讀出標頭檔案之後,u-boot 開始啟動 linux 核心。
am335x 能從不同的源啟動:mmc/sd,nand,nor,uart,ethernet,usb,spi和i2c。能從哪個源啟動由啟動階段決定。比如,spl/u-boot 只能從能被 rom code 識別的源啟動。
rom 和 spl bootloader在內部 ram 中執行,u-boot 和核心在 ddr 中執行。
僅代表個人看法
Am335x 啟動過程
啟動順序 針對ti oma3 evm linux一般的啟動順序是 上電的時候,omap裝置最開始的boot是從cpu內部的boot rom起來,這部分的 是出廠的時候固化的,不能被改變的。boot rom通過讀取外部boot pin的配置來尋找第乙個外部bootloader。可以尋找的裝置有nand...
Am335X編譯除錯環境搭建
am335x編譯除錯環境搭建 可以參考 1,配置伺服器端的編譯環境,參見sitara linuxsdk sdg 05.04.01.00.pdf p239 sitara linux sdk gcc toolchain 這裡由於是同事已經搭好環境,所以沒法確認細節問題 2,寫一段測試c include ...
Am335x之u boot LOGO的增加
am335x下增加u boot的logo比較簡單,詳細步驟如下 2,安裝 3,找到安裝後的目錄 tools bmptoraster,裝它拷貝到linux系統下 4,標頭檔案裡遮蔽 define compress,然後make它,生成a.out 5,自己做乙個24位的點陣圖,拷貝到a.out目錄下 6...