提供在重新啟動時製作並安裝新的 Linux 核心和驅動程式的選項是否有風險?

提供在重新啟動時製作並安裝新的 Linux 核心和驅動程式的選項是否有風險?

通常的做法是在原始程式碼中提供 Linux 核心驅動程式(核心物件 KO),然後在目標電腦上建置和安裝它們。例如,NVIDIA 顯示驅動程式和 Oracle VirtualBox 來賓附加驅動程式就是透過這種方式安裝的。透過系統更新接收新版本的核心(帶有適當的標頭)也很常見。這需要重新建置並重新安裝KO,否則更新後設備將停止運作。

在我們的產品安裝啟動腳本中,我們希望新增在每次啟動時製作和安裝 KO 的步驟。用戶可以選擇退出,並且必須手動建置和安裝 KO。裝置驅動程式與 USB 裝置通訊。

相關詳情:

  1. 實際的重新建置只會在安裝新核心時發生一次,因為 make 不會嘗試重新建置已經存在且最新的檔案。

  2. 重建驅動程式大約需要兩秒,在正常啟動期間(不是核心更新後)跳過建置需要幾毫秒

  3. 萬一建置失敗,也不應導致系統崩潰或使其不穩定。但是我們的硬體設備將無法運作。

  4. 某些發行版可能允許註冊掛鉤,對某些事件執行操作,例如核心更新。然而,我們正在嘗試實現一些能夠以統一方式在大多數發行版上運行的東西。我們的安裝程式是 script+tar 或 script+rpm。不幸的是,對於這個版本,我們沒有足夠的頻寬來為所有發行版(例如 Debian 風格)準備本機套件。

問題:

  1. 這是一個可以接受的解決方案嗎?如果沒有,為什麼?

  2. 這種方法有哪些潛在風險?

  3. 啟動期間正確/首選的運作位置為何? rc.local 或 init.d 下的腳本或其他?目標是使用相同的方法(如果可能的話)使其在大多數發行版上工作。

答案1

這個正確答案是 Rosco 昨天在 ServerFault 上提供的。

  1. 是的,但您應該添加一個清晰的方法來描述我們手動運行腳本的方式,以便我們可以確保腳本正常返回。對於 CentOS 中的 VirtualBox,他們在 /etc/init.d 中新增一個名為 vboxdrv 的腳本:

    /etc/init.d/vboxdrv {start|stop|stop_vms|restart|force-reload|status|setup}
    

    這很清楚;我們可以啟動/停止腳本並獲取其狀態,因此只要我們可以在部署新核心之前檢查腳本,重新啟動時出現問題的風險就很小。你沒有比這更高的標準了,對我來說這是完美的。

  2. 編譯過程出現系統故障且沒有可用的模組。難道就這麼悲劇嗎?我不這麼認為。只要你的腳本沒有掛起機器,而且你在 /var/log/mymodule 中提供了編譯失敗的完整日誌,你就不能做得更好。

  3. 請參閱 1. - 在 CentOS/RHEL/Fedora 上)vboxdrv 從 /etc/init.d/vboxdrv 運行並檢查發行版名稱,然後相應地獲取一些腳本。當我想要有關守護進程的更多資訊時,我首先檢查/etc/init.d。我沒問題。

相關內容