버전 번호를 얻기 위해 iwlwifi에서 마이크로코드(ucode)를 구문 분석하는 방법은 무엇입니까?

버전 번호를 얻기 위해 iwlwifi에서 마이크로코드(ucode)를 구문 분석하는 방법은 무엇입니까?

Intel 무선 카드가 지원되며 iwlwifidmesg에서 다음 메시지를 볼 수 있습니다.

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

어떤 Blob이 로드되었는지 알고 있는데 .ucode해당 Blob(파일)의 버전을 어떻게 찾을 수 있나요?

아래에서 ucode가 로드된 위치를 보면 버전 정보는 알려주지 않고 blob만 로드합니다. 하지만 인텔에는 이러한 버전이 있다는 것을 알고 있습니다.

$ 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

드라이버가 iwlwifi마이크로코드 파일을 로드합니다.와이파이시작 시 어댑터. 컴퓨터의 Blob 버전을 알고 싶다면 다음을 시도해 보세요.앤드류 브램튼의 각본. 달리기:

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

그리고 출력을 저널(출력)과 dmesg비교하세요 .

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

답변2

참고로 Andrew Brampton이 대본에서 언급한 내용을 살펴보세요.@don_crissti의 답변, 다음과 동일한 출력을 얻을 수 있습니다.레이더 2이것은 리버스 엔지니어링 프레임워크입니다.

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

관련 정보