定義された/lib/module/*kernelディレクトリにカーネルモジュールを構築してインストールします。

定義された/lib/module/*kernelディレクトリにカーネルモジュールを構築してインストールします。

ディストリビューションカーネルに問題があり、モジュールをビルドするためにカーネル(同じバージョン)をビルドしました。私のモジュールは互換性があります。ただし、モジュールをインストールすると、スクリプトはカーネルのモジュールディレクトリに書き込むのではなく、/lib/modules/に新しいディレクトリを作成します。次のように見えます。

/lib/modules/old_kernel
/lib/modules/new_kernel

/lib/modules/old_kernel/TARGET1のような固定パスに書き込む方法はありますか?これまでのインストールパスをオーバーライドすると、非常に奇妙な動作のみが発生します。例: /lib/modules/old_kernel/lib/modules/new_kernel/TARGET1

obj-m += rcio_core.o
obj-m += rcio_spi.o
obj-m += rcio_adc.o
obj-m += rcio_pwm.o
obj-m += rcio_rcin.o
obj-m += rcio_status.o

ccflags-y := -std=gnu99

KVERSION ?= $(shell uname -r)
KERNEL_SOURCE ?= /lib/modules/$(KVERSION)/build

all:
  $(MAKE) -C $(KERNEL_SOURCE) M=$(PWD) modules
  /usr/local/bin/dtc -@ -I dts -O dtb rcio-overlay.dts -o rcio-overlay.dtb
  cp rcio-overlay.dtb /boot/overlays

install:
$(MAKE) -C $(KERNEL_SOURCE) M=$(PWD) modules_install

clean:
  $(MAKE) -C $(KERNEL_SOURCE) M=$(PWD) clean
  $(RM) rcio-overlay.dtb

答え1

このモジュールをインストールするために「make module_install」を使用するとします。 /lib/modules 以下のターゲットは、カーネルモジュールソースファイルを構築するカーネルヘッダに基づいて決定されます。 Fedoraでは、これらのヘッダーはkernel-develによって提供されます。したがって、「rpm -q kernel-devel」が/lib/modules(希望するバージョン)の下にカーネルバージョンを表示すると、すべてが正常です。そうでない場合は、このrpmをアンインストールして必要なバージョンでインストールし、モジュールをビルドしてインストールできます。他のディストリビューションではパッケージ名が異なる場合がありますが、同じ原則が適用されます。

ラミーローゼン

答え2

使用する makefile は次の行で表示されます。

KVERSION ?= $(shell uname -r)

特に、/lib/modules/$(KVERSION)/build/Makefile実行中のすべてのターゲットは$(MAKE) -Cこれを参照します。

これは一定でなければならず、ターゲットから手動で変更することはできません。これらのターゲットはclean他のバージョンでもほぼ同じように機能しますが、特定のカーネルバージョン(Makefile)でカーネルモジュールをビルドすると、マジックナンバーが異なるため、他のバージョンにインストールすることはできません。同様に、modules_install指すディレクトリを手動で変更することは意味がありません。

つまり、別のバージョンをターゲットにするには、KVERSION変数が指すディレクトリにあるように変数を変更しますKERNEL_SOURCE

これは通常インストールされているカーネルの場合です。詳しくは@Rami Rosenの回答をご覧ください。しかし、あなたが行ったことに言及したので、編むkernel-develパッケージをインストールするのではなく、2回確認することをお勧めします(たとえば、カーネルバージョンのスペルがどうなるか)。

関連情報