日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > > 處芯積律


當SoC芯片流片回來后,并不是直接通電就可以使用的。需要進行上電復位,然后對SoC進行配置使其進入到正常工作狀態(tài),然后才能運行正常的程序和任務。這是一個比較復雜的過程,也是在芯片設計階段,SoC需要重點考慮的問題。上電不能成功,芯片流片回來直接就不能啟動,這也是最重大的失敗,所以保證芯片能正常上電啟動是SoC設計最重要的第一步。

由于SoC各種各樣,不同是SoC的啟動流程是有區(qū)別的,但是大部分SoC遵循著基本的流程:

  1. 上電復位:芯片通電后,所有寄存器和內存被重置到初始狀態(tài)。

  2. Boot階段:初始化硬件;

  3. 操作系統(tǒng)啟動:內核初始化,加載驅動,掛載文件系統(tǒng)。

  4. 用戶空間初始化:啟動系統(tǒng)服務和用戶界面。

這個過程確保了SOC從斷電狀態(tài)到操作系統(tǒng)完全運行的平滑過渡。下面詳細說明每個階段的內容。

上電復位(Power-On Reset)

當SOC通電或復位信號觸發(fā)時,SOC進入復位狀態(tài)。復位電路會將所有寄存器和內存重置為已知的初始狀態(tài),確保系統(tǒng)從一個干凈的狀態(tài)開始啟動。

Power-On Reset縮寫為POR,這是一個非常常見的縮寫,需要記住

這個階段還需要準備好Boot Mode Pin,確定Boot的介質,Boot Mode在POR釋放時候鎖存。

POR釋放后開始reset flow階段,SoC內部一般有一個控制reset sequence的狀態(tài)機FSM,來進行啟動階段的reset。這個reset的控制和SoC內部實現(xiàn)強相關,不同的SoC有不同的實現(xiàn)方式。

同時還會完成下面任務:

  1. 確認PLL輸出時鐘穩(wěn)定;

  2. 會啟動必要的外設的時鐘;

  3. 釋放必要的模塊的reset;

  4. 使用OTP配置內部模塊;

  5. 進行進行Power-On Self-Test(POST)等

越是復雜的SoC,在這個階段需要做的事情越多。

Boot階段

系統(tǒng)引導程序

在遙遠的單片機時代,嵌入式設備功能比較單一,每個設備只需要執(zhí)行一件簡單的任務,因此在系統(tǒng)初始化完成后,程序就運行在一個大循環(huán)中,此時,系統(tǒng)啟動流程和功能代碼并沒有很嚴格的區(qū)分。隨著技術的發(fā)展,嵌入式系統(tǒng)變得越來越復雜,單片機(MCU)和系統(tǒng)級芯片(SoC)之間的差異也越來越明顯。在早期的單片機時代,設備的處理能力有限,通常只需要執(zhí)行一些簡單的任務,如控制一個電機或者讀取傳感器數(shù)據(jù)。這些任務通??梢酝ㄟ^一個簡單的程序循環(huán)來實現(xiàn),不需要復雜的操作系統(tǒng)。

然而,隨著SoC的出現(xiàn),情況發(fā)生了變化。SoC通常包含多個處理器核心、圖形處理單元(GPU)、數(shù)字信號處理器(DSP)、以及其他專用硬件模塊,如網絡接口、存儲控制器等。這些復雜的硬件需要更高級的管理,以便它們能夠協(xié)同工作,提供更豐富的功能。

系統(tǒng)引導程序(Bootloader)在SoC中扮演著至關重要的角色。它的主要任務包括:

  1. 硬件初始化:在系統(tǒng)上電后,引導程序首先需要初始化硬件,包括設置時鐘、配置內存、初始化外設等。

  2. 安全啟動:為了保護系統(tǒng)不被惡意軟件攻擊,引導程序會檢查操作系統(tǒng)映像的完整性和合法性。

  3. 配置系統(tǒng)環(huán)境:設置系統(tǒng)運行所需的參數(shù),如CPU工作模式、內存管理單元(MMU)配置等。

  4. 加載操作系統(tǒng):將操作系統(tǒng)映像從存儲設備(如閃存、硬盤)加載到內存中。

  5. 跳轉到操作系統(tǒng):一旦操作系統(tǒng)加載完成,引導程序會將控制權交給操作系統(tǒng),讓操作系統(tǒng)接管系統(tǒng)的控制。

