LoginSignup
3
2

More than 5 years have passed since last update.

[Linux][kernel module] ローダブルカーネルモジュールのロード時に引数でパラメータを渡す方法

Posted at

ローダブルカーネルモジュールの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

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2