Linux
使用 Linux 作為引導載入程序?
我有一個帶有 SPI 連接快閃記憶體的嵌入式設備。基本上,這意味著設備從一個小的快閃記憶體元件引導其引導載入程序和 Linux 核心。
隨著設備啟動,但在安裝根文件系統並呼叫 switch_root 之前 - 我想選擇啟動第二個不同的核心
這樣的事情可能嗎?我的目標是在快閃記憶體中擁有一個非常小的引導載入程序和庫存核心 - 然後將更新/更大的核心放在硬碟上。
我的引導載入程序非常有限,無法從硬碟讀取較新的核心。
簡而言之
a) CPU comes out of reset, reads its bootloader from flash b) bootloader boots, inits basic hardware, loads Linux kernel from flash c) kernel boots, inits more hardware, and reads a second kernel from a hard disk d) I'd like to switch to the second kernel at this point
我在這個過程中的目標是提供一種機制,使快閃記憶體中的核心可以隨時間變舊,但可以通過硬碟提供更新的核心。如果我的引導載入程序更高級,我會走那條路 - 但是它無法初始化必要的硬體(磁碟控制器),也沒有現代文件系統支持
…我考慮過的一個選項是,是否可以將第二個核心放入物理記憶體,將已知地址標記為具有第二個核心,然後重置。然後引導載入程序可以檢測已知地址並驗證第二個核心的完整性,選擇它而不是來自快閃記憶體的一個
任何提示將不勝感激!
你不必做任何太複雜的事情。只需呼叫
kexec
啟動到新核心。它不能變得更簡單……除非你的舊核心在沒有 kexec 支持的情況下以某種方式編譯。
看看 UBOOT,這在過去對我有用。
您甚至可以使用它來讀取文件系統,但應該允許您在多個圖像之間切換。這樣,您始終會覆蓋目前未使用的映像並重新配置 uboot 以在重置時啟動升級。