這些操作系統(tǒng)或啟動程序是由c或者c++等程序寫成的,編譯成.bin或者.hex文件,存儲到非易失性存儲器中,或者存儲在外部存儲設備上。這些文件被稱為鏡像文件(image)

BootROM和XIP

在系統(tǒng)初始化時,cpu只能訪問可以直接尋址的存儲器:

  1. 如果支持XIP啟動方式,可被存儲在片外可直接執(zhí)行的介質中(如NOFLASH);

  2. 如果不支持XIP啟動,則需要存儲到芯片內部的ROM中,也就是最常見的BootROM;

在芯片出廠后該部分代碼就將被固化,后續(xù)再也不能被修改和升級。若芯片要支持安全啟動,則需要將BOOTROM作為啟動時的信任根,此時除調試階段外,SOC必須禁用XIP。

BOOT流程

一般情況下都會采用內部ROM的方式進行boot,如果內部ROM出問題了,可以采用XIP進行debug或者作為備份。

典型的boot流程一般分為:

First stage (BootRom)->Second Stage (u-boot/bare metal)

兩個階段。對不同的cpu架構,規(guī)定的boot流程規(guī)范是不同的。

ARM boot流程

ARM V8 Boot流程:

Armv8的啟動流程包含多個階段,典型地有BL1、BL2、BL31、BL32、BL33,根據(jù)需求的不同,這些階段可以適當?shù)夭眉艋蛱砑印?

它們的源碼會被編譯成獨立的啟動鏡像,并被保存到特定的存儲介質中。由于一般的存儲介質(如SPI Flash,nand flash、emmc、ssd等)都不支持代碼的直接執(zhí)行,因此需要在啟動時先將鏡像加載到可直接執(zhí)行代碼的存儲介質,如SRAM中,然后運行相關代碼。其典型的加載流程如下:

在ARMv8架構中,啟動流程包含多個階段,這些階段通常被稱為BL(Bootloader)階段:

  1. BL1:這是第一階段的啟動固件,通常位于ROM中,負責引導BL2并對其進行安全驗證。

  2. BL2:第二階段的啟動固件,通常存儲在Flash中,負責平臺相關的初始化,比如內存(DDR)初始化,并尋找BL31或BL33執(zhí)行。

  3. BL31:如果存在,BL2會加載BL31。BL31是持久存在的可信固件,負責系統(tǒng)安全服務和在安全與非安全世界之間切換。

  4. BL32(可選):通常包含OP-TEE OS和安全應用,運行在EL1,啟動EL0的安全應用,完成后返回BL31。

  5. BL33:這是非安全世界的啟動固件,通常是U-Boot或者直接啟動Linux內核。

這里說明一下:

armv8架構分為Secure World和Non-Secure World(Normal World),四種異常級別從高到低分別為EL3,EL2,EL1,EL0。

安全世界與非安全世界:

  • Secure World:執(zhí)行可信的固件和應用,如支付、指紋識別等。

  • Non-Secure World:運行常見的操作系統(tǒng)和裸機程序。

異常級別:

  • EL3:最高權限級別,負責安全監(jiān)控和模式切換。

  • EL2:提供虛擬化支持。

  • EL1:特權模式,運行操作系統(tǒng)或安全OS。

  • EL0:無特權模式,運行應用程序。所有APP應用都在EL0。

完整的調用流程如下:

ARM Trusted Firmware (ATF) 是為 ARMv8-A 架構設計的一套開源安全固件,它實現(xiàn)了從芯片啟動到操作系統(tǒng)加載的整個過程中的安全啟動要求。ATF 支持 ARM 的 TrustZone 技術,提供了Secure和Non-Secure執(zhí)行環(huán)境之間的隔離。

