我正在尝试读取我正在工作的模块的配置文件(位于/生成在内核的特定位置)。
我可以通过使用带有 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/