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

如何解析 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

答案1

驱动程序iwlwifi会加载您的微代码文件无线上网启动时的适配器。如果您想知道计算机上的 blob 版本,请尝试安德鲁·布兰普顿的剧本。 跑步:

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

并将输出与您的日记(dmesg输出)进行比较。

请注意,该脚本适用于python2.

答案2

作为旁注,看看安德鲁布兰普顿脚本中提到的@don_crissti 的回答,你可以得到相同的输出雷达2这是一个逆向工程框架。

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

相关内容