カーネルモジュールにパラメータを渡す方法
カーネルモジュールを作成する際には、カーネルモジュールをロードするときにパラメータを渡す必要があります.Linuxカーネルは、カーネルモジュールにパラメータを渡す簡単な方法を提供します.2.6カーネルを例にとると、カーネルモジュール設定パラメータにはmodule_が必要です.param()マクロは、次のように定義されます.
var_name:パラメータに対応する変数名;
var_type:パラメータ変数タイプ;
var_mode:ファイルのアクセス権定義方法と同じアクセス権;
もう一つマクロMODULE_PARM_DESC()は、指定されたパラメータについて説明することができる.
カーネルモジュールのパラメータの使用は複雑ではありません.簡単な例を説明します.
1~3行:旧三様、カーネルモジュールのヘッダファイル;
8~10行:p_という名前で定義されていますintのintタイプの変数は、カーネルモジュールパラメータに設定され、パラメータの説明が行われている.
12~14行:同様の方法でp_を定義したpcharタイプのパラメータで、コマンドラインから文字列を受信できます.
16~21行:入力されたカーネルモジュールパラメータが印刷されたモジュール初期化関数.
このプログラムでは、カーネルモジュールパラメータp_pcharはデフォルト値を設定し,パラメータが入力されていない場合の承諾が正しくないことを防止した.
次はmodinfoコマンドを使用してカーネルモジュールの情報を表示します.
modinfoから与えられた情報から、カーネルモジュールのパラメータタイプと説明が表示されます.次に、実行結果を示します.
実行結果から,カーネルモジュールに渡されたパラメータが正しく印刷されることが分かる.
- module_param(var_name, var_type, var_mode);
var_name:パラメータに対応する変数名;
var_type:パラメータ変数タイプ;
var_mode:ファイルのアクセス権定義方法と同じアクセス権;
もう一つマクロMODULE_PARM_DESC()は、指定されたパラメータについて説明することができる.
カーネルモジュールのパラメータの使用は複雑ではありません.簡単な例を説明します.
- #include <linux/module.h>
- #include <linux/init.h>
- #include <linux/version.h>
-
- MODULE_LICENSE("GPL");
- MODULE_AUTHOR("[email protected]");
-
- static int p_int;
- module_param(p_int, int, 0644);
- MODULE_PARM_DESC(p_int, "int param!
");
-
- static char* p_pchar = "nothing parsed!";
- module_param(p_pchar, charp, 0644);
- MODULE_PARM_DESC(p_pchar, "char* param!
");
-
- static int param_init(void)
- {
- printk(KERN_INFO "p_int = %d
", p_int);
- printk(KERN_INFO "p_pchar = %s
", p_pchar);
- return 0;
- }
-
- static void param_exit(void)
- {
- return;
- }
-
- module_init(param_init);
- module_exit(param_exit);
1~3行:旧三様、カーネルモジュールのヘッダファイル;
8~10行:p_という名前で定義されていますintのintタイプの変数は、カーネルモジュールパラメータに設定され、パラメータの説明が行われている.
12~14行:同様の方法でp_を定義したpcharタイプのパラメータで、コマンドラインから文字列を受信できます.
16~21行:入力されたカーネルモジュールパラメータが印刷されたモジュール初期化関数.
このプログラムでは、カーネルモジュールパラメータp_pcharはデフォルト値を設定し,パラメータが入力されていない場合の承諾が正しくないことを防止した.
次はmodinfoコマンドを使用してカーネルモジュールの情報を表示します.
- root@iscsia:/media/sf_bbu_source/kmodule_test# modinfo ./module_param_test.ko
- filename: ./module_param_test.ko
- author: [email protected]
- license: GPL
- srcversion: AFC86EFD9F79A6C287089EB
- depends:
- vermagic: 2.6.38.2 SMP mod_unload modversions
- parm: p_int:int param!
- (int)
- parm: p_pchar:char* param!
- (charp)
modinfoから与えられた情報から、カーネルモジュールのパラメータタイプと説明が表示されます.次に、実行結果を示します.
- root@iscsia:/media/sf_bbu_source/kmodule_test# insmod ./module_param_test.ko p_pchar="hello" p_int=123
- root@iscsia:/media/sf_bbu_source/kmodule_test# rmmod module_param_test
- root@iscsia:/media/sf_bbu_source/kmodule_test# dmesg | tail -n 2
- [ 6133.511086] p_int = 123
- [ 6133.511092] p_pchar = hello
実行結果から,カーネルモジュールに渡されたパラメータが正しく印刷されることが分かる.