펌웨어 패키지: 실제로 무엇을 합니까?

펌웨어 패키지: 실제로 무엇을 합니까?

내 CentOS에서 a는 yum update다음을 표시합니다.

(6/38): iwl1000-firmware-39.31.5.1-62.el7_39.31.5.1-62.2.el7_5.noarch.drpm                                                                                                                                            
(7/38): iwl105-firmware-18.168.6.1-62.el7_18.168.6.1-62.2.el7_5.noarch.drpm                                                                             
(8/38): iwl135-firmware-18.168.6.1-62.el7_18.168.6.1-62.2.el7_5.noarch.drpm                                                                             
(9/38): iwl2000-firmware-18.168.6.1-62.el7_18.168.6.1-62.2.el7_5.noarch.drpm                                                                            
(10/38): iwl2030-firmware-18.168.6.1-62.el7_18.168.6.1-62.2.el7_5.noarch.drpm                                                                           
(11/38): iwl3160-firmware-22.0.7.0-62.el7_22.0.7.0-62.2.el7_5.noarch.drpm                                                                                                                                             

등.

이는 소위 "펌웨어 패키지"입니다. 예를 들어, 설치된 항목 중 일부를 찾아보겠습니다.

rpm --query --all | grep firmware

그런 다음 해당 정보를 쿼리합니다.

rpm --query --info iwl105-firmware-18.168.6.1-62.2.el7_5.noarch

우리는 다음을 얻었습니다:

Summary     : Firmware for Intel(R) Centrino Wireless-N 105 Series Adapters
Description :
This package contains the firmware required by the iwlagn driver
for Linux to support the iwl105 hardware.  Usage of the firmware
is subject to the terms and conditions contained inside the provided
LICENSE file. Please read it carefully.

알았어 알았어.

이것은 가상 머신이기 때문에 해당 하드웨어도 없습니다.

따라서 질문은 다음과 같습니다.

펌웨어 패키지는 실제로 무엇을 합니까?

불투명한 실행 파일을 실행하고(다음 부팅 시 즉시?) 하드웨어가 있는지 확인하고, 그렇다면 바이너리 코드를 하드웨어의 플래시 메모리로 펌핑하는 "일회성" 설치입니다(아마도 사용자에게 요청하면서). ; 최소한 Windows에서는 패키지를 "설치됨"으로 표시하기 전에 하드웨어 새로 고침이 항상 팝업되는 DOS 창, 클릭해야 하는 EULA, 견뎌야 하는 진행률 표시줄로 가득 차 있습니다.

커널 모듈이 바이너리 blob을 로드하거나 다음 부팅 시 어떤 일이 발생하도록 initramfs를 수정합니까?

답변1

~처럼앤서니 게건 언급하다,Linux 용어로 "펌웨어"란 무엇입니까?그리고일부 드라이버에 여전히 펌웨어가 필요한 이유는 무엇입니까?유용한 배경을 제공하세요.

펌웨어 패키지는 펌웨어 파일이 포함된 패키지입니다.시스템이나 시스템에 연결된 장치에서 실행되도록 설계된 코드가 포함된 파일입니다. 일반적인 예로는 귀하의 경우와 같은 WiFi 칩셋이 있습니다. 일회성 설치 프로그램이 아니며 하드웨어가 사용 가능한지 여부에는 관심이 없습니다. 그들이 제공하는 파일은 해당 커널 드라이버에서 사용됩니다.만약에관련 하드웨어가 있음: 드라이버가 대상 하드웨어에 연결된 메모리에 펌웨어를 로드한 후 펌웨어를 실행하여 작동합니다.

이러한 펌웨어 패키지는 펌웨어 업데이트를 플래시 메모리에 로드하는(업데이트가 필요할 때만 필요함) 고려 중인 펌웨어 설치 프로그램과 아무 관련이 없습니다. 이 과정은 실제로 시간이 오래 걸리고 종종 복잡하며 위험이 도사리고 있는 것처럼 보입니다(적어도 제조업체의 경고에 따른 인상이라면). Linux 배포판에 포함된 펌웨어 패키지에는 시스템이 휘발성 메모리에 로드될 때 부팅할 때마다 필요한 펌웨어가 포함되어 있습니다.

답변2

로드 가능한 펌웨어는 일반적으로 장치의 플래시 메모리에 기록되는 "일회성" 설치가 아닙니다. 펌웨어는 장치의 휘발성 메모리에 로드되며 콘솔을 켤 때마다 수행해야 합니다. 펌웨어가 로드될 때까지 장치는 작동하지 않습니다. 펌웨어는 장치의 RAM에 기록될 수 있으며, 이 경우 장치의 프로세서에 대한 코드와 데이터가 포함되어 있지만 FPGA(Field-Programmable Logic Array) 또는 일부 논리를 정의하는 비트 스트림일 수도 있습니다. . 둘 다의 조합.

