关于调用I2C驱动的数据结构i2c_driver中函数的问题[已解决]
i2c的数据结构:
struct i2c_driver {
char name[32];
int id;
unsigned int flags;
int (*attach_adapter)(struct i2c_adapter *);
int (*detach_client)(struct i2c_client *);
int (*command)(struct i2c_client *client,unsigned int cmd, void *arg);
void (*inc_use)(struct i2c_client *client);
void (*dec_use)(struct i2c_client *client);
};
中的int (*command)();是如何被应用层调用的?
结构file_operation中的注册函数pen read等是由内核来调用的。这里的command是如何被调用的? 请大侠赐教!
[ 本帖最后由 zhj1011 于 2009-1-7 16:31 编辑 ]
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(9)
open,read在驱动层的实现,应用层是通过系统调用最终调用到底层的实现来操作硬件的
我前一段也遇到这方面的问题,内核对对command的使用有多种方式,有些直接通过client->driver->command(...)的形式来使用,有些设备把它封装为i2c_call_clients()等来使用。从本质上来讲,应该是通过ioctl的方式来调用到的,但不一定是一步到位,最上层是ioctl,下面经过不同驱动中的不同封装,最后再调用到对设备的具体操作,如i2c接口的camera即是如此。
这样一个结构体就是定义了通用的一些函数指针,至于每个函数指针是否在你的程序里使用,关键看你的函数实现。
有些函数指针可能大部分的应用中都不去实现他的具体功能的。
首先看一下command指针指向了那个函数啊
我理解的I2C驱动的架构大致如下:
API-->I2C设备驱动-->I2C总线驱动-->硬件操作
I2C总线驱动给I2C设备驱动提供对硬件的操作函数和算法。
I2C设备驱动里有一个command()函数,我认为这个函数是用来接收用户层发来的命令的。
问题是:这个command()函数是如何提供给用户层来调用的???请教...
如果是内核调用,用户层是调用那个API,从而通知内核调用了这个command???
[ 本帖最后由 zhj1011 于 2008-12-18 10:06 编辑 ]
wqhl.mark 兄
函数command()被i2c-core.c中的i2c_clients_command()函数所调用。但是,我不清楚,这个command()函数是如何接收用户层发来的命令的。不知道内核是如何将它提供给用户层作为一个API的。
wqhl.mark 兄台的意思是:用户层调用ioctl(),通过内核,间接的调用了I2C设备驱动下的command()函数。是这个意思吗???麻烦确认下啊
如果是命令设置的话,应该就是这样的
呵呵 谢谢版主 明白了
you are right!