Як я можу проаналізувати мікрокод (код) у iwlwifi, щоб отримати номери версій?


11

У мене працює бездротова карта Intel iwlwifi, і я можу побачити таке повідомлення в dmesg:

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

З огляду на те, що я знаю, який блок завантажений, як я можу дізнатися версію цього блобу ( .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драйвер завантажує файл мікрокоду для вашого адаптера wifi . Якщо ви хочете знати, яку версію краплі ви маєте на своїй машині, спробуйте сценарій Ендрю Брамптона . Виконати:

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

І порівняйте вихід з вашим журналом ( dmesgвихід).

Зауважте, що сценарій працює з python2.


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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.