Inclua blobs de firmware no kernel no binário do kernel

5

Eu estou compilando meu próprio kernel (4.4.x) no Debian Stretch, e eu quero incluir o firmware para minha placa gráfica radeon no kernel, para que ele não precise ser carregado do userspace.

CONFIG_FIRMWARE_IN_KERNEL
CONFIG_EXTRA_FIRMWARE

Eu instalei os arquivos de firmware em /lib/firmware/

apt-get install firmware-amd-graphics

Como posso descobrir quais arquivos de firmware eu preciso incluir para o meu cartão graphis específico?

VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Oland GL [FirePro W2100]

Suponho que precisarei de alguns dos seguintes arquivos de firmware:

/lib/firmware/radeon/oland_*.bin

mas quais?

Em geral, qual é o processo de descobrir quais arquivos de firmware um determinado driver / driver precisa?

    
por Martin Vegter 09.09.2017 / 10:13

1 resposta

4

O wiki do Gentoo artigo do radeon descreve como incluir o firmware no seu binário do kernel. O artigo também inclui uma tabela listando os binários de firmware necessários para cada modelo de GPU. Para o seu FirePro W2100 ( chipset Oland ), a tabela lista o seguinte firmware binários:

radeon/oland_ce.bin radeon/oland_mc.bin radeon/oland_me.bin
radeon/oland_pfp.bin radeon/oland_rlc.bin radeon/oland_smc.bin 
radeon/TAHITI_uvd.bin

Examinar o log do kernel usando dmesg| grep "direct-loading firmware" no seu sistema deve informar qual firmware foi carregado automaticamente:

radeon 0000:01:00.0: firmware: direct-loading firmware radeon/OLAND_pfp.bin
radeon 0000:01:00.0: firmware: direct-loading firmware radeon/OLAND_me.bin
radeon 0000:01:00.0: firmware: direct-loading firmware radeon/OLAND_ce.bin
radeon 0000:01:00.0: firmware: direct-loading firmware radeon/OLAND_rlc.bin
radeon 0000:01:00.0: firmware: direct-loading firmware radeon/OLAND_mc2.bin
radeon 0000:01:00.0: firmware: direct-loading firmware radeon/OLAND_smc.bin
radeon 0000:01:00.0: firmware: direct-loading firmware radeon/TAHITI_uvd.bin

Eu imagino que esse método foi usado para reunir os dados usados para as tabelas no wiki do gentoo.

Firmware a ser incluído na imagem do kernel durante a compilação é configurado usando CONFIG_EXTRA_FIRMWARE opção. O diretório de onde o sistema de compilação procura o firmware extra é configurado usando a opção CONFIG_EXTRA_FIRMWARE_DIR .

Como incluir o firmware binário, nas etapas:

  1. Você precisa criar o driver radon (e o Direct Rendering Manager) diretamente no kernel, não como um módulo. O módulo precisaria ser carregado do sistema de arquivos.

  2. Configure CONFIG_EXTRA_FIRMWARE_DIR para /lib/firmware , a distribuição de localização instala imagens binárias para. Desta forma, você não precisa copiar os binários do firmware.

  3. Relacione os arquivos de firmware em CONFIG_EXTRA_FIRMWARE , vários arquivos separados por espaço.

Usando menuconfig :

  1. Crie o driver radeon diretamente no kernel.

    Device Drivers  --->
        Graphics support  --->
            <*> Direct Rendering Manager (XFree86 4.1.0 and higher DRI support)  --->
            <*> AMD GPU 
    
  2. Inclua o firmware

    Device Drivers  --->
        Generic Driver Options  --->
            [*] Include in-kernel firmware blobs in kernel binary
                (radeon/... radeon/...)
                (/lib/firmware) Firmware blobs root directory
    
por 11.09.2017 / 13:16