Kernel-Modules

如何使用 RPM 載入不依賴於 Linux 核心版本的自定義 Linux 核心模組

  • June 17, 2016

我有一個第 3 方庫,它提供了一個核心模組 ( 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).

我的問題是第二種方法是否是實現這一目標的唯一方法,或者是否有更好的方法?

insmod您可以提供一條/lib/modprobe.d/mymodule.conf線路,而不是提供服務

install mymodule insmod /path/to/mymodule.ko

slip我試過這個,它在 Fedora 22 上執行良好,以現有模組為例。

$ 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

引用自:https://unix.stackexchange.com/questions/290059