Jak parsować mikrokod (kod ucode) w iwlwifi, aby uzyskać numery wersji?


11

Mam napędzaną kartę bezprzewodową Intel iwlwifii widzę następujący komunikat w dmesg:

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

Biorąc pod uwagę, że wiem, który obiekt blob jest załadowany, w jaki sposób mogę znaleźć wersję tego obiektu blob ( .ucodepliku)?

Jeśli spojrzysz na poniżej, gdzie jest ładowany kod u, nie mówi mi informacji o wersji, tylko że został załadowany obiekt blob. Ale znam te wersje Intela.

$ 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
Podejrzewam, że może nie ładować oprogramowania układowego za każdym razem, gdy system się uruchamia, ale jedynie informuje, jaka wersja oprogramowania działa na karcie Ethernet.
fduff,

Odpowiedzi:


8

iwlwifiKierowca ładuje plik mikrokodu dla wifi adapter przy starcie. Jeśli chcesz poznać wersję obiektów blob na swoim komputerze, wypróbuj skrypt Andrew Brampton . Biegać:

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

I porównaj dane wyjściowe z dziennikiem ( dmesgdane wyjściowe).

Zauważ, że skrypt działa z python2.


1

Na marginesie i patrząc na skrypt Andrew Brampton wspomniany w odpowiedzi @ don_crissti , możesz uzyskać takie same wyniki z Radare2, który jest strukturą inżynierii odwrotnej.

pf x[4]z[64]zN1N1N1N1 magicfile magicblob text serial api minor major
  • pf wydrukuj sformatowane dane
    • x 0xHEX value and flag (fd @ addr) (see 'd' and 'i')
    • [4]z null terminated string o minimalnej długości 4
    • [64]z null terminated string o długości min. 64
    • N1N1N1N1 next char specifies size of unsigned value (1, 2, 4 or 8 byte(s))

Możesz uruchomić to z takiego skryptu,

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;

Oto kilka przykładowych danych wyjściowych

 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

Aby je major.minor.api.serialzdobyć, grasz je wstecz18.168.6.1

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.