Linux
如何解析 iwlwifi 中的微碼(ucode)以獲取版本號?
我有一個由 驅動的 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