重新加载图形驱动模块的最快方法?

重新加载图形驱动模块的最快方法?

我正在尝试解决图形驱动程序开发的问题,在这种情况下,是对名为 gma500_gfx 的 DRM 内核模块进行修改。

每次我对此驱动程序进行更改时,我都会启动一个脚本,该脚本会编译并替换以前的内核模块(通过 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 之前,我尝试过其他方法,但均未成功:

  • 通过“init 1”进入单用户环境
  • 通过“/etc/init.d/lightdm stop”关闭 lightdm(将引用计数从 1 减少到 1)

有人知道比重新启动 Linux 发行版更快的重新加载图形驱动程序模块的方法吗?

答案1

经过大量研究,我找到了阻止模块卸载和如何重新加载模块的两个参考资料。持有锁的两件事是:

  1. LightDM,一个轻量级的 X 显示管理器
  2. 通用帧缓冲区框架

删除锁的方法如下:

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

但是,第二个选项会将帧缓冲区框架与 gma500_gfx 驱动程序解除绑定,从而停止屏幕输出。因此,最好将 2 号与脚本结合起来,以解除绑定、卸载模块、重置屏幕并再次加载模块。据我所知,我必须从控制台运行它。

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

我最好有一个重启脚本,可以直接从 LightDM 运行,它会重新加载驱动程序并恢复会话。我还没有做到这一点,但这与上面的问题不同。任何建议都会让我高兴。:)

相关内容