No meu CentOS, a 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, consulte suas informações:
rpm --query --info iwl105-firmware-18.168.6.1-62.2.el7_5.noarch
e obtemos:
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?) pelo menos, o flashing de hardware está 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 aconteça na próxima inicialização?
Como Anthony Geoghegan menciona , O que é "firmware" na terminologia do Linux? e Por que alguns drivers ainda requerem 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 de kernel correspondentes, se o hardware relevante estiver presente: os drivers carregam o firmware na memória conectada ao hardware de destino, que então 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, 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 Linux contêm firmware que é necessário sempre que o sistema é inicializado, pois é carregado na memória volátil.
O firmware carregável normalmente não é uma instalação "one-shot" gravada para flash no dispositivo. O firmware é carregado no armazenamento volátil no dispositivo e precisa ser feito sempre que o computador host for ligado. O dispositivo não funciona antes de o firmware ser carregado. O firmware pode ser escrito na RAM do dispositivo, nesse caso ele 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 array lógico programável em campo (FPGA) ou algum 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 do fabricante. Isso normalmente é 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 RAM em vez de memória flash. Em primeiro lugar, permite 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 frequência, pode ser mais fácil lidar com as atualizações de firmware dessa maneira do que 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 é executado pelo usuário final do produto. Alguns dispositivos com armazenamento flash geralmente executam o código da RAM de qualquer maneira e apenas copiam o conteúdo do flash para a RAM quando o dispositivo é iniciado,
Adicionando às respostas já excelentes.
Os arquivos de firmware, também conhecidos como blobs binários proprietários, são carregados em seu firmware pelo menos no momento da (re) inicialização a frio 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 wifi Broadcom e chipsets de switch internos que funcionam dessa maneira.
Abordando o outro ponto da sua pergunta de usar arquivos de firmware em uma VM.
Como você está lidando com uma VM, você não precisa de arquivos de firmware. Eles não serão carregados em nenhum lugar; muito menos arquivos de "firmware" 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 de arquivo de firmware genérico no kernel Linux.
consulte as respostas de outras pessoas, e os documentos on-line
tentam compará-lo com coisas relacionadas que os usuários do Linux podem ver com frequência.
//Pode não ser completamente preciso, melhorias são bem-vindas
linux-firmware
Descrição: Firmware para drivers de kernel Linux Este pacote fornece o firmware usado por drivers de kernel Linux.
// kernel (talvez) empurra o binário para a RAM de outro SoC (wifi, placa gráfica ..) a cada inicialização do sistema
// executa em outro (talvez um periférico) cpu/mcu (RAM)
https://wiki.gentoo.org/wiki/Linux_firmware
linux-image-genérico
Depende: linux-image-5.4.0-110-generic, linux-modules-extra-5.4.0-110-generic, linux-firmware, intel-microcode, amd64-microcode
Descrição: Imagem genérica do kernel Linux Este pacote sempre dependerá da última imagem genérica do kernel disponível.
// kernel e drivers, AVISO: kernel/driver pode corresponder com a versão especificada do linux-firmware
//executa no processador
firmware do dispositivo
// flash para o flash do periférico (ROM), por exemplo, atualização do BIOS.
flash no espaço do usuário,
fwupdmgr
ousnap-store
(chamado "software ubuntu") guia de atualizaçõesresumo
// roda na CPU: kernel, driver