RPM을 사용하여 Linux 커널 버전에 의존하지 않는 사용자 정의 Linux 커널 모듈을 로드하는 방법

RPM을 사용하여 Linux 커널 버전에 의존하지 않는 사용자 정의 Linux 커널 모듈을 로드하는 방법

module.ko커널 모듈( )을 제공하고 부팅 시 자동으로 로드되어야 하는 타사 라이브러리가 있습니다 . 그러나 module.ko특정 버전의 Linux 커널에 종속되지 않으며 여러 버전에서 작동합니다. module.ko해당 소스는 미리 컴파일되어 있지 않습니다 .

이 타사 라이브러리에 대한 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. 커널을 .modprobemodprobelib/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

관련 정보