在linux设备驱动程序中读取配置文件

时间:2013-12-13 11:56:37

标签: linux-kernel config linux-device-driver

如何在linux设备驱动程序中读取配置文件?专家说,在内核空间中读写文件是一种不好的做法。对于固件下载,我们有request_firmware内核API。是否有用于读取和解析驱动程序配置文件的Linux内核API?例如:读取特定驱动程序的波特率和固件文件路径。

1 个答案:

答案 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()函数 打印数据,但它不是你的实际情况,这只是一个例子。