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

标签 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);
}

Linux 内核版本:3.8.0-29-generic

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

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

谢谢

最佳答案

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

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

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

关于c - 在内核中逐行读取配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38319561/

相关文章:

c++ - 在非阻塞文件描述符上等待长时间运行的 ioctl

c - 打印链接列表时出现意外输出

assembly - 我应该在哪里使用 "swapgs"指令

linux - 对 "kernel process"的疑问

image-processing - 提高 OpenCL 图像处理速度

c - 如何在没有 "&&"的情况下打印断言语句?

c++ - 无法找到 C++ 标准库头文件中未定义的宏

Java服务器线程与C客户端socket连接

linux - 迭代 cpu 事件运行队列列表 sched.h

python - Jupyter Notebook内核安装报错