X-002 Exyson4412芯片啟動過程分析


 

移植u-bootFriendlyARM Tiny4412開發板上,首先我們需要對Samsung Exyson4412芯片的啟動方式系統時鍾初始化串口初始化內存初始化以及開發板的內存地址空間分配有一個清楚的認識。

下面是一些參考資料:

1>技術部落 (這個網站對Exyson4412芯片的啟動、時鍾系統、串口以及內存初始化進行了詳細的講解)

2>、嵌入式Linux系統開發完全手冊_基於4412_上冊.pdf (這個文檔是韋東山寫的,講的也非常好)

3>Android_Exynos4412_iROM_Secure_Booting_Guide_Ver.1.00.00.pdf (這篇文檔是Samsung的官方文檔,詳細介紹了這款Exyson4412的啟動)

4>SEC_Exynos4412_Users Manual_Ver.1.00.00.pdf (這篇文檔也是Samsung官方文檔,是exynos4412的用戶手冊,有兩千八百多頁,包含了exynos4412的詳細信息)

1Exyson4412芯片的啟動方式

    參考Exynos 4412 SCP_Users Manual_Ver.0.10.00_Preliminary0.pdf第五章Booting Sequence

clip_image001

clip_image003

clip_image005

Ÿ   iROM是存儲在內部的64KROM中的,主要進行CPU的時鍾,堆棧等基本初始化工作。

Ÿ   iROM從啟動外設加載BL1到內部256KBSRAM中,啟動外設是由OM來決定的,根據安全啟動設置值,iROM可能會較驗BL1鏡像文件。

Ÿ   BL1初始化內部系統時鍾和DRAM控制器,在初始化完成DRAM控制器,開始加載OS鏡像文件,根據安全啟動設置值,BL1可能會較驗OS鏡像文件。

Ÿ   等啟動完成后,BL1就跳轉到操作系統進行執行。

<1> iROM iROM把啟動設備上特定位置處的程序讀入片內存 (iRAM) ,並執行它。iROM的啟動過程如下圖所示(摘自Android_Exynos4412_iROM_Secure_Booting_Guide_Ver.1.00.00.pdf):

clip_image007

由上圖可以看出,iROM首先關閉看門狗,關閉中斷及MMU,關閉數據緩存,打開指令緩存,清除TLB,然后將其他核進入IDLE模式,只留CPU0,這里有了第一個跳轉分支,IROM判斷當前啟動模式,是冷啟動還是喚醒,如果是喚醒模式,那么就是直接跳轉到BL1,在BL1里面我們會再次判斷是否是喚醒模式,如果是就直接跳轉到喚醒函數。

接着設置IRQSVC模式的棧空間,棧地址是其內部的一片IRAM,這小段RAMIROM運行的外部隨機存儲器,沒有這片小內存,IROM是無法運行的。接下了就是初始化IROM里面所使用的各種變量,初始化只讀數據段,未初始化數據段清零,導出部分核心函數,這個函數可以在BL1中使用,獲取當前復位的狀態,設置系統時鍾分頻,獲取OM管腳配置模式,從指定的啟動設備上拷貝BL1的代碼到iRAM中。如果拷貝成功,就驗證校驗和,BL1的前16個字節就是提供給IROM用來標識BL1相關信息的。

    簡單地說,iROM就是先設置程序運行環境 (比如關看門狗、關中斷、關MMU 、設置棧 、設置棧 、啟動 PLL );然后根據OM引腳確定啟動設備 (NAND Flash/SD /eMMC/其他 ),把 BL1 從指定的啟動設備里面讀出存入iRAM,接着在iRAM里面執行 BL1的代碼。

    <2> BL1BL2 :摘自Android_Exynos4412_iROM_Secure_Booting_Guide_Ver.1.00.00.pdfP10

clip_image009

clip_image010

clip_image012

clip_image013

2Exyson4412芯片啟動模式選擇

OMpin OM[5:1]設置Exyson4412從不同的外設加載程序,如SD卡,NANDFlash等。

clip_image015

Tiny4412的電路圖(Tiny4412-1412-Schematic.pdf)如下圖所示:

clip_image017

clip_image019

Table 5-3 OM Pin SettingTiny4412的電路圖的BootingMode Option可知,XOM0,XOM1,XOM4,XOM5都設置成0,那么主要看XOM2XOM3了,這兩個腳分別接在74LVC1G04反向器的輸入和輸出上。XOM21時,XOM30OM[5:1]5b'00010,此時選擇的是從SD(SDMMC_CH2)啟動;XOM20時,XOM31OM[5:1]5b'00100,此時選擇的是從eMMC(eMMC44_CH4)啟動;這個啟動方式主要由電路板上開關決定。

3BL1BL2在啟動設備上的存放位置、大小、讀到 iRAM哪個位置?

    3.1啟動設備是SD卡,BL1BL2SD卡上存放位置為:

摘自:Android_Exynos4412_iROM_Secure_Booting_Guide_Ver.1.00.00.pdf P24

clip_image021

BL1 位於SD卡偏移地址 512字節處(即從第一個扇區開始,前面有一個扇區保留,每個扇區512字節,第一個扇區是分區表的配置區),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字節用於存放較驗碼。

如果我們的程序大於 (14K 4) 字節,那么需要截取前面 (14K 4) 字節用來制作BL2並燒入SD卡偏移地址 (512 +8K) 字節處。當BL2啟動后,由它來將存放在SD卡另外位置的、完整程序讀入內存。

 

3.2啟動設備是eMMC卡,BL1BL2SD卡上存放位置為:

摘自:Android_Exynos4412_iROM_Secure_Booting_Guide_Ver.1.00.00.pdf P24

clip_image022

 

參考文檔

    1http://www.cnblogs.com/pengdonglin137/p/5080309.html

    2http://www.techbulo.com/1335.html

 

 

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM