在内核中逐行读取配置文件

Tin*_*Lin 0 c kernel

我正在尝试读取我正在工作的模块的配置文件(位于/生成在内核中的特定位置)。

我可以通过使用带有 O_RDONLY 标志(只读)的 filp_open 来读取整个文件,但我想不出一种逐行读取它的方法。

当前代码

f = filp_open("/etc/my_module",O_RDONLY, 0);

if ( f==NULL) {
    printk("Error in loading config for birdge.\n");
    return 1;
} else {
    fs = get_fs();
    set_fs(get_ds());

    /* read line config here */
    f->f_op->read(f, buf, 128, &f->f_pos);

    set_fs(fs);
    printk("buf:%s\n",buf);
}
Run Code Online (Sandbox Code Playgroud)

Linux 内核版本:3.8.0-29-generic

我想要实现的是将每个(第n)行放入一个缓冲区数组(char *buf[128][128])中,稍后我将使用纯c将参数和值分块。

通过这种方式,配置文件中的变量可以在模块的运行时使用,当然我会进行一些条件检查配置是否正确。

谢谢

小智 5

解析内核中的配置文件是混乱且危险的。不要那样做。

如果您的内核模块需要配置,通常是通过在加载模块时传递参数来完成的,例如insmod example.ko foo=123。您可以使用宏在模块中声明这些参数module_param。有关如何执行此操作的信息,请参阅Linux 内核模块编程指南

如果您的模块需要比使用模块参数更复杂的配置,则您的模块可能适合在 sysfs 中为此配置创建端点。请注意,这都意味着您的模块很可能需要用户空间帮助程序脚本来配置它。这是正常现象,没问题。在用户空间中编写此脚本比在内核中运行更简单、更安全。