2013-12-13 4 views
2

Как читать файлы конфигурации в драйвере устройства Linux? Эксперты говорят, что чтение и запись файла в пространстве ядра является плохой практикой. Для загрузки прошивки у нас есть API ядра request_firmware. Есть ли API ядра linux для чтения и анализа файлов конфигурации для драйверов? Например: скорость чтения и путь к файлу прошивки для конкретного драйвера.Чтение файлов конфигурации в драйвере устройства Linux

+0

Существует множество способов настройки таких устройств, как автоконфигурация, 'ioctl' или параметры модуля. Что именно вы хотите настроить? –

+0

Я разрабатываю драйвер для взаимодействия с UART. Необходимо установить скорость передачи данных и местоположение файла прошивки в качестве настраиваемых параметров для модуля драйвера. Я хотел исследовать, был ли интерфейс ядра для этой цели. –

ответ

2

В большинстве случаев выполнение операций с файловым ядром из пространства ядра обескуражено, но если вы все еще хотите, чтобы читать файлы из пространства ядра, ядро ​​обеспечивает хороший интерфейс для открытия и чтения файлов из ядра. Вот пример модуля.

/* 
    * 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() для печати данных, но это не ваш фактический случай, это просто показано в качестве примера.

Смежные вопросы