Como impedir que um driver de vídeo de módulo de kernel sondasse um dispositivo de placa gráfica específico

1

Meu sistema contém 2 placas Nvidia. O que estou tentando alcançar é um cartão acionado por nouveau driver enquanto o outro pelo driver oficial nvidia blob.

Ambos os drivers coabitam com sucesso se o nvidia for iniciado automaticamente na inicialização, usando uma opção de driver nvidia específica "nvidia_340.NVreg_AssignGpus = 0: 02: 00." isso faz com que o driver sondasse apenas um dispositivo específico, e o driver nouveau é lançado manualmente com modprobe , sondando o outro dispositivo não utilizado.

Eu gostaria de automatizar as coisas fazendo com que os dois módulos sejam carregados na inicialização, mas eu não consegui dizer ao driver nouveau para sondar apenas uma das duas placas gráficas. A ordem de carregamento dos módulos parece não determinística e quando o módulo nouveau é carregado antes do módulo nvidia, ele investiga ambos e impede que a nvidia oficial acesse o outro.

Eu sei que eu poderia fazer uma tarefa de serviço systemd para executar modprobe nouveau durante a fase de inicialização (que é executada bem após o carregamento do módulo nvidia), mas eu acho que há uma maneira melhor de fazer isso. Eu penso em udev mas como eu não sei muito, eu não tenho certeza se é o caminho a seguir.

Qual é a maneira correta de lidar com isso?

    
por sgt-hartman 14.05.2017 / 13:02

1 resposta

0

Assim, o caminho para a solução não foi fácil, mas a solução em si é surpreendentemente direto:

A idéia é usar a diretiva install em um arquivo de configuração /etc/modprobe.d/ que redefine a forma como o driver nvidia é executado através do modprobe. Eu defino o seguinte dentro de um arquivo /etc/modprobe.d/nvidia-with-nouveau.conf :

install nvidia_340 /sbin/modprobe --ignore-install nvidia_340; /sbin/modprobe nouveau

que instrui o kernel a iniciar o módulo nvidia (o meu é a versão 340). Através desta instrução eu digo para começar a nvidia primeiro, então nouveau. --ignore-install é necessário para evitar que o kernel reutilize instalar diretiva para lançar o módulo nvidia que poderia resultar em algum tipo de loop infinito eu presumo.

install e outras diretivas disponíveis nos arquivos de configuração /etc/modprobe.d são bem explicadas em man modprode.d .

É importante manter o driver nouveau na lista negra para evitar que ele seja começou por conta própria. No Ubuntu, os drivers da Nvidia, quando instalados através do deb pacotes de repositórios oficiais do Ubuntu, lista negra o módulo nouveau instalando o arquivo /etc/modprobe.d/nvidia-340_hybrid.conf (aplica-se a mim, pode ser diferente em outro SO e na versão do driver).

Este arquivo contém o seguinte:

blacklist nouveau
blacklist lbm-nouveau
alias nouveau off
alias lbm-nouveau off

As seguintes linhas criam um alias para nouveau para off e devem ser comentou:

#alias nouveau off
#alias lbm-nouveau off

Por fim, acho que a atualização do initramfs é necessária para essas alterações ser levado em conta:

sudo update-initramfs -u

Agora posso aproveitar a configuração de vários lugares com um lugar no nouveau e o outro no nvidia-driver.

    
por 16.05.2017 / 22:21