ローダブルカーネルモジュールのinsmod時にパラメータを渡せるようにする方法メモ
基本的にmodule_param(3) を使用すれば良いです。
カーネルモジュールのビルド方法に関しては以下などを参考にして下さい。
[Linux][kernel module] 簡単なローダブルカーネルモジュールのビルドとロード - Qiita
ソース
testmod.c
#include <linux/module.h>
#include <linux/init.h>
#include <linux/kernel.h>
MODULE_LICENSE("MIT");
static int param1 = 1;
static int param2 = 2;
module_param(param1, int, S_IRUGO);
module_param(param2, int, S_IRUGO);
static int testmod_init(void)
{
printk(KERN_INFO "driver loaded\n");
printk(KERN_INFO "param1 = %d\n", param1);
printk(KERN_INFO "param2 = %d\n", param2);
return 0;
}
static void testmod_exit(void)
{
printk(KERN_INFO "driver unloaded\n");
}
module_init(testmod_init);
module_exit(testmod_exit);
module_param(3)について
module_param(param1, int, S_IRUGO);
のようにする。
- 第一引数に変数名
- 第二引数に型名
- 第三引数は読み込み専用属性。
S_IRUGO|S_IWUSR
でルートのパラメータ変更許可。
使用できる型について
- bool
- invbool
- charp
- int
- long
- short
- uint
- ulong
- ushort
配列パラメータ(module_param_array(4))
配列パラメータをを取り扱える module_param_array(4)
も存在する。
TODO: サンプル作成
実行例
実行例(パラメータなし)
$ sudo insmod testmod.ko
$ sudo rmmod testmod.ko
$ dmesg | tail
[109428.165469] driver loaded
[109428.165472] param1 = 1
[109428.165474] param2 = 2
[109428.173077] driver unloaded
実行例(パラメータあり)
$ sudo insmod testmod.ko param1=10 param2=20
$ sudo rmmod testmod.ko
$ dmesg | tail
[109428.165469] driver loaded
[109428.165472] param1 = 10
[109428.165474] param2 = 20
[109428.173077] driver unloaded
関連
[Linux][kernel module] 簡単なローダブルカーネルモジュールのビルドとロード - Qiita
参考
「Linux デバイスドライバ 第3版」 2.8 モジュールパラメータ p.35