版本:1.0.2
上次更新日期:2025-03-12
重點摘要
本文旨在逐步說明供應商如何為未來專案實作 fwupd。其中也包含直接引用自 LVFS 維護者的洞察資料。Fwupd 是開放原始碼韌體更新架構,可協助我們集中執行與外部供應商合作的韌體更新方式。
第一步:收集資訊並提供指引
供應商:首先請問:
關於可更新元件的相關問題
更新大小
更新時間
現有更新類型 (A/B 或 Bootloader/執行階段模型)
更新期間元件的功能會發生什麼情況?
系統必須發生什麼事,才能開始使用成功的更新?
是否需要按照特定順序安裝多個元件?
熟悉或具備 LVFS/fwupd 相關知識
能夠提交工程資源,協助實作外掛程式 (詳情請見下文)
承諾將外掛程式開放原始碼至 LGPLv2+ (將韌體寫入元件的程式碼),並允許 LVFS 重新發布韌體
供應商 - 初步指南:
更新必須盡量縮短周邊或內部元件功能受影響的時間,理想情況是幾秒鐘。更新作業的較長部分應在背景中自動執行,不會干擾使用者
- 如果這項外接裝置明顯影響使用者體驗 (例如螢幕停止運作),這項規定就會更加嚴格
如要啟用這類靜默更新功能,強烈建議您使用 A/B 更新
- 可在周邊裝置拔除時啟用的 A/B 更新,是盡量減少使用者中斷情況的理想做法
更新必須可復原 - 如果您關閉電源、拔除周邊裝置等,更新作業不應導致裝置或周邊裝置變成磚塊。應能以穩健的方式,在無須使用者操作的情況下復原。
- 初步假設應為在整個更新期間沒有使用者動作,且更新的適當指令碼和階段應由系統自動執行
第二步驟:使用 fwupd
如果廠商從未使用 fwupd
ChromeOS 會透過 fwupd 向原始設備製造商 (OEM) 提供韌體更新需求。OEM 應直接向晶片 / 元件供應商提供這項資訊
在某些情況下,ODM 可以協助 OEM 直接與晶片供應商互動。原始設備製造商 (OEM) 有責任根據這些規定傳達相關資訊
請注意,如果提供的來源程式碼採用 LGPLv2+ 授權,則通常無法從這個程式碼衍生外掛程式 (因為有許多複雜之處)。因此,在這種情況下,晶片供應商必須有可與 fwupd 維護人員和 Google 工程師合作的人員。
原始設備製造商可以主動出擊,協助晶片供應商承諾與維護人員密切合作。供應商端工程支援服務的要求如下:
非常熟悉可更新硬體元件的特殊功能和設計功能,最好是與撰寫韌體的團隊同事
瞭解常見的開放原始碼授權 (例如 LGPLv2 和 MIT) 之間的差異
精通 C,並具備 GLib 和 GObject 的基本知識,特別是瞭解 GErrors
擁有 GitHub 帳戶,並瞭解如何開啟及更新提取要求、進行 GitHub 程式碼審查,以及瞭解 fwupd 如何透過 fwupd 提供的所有輔助程式進行結構化 (例如分割、附加/卸除、裝置重試、HID 等)
選用:能夠將硬體樣本傳送至英國 - 這對 fwupd 維護者來說非常實用,可協助供應商偵錯問題,並將主機板新增至每次發布時執行的 fwupd 測試。後者對於停止開發分支中的迴歸情形非常重要。
與此同時,原始設備製造商 (OEM) 可以透過 fwupd 郵寄清單或直接與 Richard Hughes (hughsient@gmail.com) 互動,並在編寫外掛程式碼前查看計畫。
如果貴公司規模較小,工程資源或開放原始碼知識不足,不妨參考以下建議:
元件供應商可以使用熟悉開源工作的顧問公司 (這不會產生額外費用)
雖然這項建議可協助擴大規模,但供應商自行執行這項作業的價值在於,工程師會熟悉相關程序,日後可輕鬆為新硬體新增 VID/PID。而且,您也可以更快速地關閉問題 / 問題,以便在硬體上進行偵錯
第三步驟 - 最後步驟
最後,程式碼會重構為可審查的小型提交,並使用 fwupd 中的所有共用功能
完成後,外掛程式會合併至上游
上游使用的程式碼會與 ChromeOS 中的程式碼相同
在 ChromeOS 以外使用的韌體更新二進位檔會分發至 LVFS
具體來說,在 ChromeOS 中:
原始設備製造商必須透過 CPFE 將韌體二進位檔上傳至我們的伺服器
硬體回歸測試才能運作,仍需要在 LVFS 上提供可重新發布的更新櫃檔案
第四步 (選用) - 新增元件
- 如果 fwupd 架構已就位,唯一的額外步驟就是更新元件供應商必須處理拉取要求,為硬體變化版本新增怪癖和 VID/PID。
其他指南 - 處理 LVFS
建立新的供應商帳戶 (設定時間約 2 分鐘)
供應商會為自己的網域建立使用者,或使用 Azure AD 之類的工具,將使用者帳戶同步處理至 LVFS。他們可以免費將韌體上傳至私人和供應商禁運的環境,且只需進行少量檢查 (因此工程師通常會從一開始就這麼做)
最終將應用程式推送至測試或穩定版時,需要法律部門提供某種文件,清楚說明 LVFS 可以重新發布及分析韌體。理查提供的 PDF 指南。● 如果供應商只是晶片供應商或 ODM,則可成為 OEM 的「聯盟成員」,並代表對方上傳韌體,讓 OEM 能全面掌握其品牌韌體的相關情況。
還有許多其他設定項目 (例如供應商 ID 會將其限制為一組 PCI 或 USB ID),但大多數供應商都已指派 ID,因此只需 20 秒即可完成設定。
其他指南 - Chrome OS 專屬資訊
在本例中,韌體更新二進位檔並未直接從 LVFS 提取。而是將 CAB 檔案儲存在本機檔案系統 (rootfs) 中
- 未來工作流程:在適當的 portage 重疊項目上建立 portage ebuild,將韌體二進位檔納入 DLC
fwupd 需要在適當時間叫用 (透過其 CLI fwupdtool)。針對每個可更新的元件,您必須建立 udev 規則 (或等效指令碼),以便發出 fwuptool-update 啟動事件。系統會自動處理這項事件,以便使用正確的引數和適當的沙箱機制 (minijail) 執行 fwupdtool
另一個元件會決定是否需要使用者介面,但只有在特定情況下才會根據更新的元件性質決定。由 PM 和工程團隊評估。如同第一步所述,較高層級的指導方針是盡量減少使用者端的操作
供應商的額外資源
外部說明文件參考資料:https://lvfs.readthedocs.io/
外部廠商協議參考資料:fwupd.org/lvfs/docs/agreement
開發外掛程式教學課程:https://fwupd.github.io/tutorial.html
外掛程式偵錯教學:https://lvfs.readthedocs.io/en/latest/custom-plugin.html
異常檔案範例:https://github.com/fwupd/fwupd/blob/master/plugins/wacom-usb/wacom-usb.quirk
修訂版本記錄
| 日期 | 版本 | 附註 |
|---|---|---|
| 2025-03-12 | 1.0.2 | 將 PDF 中的文字轉換為 Markdown |
| 2024-01-31 | 1.0.1 | 在新平台上重新發布 |
| 2023-10-12 | 1.0 | 首次發布 |