我有关于我的模块的问题,它正确安装/初始化但驱动程序的其他部分未安装或显示在输出中。
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与代码极光中的qt2160.c非常相似。
答案 0 :(得分:2)
由于您尚未使用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);
}
答案 1 :(得分:2)
首先你需要让I2C驱动程序注册' struct i2c_driver'使用i2c_add_driver(addr_of_struct i2c_driver)
的I2C内核结构。
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调用探测功能。