Comment puis-je analyser le microcode (ucode) dans iwlwifi pour obtenir les numéros de version?

11

J'ai une carte sans fil Intel pilotée par iwlwifi, et je peux voir le message suivant dans dmesg:

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

Étant donné que je sais quel blob est chargé, comment puis-je trouver la version de ce blob ( .ucodefichier)?

Si vous regardez ci-dessous où l'ucode est chargé, il ne me dit pas les informations de version juste qu'un blob a été chargé. Mais je connais ces versions 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
Marguerite
la source
1
Je soupçonne qu'il ne peut pas charger un firmware à chaque démarrage du système, mais ne signale que la version du firmware qui s'exécute sur la carte Ethernet.
fduff

Réponses:

8

Le iwlwifipilote charge le fichier de microcode pour votre adaptateur wifi au démarrage. Si vous voulez connaître la version des blobs que vous avez sur votre machine, essayez le script d'Andrew Brampton . Courir:

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

Et comparez la sortie à votre journal ( dmesgsortie).

Notez que le script fonctionne avec python2.

don_crissti
la source
1

En remarque, et en regardant le script Andrew Brampton mentionné dans la réponse de @ don_crissti , vous pouvez obtenir la même sortie de Radare2 qui est un cadre de rétro-ingénierie.

pf x[4]z[64]zN1N1N1N1 magicfile magicblob text serial api minor major
  • pf imprimer des données formatées
    • x 0xHEX value and flag (fd @ addr) (see 'd' and 'i')
    • [4]z null terminated string de taille min-longueur 4
    • [64]z null terminated string de taille min-64
    • N1N1N1N1 next char specifies size of unsigned value (1, 2, 4 or 8 byte(s))

Vous pouvez l'exécuter à partir d'un script comme celui-ci,

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;

Voici un exemple de sortie

 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

Vous les jouez à l'envers, major.minor.api.serialpour obtenir18.168.6.1

Evan Carroll
la source