如何解析iwlwifi中的微码(ucode)以获取版本号?


11

我有一个由驱动的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

1
我怀疑它可能不会在每次系统启动时加载固件,而只会报告以太网卡上正在运行的固件版本。
fduff

Answers:


8

iwlwifi驱动程序加载你的微码文件的WiFi启动适配器。如果您想知道机器上的Blob的版本,请尝试使用Andrew Brampton的脚本。跑:

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

并将输出结果与日记(dmesg输出)进行比较。

请注意,该脚本可用于python2


1

附带说明一下,看看@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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.