如何在linux设备驱动程序中读取配置文件?专家说,在内核空间中读写文件是一种不好的做法。对于固件下载,我们有request_firmware内核API。是否有用于读取和解析驱动程序配置文件的Linux内核API?例如:读取特定驱动程序的波特率和固件文件路径。
答案 0 :(得分:2)
大多数时候不鼓励从内核空间进行文件i / o,但是如果你仍然希望从内核空间读取文件,内核提供了一个很好的接口来打开和读取内核中的文件。这是一个示例模块。
/*
* read_file.c - A Module to read a file from Kernel Space
*/
#include <linux/module.h>
#include <linux/fs.h>
#define PATH "/home/knare/test.c"
int mod_init(void)
{
struct file *fp;
char buf[512];
int offset = 0;
int ret, i;
/*open the file in read mode*/
fp = filp_open(PATH, O_RDONLY, 0);
if (IS_ERR(fp)) {
printk("Cannot open the file %ld\n", PTR_ERR(fp));
return -1;
}
printk("Opened the file successfully\n");
/*Read the data to the end of the file*/
while (1) {
ret = kernel_read(fp, offset, buf, 512);
if (ret > 0) {
for (i = 0; i < ret; i++)
printk("%c", buf[i]);
offset += ret;
} else
break;
}
filp_close(fp, NULL);
return 0;
}
void mod_exit(void)
{
}
module_init(mod_init);
module_exit(mod_exit);
MODULE_LICENSE("GPL");
MODULE_AUTHOR("Knare Technologies (www.knare.org)");
MODULE_DESCRIPTION("Module to read a file from kernel space");
我在linux-3.2内核上测试了这个模块。我用了printk()函数 打印数据,但它不是你的实际情况,这只是一个例子。