如何使用 RPM 加载不依赖于 Linux 内核版本的自定义 Linux 内核模块

如何使用 RPM 加载不依赖于 Linux 内核版本的自定义 Linux 内核模块

我有一个第三方库,它提供了一个内核模块(module.ko),并且需要在启动时自动加载。但是,module.ko它不依赖于特定版本的 Linux 内核,并且可以跨多个版本工作。注意我没有module.ko;的来源它是预编译的。

我正在为此第 3 方库创建 RPM 包,因此创建 SPEC 文件。

我的第一个方法是使用lib/modprobe.d,lib/modules-load.d并在启动时lib/modules/$(uname -r)自动加载module.ko。这很好用;然而,我不想每次升级 Linux 内核时都必须重新安装我的软件包。这是因为,在 SPEC 文件中,module.ko被复制到lib/modules/$(uname -r),其中$(uname -r)是当前内核版本。

第二种方法是创建一个在启动时加载内核的服务,使用insmod.这modprobe完全避免了,因为modprobe需要将内核复制到lib/modules/$(uname -r).

我的问题是第二种方法是否是实现这一目标的唯一方法,或者是否有更好的方法?

答案1

insmod您可以提供/lib/modprobe.d/mymodule.conf线路,而不是提供服务

install mymodule insmod /path/to/mymodule.ko

我尝试了这个,它在 fedora 22 上运行正常,以现有模块为例slip

$ cd /lib/modules/4.2.8-200.fc22.x86_64/extra/drivers/net/slip/
$ lsmod|grep slip
$ sudo modprobe slip
$ lsmod|grep slip
slip                   20480  0
slhc                   20480  1 slip
$ sudo rmmod slip
$ lsmod|grep slip
$ sudo mv slip.ko.xz ~
$ sudo modprobe slip
modprobe: ERROR: could not insert 'slip': Unknown symbol in module, or unknown parameter
$ sudo sh -c 'echo install slip insmod /home/meuh/slip.ko.xz >/lib/modprobe.d/mymodule.conf'
$ sudo modprobe slip
$ lsmod|grep slip
slip                   20480  0
slhc                   20480  1 slip

相关内容