web-dev-qa-db-fra.com

Le moyen le plus rapide de recharger le module de pilote graphique?

J'essaie de me familiariser avec le développement de pilotes graphiques, en l'occurrence des modifications sur un module de noyau DRM, appelé gma500_gfx.

Chaque fois que je modifie ce pilote, je lance un script qui compile et remplace le module de noyau précédent (par une commande cp), puis redémarre la distribution Linux (Lubuntu).

Je ne parviens pas à recharger ce module de pilote graphique sans redémarrer Linux pour l'instant. Les commandes modprobe et rmmod me donnent toujours une erreur 'module in use'.

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

Quand je regarde les dépendances, je reçois la liste suivante.

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

Je suis également incapable de décharger aucune de ces dépendances, qui donnent la même erreur. Autres choses que j'ai essayées avant le modprobe, mais qui n'ont pas abouti:

  • Aller à un environnement utilisateur unique par "init 1"
  • Fermez lightdm par "/etc/init.d/lightdm stop" (ce qui réduit le nombre de références de 1 à 1)

Est-ce que quelqu'un connaît un moyen plus rapide de recharger le module de pilote graphique que de redémarrer la distribution Linux?

6
Arthur Borsboom

Après de nombreuses recherches, j'ai trouvé les deux références qui empêchent le module de se décharger et de recharger le module. Les deux choses qui tiennent une serrure sont:

  1. LightDM, un gestionnaire d'affichage X léger
  2. Le framework de framebuffer générique

Pour enlever les verrous respectivement:

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

Cependant, la deuxième option dissocie le framework du tampon de mémoire du pilote gma500_gfx, ce qui arrête la sortie de l'écran. Donc, il est préférable de combiner nr. 2 avec un script pour dissocier, décharger le module, réinitialiser l'écran et recharger le module. Autant que je sache, je dois exécuter cela à partir d'une console.

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

De préférence, j'aimerais disposer d'un script de redémarrage, que je peux exécuter directement à partir de LightDM, qui recharge le pilote et restaure la session. Je n'ai pas encore été capable de le faire, mais c'est un sujet différent de la question ci-dessus. Toute suggestion pour le faire me rendrait heureuse. :)

2
Arthur Borsboom