Làm cách nào tôi có thể phân tích cú pháp vi mã (ucode) trong iwlwifi để lấy số phiên bản?


11

Tôi có một thẻ không dây Intel được điều khiển bởi iwlwifivà tôi có thể thấy thông báo sau trong dmesg:

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

Cho rằng tôi biết blob nào được tải, làm thế nào tôi có thể tìm ra phiên bản của blob ( .ucodefile) này?

Nếu bạn nhìn vào bên dưới nơi ucode được tải, nó sẽ không cho tôi biết thông tin phiên bản chỉ là một blob đã được tải. Nhưng tôi biết những phiên bản Intel này.

$ 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
Tôi nghi ngờ nó có thể không tải firmware mỗi khi hệ thống khởi động, nhưng chỉ báo cáo phiên bản phần sụn nào đang chạy trên thẻ ethernet.
fduff

Câu trả lời:


8

Trình iwlwifiđiều khiển tải tập tin vi mã cho bộ điều hợp wifi của bạn khi khởi động. Nếu bạn muốn biết phiên bản của các đốm màu bạn có trên máy của mình, hãy thử kịch bản của Andrew Brampton . Chạy:

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

Và so sánh đầu ra với tạp chí của bạn ( dmesgđầu ra).

Lưu ý rằng tập lệnh làm việc với python2.


1

Như một lưu ý phụ, và nhìn vào kịch bản Andrew Brampton được đề cập trong câu trả lời của @ don_crissti's , bạn có thể nhận được cùng một đầu ra từ Radare2 , một khung kỹ thuật đảo ngược.

pf x[4]z[64]zN1N1N1N1 magicfile magicblob text serial api minor major
  • pf in dữ liệu định dạng
    • x 0xHEX value and flag (fd @ addr) (see 'd' and 'i')
    • [4]z null terminated string kích thước tối thiểu 4
    • [64]z null terminated string kích thước tối thiểu 64
    • N1N1N1N1 next char specifies size of unsigned value (1, 2, 4 or 8 byte(s))

Bạn có thể chạy nó từ một kịch bản như thế này,

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;

Dưới đây là một số ví dụ đầu ra

 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

Bạn chơi chúng ngược, major.minor.api.serialđể có được18.168.6.1

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.