2013-06-06 2 views
2

У меня есть проблема относительно моего модуля, который он правильно установил/инициализировал, но другие части драйвера не установлены или не отображаются на выходе.Драйвер устройства Linux

static struct i2c_driver qt2120_dev { 
     .probe = qt2120_probe, 
     .remove = qt2120_remove, 
     .owner = { 
      .name = qt2120, 
      .module = THIS_MODULE, 
     } 
     ....   
    } 

    static __init qt2120_init(){ 
     prink("********init******"); 
     ....... 
    } 
    module_init(qt2120_init) 

    static int qt2120_probe(){ 
     prink("********probe******"); 
     .......  
    } 

    static __devinit qt2120_remove(){ 
     prink("********probe******"); 
     .......  
    }  

Только "/ * *INIT*" появился на выходе. Модуль был установлен на i2c в соответствии с выходом.

"bus: i2c. qt2120 as qt2120/input" 

Что-то не так с модулем, потому что принтер находится в пробке и вообще не удаляется.

Я также изменил в MAKEFILE @ CONFIG_AT2120 + = qt2160.o с qt2120.o как модуль

Есть ли что-то не так с моей конфигурации? qt2120.c очень похож на qt2160.c на код aurora.

+0

Ну, 'prink' не Действительно, возможно, ваш последний комп попытка ile не удалась, и вы на самом деле установили более раннюю версию. И нет, вы не должны были менять .o на .c в Makefile. –

+0

Я имею в виду printk и в файле make, qt2120.o –

ответ

2

Функция зонда и удаления не звонит, потому что вы не зарегистрировали свой драйвер с подсистемой i2c. Зарегистрируйте свой драйвер, используя API i2c_add_driver(). В вашем случае,

static int __init qt2120_init(void) 
{ 
    return i2c_add_driver(&qt2120_dev); 
} 

static void __exit qt2120_remove(void) 
{ 
    return i2c_del_driver(&qt2120_dev); 
} 
2
  • Сначала вам нужно сделать, драйвер I2C регистрации «структура» i2c_driver структуру с ядром I2C с использованием i2c_add_driver(addr_of_struct i2c_driver).

    static const struct i2c_device_id sample_i2c_id[] = { 
        { "qt2120", 0 }, 
        { } 
    }; 
    static struct i2c_driver qt2120_dev = { 
        .probe = qt2120_probe, 
        .remove = qt2120_remove, 
        .id_table = sample_i2c_id, 
        .driver = { 
         .name = "qt2120", 
        }, 
    ....   
    }; 
    
    • Вам нужно добавить .id_table запись. Элемент id_table позволяет нам определить структуру, в которой мы поддерживаем чипы I2C.

После согласования .id_table вызовов entry.Driver функции зонда.

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