Linux

如何解析 iwlwifi 中的微碼(ucode)以獲取版本號?

  • January 10, 2020

我有一個由 驅動的 Intel 無線網卡iwlwifi,我可以在 dmesg 中看到以下消息:

iwlwifi 0000:03:00.0: loaded firmware version 17.168.5.3 build 42301

鑑於我知道載入了哪個 blob,我怎樣才能找出這個 blob(.ucode文件)的版本?

如果您查看下面載入 ucode 的位置,它不會告訴我版本資訊只是載入了 blob。但我知道英特爾版本這些。

$ sudo dmesg | grep ucode
[   26.132487] iwlwifi 0000:03:00.0: firmware: direct-loading firmware iwlwifi-6000g2a-6.ucode
[40428.475015] (NULL device *): firmware: direct-loading firmware iwlwifi-6000g2a-6.ucode

驅動程序在啟動時為您的wifi適配器iwlwifi載入微碼文件。如果您想知道機器上的 blob 版本,請嘗試Andrew Brampton 的腳本。跑步:

## Note the firmware may stored in `/usr/lib`
./ucode.py /lib/firmware/iwlwifi-*.ucode

並將輸出與您的日誌(dmesg輸出)進行比較。

請注意,該腳本適用於python2.

作為旁注,並查看@don_crissti 的答案中提到的 Andrew Brampton 腳本,您可以從逆向工程框架Radare2獲得相同的輸出。

pf x[4]z[64]zN1N1N1N1 magicfile magicblob text serial api minor major
  • pf列印格式化數據

    • x 0xHEX value and flag (fd @ addr) (see 'd' and 'i')
    • [4]z null terminated string最小長度 4 尺寸
    • [64]z null terminated string最小長度 64 大小
    • N1N1N1N1 next char specifies size of unsigned value (1, 2, 4 or 8 byte(s))

你可以從這樣的腳本執行它,

for f in /lib/firmware/iwlwifi-*.ucode; do
   echo $f;
   radare2 -qc "pf x[4]z[64]zN1N1N1N1 magicfile magicblob text serial api minor major" "$f";
done;

這是一些範例輸出

magicfile : 0x00000000 = 0x00000000
magicblob : 0x00000004 = IWL.
     text : 0x00000008 = 6000g2b fw v18.168.6.1 build 0.
   serial : 0x00000048 = 1
      api : 0x00000049 = 6
    minor : 0x0000004a = 168
    major : 0x0000004b = 18

你倒著玩,major.minor.api.serial得到18.168.6.1

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