Bagaimana saya bisa mengurai mikrokode (ucode) di iwlwifi untuk mendapatkan nomor versi?

11

Saya memiliki kartu nirkabel Intel yang digerakkan oleh iwlwifi, dan saya dapat melihat pesan berikut di dmesg:

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

Mengingat saya tahu gumpalan mana yang dimuat, bagaimana saya bisa mengetahui versi gumpalan ini ( .ucodefile)?

Jika Anda melihat di bawah ini di mana ucode dimuat, itu tidak memberi tahu saya informasi versi hanya bahwa gumpalan dimuat. Tapi saya tahu versi Intel ini.

$ 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
bunga aster
sumber
1
Saya menduga itu mungkin tidak memuat firmware setiap kali sistem dinyalakan, tetapi hanya melaporkan versi firmware apa yang berjalan pada kartu ethernet.
fduff

Jawaban:

8

The iwlwifipengemudi load file microcode untuk Anda wifi adapter pada saat startup. Jika Anda ingin mengetahui versi gumpalan yang ada di komputer Anda, coba skrip Andrew Brampton . Lari:

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

Dan bandingkan hasilnya dengan jurnal Anda ( dmesgkeluaran).

Perhatikan bahwa skrip berfungsi dengan python2.

don_crissti
sumber
1

Sebagai catatan tambahan, dan melihat skrip Andrew Brampton yang disebutkan dalam jawaban @ don_crissti , Anda bisa mendapatkan output yang sama dari Radare2 yang merupakan kerangka kerja rekayasa terbalik.

pf x[4]z[64]zN1N1N1N1 magicfile magicblob text serial api minor major
  • pf cetak data yang diformat
    • x 0xHEX value and flag (fd @ addr) (see 'd' and 'i')
    • [4]z null terminated string min-panjangnya 4 ukuran
    • [64]z null terminated string dari ukuran min-length 64
    • N1N1N1N1 next char specifies size of unsigned value (1, 2, 4 or 8 byte(s))

Anda dapat menjalankannya dari skrip seperti ini,

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;

Berikut ini beberapa contoh output

 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

Anda memainkannya mundur, major.minor.api.serialuntuk mendapatkan18.168.6.1

Evan Carroll
sumber