关于调用I2C驱动的数据结构i2c_driver中函数的问题[已解决]

发布于 2022-09-23 13:16:00 字数 675 浏览 14 评论 0

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

孤蝉 2022-09-30 13:16:00

open,read在驱动层的实现,应用层是通过系统调用最终调用到底层的实现来操作硬件的

情绪 2022-09-30 13:16:00

我前一段也遇到这方面的问题,内核对对command的使用有多种方式,有些直接通过client->driver->command(...)的形式来使用,有些设备把它封装为i2c_call_clients()等来使用。从本质上来讲,应该是通过ioctl的方式来调用到的,但不一定是一步到位,最上层是ioctl,下面经过不同驱动中的不同封装,最后再调用到对设备的具体操作,如i2c接口的camera即是如此。

∞琼窗梦回ˉ 2022-09-30 13:16:00

这样一个结构体就是定义了通用的一些函数指针,至于每个函数指针是否在你的程序里使用,关键看你的函数实现。
有些函数指针可能大部分的应用中都不去实现他的具体功能的。

首先看一下command指针指向了那个函数啊

浮云落日 2022-09-30 13:16:00

我理解的I2C驱动的架构大致如下:
API-->I2C设备驱动-->I2C总线驱动-->硬件操作

I2C总线驱动给I2C设备驱动提供对硬件的操作函数和算法。
I2C设备驱动里有一个command()函数,我认为这个函数是用来接收用户层发来的命令的。

问题是:这个command()函数是如何提供给用户层来调用的???请教...

如果是内核调用,用户层是调用那个API,从而通知内核调用了这个command???

[ 本帖最后由 zhj1011 于 2008-12-18 10:06 编辑 ]

岁月静好 2022-09-30 13:16:00

wqhl.mark 兄
函数command()被i2c-core.c中的i2c_clients_command()函数所调用。但是,我不清楚,这个command()函数是如何接收用户层发来的命令的。不知道内核是如何将它提供给用户层作为一个API的。

心头的小情儿 2022-09-30 13:16:00

wqhl.mark 兄台的意思是:用户层调用ioctl(),通过内核,间接的调用了I2C设备驱动下的command()函数。是这个意思吗???麻烦确认下啊

眼趣 2022-09-30 13:16:00

如果是命令设置的话,应该就是这样的

太阳男子 2022-09-30 13:16:00

呵呵 谢谢版主 明白了

_畞蕅 2022-09-30 13:16:00

you are right!

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文