比如我在cmdline中添加一个参数为panel_id=39,我该怎么在内核启动完成后解析它并使用,请给出具体的程序
时间: 2024-02-17 19:05:00 浏览: 69
好的,以下是一个简单的程序,演示如何在内核启动完成后解析 cmdline 中的参数,并使用 panel_id 参数:
```c
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/string.h>
static int panel_id = -1; // 初始化为无效值
static int __init my_module_init(void)
{
pr_info("my_module: panel_id=%d\n", panel_id);
// 在这里使用 panel_id 参数进行其它操作
return 0;
}
static void __exit my_module_exit(void)
{
pr_info("my_module: exit\n");
}
module_init(my_module_init);
module_exit(my_module_exit);
// 解析 panel_id 参数
static int __init parse_panel_id(char *str)
{
char *ptr;
int id = -1;
ptr = strstr(str, "panel_id=");
if (ptr != NULL) {
id = simple_strtol(ptr + strlen("panel_id="), NULL, 10);
}
if (id >= 0) {
panel_id = id;
pr_info("my_module: panel_id=%d\n", panel_id);
} else {
pr_info("my_module: panel_id not found\n");
}
return 1; // 返回 1 表示已处理该参数
}
// 注册解析函数
early_param("panel_id", parse_panel_id);
```
该程序中,我们使用了 `early_param` 宏来注册一个解析函数 `parse_panel_id`,该函数会在内核启动时被调用,用于解析 cmdline 中的 `panel_id` 参数,并将其存储到全局变量 `panel_id` 中。在模块初始化函数 `my_module_init` 中,我们可以使用 `panel_id` 参数进行其它操作。
需要注意的是,使用 `early_param` 宏注册的解析函数会在内核启动过程中被调用,并且在模块初始化函数之前被调用,因此我们可以在模块初始化函数中直接使用 `panel_id` 参数。
阅读全文