我的理解它的优点dkms
是它是一种动态管理 Linux 系统上所有连接/断开连接的设备驱动程序的方法。如果这是正确的,那么我必须想象它允许您配置一个可以安装设备驱动程序的“存储库”,这样一旦可热插拔设备连接到它,它就会找到该设备的驱动程序(在此存储库中)并加载它。
如果这是正确的,那么这个存储库在哪里并且该位置可以配置吗?是否可以将其配置为在远程位置查找驱动程序(使用 HTTP、TCP 等)?
还,dkms 是否提供了一种在运行时动态更新/升级设备驱动程序的方法?如果将设备驱动程序更新推送到此存储库,然后让 dkms 自动释放/卸载驱动程序,用新的/更新的驱动程序覆盖旧驱动程序,然后重新加载新驱动程序,那就太好了。
答案1
两者都不乌德夫也不数据管理系统可以充分地描述为“一种在 Linux 系统上动态管理所有连接/断开连接的设备驱动程序的方法”。 udev动态管理设备,而不是驱动程序 — 它/dev
会在设备插入时创建条目。DKMS 与驱动程序有关,但它与查找设备的驱动程序无关:它是一种在安装内核时从源代码编译第三方驱动程序的方法。
当内核检测到没有驱动程序的设备时,它会调用该程序modprobe
尝试加载提供此驱动程序的模块。该modprobe
程序依次查阅由以下命令创建的数据库depmod
它遍历*.ko
位于.看/lib/modules/VERSION/
debian 重新启动后未检测到串行 PCI 卡有关此机制的更详细说明。
当设备已连接且内存中不存在驱动程序时,事件的名义序列为:
- 内核调用
modprobe
来加载驱动程序。 modprobe
从 加载模块文件/lib/modules
。- 现在驱动程序可用,内核通知 udev 有一个新设备存在。
/dev
udev为新设备创建一个条目。
当检测到未知设备时,没有标准机制可以从某处下载设备驱动程序。安装驱动程序的正常方法是在系统上安装由发行版提供的所有可能的驱动程序 - 并不总是可以下载驱动程序(例如,当您需要驱动程序连接到网络时,或者您没有网络连接)。升级驱动程序的工作方式与升级其他任何东西相同,通过升级包含驱动程序文件的包(通常是内核包)。
当驱动程序不属于 Linux 内核时,DKMS 会进行干预。很难制作一个跨内核版本和编译选项工作的模块二进制文件。 DKMS 是一个为已安装的内核自动编译模块的框架;这些模块作为源代码分发。