簡體   English   中英

嵌入式Linux-引導階段

[英]Embedded Linux - Booting phases

我想系統化我的U-Boot / linux知識。 每個嵌入式平台至少需要兩個引導加載程序階段嗎? 還是以下過程會有所不同?

  1. 第一級引導程序(可以是U-Boot)存儲在處理器的ROM內部,無法更新。 它將從內部緩存運行。 此U-Boot需要(至少):初始化RAM,初始化外部閃存,初始化串行控制台,讀取並運行第二階段引導程序。

  2. 第二階段引導程序(可以是U-Boot)存儲在RW閃存中。 它將處理以太網,閃存RW功能等。此U-Boot可以自定義和覆蓋。 主要任務是將linux內核加載到RAM中並運行它。

  3. linux內核啟動。

1級引導加載程序是否始終是只讀的?

哪里,第一個引導程序如何很大程度上取決於系統。 您可能具有某種USB引導設備,該設備會枚舉並下載固件以將所有ram加載到硬件中,然后處理器從該ram啟動。

通常是的,第一次啟動是某種形式的閃存。 最好使第一個引導加載程序超級簡單,基本上100%無錯誤,持久且可靠,並且可能采用串行或其他方式插入,以便您可以用它代替第二個/實際的引導加載程序。

理想情況下,第二個引導加載程序也要刷新,第二個引導加載程序要完成大部分工作,初始化ddr,如果要進行基於以太網的調試或文件傳輸,bootp等,則設置以太網。與主要的引導加載程序相比,由於它的體積更大且更加復雜,因此預計會存在錯誤並且需要更頻繁地升級。 希望可以保護主引導程序,使其不被覆蓋,以便您可以舒適地替換第二個引導加載程序而不會阻塞系統。

所有系統都使用上述內容嗎? 不,某些/很多人可能只使用一個引導程序,並且可能很早就暫停了,以便串行端口上的擊鍵會中斷引導程序,從而使您到達可以重新加載引導程序的位置。 允許進行引導加載程序開發,發生阻塞的機會較少,但是如果您在擊鍵和串行閃存加載程序之前弄亂了第一位,那仍然是一個機會。 同樣,串行加載程序並不總是存在,只是對引導加載程序開發人員而言是一種便利。 通常,后備將是jtag,或者是可移動的Prom或其他系統方式,可以在對Brick進行砌磚時對其進行重新編程(有時,與在制作電路板時第一次在系統中對其進行編程的方式相同,有些設計可以節省成本,並在制造過程中使用預編程的閃存,因此首次啟動即可。)

linux bootloader不需要任何/所有這些,這是非常非常少的安裝ram,可以准備命令行或標簽或其他東西並分支到linux。

由於答案在很大程度上取決於您的系統,處理器,設計工程師(包括您),因此這是一個充滿挑戰的問題。 傳統上,處理器從閃存啟動,引導加載程序獲取內存和其他一些東西,以便可以運行下一部分代碼。 接下來的代碼可以來自許多地方,例如USB,磁盤,閃存/ ROM,以太網/ bootp / tftp,pcie,mdio,spi,i2c等。開機復位和linux啟動之間可以有盡可能多的層設計的需求或要求。

第一階段的引導加載程序不一定是只讀的,但是如果您破壞了Flash的讀寫部分,則將只讀引導加載程序以某種恢復模式放入ROM會很有幫助。 否則,您需要將編程器物理連接到閃存芯片上才能恢復。

如果您使用的是U-Boot,則可以跳過第二階段的引導程序,以加快引導時間。 換句話說,第一階段的引導程序(SPL)將直接加載Linux內核,而跳過第二階段的引導程序(u-boot)。 在U-Boot中,這稱為“ 獵鷹模式”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM