假設你不能直接啟動進入linux系統,你要如何製作引導程式?

假設你不能直接啟動進入linux系統,你要如何製作引導程式?

假設您有一組描述系統中記憶體映射設備的 C 頭文件,那麼實際的步驟是什麼?我知道每個人都只是從 Live CD/USB 拇指驅動器等啟動,但是第一個引導程式是如何製作的呢?

編輯:我應該指出,我確實在談論 ARM 設備,我了解了在典型機器上透過 BIOS 加載的基礎知識,但是假設我們正在談論自訂設備?

答案1

第一個引導程式是如何製作的?

建立(編寫和交叉編譯)引導程式並不像您所建議的那樣令人畏懼。

我應該指出,我實際上談論的是 ARM 設備,我了解了在典型機器上透過 BIOS 加載的基礎知識,但假設我們談論的是自訂設備?

您所指的 BIOS 本質上是 PC 約定。 (CP/M 也有 BIOS,但不一定位於非揮發性記憶體中。)ARM CPU 通常不具有或不使用 BIOS。

目前使用的典型 ARM 處理器與週邊設備整合在一個稱為系統,系統單晶片。主記憶體(例如 DRAM)和非揮發性記憶體(例如 NAND 快閃記憶體)通常位於 SoC 外部,以實現最大的設計靈活性。但通常有一個小型(大約 128KB)嵌入式 ROM(唯讀記憶體)來初始化最小的系統元件以開始引導操作。處理器重設總是會導致該引導 ROM 的執行。 (此 ROM 是真正唯讀的,無法修改。代碼在晶片製造過程中被屏蔽到矽片中。)

每個 SoC 供應商都有自己的引導方法來載入和執行作業系統。有些使用硬體捆綁讀取 GPIO 引腳來確定引導序列下一階段的來源。另一個供應商可能使用記憶體和設備的有序清單來探測引導程式。另一種技術是分支到 NOR 快閃記憶體中的固件,該韌體可以直接執行(即 XIP,就地執行)。

引導使用 DRAM 作為主記憶體的系統的問題之一是其硬體初始化。必須先初始化 DRAM 記憶體控制器,然後才能將程式碼載入到 DRAM 並執行。那麼這個初始化程式碼駐留在哪裡,因為它不能位於主記憶體中?
每個供應商都有自己的解決方案。有些需要將記憶體配置資料儲存在非揮發性記憶體中,以供引導 ROM 存取。有些SoC整合了SRAM(不需要像DRAM那樣初始化)來執行小型引導程式。一些 SoC 使用 NOR 快閃記憶體來保存 XIP 引導程式。

一旦引導程式初始化了 DRAM,主記憶體就可以用來載入下一階段的引導。這可能是一個複雜的引導實用程序,例如 U-Boot,或(如果引導程式有能力的話)Linux 核心。請注意,在處理器重設到作業系統執行之間可能會執行多個引導程式或階段。

以下文件詳細說明了啟動 Linux ARM 核心的要求:http://www.simtec.co.uk/products/SWLINUX/files/booting_article.html
舊版的 Linux ARM 使用 ATAG 清單將基本設定資訊傳遞到核心。現代版本使用設備樹的編譯二進位提供完整的板配置。

顯然是「如何製作引導程式?」的問題。沒有一定的資格就無法回答。

與 PC BIOS 一樣,SoC 的啟動 ROM 是專有的且不會發布(除非您簽署了 NDA,如果有的話)。但大多數其他啟動程式碼都是在 GPL 或類似許可下發布的,而且很容易取得。


附錄

既然您現在提到您正在使用 Zynq 7000(它使用 Xilinx SoC),Xilinx 有一個關於如何建立 Linux 啟動映像
影片證實了我已經寫過的內容:
1. Xilinx SoC 有一個嵌入式啟動 ROM(從技術上講,這是第一階段,但更常被忽略或描述為零階段)。
2. 有「模式引腳」指定下一階段引導程式的來源。
3. 引導 R​​OM 將稱為 FSBL 的引導程式(技術上是第二階段,但通常描述為「第一」階段)載入到嵌入式 SRAM。該程式初始化 DRAM 並載入下一階段 U-Boot。
4. U-Boot 在 DRAM 外執行,並載入 Linux 核心。

該影片演示了可以從 Xilinx 網站下載 FSBL 原始碼並透過幾個步驟進行交叉編譯。沒有“詭計”正如你所說。該構建是直接的配置和交叉編譯,我發現它比典型的應用程式包更簡單/更容易。

也許您的困惑是基於啟動媒體的模糊性,即啟動映像的來源尚未指定。影片提到 NAND 快閃記憶體和 SD 卡作為可能的啟動裝置。
引導 ROM 被引導從模式引腳配置的來源媒體讀取 FSBL 映像。

FSBL(如果它像我使用的其他引導程式一樣)旨在從配置的來源媒體讀取 U-Boot。沒有運行時替代方案。

U-Boot 試圖名副其實(「通用」),並且可以配置(使用環境變數)從各種裝置載入映像(和腳本)。還有互動選項。

另請參閱 Xilinx wikiZynq Linux,其中聲明“有關 Zynq 啟動的完整信息可以在技術參考手冊」。

相關內容