經(jīng)過了上一篇的配置,我們已經(jīng)執(zhí)行make就可以編譯出一個uboot.bin,但這還不夠,首先,此時的uboot并不符合三星芯片對bootloader的格式要求,同時,此時的uboot.bin也沒有結(jié)合我們的開發(fā)板進行配置,還無法使用。而要進行這樣的個性化配置,前提條件就是對uboot開機流程和編譯系統(tǒng)有所了解,本文主要討論前者。在三星的SoC中, 啟動流程可以分為三個階段BL0, BL1, BL2, BL3, 三星自己的手冊對BL1的解釋也不盡相同, 一種是將在iRAM中運行的程序都歸結(jié)為BL1; 一種是將iRAM中三星加密的代碼bl1.bin作為BL1, iRAM中剩余的部分作為BL2, 本文采用后者, 他們的主要分工如下:

  • BL0: ARM的起始地址都是0地址, 三星的芯片一般將0地址映射到iROM中, BL0就是指iROM中固化的啟動代碼, 主要負責加載BL1

  • BL1: 三星對于bootloader的加密代碼bl1.bin, 要放在外設中uboot.bin的頭上, 和一部分uboot.bin一起加載到iRAM中運行.

  • BL2: 從(nand/sd/usb)中拷貝的uboot.bin頭最大14K到iRAM中代碼中除去bl1.bin后剩余的部分, 負責設置CPU為SVC模式, 關(guān)閉MMU, 關(guān)閉中斷, 關(guān)閉iCache, 關(guān)閉看門狗, 初始化DRAM,初始化時鐘, 初始化串口, 設置棧, 校驗BL2并將其搬移到DRAM高位地址, 重定位到DRAM中執(zhí)行BL3

  • BL3:是指在代碼重定向后在內(nèi)存中執(zhí)行的uboot的完整代碼, 負責初始化外設,更新向量表, 清BSS, 準備內(nèi)核啟動參數(shù), 加載并運行OS內(nèi)核

可以借助下圖理解這個流程

photoshop培訓,電腦培訓,電腦維修培訓,移動軟件開發(fā)培訓,網(wǎng)站設計培訓,網(wǎng)站建設培訓

我們常說的uboot是一個兩階段bootloader,就是指上述的BL2和BL3. BL2主要做硬件直接相關(guān)的初始化,使用匯編編寫;BL3主要為操作系統(tǒng)的運行準備環(huán)境,主要用C編寫,這里以ARM平臺為例分析其啟動流程。下面是啟動過程中主要涉及的文件

延伸閱讀

學習是年輕人改變自己的最好方式-Java培訓,做最負責任的教育,學習改變命運,軟件學習,再就業(yè),大學生如何就業(yè),幫大學生找到好工作,lphotoshop培訓,電腦培訓,電腦維修培訓,移動軟件開發(fā)培訓,網(wǎng)站設計培訓,網(wǎng)站建設培訓學習是年輕人改變自己的最好方式