Estou sendo confundido pelo uso de firmware no contexto do Linux.
Meu entendimento sobre firmware e driver é que firmware é o código executado apenas em um dispositivo como um IC Bluetooth, controlador de teclado ou placa de vídeo ou microcontrolador de uso único. O firmware expõe uma interface para o sistema operacional usar seus serviços.
O driver, em comparação, é o software que o kernel usa para se comunicar com as interfaces mencionadas anteriormente, fornecidas pelo firmware. Assim, um driver de vídeo, um driver de teclado, um driver de rádio bluetooth.
Então, por que continuo lendo sobre a instalação de arquivos de firmware do Linux (por exemplo, aqui ). Eles são carregados no hardware? Esses arquivos são usados pelo kernel? Qual é o significado do firmware nesse contexto?
Respostas:
No contexto do kernel Linux, o firmware é um software que roda em outro processador no sistema, por exemplo , um controlador sem fio, uma GPU, um controlador SCSI ... Este software costumava ser armazenado em ROM (de vários tipos) anexado ao controlador relevante , mas para reduzir custos e simplificar as atualizações, os controladores agora tendem a confiar no sistema operacional do host para carregar o firmware para eles.
Portanto, os arquivos de firmware não são usados pelo kernel, eles são carregados pelo kernel em outras partes do 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.
fonte
/lib/firmware
(singular, não/etc
) contém firmware usado por outros dispositivos. Muitos dispositivos (incluindo controladores sem fio e GPUs) precisam de firmware fornecido pelo sistema host, mesmo que eles tenham sua própria ROM (ou flash) contendo firmware.