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