さまざまなカーネルバージョンに合わせてカーネルモジュールをコンパイルする方法は?

さまざまなカーネルバージョンに合わせてカーネルモジュールをコンパイルする方法は?

次のカーネルをインストールしました。

[root@localhost ~]# uname -r
2.6.32-573.el6.x86_64

次のカーネルソースコードは次のとおりです。

Linux-2.6.32-573.1.1.el6.x86_64

私はこのカーネルソースコードを使ってカーネル用のカーネルモジュールをコンパイルしようとしています。

カーネルソースMakefileのEXTRAVERSION設定を編集しました。

[root@localhost linux-2.6.32-573.1.1.el6.x86_64]# cat Makefile | grep "EXTRAVERSION ="
EXTRAVERSION = 2.6.32-573.el6.x86_64

そして、次のコマンドを使用してモジュールをコンパイルします。

[root@localhost linux-2.6.32-573.1.1.el6.x86_64]# make M=~/hw/
  LD      /root/hw/built-in.o
  CC [M]  /root/hw/hello_world.o
  Building modules, stage 2.
  MODPOST 1 modules
  CC      /root/hw/hello_world.mod.o
  LD [M]  /root/hw/hello_world.ko.unsigned
  NO SIGN [M] /root/hw/hello_world.ko

ただし、インストールしようとすると、次のエラーが発生します。

[root@localhost linux-2.6.32-573.1.1.el6.x86_64]# insmod ~/hw/hello_world.ko
insmod: error inserting '/root/hw/hello_world.ko': -1 Invalid module format

modinfoの出力は次のとおりです。

[root@localhost linux-2.6.32-573.1.1.el6.x86_64]# modinfo ~/hw/hello_world.ko
filename:       /root/hw/hello_world.ko
license:        GPL
srcversion:     A8BB878B88F36D3A046026C
depends:
vermagic:       2.6.32-573.el6.x86_64 SMP mod_unload modversions

カーネルソースをインストールせずに現在のカーネル用のモジュールをコンパイルできますか?

追加情報:

オペレーティングシステム:最小CentOS 6.7。バイナリを配布します。

このガイドに従ってください:http://wiki.centos.org/HowTos/I_need_the_Kernel_Source

そしてここからlinux-2.6.32-573.1.1.el6.x86_64のソースコードをダウンロードしました。

http://vault.centos.org/6.7/updates/Source/SPackages

特定のカーネルのソースコードをダウンロードできることを知っていますが、最終的にはソースコード(まだ2.6.32)が見つからないカーネルバージョンのモジュールを実際にビルドしたいので、これをやりたいと思います。これ。

ベストアンサー1

実際にここに注意すべき2つのことがあります。

私たちが使用しているソースと同じように実行されるカーネルバージョンです。以前にコンパイルされたカーネルには、最新バージョンで利用可能なすべての依存関係がない可能性があるため、最新のカーネルソースに外部モジュールをコンパイルすることは、最新バージョンにのみ存在するコードの部分によって異なります。したがって、外部モジュールを使用している場合は、最新バージョンのカーネルを使用することをお勧めします。

2.カーネルのコンパイルに使用される.configファイルは、ファイルシステムの/boot/config(現在のバージョン)*からカーネルソースコードの最上位ディレクトリにある.configにコピーできます。現在のバージョンは uname -r から入手できます。

したがって、実行中のバージョン(uname -rコマンドで確認)がダウンロードしたソースコードと同じでない場合は、新しいカーネルをコンパイルして使用するか、実行中のカーネルと同じバージョンのカーネルをダウンロードする必要があります。カーネルコンパイルの場合は、ブートディレクトリにある設定ファイルを使用して上記のようにコピーします。

その後、通常の方法で外部モジュールをコンパイルし続け、問題なく実行中のカーネルをロードできます。

おすすめ記事