一文搞懂Zynq的兩種啟動模式!好文收藏
時間:2025-11-06 23:10:19
手機看文章
掃描二維碼
隨時隨地手機看文章
ZYNQ的啟動配置分多級進行的。配置至少需要兩步,但通常按如下三個階段進行:
階段0:該階段簡稱為BootROM,控制著整個芯片的初始化過程。放在BootROM中的代碼是固化的,不可修改的,處理器核在上電或者熱啟動時自動執(zhí)行這部分代碼。
階段1:該階段的啟動加載器(FSBL)也可以由用戶代碼控制。
階段2:這階段通??梢允怯脩舻腜S端的設計代碼,當然也可以是第二階段的啟動加載器(SSBL),這個階段可以完全由用戶控制,是可選的。
ZYNQ外部啟動條件:
1、 電源要求:在階段0 BootROM狀態(tài)時,PS與PL的電源要求如表所示:
在階段1 FSBL時,PS與PL都是必須上電的,因為PL將在這個階段進行配置,而PS將負責配置的過程。 2、 時鐘要求:必須滿足時鐘 .3、 復位要求:主要有兩個外部復位源將影響B(tài)ootROM的執(zhí)行。(電源復位信號,系統(tǒng)復位信號) 4、 啟動引腳設置:需要配置好引腳才能正確啟動平臺。
BootROM 1、 BootROM的作用:上電復位以后,PS端即開始進行配置。在不使用JTAG的情況下,ARM將在片上的BootROM中開始執(zhí)行代碼。BootROM中的代碼對NAND、NOR、Quad-SPI、SD與PCAP的基本外設控制器進行初始化,使得ARM核可以訪問、使用這些外設。而DDR等其他外設將在階段1或者之后進行初始化。BootROM中的代碼還負責加載階段1的啟動鏡像。 PS的啟動源是由外部模式引腳的高低電平來選擇的,也就是指BootROM將根據(jù)外部配置引腳的設置來從不同的外部存儲中加載階段1的啟動鏡像,當然也支持在線性Flash上直接運行。 需要注意的是PL的配置并不在BootROM中完成,BootROM只為配置PL做好準備。
FSBL1、 FSBL是在BootROM之后啟動的引導程序。由BootROM加載到OCM或者直接在線性Flash上運行。FSBL主要完成以下工作:
1) 根據(jù)XPS中的配置,完成PS端的初始化。2) 使用比特流文件對PL進行配置 .3) 加載第二階段引導程序(SSBL)或者裸跑程序(直接在ARM上運行無操作系統(tǒng)程序)到內存空間。 4) 跳轉執(zhí)行SSBL或者裸跑程序。 注意:FSBL在跳轉到SSBL或者裸跑程序前,并不使能MMU。這是因為許多操作系統(tǒng),例如linux假設MMU在啟動時是禁用的。 FSBL啟動流程:
需要注意的是在FSBL階段PL的配置不是必須的,可以將zynq平臺當做兩個ARM核使用。另外需要注意的是:PL的比特流文件、SSBL、裸跑的應用程序等都必須組織成Flash分區(qū)鏡像。FSBL將會遍歷分區(qū)頭表來尋找比特流文件、SSBL、裸跑程序所在的位置,然后進行加載或配置。SDK提供了生成flash分區(qū)鏡像的工具。SSBL 第二階段的啟動加載(SSBL)是可選的。 SSBL的引導程序稱為BootLoader。對于運行在zynq平臺的linux系統(tǒng)而言,U-Boot就是SSBL。在zynq平臺中,F(xiàn)SBL幫助我們加載U-Boot到ARM來運行。U-Boot擁有非常強大的功能,提供了許多用戶指令、讀寫內存、flash、USB設備。U-Boot會幫助我們完成linux內核啟動之前所必須的硬件初始化,例如串口、DDR控制器等。
Linux啟動過程: 嵌入式linux從軟件層面考慮可以分為以下四個部分:引導程序(BootLoader)、linux內核、文件系統(tǒng)、應用程序。 Zynq平臺中的嵌入式linux就是U-Boot,F(xiàn)SBL幫助我們引導U-Boot到內存中。
U-Boot將為linux內核初始化內存和必要的外設,設置好啟動參數(shù)。在zynq平臺中,采用設備樹來傳遞驅動部分的參數(shù),所以U-Boot還將為內核拷貝設備樹鏡像文件到內存中。由U-Boot傳遞給內核的啟動參數(shù)中通常包含了設備樹的地址,文件系統(tǒng)的類型、地址等信息。而后U-Boot將把系統(tǒng)控制權交給linux內核。
當linux內核擁有系統(tǒng)的控制權后,將先進行初始化,建議起內核的運行環(huán)境。Linux內核在完成了虛擬地址到物理地址映射后,還有就是驅動設備初始化與掛載。在zynq平臺中,采用設備樹的方式傳遞設備驅動的信息,如果有為PL中的IP核編寫了驅動程序,也可以使用模塊化的方式,待linux啟動后再進行掛載。
Linux內核將根據(jù)U-Boot傳遞過來的參數(shù)信息選擇掛載文件系統(tǒng)的格式與掛載點。最后linux內核將運行init()函數(shù),這是內核引導的終點,也是系統(tǒng)所有進程的起點。 應用程序都是放在文件系統(tǒng)中。





