2

我对我的模块有疑问,它安装/初始化正确,但驱动程序的其他部分未安装或未显示在输出中。

   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" 

模块出了点问题,因为 printk 在探测中并且根本没有移除。

我还在 MAKEFILE @CONFIG_AT2120 += qt2160.o 中更改了 qt2120.o 作为模块

我的配置有问题吗?qt2120.c 在代码 aurora 中与 qt2160.c 非常相似。

4

2 回答 2

2
  • 首先,您需要使用 .I2C 驱动程序向 I2C 内核注册“struct i2c_driver”结构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 后调用探测函数。

于 2015-04-22T09:57:51.880 回答
2

Probe and remove 函数没有被调用,因为您没有在 i2c 子系统中注册您的驱动程序。使用 i2c_add_driver() API 注册您的驱动程序。在你的情况下,

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

static void __exit qt2120_remove(void)
{
    return i2c_del_driver(&qt2120_dev);
}
于 2013-07-22T13:04:08.213 回答