次のカーネルをインストールしました。
[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コマンドで確認)がダウンロードしたソースコードと同じでない場合は、新しいカーネルをコンパイルして使用するか、実行中のカーネルと同じバージョンのカーネルをダウンロードする必要があります。カーネルコンパイルの場合は、ブートディレクトリにある設定ファイルを使用して上記のようにコピーします。
その後、通常の方法で外部モジュールをコンパイルし続け、問題なく実行中のカーネルをロードできます。