반면, 플래시 메모리의 펌웨어는 일반적으로 장치에 미리 프로그래밍되어 있으며 제조업체가 펌웨어를 업데이트할 때만 다시 작성하면 됩니다. 이는 일반적으로 사용자가 실행하는 별도의 실행 파일과 같은 다른 메커니즘을 통해 수행됩니다.

제조업체가 플래시 메모리 대신 RAM을 사용하려는 데에는 몇 가지 이유가 있습니다. 첫째, 단일 버전의 하드웨어를 설계하는 동시에 여러 버전의 제품을 제공할 수 있습니다(예: 다양한 시장 부문을 대상으로 함). 제품에 빈번한 현장 업그레이드가 필요한 경우 장치의 플래시 메모리를 업그레이드하기 위한 프로그램을 힘들게 만드는 것보다 이 방법으로 펌웨어 업그레이드를 처리하는 것이 더 쉬울 수 있습니다. 프로그램은 멋진 사용자 인터페이스를 갖고 있어야 하며 일반적으로 제품의 최종 사용자가 실행하므로 최대한 사용자 친화적으로 설계되어야 합니다. 플래시 저장소가 있는 일부 장치는 종종 RAM에서 코드를 실행하며 장치가 부팅될 때 플래시의 내용을 RAM에 복사합니다. 이 경우 플래시 칩은 대부분의 시간 동안 유휴 상태이므로 추가 비용이 발생합니다.

답변3

이미 훌륭한 답변을 추가합니다.

펌웨어 파일(독점 바이너리 blob이라고도 함)은 적어도 장치가 콜드(재)부팅될 때 펌웨어에 로드됩니다.

이 장치는 생산 비용을 줄이기 위해 ROM+RAM을 사용하는 대신 RAM에 펌웨어를 갖도록 설계되었습니다. 예를 들어 이러한 방식으로 작동하는 일부 Broadcom WiFi 칩셋과 내부 스위치 칩셋이 있습니다.

가상 머신에서 펌웨어 파일을 사용하는 문제를 해결하기 위한 또 다른 포인트입니다.

가상 머신을 다룰 때는 펌웨어 파일이 필요하지 않습니다. 이더넷이나 WiFi "펌웨어" 파일은 말할 것도 없고 어디에도 로드되지 않습니다.

또한 VM 환경에서는 펌웨어가 필요하지 않다는 점을 고려하면 Debian의 큰 특징은 Linux 커널의 공통 펌웨어 패키지에 의존한다는 것입니다.

답변4

다른 사람들의 답변을 참고하고
Linux 사용자들이 자주 보는 관련 콘텐츠와 온라인 문서를 비교해 보세요.

//완전히 정확하지 않을 수 있습니다. 개선을 환영합니다.


리눅스 펌웨어

설명: Linux 커널 드라이버용 펌웨어 이 패키지는 Linux 커널 드라이버에서 사용되는 펌웨어를 제공합니다.

// 커널은 (아마도) 모든 시스템 부팅 시 바이너리를 다른 SoC의 RAM(WiFi, 그래픽 카드...)에 푸시합니다.

// 다른(아마도 주변기기) CPU/MCU(RAM)에서 실행

https://wiki.gentoo.org/wiki/Linux_firmware

리눅스 이미지 일반

종속 항목: linux-image-5.4.0-110-generic, linux-modules-extra-5.4.0-110-generic, linux-firmware, intel-microcode, amd64-microcode

설명: 일반 Linux 커널 이미지 이 패키지는 항상 사용 가능한 최신 일반 커널 이미지를 사용합니다.

// 커널 및 드라이버, 참고: 커널/드라이버는 지정된 Linux 펌웨어 버전과 일치할 수 있습니다.

//CPU에서 실행

장치 펌웨어

$ fwupdmgr get-devices
...
├─Prometheus:
│ │   Device ID:          d432baa2162a...
│ │   Summary:            Fingerprint reader
│ │   Current version:    10.01.3273255
│ │   Vendor:             Synaptics (USB:0x06CB)
│ │   Install Duration:   2 seconds
│ │   Device Flags:       • Updatable
│ │                       • Supported on remote server
│ │                       • Cryptographic hash verification is available
...

// BIOS 업데이트와 같은 주변 플래시 메모리(ROM)로 플래시합니다.

사용자 공간의 플래시 메모리,

  • fwupdmgr또는
  • snap-store("우분투 소프트웨어"라고 함) 업데이트 탭

스냅샷 저장



일반화하다

  • CPU:
    // CPU에서 실행 중: 커널, 드라이버
  • 시스템 온 칩
    • RAM에 로드: linux-firmware 바이너리
    • ROM으로 플래시: 장치 펌웨어

관련 정보