LinuxカーネルモジュールのMakefileの単純なルーチンを詳細かつカーネルモジュールをコンパイル

      カーネルモジュールはカーネルパッチと同等である、あなたが実行しているカーネルにカーネルをインストールすることができます。カーネルモジュールのソースで簡単のhello.cに記載の方法。

#include <linux/module.h>
#include <linux/init.h>

static int __init hello_init(void)
{
	printk(KERN_EMERG "Hello world!\n");
	return 0;
}

static void __exit hello_exit(void)
{
	printk(KERN_EMERG "hello exit\n");
}

module_init(hello_init);
module_exit(hello_exit);

このコードでは、二つの機能、即ちhello_initとhello_exitを定義し、この2つの機能は、いくつかの情報が印刷されています。通常の印刷機能のC言語は、ここでは異なる印刷するのprintk機能です。printkは、排他的にコアプリントとして機能です。この2つの機能のためのコードの最後の2行は、機能を実行する機能と出口時間の実装のカーネルモジュールカーネルモジュール初期位相として定義されます。

       ソースコードをコンパイルするために、我々は次のMakefileファイルを書きました

KDIR := /lib/modules/4.10.0-28-generic/build

obj-m := hello.o

build: kernel_modules

kernel_modules:
	make -C $(KDIR) M=$(PWD) modules

clean:
	make -C $(KDIR) M=$(PWD) clean

我々は最初の変数KDIRを定義し、それがパスを定義し、この文書では、ディレクトリツールは、カーネルモジュールをコンパイルするために使用されます。どの4.10.0-28ジェネリックカーネルのバージョン番号。私たちは、カーネルにカーネルモジュールをインストールする場合、カーネルは同じコンパイラ・ツールのバージョン番号を指定してコンパイルする必要があります。あなたは、カーネルのバージョン番号を表示するには、次のコマンドを使用することができます。

uname -r

OBJ-M:この行の= hello.o役割は、コンパイル・モジュール名の後に指定されています。

ビルド:kernel_modulesの役割この行は、操作を実行するために、このセクションをコンパイルkernel_modulesにあります。

コードは、このセクションは、-C $(KDIR)M = $(PWD)のモジュールを作ることですkernel_modules

コンパイルツールを指定されたディレクトリは、-C $(KDIR)の役割さを含め、

M = $(PWD)源が配置されていることにより、実行するために等価である、指定されたディレクトリである端末にPWDをPWD、それはすなわちのhello.c、カレントディレクトリを返し、Makefiel格納ディレクトリ。コンパイルされたオブジェクトを指定された最終的なモジュールは、カーネルモジュールを生成することです。

Makefileの最後の2行がきれいコードです、意味は、makeプロセスによって生成されたすべてのファイルを消去しています。

       これを知って、私たちは、カーネルモジュールをコンパイルするために始めることができます。makeコマンド、コンパイルカーネルモジュール。私たちは、クリップうねりいくつかのファイルは、我々はカーネルモジュールを生成hello.ko何である現在のファイルで利用できるようになった見ることができます。

あなたは、カーネルモジュールをインストールするには、次のコマンドを使用して実施することができます。

insmod hello.ko

既にインストールされているカーネルモジュールを表示するには、次のコマンドを使用しました。

lsmod

次のコマンドを使用すると、既にインストールされているカーネルモジュールをアンロードすることができます。

rmmod hello

 

 

 

 

リリース9件のオリジナルの記事 ウォンの賞賛3 ビュー9767

おすすめ

転載: blog.csdn.net/bhniunan/article/details/104068085