在camera驱动中有这么一个结构变量:
static struct v4l2_i2c_driver_data v4l2_i2c_data = {
.name = "ov2655",
.probe = ov2655_probe,
.remove = ov2655_remove,
.id_table = ov2655_id,
}
除了这个之外,没有像其他模块一样的module_init等入口,也没有添加I2C驱动的接口,那此I2C驱动如何被probe到的呢?
这个驱动要被加载不可能没有入口,可奇怪的是根本找不到。呵呵,还好功夫不负有心人,最终还是有结果了!
原因是有这一句:#include <media/v4l2-i2c-drv.h>。
头文件里面的定义如下:
#ifndef __V4L2_I2C_DRV_H__
#define __V4L2_I2C_DRV_H__
#include <media/v4l2-common.h>
struct v4l2_i2c_driver_data {
const char * const name;
int (*command)(struct i2c_client *client, unsigned int cmd, void *arg);
int (*probe)(struct i2c_client *client, const struct i2c_device_id *id);
int (*remove)(struct i2c_client *client);
int (*suspend)(struct i2c_client *client, pm_message_t state);
int (*resume)(struct i2c_client *client);
const struct i2c_device_id *id_table;
};
static struct v4l2_i2c_driver_data v4l2_i2c_data;
static struct i2c_driver v4l2_i2c_driver;
/* Bus-based I2C implementation for kernels >= 2.6.26 */
static int __init v4l2_i2c_drv_init(void)
{
v4l2_i2c_driver.driver.name = v4l2_i2c_data.name;
v4l2_i2c_driver.command = v4l2_i2c_data.command;
v4l2_i2c_driver.probe = v4l2_i2c_data.probe;
v4l2_i2c_driver.remove = v4l2_i2c_data.remove;
v4l2_i2c_driver.suspend = v4l2_i2c_data.suspend;
v4l2_i2c_driver.resume = v4l2_i2c_data.resume;
v4l2_i2c_driver.id_table = v4l2_i2c_data.id_table;
return i2c_add_driver(&v4l2_i2c_driver);
}
static void __exit v4l2_i2c_drv_cleanup(void)
{
i2c_del_driver(&v4l2_i2c_driver);
}
module_init(v4l2_i2c_drv_init);
module_exit(v4l2_i2c_drv_cleanup);
#endif /* __V4L2_I2C_DRV_H__ */
呵呵,乖乖这里面全已经写好了,其他模块中只要包含此头文件就行了。
普及一点小知识:
无初始化的变量将被连接到未初始化数据段,在头文件中可以定义。当头文件被多个文件包含时,该未初始化段在运行时也将只有一份,
静态无初始化的变量也将被连接到未初始化数据段,在头文件中可以定义。当头文件被多个文件包含时,编译的时候将会在多个目标文
件中各自记录一个未初始化数据段,在运行时则会在内存中存在多份。
发表于 @ 2010年11月05日 16:25:00 | 评论( 5 ) | 编辑| 举报| 收藏
旧一篇:解决windows7驱动调试KdPrint不能输出的问题 | 新一篇:v4l2_i2c_new_subdev_board接口分析(侧重I2C设备的探测)
-
查看最新精华文章 请访问博客首页相关文章linweiqin5 发表于2011年3月16日 16:54:52 IP:183.15.246.*举报回复删除
楼主,你好,我想仔细看一下你说的这个驱动的写法,你可以把ov2655这个驱动的源码发到我邮箱吗,我的邮箱是674552911@qq.com。谢谢了。e2588116 发表于2011年3月30日 14:10:20 IP:211.21.159.*举报回复删除
樓主 您好 .. ov2655 的驅動源碼也可以發一份給我嗎 ? e2588116@gmail.com. 謝謝 !!Baiduluckyboy 发表于2011年4月2日 16:42:57 IP:59.41.252.*举报回复删除
楼主可以给我一份吗?我现在在调试linux的OV3640的驱动,希望多多支持,谢谢 wangyuluyulu@126.com 谢谢zhang_306090 发表于2011年4月11日 10:27:32 IP:183.15.180.*举报回复删除
最近要做一个camera 的驱动调试..我不是很清楚应用层是怎么调用 camera 的接口的, 我应该提供那些接口给应用层, 对应的dev 设备是什么,我在内核中应该实现什么结构体对应的函数... 谢谢.邮件hao381884316@126.comjijiu009 发表于2011年5月10日 16:54:48 IP:219.239.98.*举报回复删除
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/mailbox2005/archive/2010/11/05/5990154.aspx