學習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 系統移植
移植要點 1 環境搭建 2 boot配置 移植 編譯及燒寫 3 kernel配置 移植 燒寫及除錯 4 根檔案系統的製作gcc編譯流程 預處理 編譯彙編 鏈結核心子系統 程序管理 記憶體管理 檔案系統 裝置管理 網路交叉編譯工具鏈安裝步驟 1 解壓gcc 4.6.4.tar.gz到 toolchai...
exynos4412中斷程式設計
我們知道,arm核能處理的異常有7種,但僅僅區分異常的種類顯然不能夠滿足需求。拿手機來說,觸控螢幕和按下音量鍵可能都是irq異常,但是arm並不能將他們區分開,而事實的情況是針對這兩種中斷,我們的處理方式顯然不同,為此就需要在soc中整合中斷控制器 generic interupt controll...
Exynos4412晶元的時鐘管理單元
本章介紹exynos4412晶元的時鐘管理單元 cmu cmu控制鎖相環 pll 並為exynos4412晶元中的各個ip 匯流排和模組產生時鐘。它們還與電源管理單元 pmu 通訊,以便在進入某個低功耗模式之前停止時鐘,以通過時鐘切換來降低功耗。1.exynos4412晶元的時鐘體系介紹 不同的模組...