比如我在cmdline中添加一个参数为panel_id=39,如何用访问saved_command_line来解析
时间: 2024-02-17 16:05:04 浏览: 43
可以参考以下代码来使用 `saved_command_line` 来解析 `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(saved_command_line, "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 表示已处理该参数
}
// 注册解析函数
static int __init register_parse_panel_id(void)
{
parse_early_param("panel_id", parse_panel_id);
return 0;
}
early_initcall(register_parse_panel_id);
```
在该程序中,我们使用 `strstr` 函数在 `saved_command_line` 中搜索 `panel_id` 参数,并使用 `simple_strtol` 函数将其转换为整数类型。如果解析成功,则将其存储到全局变量 `panel_id` 中。在模块初始化函数 `my_module_init` 中,我们可以使用 `panel_id` 参数进行其它操作。
需要注意的是,由于 `saved_command_line` 是一个字符串指针,其内容可能会被修改,因此需要在解析参数时使用字符串操作函数(如 `strtok`、`strchr` 等)来确保正确性。同时,由于在使用 `saved_command_line` 时需要在 `early_initcall` 中注册解析函数,因此该方法并不适用于需要在模块初始化函数中使用参数的情况。