Я пытаюсь разобраться в разработке графического драйвера, в данном случае для модификаций модуля ядра DRM, называемого gma500_gfx.
Каждый раз, когда я вносил изменения в этот драйвер, я запускаю скрипт, который компилирует и заменяет предыдущий модуль ядра (командой cp) и перезапускает дистрибутив Linux (Lubuntu).
Я не могу перезагрузить этот модуль графического драйвера без перезапуска Linux (пока). Команды modprobe и rmmod всегда выдают ошибку «используется модуль».
modprobe gma500_gfx -r
modprobe: FATAL: Module gma500_gfx is in use.
Когда я смотрю на зависимости, я получаю следующий список.
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
Я также не могу выгрузить любую из этих зависимостей, которые дают ту же ошибку. Другие вещи, которые я пробовал до modprobe, но которые безуспешны:
Кто-нибудь знает более быстрый способ перезагрузить модуль графического драйвера, чем перезапуск дистрибутива Linux?
После долгих исследований я обнаружил две ссылки, которые удерживают модуль от выгрузки и как перезагрузить модуль. Две вещи, удерживающие блокировку:
Чтобы снять блокировки соответственно:
sudo /etc/init.d/lightdm stop
echo 0 > /sys/class/vtconsole/vtcon1/bind
Однако второй вариант отсоединяет фрейм-буфер от драйвера gma500_gfx, который останавливает вывод на экран. Итак, лучше объединить нр. 2 со сценарием, чтобы отсоединить, выгрузить модуль, сбросить экран и загрузить модуль снова. AFAIK, я должен запустить это с консоли.
#!/bin/bash
echo 0 > /sys/class/vtconsole/vtcon1/bind
modprobe -r gma500_gfx
modprobe gma500_gfx
/etc/init.d/lightdm start
Желательно, чтобы у меня был 1 скрипт перезапуска, который я могу запустить непосредственно из LightDM, который перезагружает драйвер и восстанавливает сеанс. Я пока не смог этого сделать, однако это другая тема, чем вопрос выше. Любые предложения для этого сделают меня счастливым. :)