Как я могу разобрать микрокод (ucode) в iwlwifi, чтобы получить номера версий?

11

У меня беспроводная карта Intel iwlwifi, и я вижу следующее сообщение в dmesg:

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

Учитывая, что я знаю, какой двоичный объект загружен, как я могу узнать версию этого двоичного .ucodeфайла ( файла)?

Если вы посмотрите ниже, где загружен ucode, он не сообщает мне информацию о версии, только что был загружен большой двоичный объект. Но я знаю версии Intel эти.

$ 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
Я подозреваю, что он может не загружать прошивку каждый раз, когда система загружается, а только сообщает, какая версия прошивки работает на карте Ethernet.
fduff

Ответы:

8

iwlwifiДрайвер загружает файл микрокода для вашего Wi - Fi адаптера при запуске. Если вы хотите узнать версию блобов на вашем компьютере, попробуйте сценарий Эндрю Брэмптона . Бегать:

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

И сравните вывод с вашим журналом ( dmesgвывод).

Обратите внимание, что скрипт работает с python2.

don_crissti
источник
1

В качестве примечания и, взглянув на сценарий Эндрю Брэмптона, упомянутый в ответе @ don_crissti , вы можете получить тот же вывод из 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

Эван Кэрролл
источник