Pacotes de firmware: o que eles realmente fazem?

6

No meu CentOS, um yum update traz 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 que estão instalados:

rpm --query --all | grep firmware

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

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

e ficamos:

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, já que isso é uma VM.

Então, pergunta:

O que os pacotes de firmware realmente fazem?

São instalações "únicas" que executam um executável opaco (imediatamente? na próxima inicialização?) que verifica se o hardware existe, bombeia o código binário para o flash do hardware se o hardware estiver lá (talvez enquanto estiver perguntando ao usuário; no Windows, pelo menos, o flash do hardware é sempre repleto 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 acontece na próxima inicialização?

    
por David Tonhofer 13.07.2018 / 18:18

3 respostas

3

O firmware carregável normalmente não é uma instalação "única" gravada em flash no dispositivo. O firmware é carregado no armazenamento volátil no dispositivo e precisa ser feito sempre que o computador host é ligado. O dispositivo não funciona antes do firmware ser carregado. O firmware pode ser gravado na memória RAM no dispositivo, caso em que contém código e dados para o processador no dispositivo, mas também pode ser um fluxo de bits definindo a lógica de um FPGA (field-programmable logic array) ou combinação de ambos.

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

Existem algumas razões pelas quais os fabricantes querem usar a RAM em vez da memória flash. Primeiro 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 frequentemente em campo, pode ser mais fácil lidar com as atualizações de firmware dessa maneira do que se dar ao trabalho de criar um programa para atualizar a memória flash no dispositivo. Este programa deve ter uma boa interface de usuário e ser projetado para ser o mais amigável possível, já que normalmente é executado pelo usuário final do produto. Alguns dispositivos com armazenamento flash geralmente executam códigos da RAM de qualquer maneira, e eles simplesmente copiam o conteúdo do flash para a RAM quando o dispositivo é iniciado, caso em que o chip flash permanece inativo a maior parte do tempo e é uma despesa extra. p>     

por 13.07.2018 / 21:07
4

Como Anthony Geoghegan menciona , O que é "firmware" na terminologia Linux? e Por que alguns drivers ainda exigem firmware? fornecem informações úteis.

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

p>

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 (que só precisa ser feita quando uma atualização é necessária). Esse processo é realmente demorado, muitas vezes complexo e aparentemente repleto de perigos (pelo menos se você basear suas impressões nos avisos do fabricante). Os pacotes de firmware incluídos nas distribuições do Linux contêm firmware, que é necessário toda vez que o sistema é inicializado, porque é carregado na memória volátil.

    
por 13.07.2018 / 21:08
2

Somando-se às já excelentes respostas.

Os arquivos de firmware, também conhecidos como blobs binários proprietários, são carregados em seu firmware pelo menos no momento da inicialização (re) a frio do dispositivo.

O dispositivo foi concebido 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 da Broadcom e chipsets de comutadores internos que funcionam dessa maneira.

Enfrentando o outro ponto da sua questão de usar 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 qualquer lugar; muito menos arquivos "firmware" de ethernet ou wifi.

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 arquivos de firmware no kernel do Linux.

    
por 13.07.2018 / 23:45