iwlwifi에서 마이크로 코드 (ucode)를 구문 분석하여 버전 번호를 얻으려면 어떻게해야합니까?


11

에 의해 구동되는 인텔 무선 카드 iwlwifi가 있으며 dmesg에서 다음 메시지를 볼 수 있습니다.

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

어떤 Blob 이로 드되었는지 알고 있다면이 Blob ( .ucode파일) 의 버전을 어떻게 알 수 있습니까?

아래에서 ucode 가로 드 된 위치를 보면 blob 이로 드 된 버전 정보를 알려주지 않습니다. 그러나 나는 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

1
시스템을 부팅 할 때마다 펌웨어를로드하지는 않지만 이더넷 카드에서 실행중인 펌웨어 버전 만보고합니다.
fduff

답변:


8

iwlwifi드라이버가의 마이크로 파일로드 와이파이 시작시 어댑터를. 컴퓨터에있는 블롭의 버전을 알고 싶다면 Andrew Brampton의 script를 사용해보십시오 . 운영:

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

그리고 출력을 저널과 비교하십시오 ( dmesg출력).

이 스크립트는에서 작동합니다 python2.


1

참고로 @don_crissti의 답변에 언급 된 Andrew Brampton 스크립트를 살펴보면 리버스 엔지니어링 프레임 워크 인 Radare2 에서 동일한 출력을 얻을 수 있습니다 .

pf x[4]z[64]zN1N1N1N1 magicfile magicblob text serial api minor major
  • pf 형식화 된 데이터 인쇄
    • x 0xHEX value and flag (fd @ addr) (see 'd' and 'i')
    • [4]z null terminated string 최소 길이 4 크기
    • [64]z null terminated string 최소 길이 64 크기
    • N1N1N1N1 next char specifies size of unsigned value (1, 2, 4 or 8 byte(s))

다음과 같은 스크립트에서 실행할 수 있습니다.

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;

다음은 예제 출력입니다.

 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

당신은 거꾸로 그들을 재생, major.minor.api.serial얻을 수18.168.6.1

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.