A maneira mais rápida de recarregar o módulo do driver gráfico?

5

Estou tentando me orientar no desenvolvimento de drivers gráficos, neste caso para modificações em um módulo de kernel DRM, chamado gma500_gfx.

Sempre que faço uma alteração neste driver, inicio um script que compila e substitui o módulo anterior do kernel (por um comando cp) e reinicia a distro do Linux (Lubuntu).

Não consigo recarregar este módulo do driver gráfico sem reiniciar o Linux (ainda). Os comandos modprobe e rmmod sempre me dão um erro 'module in use'.

modprobe gma500_gfx -r
modprobe: FATAL: Module gma500_gfx is in use.

Quando vejo as dependências, obtenho a seguinte lista.

gma500_gfx            185579  2 
drm_kms_helper         48716  1 gma500_gfx
drm                   298219  3 drm_kms_helper,gma500_gfx
video                  19370  2 acer_wmi,gma500_gfx
i2c_algo_bit           13413  1 gma500_gfx

Eu também não consigo descarregar nenhuma dessas dependências, que fornecem o mesmo erro. Outras coisas que eu tentei antes do modprobe, mas que são malsucedidas:

  • Ir para um ambiente de usuário único por "init 1"
  • Shutdown lightdm por "/etc/init.d/lightdm stop" (que reduz o recontado de 1 para 1)

Alguém sabe uma maneira mais rápida de recarregar o módulo do driver gráfico do que reiniciar a distribuição do Linux?

    
por Arthur Borsboom 08.02.2014 / 22:36

1 resposta

2

Depois de muita pesquisa, eu encontrei as duas referências que impedem o descarregamento do módulo e como recarregar o módulo. As duas coisas segurando uma fechadura são:

  1. LightDM, um gerenciador de exibição X leve
  2. A estrutura genérica do framebuffer

Para remover os bloqueios, respectivamente:

  1. sudo /etc/init.d/lightdm stop
  2. echo 0 > /sys/class/vtconsole/vtcon1/bind

No entanto, a segunda opção desassocia o framework framebuffer do driver gma500_gfx, que interrompe a saída da tela. Então, é melhor combinar o nr. 2 com um script para desvincular, descarregar o módulo, redefinir a tela e carregar o módulo novamente. AFAIK, eu tenho que correr isso de um console.

#!/bin/bash
echo 0 > /sys/class/vtconsole/vtcon1/bind
modprobe -r gma500_gfx
modprobe gma500_gfx
/etc/init.d/lightdm start

De preferência eu gostaria de ter 1 restart-script, que eu posso executar diretamente do LightDM, que recarrega o driver e restaura a sessão. Ainda não consegui fazer isso, mas esse é um tópico diferente da questão acima. Qualquer sugestão para fazer isso me faria feliz. :)

    
por Arthur Borsboom 10.02.2014 / 14:46