Usb

如何使用 Linux 中的設備韌體更新 (DFU) 文件更新 USB 設備上的韌體?

  • October 1, 2020

我有一個需要更新韌體的 USB 揚聲器( Jabra Speak 410 )。當我嘗試使用fwupdmgr它時,它會看到設備,通知我現有的韌體版本(1.9)但不執行任何更新:

$ fwupdmgr get-devices
Jabra SPEAK 410 USB
 DeviceId:             87caecc4e6db7e3c335deedfef38666e7f279a03
 Guid:                 537f7800-8529-5656-b2fa-b0901fe91696
 Guid:                 a607e767-5dfd-5f21-ac0f-c774dbd6fed5
 Guid:                 1764c519-4723-5514-baf9-3b42970de487
 Plugin:               dfu
 Flags:                updatable|registered
 VendorId:             USB:0x0B0E
 Version:              1.9
 Icon:                 drive-harddisk-usb
 Created:              2018-09-12
$ fwupdmgr update
$

我確認有可用的更新文件(1.12 版)。當我下載更新文件 ( Jabra_SPEAK_410_USB-1-12-0.dfu) 並嘗試使用它時,fwupdmgr write它似乎沒有做任何事情。

其原因是多層次的。 fwupdmgr是用於從Linux 供應商韌體服務(LVFS) 檢索韌體並對其進行處理的工具。LVFS 提供以Microsoft Update格式打包並由 LVFS 項目簽名的 CAB 檔案的元數據和分發。這些更新由各個供應商管理。

雖然 Jabra發表了官方聲明

支持所有 SPEAK 硬體,更多型號可跟進

Jabra 通過 LVFS 發布的1.8 版(針對 Speak 410)之後沒有後續更新。

因為您可以訪問 Jabra 提供的實際 DFU 文件,所以可以使用該實用程序手動處理它,該實用程序dfu-tool也打包為包fwupd(的父包fwupdmgr)的一部分。

需要強調的是,由於簽名是DFU 文件打包的一項功能,因此最終使用者需要確保以安全的方式檢索文件。這就是為什麼 LVFS 提供對傳遞的檔案的簽名和斷言。確保使用傳輸安全下載任何文件或具有可用於聲明所有權的分離簽名。

如果您覺得 DFU 文件是正版的,請使用以下過程:

首先,驗證是否連接了有效的 DFU 設備:

$ dfu-tool list
Found 0b0e:0412 [v1.9]:
Name:          Jabra SPEAK 410 USB
Serial:        745C4B561A3XXXXXXXX
Mode:          Runtime
Status:        OK
State:         appIDLE
Transfer Size: 64 bytes
Attributes:    can-download|can-upload
Quirks:        no-dfu-runtime

一旦您確認存在具有 DFU 功能的設備附加呼叫dfu-tool以及 DFU 文件的路徑:

$ dfu-tool write ~/Downloads/Jabra_SPEAK_410_USB-1-12-0.dfu 

(dfu-tool:7597): FuPluginDfu-WARNING **: 12:22:53.882: truncated DFU interface data, no bcdDFUVersion

(dfu-tool:7597): FuPluginDfu-WARNING **: 12:23:05.310: truncated DFU interface data, no bcdDFUVersion
Writing…          [*************************************************]
Waiting…          [*************************************************]
Restarting device…[*************************************************]

(dfu-tool:7597): FuPluginDfu-WARNING **: 12:30:04.795: truncated DFU interface data, no bcdDFUVersion
879644 bytes successfully downloaded to device

然後,您可以使用fwupdmgrdfu-tool作為便利實用程序來驗證所需的韌體版本是否正在執行:

dfu-tool:

$ dfu-tool list
Found 0b0e:0412 [v1.12]:
Name:          Jabra SPEAK 410 USB
Serial:        745C4B561A3Dx010900
Mode:          Runtime
Status:        OK
State:         appIDLE
Transfer Size: 64 bytes
Attributes:    can-download|can-upload
Quirks:        no-dfu-runtime

fwupdmgr:

$ fwupdmgr get-devices
Jabra SPEAK 410 USB
 DeviceId:             87caecc4e6db7e3c335deedfef38666e7f279a03
 Guid:                 537f7800-8529-5656-b2fa-b0901fe91696
 Guid:                 f884081f-f58f-5d01-86e8-dc12c88ef073
 Guid:                 1764c519-4723-5514-baf9-3b42970de487
 Plugin:               dfu
 Flags:                updatable|registered
 VendorId:             USB:0x0B0E
 Version:              1.12
 Icon:                 drive-harddisk-usb
 Created:              2018-09-12

引用自:https://unix.stackexchange.com/questions/468631