如何判断内核参数[在命令行传递]是否是有效的内核参数?

如何判断内核参数[在命令行传递]是否是有效的内核参数?

grub.conf配置文件中,我可以指定内核将使用的命令行参数,即:

kernel /boot/kernel-3-2-1-gentoo root=/dev/sda1 vga=791 plasticDuck

启动给定内核后,有没有办法判断所有参数是否“正确”传递?

即没有plasticDuck内核参数,但是:

dmesg | grep plasticDuck

只返回:

Kernel command line: root=/dev/sda1 vga=791 plasticDuck

(没有错误)

答案1

我认为没有一个命令可以列出内置模块参数及其值。如果您知道驱动程序文件的路径,您可以列出该模块的参数,例如,如果您用作ipv6.autoconf=0内核启动参数,您可以运行:

ls -1 /sys/module/ipv6/parameters/
autoconf
disable
disable_ipv6

然后,如果指定的参数在列表中(即有效),则检查其值:

cat /sys/module/ipv6/parameters/autoconf 
0

或者,在您的具体情况下 - atkbd

cat /sys/bus/serio/drivers/atkbd/serio0/softraw
1

按照吉尔斯波斯特,对于可加载模块,您可以用来modinfo列出特定参数和可能的值,但这不适用于内置模块(尽管已经尝试过添加支持对于内置模块):

modinfo ipv6
modinfo: ERROR: Module ipv6 not found.

答案2

您无法判断参数是否有效。传递给内核的参数也会传递给模块(除了加载模块本身时传递的参数之外),也许你还没有加载的模块会理解这个参数。

modinfo命令列出了模块可以理解的参数。您可以在 中查看已加载模块的参数/sys/module/$module_name/parameteres/。我不知道内核本身有什么类似的事情。

答案3

/proc/cmdline文件包含传递给内核的参数。

相关内容