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

Art*_*oom 6 development kernel gma500 drivers

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

每次更改此驱动程序时,我都会启动一个脚本来编译和替换以前的内核模块(通过 cp 命令),然后重新启动 Linux 发行版 (Lubuntu)。

我无法在不重新启动 Linux(尚未)的情况下重新加载此图形驱动程序模块。命令 modprobe 和 rmmod 总是给我一个“正在使用的模块”错误。

modprobe gma500_gfx -r
modprobe: FATAL: Module gma500_gfx is in use.
Run Code Online (Sandbox Code Playgroud)

当我查看依赖项时,我得到以下列表。

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
Run Code Online (Sandbox Code Playgroud)

我也无法卸载这些依赖项中的任何一个,这会产生相同的错误。我在 modprobe 之前尝试过但不成功的其他事情:

  • 通过“init 1”转到单用户环境
  • 通过“/etc/init.d/lightdm stop”关闭lightdm(将refcount减少1到1)

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

Art*_*oom 2

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

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

分别解除锁:

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

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

#!/bin/bash
echo 0 > /sys/class/vtconsole/vtcon1/bind
modprobe -r gma500_gfx
modprobe gma500_gfx
/etc/init.d/lightdm start
Run Code Online (Sandbox Code Playgroud)

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