내 노트북이 실제로 어떤 펌웨어를 사용하고 있는지 확인하는 방법을 찾고 있습니다(예: 하드웨어를 지원하는 바이너리 blob).
내 배포판 archlinux에서 바이너리 blob을 번들로 묶는 패키지는 다음과 같습니다.
core/linux-firmware
(패키지 크기 ~180MiB, ~2500 Blob 파일에 설치된 ~730MiB)
어쨌든 내 노트북은 이러한 파일 중 일부만 사용하는 것 같습니다. 문제는 이를 결정하는 방법을 찾는 것입니다. 일부 온라인 검색에서는 단순히 바늘 grep
만 교체하는 것을 제안합니다 (dmesg
firmware
https://wiki.gentoo.org/wiki/Linux_firmware#Searching_for_loaded_firmware). 이것이 약간의 통찰력을 제공하는 것처럼 보이지만 이것이 최선/유일한/올바른 접근 방식인지는 확실하지 않습니다. 내 생각에는
- "펌웨어"라는 단어는
dmesg
실제 바이너리 blob과 관련이 없는 컨텍스트에서 출력 에 나타납니다. - 펌웨어 로딩 정보를 표시할 때 다양한 커널 소스 코드 섹션의 통합 출력이 없습니다(확실하지는 않음).
[root@thinkbox ~]# dmesg -i 펌웨어 | [0.111955] Spectre V2: 펌웨어 호출에 대해 제한된 추측 활성화 [0.161877] ACPI: [펌웨어 오류]: BIOS_OSI(Linux) 쿼리가 무시되었습니다. [10.440450] 플랫폼 Regulator.0: Regulatory.db의 직접 펌웨어 로드가 오류 -2로 인해 실패했습니다. [10.493359]i915 0000:00:02.0:[drm] DMC 펌웨어 로딩 완료 i915/skl_dmc_ver1_27.bin(v1.27) [10.581810] iwlwifi 0000:04:00.0: 로드된 펌웨어 버전 36.ca7b901d.0 8000C-36.ucode op_mode iwlmvm [10.766097] 블루투스: hci0: 펌웨어 개정 0.0 빌드 10주 41 2018 [11.947004] psmouse serio2: 트랙포인트: IBM TrackPoint 펌웨어: 0x0e, 버튼: 3/3 [4855.262357] 블루투스: hci0: 최소 펌웨어 버전 2014년 10월 1주 [4855.268828] 블루투스: hci0: 장치 펌웨어 발견: intel/ibt-11-5.sfi [4857.277466] 블루투스: hci0: 펌웨어 다운로드가 완료되기를 기다리는 중 [4857.278204] bluetooth: hci0: 1962276 usecs에 로드된 펌웨어 [4857.297293] 블루투스: hci0: 펌웨어 개정 0.0 빌드 10주 41 2018 [20995.531309] 블루투스: hci0: 최소 펌웨어 버전 1 2014년 10월 10일 [20995.531314] 블루투스: hci0: 장치 펌웨어 발견: intel/ibt-11-5.sfi [20997.352132] 블루투스: hci0: 펌웨어 다운로드가 완료되기를 기다리는 중 [20997.352924] 블루투스: hci0: 1778914 usecs에 로드된 펌웨어 [20997.370079] 블루투스: hci0: 펌웨어 개정 0.0 버전 2018-10-41 [22827.736960] 블루투스: hci0: 최소 펌웨어 버전 1 2014년 10월 1일 [22827.737757] 블루투스: hci0: 장치 펌웨어 발견: intel/ibt-11-5.sfi [22829.202536] 블루투스: hci0: 펌웨어 다운로드가 완료되기를 기다리는 중 [22829.202753] 블루투스: hci0: 펌웨어 로드됨 1430656 usecs [22829.219920] 블루투스: hci0: 펌웨어 개정 0.0 버전 10 2018년 41주차
편집: 출력 스크린샷을 텍스트 복사본으로 대체했습니다.
답변1
이것은 아마도 그것을 찾는 가장 최악의 방법이자 가장 쉬운 방법일 것입니다:
sudo mv /lib/firmware /lib/firmware.bak
- 재시작
dmesg
찾을 수 없는 펌웨어 파일을 확인하세요 .sudo mv /lib/firmware.bak /lib/firmware
- 이제 eg를 생성
/lib/firmware.needed
하고 해당 디렉터리에 파일을 복사합니다/lib/firmware
(원하는 디렉터리 구조를 유지하면서). - 그런 다음 패키지를 삭제하고
mv /lib/firmware.needed /lib/firmware
.
이제 준비가 되었습니다.
이 작업을 자동으로 수행하는 마법의 명령은 없습니다. 나는 단지 사용을 생각할 수있다inotifywait -r /lib/firmware
초기시작하고 출력을 기록하는 동안 이는 훨씬 더 복잡해집니다. 사용하고 있다면 initrd
(그리고 대부분의 사람들이 사용하고 있다면) 더 복잡합니다.
@MarcusMüller는 시도해 볼 만한 매우 깔끔한 아이디어를 제공합니다. 루트 파일 시스템에 대한 옵션을 활성화하고 atime
재부팅한 후 다음 명령을 실행하십시오.
find /lib/firmware -atime -1
이론적으로 이는 지난 24시간 동안 액세스한 모든 파일을 표시해야 하며 /lib/firmware
여기에는 필요한 모든 펌웨어 파일이 포함되어야 합니다.
답변2
AFAIK, 표준 Linux 커널을 사용하고 /lib/firmware를 마지막으로 업데이트한 지 최소 2일이 지난 경우 재부팅하고 다음을 실행하는 것이 더 쉽습니다.
find /lib/firmware -atime 2
예를 들어, 펌웨어가 필요한 스캐너가 있고 최근에 열지 않은 경우 위 명령은 해당 펌웨어를 나열하지 않습니다.
이 명령은 이제 Linux 커널의 기본값이 "lazyatime,relatime"으로 설정되어 있기 때문에 작동합니다. 이는 (a) 파일이 마지막으로 변경되거나 수정된 이후 처음으로 파일에 액세스했거나 (b) 파일에 더 많은 시간 동안 액세스한 경우를 의미합니다. 10분이 넘으면 24시간 만에 처음으로 "atime"이 업데이트됩니다. 이 명령은 "man find"에 설명된 반올림 이유를 달성하기 위해 "-atime 2"를 사용합니다. 커널이 펌웨어를 다시 로드하려면 재부팅이 필요합니다.
작동하지 않으면 "/etc/fstab"을 업데이트하여 rootfs의 "noatime" 및 유사한 마운트 옵션을 거의 모든 사용 사례에 가장 적합한 "lazyatime"으로 바꾸십시오.