Wie kann ich den Mikrocode (ucode) in iwlwifi analysieren, um die Versionsnummern zu erhalten?

11

Ich habe eine Intel Wireless-Karte von iwlwifiund kann die folgende Meldung in dmesg sehen:

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

Wie kann ich die Version dieses Blobs (der .ucodeDatei) herausfinden, wenn ich weiß, welcher Blob geladen ist ?

Wenn Sie sich unten ansehen, wo der UCODE geladen ist, werden mir nicht die Versionsinformationen angezeigt, nur dass ein Blob geladen wurde. Aber ich kenne diese Intel-Versionen.

$ 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
Gänseblümchen
quelle
1
Ich vermute, dass möglicherweise nicht bei jedem Systemstart eine Firmware geladen wird, sondern nur gemeldet wird, welche Firmware-Version auf der Ethernet-Karte ausgeführt wird.
fduff

Antworten:

8

Der iwlwifiTreiber lädt beim Start die Mikrocode-Datei für Ihren WLAN- Adapter. Wenn Sie die Version der Blobs auf Ihrem Computer wissen möchten, versuchen Sie das Skript von Andrew Brampton . Lauf:

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

Und vergleichen Sie die Ausgabe mit Ihrem Tagebuch ( dmesgAusgabe).

Beachten Sie, dass das Skript mit funktioniert python2.

don_crissti
quelle
1

Nebenbei bemerkt und wenn Sie sich das in der Antwort von @ don_crissti erwähnte Andrew Brampton-Skript ansehen , können Sie dieselbe Ausgabe von Radare2 erhalten , einem Reverse-Engineering-Framework.

pf x[4]z[64]zN1N1N1N1 magicfile magicblob text serial api minor major
  • pf formatierte Daten drucken
    • x 0xHEX value and flag (fd @ addr) (see 'd' and 'i')
    • [4]z null terminated string von min-Länge 4 Größe
    • [64]z null terminated string von min-Länge 64 Größe
    • N1N1N1N1 next char specifies size of unsigned value (1, 2, 4 or 8 byte(s))

Sie können das mit einem Skript wie diesem ausführen:

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;

Hier ist eine Beispielausgabe

 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

Sie spielen sie rückwärts, um major.minor.api.serialzu bekommen18.168.6.1

Evan Carroll
quelle