Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> Linuxオペレーティングシステムでのカーネルモジュール開発の詳細な分析

Linuxオペレーティングシステムでのカーネルモジュール開発の詳細な分析

  

1. modprobe load kernel module

a)/etc/module.confでエイリアスを検索します。

b)lib /modules /でversion /module.depでは、事前にロードする必要がある依存モジュールがあるかどうかを判断します(ファイルはdepmod-aで作成されます)

2. 2.4カーネルはinit_moduleやcleanup_moduleを使って関数の起動や終了をする必要はありませんがmodule_initと

module_exitで宣言する必要があります。

3.マクロ__initと__exitは、実行後に自動的にメモリを再利用することができます(モジュールに限る)、変数用の__initdata、

例:

#インクルード//ヘッダファイルをインクルードする必要があります。

static int ntest __initdata = 3;

static int __init test_init(void){...}

static void __exit test_exit() Void){...}

module_init(test_init); //実装関数の後に宣言する

module_exit(test_exit);

マクロは、objdumpを使って関連情報を見ることができます。

MODULE_LICENSE()説明コードライセンスタイプ

MODULE_DESCRIPTION()モジュールの説明

MODULE_AUTHOR()作者

MODULE_SUPPORTED_DEVICE()モジュールサポートされているデバイス

5.パラメータの受け渡しには、マクロMODULE_PARM(変数名、タイプ)を使います。

サポートされている型は "b"、 "bit"、 "short"、 "i"、 "integer"、 "l"、 "long"、 "string"です。

static int myint = 9;

static char * mystr =" test"; //パラメータのデフォルト値を渡す必要があることに注意してください。

MODULE_PARM(myint、" i");

MODULE_PARM(mystr) 、&​​" s");

6.複数のファイルを1つのカーネルモジュールにコンパイルする:

a)ソースプログラムに追加する必要があります

#define __NO_VERSION __

#include

b)通常のシングルカーネルファイルでコンパイルします。

c)接続:ld -m elf_i386 -r -o< 1st src file.o>< 2nd Src file.o>

7. straceプログラムが使用するシステムコールを確認します。

8. file_operations構造体についてはlinux /fs.hファイルに定義されています。

使用法:

struct file_operations fops = {読み取り:device_read、書き込み:device_write、オープン:device_open、リリース:device_release} C99使用法:struct file_operations fops = {.read = device_read 、.write = device_write、.open = device_open、.release = device_release}

Copyright © Windowsの知識 All Rights Reserved