¿Cómo puedo analizar el microcódigo (ucode) en iwlwifi para obtener los números de versión?

11

Tengo una tarjeta inalámbrica Intel impulsada por iwlwifi, y puedo ver el siguiente mensaje en dmesg:

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

Dado que sé qué blob está cargado, ¿cómo puedo encontrar la versión de este blob ( .ucodearchivo)?

Si observa a continuación dónde se carga el ucode, no me dice la información de la versión solo que se cargó un blob. Pero sé que Intel las versiones de estos.

$ 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
margarita
fuente
1
Sospecho que es posible que no cargue un firmware cada vez que se inicia el sistema, pero solo informa qué versión de firmware se está ejecutando en la tarjeta ethernet.
fduff

Respuestas:

8

El iwlwificontrolador carga el archivo de microcódigo para su adaptador wifi al inicio. Si desea conocer la versión de los blobs que tiene en su máquina, pruebe el script de Andrew Brampton . Correr:

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

Y compare la salida con su diario ( dmesgsalida).

Tenga en cuenta que el script funciona con python2.

don_crissti
fuente
1

Como nota al margen, y mirando el script de Andrew Brampton mencionado en la respuesta de @ don_crissti , puede obtener el mismo resultado de Radare2, que es un marco de ingeniería inversa.

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

Puede ejecutar eso desde un 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;

Aquí hay un ejemplo de salida

 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

Los juegas al revés, major.minor.api.serialpara obtener18.168.6.1

Evan Carroll
fuente