Linux tài liệu nguồn
01.235.
tôi thích nó từ miệng của hourse 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.
Cách dễ dàng để thử nó ra
CONFIG_DUMMY_IRQ=y
sau đó trên dòng lệnh:
dummy-irq.irq=12
và khi khởi động hạt nhân bạn thấy:
dummy-irq: registered for IRQ 12
được in từ init
của dummy-irq.c
.
đường Mã
tôi không quản lý để đi theo con đường mã đầy đủ chưa, nhưng tôi nghĩ rằng .
được mã hoá tại https://github.com/torvalds/linux/blob/v4.12/include/linux/moduleparam.h#L13:
#define MODULE_PARAM_PREFIX KBUILD_MODNAME "."
mà được mở rộng trong các thác nước vĩ mô module_param
, một bước trong đó có một nhận xét của Linus cho biết mã rõ ràng như thế nào:
/* Lazy bastard, eh? */
Các QEMU GDB watch
backtrace rằng kết thúc cài đặt nó cho dummy-irq.c:irq
là:
#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
Chào mừng bạn đến SO! Luôn luôn hữu ích khi để lại một chút mã để các áp phích tiềm năng có được một số ngữ cảnh. – Enigmadan