カーネルモジュール:.oと.ko

カーネルモジュール:.oと.ko

カーネルモジュールを含むファイルが呼び出されているようです.o。少なくとも似たようなチュートリアルを見るとそう思った。これ。しかし、私のDebian squeezeボックスにはファイル名があります.ko

.oファイルが呼び出されるかどうかは、ディストリビューション(またはそのバージョン)によって異なりますか?.koそれともほぼ同じですか?

答え1

次の答えが見つかりました。ここ:

簡単に言えば、.koファイルはカーネルに必要ないくつかのカーネル自動生成データ構造に関連付けられたオブジェクトファイルです。

.o ファイルはモジュールのオブジェクトファイルです。つまり、cファイルをコンパイルした結果です。次に、カーネルビルドシステムは、カーネルモジュールを記述するいくつかのデータ構造(your_module_kmod.cという名前)を含む別のCファイルを自動的に生成し、このCファイルを別のオブジェクトファイルにコンパイルし、それを使用してオブジェクトファイルをビルドします。 .koファイルです。

カーネルモジュールのロードを担当するカーネルの動的リンカーは、カーネルが.koファイルに入れるkmodオブジェクトからデータ構造を見つけることを期待しています。このオブジェクトがないと、カーネルモジュールをロードできません。

またそのソース、引用するTLDP:カーネルバージョン2.4以前は「.o」でしたが、2.6からは「.ko」です。

答え2

これは古いハウトゥ(チュートリアル)のようです。実際には2005年に作成されました。 Linuxカーネルが2.4.xだったとき、モジュールの拡張子は.oでしたが、2.6では.koになりました。

関連情報