BL2根據(jù)是否存在BL31和BL32可選擇性的加載不同firmware,若系統(tǒng)需要支持Secure和Non-Secure兩種執(zhí)行狀態(tài),也就是支持ATF啟動,則必須要從secure空間開始啟動,且啟動完成后需要通過secure monitor(BL31)完成normal os對secure空間服務相關請求的處理。

不支持ATF的啟動

如果不支持ATF,那么階段對應關系如下:

BL1: BootROM;

BL2: SPL(Secondary Program Loader),SPL在啟動鏈中一般由bootrom加載而作為第二級啟動鏡像(bl2),它主要用于完成一些基礎模塊和ddr的初始化,以及加載下一級鏡像uboot。

BL33:最常見的是u-boot;

這時候流程為:

由于SPL需要被加載到SRAM中執(zhí)行,對于有些sram size比較小的系統(tǒng),可能無法放入整個spl鏡像,TPL即是為了解決該問題引入的。

TPL: Tertiary Program Loader,三級加載器

加入了TPL之后,可將SPL的功能進一步劃分為兩部分,如SPL包含ddr初始化相關代碼,而TPL包含鏡像加載相關驅動,從而減少SPL鏡像的size。此時啟動流程可被設計為如下方式:

支持ATF的啟動

支持ATF的啟動就是上面所述的完整的ARM V8啟動流程:

ATF啟動uboot的典型鏡像跳轉流程如下:

在以上流程中BL32是可選的,若不支持trust os則可裁剪掉該流程。典型情況下BL33為uboot,而BL2既可以使用ATF實現(xiàn)也可以用SPL實現(xiàn)。

ATF 還支持從 BL1 直接跳轉到 BL31 的啟動模式,這種方式可以加快啟動速度,因為它跳過了 BL2 的加載過程。此外,ATF 還支持固件更新和恢復模式。

ATF 的啟動流程是高度可定制的,不同的芯片廠商可能會根據(jù)自己的需求進行調整。

RSIC-V BOOT流程

先介紹一下RSIC-V的幾種模式:

  1. M-mode(Machine Mode)

  2. S-mode(Supervisor Mode)

  3. U-mode(User Mode)

對比ARM架構如下:

對于arm64來說,系統(tǒng)上電后啟動會處于EL3 secure world ,所以對于arm64來說,一般都會使用ARM Trusted firmware (TF-A)  在normal world EL2 與 secure EL3  進行切換。

而對于risc-v來說,系統(tǒng)上電啟動后會在M-Mode,而risc-v目前是沒有Hypervisor這一層的概念的,所以目前采用的是opensbi。

啟動流程:RISC-V的啟動流程可能包括以下幾個階段:

  • ZSBL (Zeroth Stage Boot Loader):片上ROM程序。

  • FSBL (First Stage Boot Loader):啟動PLLs和初始化DDR內存。

  • BBL (Berkeley Boot Loader):提供加載,并且管理著二進制接口(SBI)。

  • 操作系統(tǒng)加載:如Linux內核的加載和啟動。

操作系統(tǒng)啟動

當引導加載程序加載操作系統(tǒng)內核并將控制權移交給內核后,操作系統(tǒng)的啟動過程正式開始。這個階段包括內核初始化、硬件設備驅動程序初始化、掛載根文件系統(tǒng)以及初始進程啟動。

用戶空間初始化

在操作系統(tǒng)內核成功啟動后,系統(tǒng)進入用戶空間初始化階段。這包括啟動腳本和服務、用戶登錄和圖形界面的啟動,為用戶提供交互界面。

這兩個部分主要涉及到軟件,內容比較復雜,就不展開討論。

后記

技術很重要,技術背后的思想更重要!

技術背后的某些思想就是你解決以后問題的鑰匙。我的文章可能一篇中知識點不太多,但是力求讓你能深入理解,為你進階打下基礎。如果有一點點收獲,也算是我對中國芯片行業(yè)的一點點貢獻吧。

贈人玫瑰,手有余香。如果你有所收獲,麻煩花一秒時間幫我點個贊和在看吧,謝謝!


本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除。
關閉