我已经从 PPA 为 USB 设备安装了 DKMS 驱动程序。我正在更改代码并尝试使用 apt-get --purge remove 卸载驱动程序,但当我插入设备时,内核模块仍然加载...为什么会这样?它们藏在哪里?
提前致谢
答案1
当您 (或 DKMS) 构建内核模块并安装它时,它们会转到/lib/modules/$(uname -r)/...
,因此请在那里检查。我的系统中的一个例子:
/lib/modules/3.2.0-36-generic-pae/updates/dkms/nvidia_current_updates.ko
答案2
安装和使用通过 DKMS 安装的内核模块涉及几个(大部分是自动化的)步骤:
- (在您的例子中)添加 PPA 源,刷新包列表。
- 使用包管理器 ( ) 安装 DKMS 包,
apt-get
首先将源文件和自动安装说明复制到标准目录 (/usr/src/<module name>-<version>
) - DKMS 将文件复制到其私人目录。
- DKMS 在其私有目录中编译内核模块的源代码。
- DKMS将编译好的内核模块文件复制到modules目录下(一般是
/lib/modules/<kernel version>/updates
) - DKMS 更新模块依赖关系,以便您可以使用
modprobe <modname>
而不是insmod /lib/modules/<kernel version>/updates/<modname>.ko
。 - 您可以手动加载内核模块(
modprobe <modname>
),或者当您插入 USB 设备时,系统组件(udev)会为您加载该模块。
清除软件包时,将撤消步骤 1-6。步骤 7 不会自动撤消。通常,模块在加载后会保持加载状态,除非您使用 手动将其删除sudo rmmod <modname>
。使用lsmod
来找出模块的名称,通常与 相同<modname>
,但至少对于 Ubuntu 上的 nvidia 驱动程序,此方法不同(您应使用modprobe nvidia-current
,但使用rmmod nvidia
)。