Boot-Loader
冗餘 U-Boot 映像
我目前正在開發一個使用 NAND 快閃記憶體作為主記憶體儲的嵌入式系統。Bootloader + Kernel + rootfs 被寫入其中,我們正在尋找方法使我們的系統對與 NAND 相關的許多問題更加健壯。
目前,我們在 JFFS2 之上擁有核心和 rootfs 分區,並且我們正在嘗試找到一種方法來保護引導載入程序分區(我們正在使用 SPL 和 U-Boot)。
我們的處理器能夠自動查看前 4 個快閃記憶體塊以獲得未損壞的 SPL 圖像,我希望 U-Boot 也有類似的東西。但是,我檢查了 U-Boot 程式碼,並沒有找到任何方法來啟用這樣的功能。
這甚至被 U-Boot 支持嗎?我嘗試破解我自己的程式碼來做到這一點,但到目前為止還沒有運氣。
tl;dr:我希望能夠檢測我是否在 NAND 上有錯誤的 U-Boot 映像,如果是,則從另一個(希望)未損壞的分區啟動。
因此,我設法實現了一個簡單的檢查並從冗餘映像啟動。您所要做的就是從呼叫中擷取返回碼並在函式
ecc.correct()
中處理它。我在這裡spl_nand_load_image()
貼了一個更新檔。
通常 U-Boot SPL 會執行 ECC,但不會更新 NAND……但我相信這是您已經知道的。
一個好的做法是將 U-Boot 儲存在 NOR 中,將核心、FS 和冗餘 U-Boot 環境變數儲存在 NAND 中。
現在關於核心:舊版 linux 核心映像 (uImage) 的 CRC32 校驗和較弱,我會選擇 fitImage,它可以簽名並包含可配置的校驗和算法以及其他有用的東西。