ARM芯片上电启动流程
????????下圖是大多數(shù)開發(fā)板所有的一個存儲單元框架,接下來以此圖為基礎描述ARM芯片的上電啟動流程。
我們首先來了解幾個關鍵詞:
IROM (Internal ROM):芯片內部固化存儲代碼的存儲器
IRAM (Internal RAM):?在IROM啟動運行的時候,外置SDRAM還沒有初始化好,而IRAM是可用的,因此必須要把BL1加載到IRAM中運行,由BL1對SDRAM進行初始化。ROM為什么不初始化SDRAM呢?那是因為支持的SDRAM規(guī)格是可變的,由固化代碼來初始化顯得不夠靈活,而且固化代碼往往代碼量比較小,因為越多越容易出BUG。
Nand Flash :芯片外部非易失閃存技術的存儲器,沒有地址總線,不能直接運行代碼,需要將代碼加載到RAM上面才能運行。
SDROM:芯片外部的運行內存,由運行在IRAM上的BL1進行初始化,用于運行BL2與應用程序。
BL0:固化在芯片iROM中的啟動代碼。
? ? ? ? ??作用:初始化PPL和時鐘,設置看門狗,關閉中斷和看門狗,初始化堆和棧;判斷硬件的啟動方式,去不同的啟動方式的啟動設備里面加載BL1。
BL1:是指在iRAM自動從外擴存儲器(nand/sd/usb)中拷貝的uboot.bin二進制文件的頭最大16K(一般是4K或8K)代碼。
????????作用:初始化硬件,初始化RAM,初始化串口,分配堆棧空間,清空.BSS段,加載BL2。
BL2:是指在代碼重定向后在內存中執(zhí)行的uboot的完整代碼。
? ? ? ? 作用:初始化本階段要使用的硬件設備,加載內核,將內核映像和根文件系統(tǒng)映像從FLASH上讀到RAM空間中,為內核設置啟動參數(shù)。
上電啟動流程:
第一步:CPU先讀取運行iROM里面固化的啟動代碼BL0,進行一些基本的初始化,比如初始化PLL和時鐘,關閉看門狗初始化堆棧,將flash中BL1的代碼加載到IRAM中,跳轉到IRAM中BL1的執(zhí)行地址執(zhí)行BL1。
第二步:在BL1中初始化硬件設備,初始化串口,初始化SDRAM,將flash中BL2的代碼加載到SDRAM中,分配堆棧空間,設置好棧跳轉到SDRAM中BL2的執(zhí)行地址執(zhí)行BL2。
第三步:初始化本階段使用的硬件設備,初始化MMU,檢測系統(tǒng)內存映射,?將內核和文件系統(tǒng)從Flash讀取RAM中,為內核設置啟動參數(shù),加載內核,掛載文件系統(tǒng)。
note:
1、為什么BL0不初始化SDRAM呢?
????????那是因為支持的SDRAM規(guī)格是可變的,由固化代碼來初始化顯得不夠靈活,而且固化代碼往往代碼量比較小,因為越多越容易出BUG。
2、為什么不把BL2也加載到IRAM上運行?
? ? ? ? 因為IRAM非常小,一般是96KB,而BL2一般會比96KB大,所以要在BL1中初始化SDRAM,然后將BL2加載到SDRAM中運行。
總結
以上是生活随笔為你收集整理的ARM芯片上电启动流程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: arm芯片 安装linux,linux操
- 下一篇: 手机端的多图片剪辑上传支持手势支持预览