Como posso analisar o microcódigo (ucode) no iwlwifi para obter os números da versão?

11

Eu tenho uma placa de rede sem fio Intel impulsionado por iwlwifi, e eu posso ver a seguinte mensagem no dmesg:

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

Como sei qual blob está carregado, como posso descobrir a versão desse blob ( .ucodearquivo)?

Se você olhar abaixo, onde o ucode está carregado, ele não informa as informações da versão, apenas que um blob foi carregado. Mas eu sei versões da Intel estes.

$ 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
margarida
fonte
1
Eu suspeito que ele pode não carregar um firmware toda vez que o sistema é inicializado, mas apenas informa qual versão do firmware está sendo executada na placa ethernet.
Fduff

Respostas:

8

O iwlwifidriver carrega o arquivo de microcódigo para o seu adaptador wifi na inicialização. Se você quiser saber a versão dos blobs que você tem na sua máquina, tente o script de Andrew Brampton . Corre:

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

E compare a saída com o seu diário ( dmesgsaída).

Observe que o script funciona com python2.

don_crissti
fonte
1

Como observação lateral, e observando o script de Andrew Brampton mencionado na resposta de @ don_crissti , você pode obter a mesma saída do Radare2, que é uma estrutura de engenharia reversa.

pf x[4]z[64]zN1N1N1N1 magicfile magicblob text serial api minor major
  • pf imprimir dados formatados
    • x 0xHEX value and flag (fd @ addr) (see 'd' and 'i')
    • [4]z null terminated string de tamanho mínimo 4
    • [64]z null terminated string de tamanho mínimo 64
    • N1N1N1N1 next char specifies size of unsigned value (1, 2, 4 or 8 byte(s))

Você pode executar isso a partir de um script como este,

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;

Aqui está um exemplo de saída

 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

Você os joga para trás, major.minor.api.serialpara obter18.168.6.1

Evan Carroll
fonte