以编程方式读取linux内核参数

以编程方式读取linux内核参数,linux,linux-kernel,linux-device-driver,Linux,Linux Kernel,Linux Device Driver,我正在修改一个Linux驱动程序,我想通过编程读取传递给内核的参数。。。换句话说,如果在引导时将特定参数传递给Linux内核,我的驱动程序应该以不同的方式运行 我该怎么做 我必须从/proc/cmdline中读取它们,然后对逻辑进行编程吗?或者是否需要调用API来读取和解析内核参数?使用\uuu setup()宏。 例如,参见\u设置(“ip=”,ip自动配置\u设置)被复制到名为saved_command_line的全局变量中。它在init/main.c中定义 只需阅读模块中的变量。您能提供一

我正在修改一个Linux驱动程序,我想通过编程读取传递给内核的参数。。。换句话说,如果在引导时将特定参数传递给Linux内核,我的驱动程序应该以不同的方式运行

我该怎么做

我必须从
/proc/cmdline
中读取它们,然后对逻辑进行编程吗?或者是否需要调用API来读取和解析内核参数?

使用\uuu setup()宏。
例如,参见
\u设置(“ip=”,ip自动配置\u设置)被复制到名为saved_command_line的全局变量中。它在init/main.c中定义


只需阅读模块中的变量。

您能提供一些其他详细信息吗?我看了一下
net/ipv4/ipconfig.c
,但我不清楚……它相当简单。声明此宏以将字符串与处理程序匹配。字符串可以是唯一的,例如“my_freq=”。处理程序应该是一个静态函数,解析“=”后的值。在上面的示例中,请参阅ip_auto_config()的实现,以解析ip参数(ip、netmask、serverip、gateway、netdev等)。重要的一点是,您应该静态地将驱动程序构建到内核中,以使其正常工作。它不适用于模块(.ko),因为模块忽略了
\uu init
部分。其次,如果您使用的是最新的内核,如4.x+,请首选
MODULE_PARAMS()
,因为
\u setup
如果调用正确,则不推荐使用。