前面一階段的學習,我掌握了通過adb或者tf開燒寫系統、通過撥碼開關設定系統的啟動介質,今天我就要來詳細**一下這裡面的原理。撥碼開關是怎麼控制啟動介質的選擇的,燒寫的都是些什麼東西?被燒寫到了什麼地方?晶元內部有怎樣的機制去配合這些燒寫過程?這都是我們要詳細**的問題。這些問題其實都是屬於乙個大問題:booting sequence,每一種晶元都有自己獨特的booting sequence。boot在這裡是引導的意思,sequence是連續順序次序的意思,代表了一種過程,所以這個短語的意思也就是引導過程。今天的內容主要分為如下幾個部分:
下面是4412位址空間的整體的概覽,具體每個位址範圍內是什麼含義,可以自己去看晶元手冊
開頭64k是給irom準備的,irom也就是internal rom,是一部分是唯讀儲存器。這裡面儲存了一段程式,是固化的,不用燒寫的,這段程式是晶元上電最先執行的一段程式,這段程式主要幹了哪些事情呢?請看下圖
irom中的程式首先做一些晶元的初始化工作,然後根據om引腳的狀態(由撥碼開關控制)來選擇引導介質,從圖中我們可以看到有nand、sd卡、emmc,om引腳配置與啟動介質的對應關係如下圖所示,這些啟動介質裡儲存了u-boot映象。
我們可以看到,它最後跳到了bl1,bl1是什麼呢?這是一段由三星提供的二進位制程式,是無法更改的,但這並不意味著它是固化在晶元內部的,我們是需要把它放在啟動介質中的,在實際情況中,它是u-boot映象的一部分。
前面我們知道了irom的主要作用就是初始化晶元,根據om引腳選擇啟動介質,將bl1從啟動介質載入到內部ram,然後就開始執行bl1,下面我們來看看bl1是什麼。
我們肯定會猜到,既然有bl1,那麼應該也有bl2,是的沒錯。實際上bl1的作用就是為了引導bl2,那為什麼這樣做呢?這其實是出於安全考慮,手冊中把這種boot方式叫做:secure boot chain,安全引導鏈,那麼這種引導方式到底安全在**呢,看看bl1和bl2的關係就應該明白了。
bl1是晶元相關的部分,bl2是平台相關的部分,bl1是三星提供的二進位制程式,bl2是使用者自己寫得平台相關的程式,使用者需要向晶元**商提供他們公鑰(由codesigner client產生,同時還會產生乙個私鑰,由使用者儲存),晶元**商會使用codesigner server為使用者提供的公鑰產生secure context data,然後把secure context data 封裝在bl1二進位制檔案中,並把這個帶有公鑰相關的資訊的bl1提供給使用者,使用者會將這個帶有公鑰的bl1和他們自己的帶有私鑰的bl2結合在一起。
如下是bl1的二進位制結構
下圖是bl1的引導過程
bl2會把os映象(其實是u-boot)拷貝到外部的dram中,並且會驗證os的完整性,如果我們想對晶元做一些額外的配置,我們可以通過修改bl2來實現。
如下是bl2的二進位制結構
下面是bl2的引導過程
前面我們知道irom裡面由固化的**,這些**可以在irom中直接執行,但是bl1和bl2可不能在sd卡或者emmc中執行,它們需要被載入到iram中執行,iram是4412內部的一小塊ram,只有256k。除了bl1和bl2需要ram之外,irom中的程式也需要占用一點iram。下圖展示了iram在引導階段的記憶體內容布局,兩種4412的記憶體布局在bl1的大小上稍微有點區別,注意一下
前面我們介紹了晶元的引導過程,從irom到bl1,再到bl2、最後進入u-boot實現os的引導,這期間的每一步都是如何精確定位的?這依賴於這些**之間精確的二進位制組織結構,下面我們就來看看這些模組之間的關係,也就是bootloader映象的二進位制結構。
先上圖
我們來分析一下這個二進位制檔案的產生過程
最終我們需要把它們放到sd卡中或者emmc中
在sd卡中,需要偏移512b,然後再放置這個bootloader映象
再emmc中,具體的boot區域由csd暫存器確定,但是有兩條規則
結束stay foolish, stay hungry
spring boot之啟動流程分析
啟動流程 執行run方法,準備環境,引數等 列印banner,並決定是否建立web專案 重新整理應用上下文 執行commandlinerunner 主要註解分析 springbootconfiguration 自動載入配置檔案,裝配事務等 enableautoconfiguration 根據依賴自動...
Exynos4412啟動過程分析
學習exynos4412啟動流程前,我們先看看三星4412晶元啟動框圖 我們從圖中可以看到4412內部有64k的rom和256k sram,在rom中已經固化好了一段 當硬體上電後首先執行的就是這段 這段 三星起名為blo irom boot 其作用是初始化sram,並將emmc中256k 拷貝到s...
ubuntu upstart啟動流程分析
簡介 最近做linux課程設計 核心裁剪和檔案系統定製 選擇了ubuntu10.10作為實驗的平台。不同的linux發行版,使用者態的初始化機制有所差別,ubuntu自從6.10版本之後就使用了較新的upstart機制來進行系統的初始化。upstart是一種基於事件驅動的服務啟動機制,可以使多個系統...