Exynos4412启动过程分析
?學習Exynos4412啟動流程前,我們先看看三星4412芯片啟動框圖:
我們從圖中可以看到4412內部有64K的ROM和256K SRAM,在ROM中已經固化好了一段代碼,當硬件上電后首先運行的就是這段代碼,這段代碼三星起名為BLO(iROM BOOT 代碼)。其作用是初始化SRAM,并將eMMC中256k代碼拷貝到SRAM中,進行初始化DRAM。在圖中我們很清楚看到這一個運行過程。
1、在芯片的iROM中已經固化一個代碼,當硬件上電后就讀取OM電平從而確定硬件設置的啟動模式:0110為從eMMC啟動,1000位SD卡啟動;
2、把已經設置啟動存儲單元代碼復制到內部RAM中并跳轉到RAM運行;
3、運行OS;
一、iROM
? ? ? ? iROM把啟動設備上特定位置處的程序讀入片內存 (iRAM) ,并執行它。這個程序被稱為?BL1(Bootloader 1)?,BL1 是三星公司提供的,無源碼。
? ? ? ? BL1又把啟動設備上另一個特定位置處的程序讀入片內內存,并執行它。這個被稱為?BL2(Bootloader 2)?,是我們編寫的源碼。
下圖是 iROM 啟動流程圖:
? ? ? ?
???????? 由上圖可以看出,首先關閉看門狗,關閉中斷及MMU,關閉數據緩存,打開指令緩存,清除TLB,然后將其他核進入IDLE模式,只留CPU0,這里有了第一個跳轉分支,IROM判斷當前啟動模式,是冷啟動還是喚醒,如果是喚醒模式,那么就是直接跳轉到BL1,在BL1里面我們會再次判斷是否是喚醒模式,如果是就直接跳轉到喚醒函數,一般都是linux內核的喚醒句柄。當然在裸機里都是冷啟動的,休眠喚醒一般是不需要關注的,當然如果你的裸機程序需要支持休眠喚醒,就需要增加相應的代碼了。
? ? ? 繼續分析,設置IRQ及SVC模式的棧空間,這個時間,棧地址是其內部的一片IRAM,這小片RAM是IROM運行的外部隨機存儲器,沒有這片小內存,IROM是無法運行的。接下了就是初始化IROM里面所使用的各種變量,初始化只讀數據段,未初始化數據段清零,導出部分核心函數,這個函數可以在BL1中使用,獲取當前復位的狀態,設置系統時鐘分頻,獲取OM管腳配置模式,這里可以從多種外設啟動,具體啟動模式如下表:
? ? ? 簡單地說,iROM就是先設置程序運行環境 (比如關看門狗、關中斷、關MMU 、設置棧 、設置棧 、啟動 PLL 等 );然后根據OM引腳確定啟動設備 (NAND Flash/SD 卡/其他 ),把 BL1 從里面讀出存入iRAM;最后啟動 BL1 。
二、BL1?
下圖是 BL1 的啟動過程
單地說,也是設置程序運行環境(初始化中斷、設置棧等 );然后從啟動設備上把 BL2讀入iRAM;最后啟動它。
三、SD卡作為啟動方式
? ? ?BL1 位于SD卡偏移地址 512字節處(即從第一個扇區開始,前面有一個扇區保留,每個扇區512字節,為什么保留第一個扇區,如果有同學對DOS分區表有過研究,就能明白其中的道理了,第一個扇區是分區表的配置區),iROM從這個位置讀入8K 字節的數據,存在iRAM地址 0x02021400位置處。 所以 BL1不能大于8K 。
? ? ?IROM計算校驗和且驗證通過后并解密BL1成功后就可以跳轉到BL1了,至此IROM已執行完備,權限已交由BL1了,補充說明一下,解密BL1是加密模式啟動時才需要的,非加密模式啟動是無需解密BL1的。
? ? ? BL2 位于 SD 卡偏移地址 (512 +8K)字節處,BL1從這個位置讀入14K 字節的數據,存在iRAM 地址 0x02023400 處。 BL2 不能大于(14K – 4) 字節,最后 4字節用于存放較驗碼(在匯編流水燈試驗中我們用mkbl2工具制作的BL2,其中mkbl2工具最主要的作用就是計算出校驗碼)。
? ?如果我們的程序大于 (14K – 4) 字節,那么需要截取前面 (14K – 4) 字節用來制作BL2并燒入SD卡偏移地址 (512 +8K) 字節處。當BL2啟動后,由它來將存放在SD卡另外位置的、完整程序讀入內存。
總結
以上是生活随笔為你收集整理的Exynos4412启动过程分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【AngularJS】—— 2 初识An
- 下一篇: 小丸工具箱使用教程