Come posso analizzare il microcodice (ucode) in iwlwifi per ottenere i numeri di versione?


11

Ho una scheda wireless Intel guidata iwlwifie posso vedere il seguente messaggio in dmesg:

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

Dato che so quale BLOB è caricato, come posso scoprire la versione di questo BLOB ( .ucodefile)?

Se si guarda sotto dove è caricato ucode, non mi dice le informazioni sulla versione solo che è stato caricato un BLOB. Ma conosco queste versioni di 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
Ho il sospetto che potrebbe non caricare un firmware ogni volta che il sistema si avvia, ma segnala solo quale versione del firmware è in esecuzione sulla scheda Ethernet.
fduff,

Risposte:


8

Il iwlwifidriver carica il file di microcodice per l' adattatore wifi all'avvio. Se vuoi conoscere la versione dei BLOB presenti sul tuo computer, prova la sceneggiatura di Andrew Brampton . Correre:

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

E confronta l'output con il tuo diario ( dmesgoutput).

Si noti che lo script funziona con python2.


1

Come nota a margine , e guardando lo script di Andrew Brampton menzionato nella risposta di @ don_crissti , puoi ottenere lo stesso output da Radare2, che è un framework di reverse engineering.

pf x[4]z[64]zN1N1N1N1 magicfile magicblob text serial api minor major
  • pf stampa dati formattati
    • x 0xHEX value and flag (fd @ addr) (see 'd' and 'i')
    • [4]z null terminated string di lunghezza minima 4
    • [64]z null terminated string di lunghezza minima 64
    • N1N1N1N1 next char specifies size of unsigned value (1, 2, 4 or 8 byte(s))

Puoi eseguirlo da uno script come questo,

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;

Ecco alcuni esempi di 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

Li giochi all'indietro, major.minor.api.serialper ottenere18.168.6.1

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.