Pacotes de firmware: o que eles realmente fazem?


8

No meu CentOS, a yum updatetraz o seguinte:

(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                                                                                                                                             

etc.

Estes são os chamados "pacotes de firmware". Por exemplo, vamos encontrar alguns deles instalados:

rpm --query --all | grep firmware

e, em seguida, consulte suas informações:

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

e temos:

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.

OK, bem.

Eu nem tenho esse tipo de hardware, pois esta é uma VM.

Então, pergunta:

O que os pacotes de firmware realmente fazem?

São instalações "one-shot" que executam um executável opaco (imediatamente? Na próxima inicialização?) Que verifica se o hardware existe, transmite o código binário no flash do hardware, se o hardware estiver lá (talvez ao perguntar ao usuário; no Windows em pelo menos, a intermitência do hardware está sempre repleta de janelas do DOS que aparecem, EULAs que precisam ser clicados e barras de progresso que precisam ser suportadas) e, em seguida, marca o pacote como "instalado".

Eles modificam o initramfs para que um blob binário seja carregado por um módulo do kernel ou algo aconteça na próxima inicialização?



Em O que é "firmware" na terminologia Linux? , Stephen Kitt escreve: Portanto, os arquivos de firmware não são usados ​​pelo kernel, eles são carregados pelo kernel em outras peças de hardware. É também isso que torna vagamente aceitável ter software sem código fonte nos sistemas FLOSS: o argumento é que ele não está sendo executado na CPU principal, mas em outro dispositivo. Risada, risada.
David Tonhofer 14/07/19

Respostas:


4

O firmware carregável normalmente não é uma instalação "one-shot" que é gravada para piscar no dispositivo. O firmware é carregado no armazenamento volátil no dispositivo e precisa ser executado sempre que o computador host é ligado. O dispositivo não funciona antes do carregamento do firmware. O firmware pode ser gravado na RAM do dispositivo; nesse caso, contém código e dados para o processador no dispositivo, mas também pode ser um fluxo de bits que define a lógica de uma matriz lógica programável em campo (FPGA) ou alguma combinação de ambos.

Por outro lado, o firmware na memória flash normalmente é pré-programado nos dispositivos e só precisa ser reescrito se houver uma atualização do firmware pelo fabricante. Isso geralmente é feito por meio de outros mecanismos, como um executável separado, executado pelo usuário.

Existem algumas razões pelas quais os fabricantes desejam usar a RAM em vez da memória flash. Antes de tudo, torna possível projetar uma única versão do hardware, mas ao mesmo tempo entregar várias versões do produto (para diferentes áreas de mercado, por exemplo). Se for esperado que o produto seja atualizado em campo com freqüência, pode ser mais fácil lidar com as atualizações de firmware dessa maneira do que com o problema de criar um programa para atualizar a memória flash no dispositivo. Este programa deve ter uma interface de usuário agradável e ser projetado para ser o mais amigável possível, uma vez que normalmente é destinado ao usuário final do produto. Alguns dispositivos com armazenamento flash geralmente executam código da RAM de qualquer maneira e apenas copiam o conteúdo do flash para a RAM quando o dispositivo é iniciado,


Se o firmware não for carregado na RAM a partir do flash, como é que o firmware é carregado na RAM depois que o dispositivo é ligado?
Codebling 14/10/19

Se o dispositivo não puder carregar o firmware de forma autônoma, o host poderá armazená-lo na RAM do dispositivo, usando o barramento com o qual o dispositivo está conectado ao host. Os barramentos típicos são PCI e USB. É responsabilidade do driver do dispositivo fazer isso. O dispositivo não pode estar totalmente "morto" após ser ligado, deve conter lógica para facilitar o carregamento do firmware.
Johan Myréen 14/10/19

Eu meio que esqueci que estávamos falando sobre periféricos aqui, por isso sempre será conectado a um ônibus. Faz sentido!
Codebling 14/10/19

5

Como Anthony Geoghegan menciona , o que é "firmware" na terminologia Linux? e Por que alguns drivers ainda exigem firmware? fornecer antecedentes úteis.

Pacotes de firmware são pacotes que contêm arquivos de firmware, ou seja , arquivos que contêm código destinado a ser executado em dispositivos ou conectados ao seu sistema - exemplos comuns incluem chipsets wifi, como no seu caso. Eles não são instaladores únicos e não se importam se o hardware está disponível. Os arquivos que eles disponibilizam são usados ​​pelos drivers do kernel correspondentes, se o hardware relevante estiver presente: os drivers carregam o firmware na memória conectada ao hardware de destino, que executa o firmware para operar.

Esses pacotes de firmware não estão relacionados aos instaladores de firmware que você está pensando, que carregam atualizações de firmware na memória flash (o que só precisa ser feito quando uma atualização é necessária). Esse processo é realmente demorado, geralmente complexo e aparentemente cheio de perigos (pelo menos, se você basear suas impressões nos avisos do fabricante). Os pacotes de firmware incluídos nas distribuições Linux contêm firmware necessário sempre que o sistema é inicializado, porque é carregado na memória volátil.


2

Adicionando às já excelentes respostas.

Arquivos de firmware, também conhecidos como blobs binários proprietários, são carregados no firmware pelo menos no momento das (re) inicializações frias do dispositivo.

O dispositivo foi projetado para obter firmware na RAM, em vez de ter uma ROM + RAM para reduzir os custos de produção. Como exemplo, você tem alguns chipsets Wi-Fi Broadcom e chipsets de switch interno que funcionam dessa maneira.

Abordando o outro ponto da sua pergunta sobre o uso de arquivos de firmware em uma VM.

Como você está lidando com uma VM, não precisa de arquivos de firmware. Eles não serão carregados em nenhum lugar; muito menos arquivos de "firmware" Ethernet ou Wi-Fi.

Da mesma forma, considerando que o firmware não é necessário em um ambiente de VM, é uma grande idiossincrasia ter no Debian as dependências de um pacote genérico de arquivo de firmware no kernel do Linux.


“É uma grande idiossincrasia ter no Debian as dependências de um pacote genérico de arquivo de firmware no kernel Linux” - pelo menos o firmware recomendado pelo pacote do kernel é realmente livre de DFSG ;-). (Mas você tem razão, ambos recomendações - firmware-linux-freee irqbalance- são inúteis na maioria das implementações de hoje em dia.)
Stephen Kitt

Eu sempre executar uma cartilha para desinstalar que cruft após uma rodada de atualizações do kernel
Rui F Ribeiro

1
Você também pode configurar aptpara que ele não instala recomendações por padrão ...
Stephen Kitt
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.