Linux kernel 在linux设备驱动程序中读取配置文件
如何读取linux设备驱动程序中的配置文件?专家们说,在内核空间读写文件是一种糟糕的做法。对于固件下载,我们有请求固件内核API。是否有用于读取和解析驱动程序配置文件的linux内核API?例如:读取特定驱动程序的波特率和固件文件路径。大多数情况下,不鼓励从内核空间执行文件i/o,但如果您仍然希望从内核空间读取文件,内核提供了一个很好的接口来打开和读取内核中的文件。下面是一个示例模块Linux kernel 在linux设备驱动程序中读取配置文件,linux-kernel,config,linux-device-driver,Linux Kernel,Config,Linux Device Driver,如何读取linux设备驱动程序中的配置文件?专家们说,在内核空间读写文件是一种糟糕的做法。对于固件下载,我们有请求固件内核API。是否有用于读取和解析驱动程序配置文件的linux内核API?例如:读取特定驱动程序的波特率和固件文件路径。大多数情况下,不鼓励从内核空间执行文件i/o,但如果您仍然希望从内核空间读取文件,内核提供了一个很好的接口来打开和读取内核中的文件。下面是一个示例模块 /* * read_file.c - A Module to read a file from Kerne
/*
* 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");
/*
*read_file.c—从内核空间读取文件的模块
*/
#包括
#包括
#定义路径“/home/knare/test.c”
int mod_init(无效)
{
结构文件*fp;
char-buf[512];
整数偏移=0;
int ret,i;
/*以读取模式打开文件*/
fp=filp_open(路径,O_RDONLY,0);
如果(是错误(fp)){
printk(“无法打开文件%ld\n”,PTR_ERR(fp));
返回-1;
}
printk(“成功打开文件\n”);
/*将数据读取到文件末尾*/
而(1){
ret=内核读取(fp,偏移量,buf,512);
如果(ret>0){
对于(i=0;i
我在linux-3.2内核上测试了这个模块。我使用了printk()函数
打印数据,但这不是您的实际情况,这只是一个示例 配置设备的方法有很多,例如自动配置、
ioctl
s或模块参数。你到底想配置什么?我正在开发一个与UART交互的驱动程序。需要将波特率和固件文件位置设置为驱动模块的可配置参数。我想探索是否有一个内核接口用于此目的。