ブート時に私の新しいコードが使用する カーネルにカスタムパラメータを渡したいと思います。このパラメータは数値です。ブート時に組み込みLinuxカーネルモジュールに値を渡すには?
私はカーネルコマンドラインを使ってカーネルモジュールに値を渡す方法、つまりmodule_param()
を知っています。今私はu-bootから価値を渡したいと思う。
ブート中またはブート後にこれを行う方法はありますか?あなたは、カーネルモジュールに値を渡す方法を知っていれば
ブート時に私の新しいコードが使用する カーネルにカスタムパラメータを渡したいと思います。このパラメータは数値です。ブート時に組み込みLinuxカーネルモジュールに値を渡すには?
私はカーネルコマンドラインを使ってカーネルモジュールに値を渡す方法、つまりmodule_param()
を知っています。今私はu-bootから価値を渡したいと思う。
ブート中またはブート後にこれを行う方法はありますか?あなたは、カーネルモジュールに値を渡す方法を知っていれば
は、あなたのBを変更しますでoardファイル存在$ bootargsこの例では設定されている最後の変数に似を変更し、U-ブートの/ configに/ board_xxx.hを含める:
setenv bootargs display=\${display} console=\${consoledev},\${baudrate} root=/dev/mmcblk0p1 rw rootdelay=1 control.cmd1={cmd1}
制御の名前です。私はLinuxのプロンプトに完全に起動するために必要なので、私はinsmodできない組み込みのドライバモジュールです。
CMD1私は私が使用したモジュール中で定義したグローバル変数です:
module_param(cmd1, int, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP);
ので、ご$ bootargs varは単にのようなものを付加する必要があります
<your_mod_name>.<your_mod_parameter_var_name>=<an_appropriate_value>
、あなたは十分に知っている:)
あなたのモジュールが内蔵されている場合はカーネルにinsmod my_module param=value
は、あなたがカーネルにあなたのパラメータを追加することができますパラメータここ
vmlinux ... my_module.param=value ...
Linuxのソースドキュメント
私は愛馬の口v4.12/Documentation/admin-guide/kernel-parameters.rstからそれを好む:
Module parameters can be specified in two ways: via the kernel command
line with a module name prefix, or via modprobe, e.g.:
(kernel command line) usbcore.blinkenlights=1
(modprobe command line) modprobe usbcore blinkenlights=1
Parameters for modules which are built into the kernel need to be
specified on the kernel command line. modprobe looks through the
kernel command line (/proc/cmdline) and collects module parameters
when it loads a module, so the kernel command line can be used for
loadable modules too.
コマンドラインで、その後
CONFIG_DUMMY_IRQ=y
それを試すための簡単な方法を:
dummy-irq.irq=12
とあなたが参照するカーネルブーツ:
dummy-irq: registered for IRQ 12
init
dummy-irq.c
から印刷されています。
コードパス
私はまだ完全なコードパスをたどることが出来なかったが、私は.
がhttps://github.com/torvalds/linux/blob/v4.12/include/linux/moduleparam.h#L13でエンコードされていると思う:module_param
マクロ滝で展開されます
#define MODULE_PARAM_PREFIX KBUILD_MODNAME "."
その1つのステップには、そのコードがどの程度明確であるかを示すLinusのコメントが含まれています。
/* Lazy bastard, eh? */
dummy-irq.c:irq
のためにそれを設定終わるQEMU GDB watch
バックトレースがある:
#0 kstrtouint (s=<optimized out>, base=<optimized out>, res=0xffffffff81a8d820 <irq>) at lib/kstrtox.c:225
#1 0xffffffff8106e124 in param_set_uint (val=<optimized out>, kp=<optimized out>) at kernel/params.c:295
#2 0xffffffff8106ed98 in parse_one (handle_unknown=<optimized out>, arg=<optimized out>, max_level=<optimized out>, min_level=<optimized out>, num_params=<optimized out>, params=<optimized out>, doing=<optimized out>, val=<optimized out>, param=<optimized out>) at kernel/params.c:148
#3 parse_args (doing=<optimized out>, args=0xffff880007fdb99f "", params=<optimized out>, num=<optimized out>, min_level=<optimized out>, max_level=<optimized out>, arg=0x0 <irq_stack_union>, unknown=0xffffffff81aeb8e5 <unknown_bootoption>) at kernel/params.c:243
#4 0xffffffff81aebc6d in start_kernel() at init/main.c:518
はSOへようこそ!潜在的なポスターがいくつかの文脈を得るように、少しのコードを残すことは、常に役立ちます。 – Enigmadan