我正在尝试读取我正在工作的模块的配置文件(位于/生成在内核中的特定位置)。
我可以通过使用带有 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 中为此配置创建端点。请注意,这都意味着您的模块很可能需要用户空间帮助程序脚本来配置它。这是正常现象,没问题。在用户空间中编写此脚本比在内核中运行更简单、更安全。