gpt4 book ai didi

linux - 如何在 ioctl 中获取 struct i2c_client *client 结构?

转载 作者:太空宇宙 更新时间:2023-11-04 09:44:43 24 4
gpt4 key购买 nike

我正在使用 ioctl 方法使用 miscregister 将用户空间 sysfs 交互移动到“/dev”。

我们能否从 Inode 解析客户端结构(struct i2c_client),请有人告诉我们如何在 ioctl 中获取客户端结构。我需要在 ioctl 中进行 i2c 传输。

我引用了这个链接:

http://stackoverflow.com/questions/2635038/inode-to-device-information

但得不到任何答案。

请有人给出解决方案。

最佳答案

当您使用 open 函数在内核中打开设备时。 (这部分代码是从一个主线驱动程序(drivers/i2c/i2c-dev.c)复制的,以便于您使用)

my_i2c_device_open(struct inode *inode, struct file *file)
{
unsigned int minor = iminor(inode);
struct i2c_client *client;
struct i2c_adapter *adap;
struct i2c_dev *i2c_dev;

i2c_dev = i2c_dev_get_by_minor(minor);
if (!i2c_dev)
return -ENODEV;

adap = i2c_get_adapter(i2c_dev->adap->nr);
if (!adap)
return -ENODEV;

client = kzalloc(sizeof(*client), GFP_KERNEL);
if (!client) {
i2c_put_adapter(adap);
return -ENOMEM;
}
snprintf(client->name, I2C_NAME_SIZE, "i2c-dev %d", adap->nr);
client->adapter = adap;
file->private_data = client;

return 0;

}

当您调用 ioctl 时,您可以从设备的文件指针中检索 i2c_client:

static long my_i2c_device_ioctl(struct file *file, unsigned int cmd, unsigned long arg)
{
struct i2c_client *client = file->private_data;

}

希望这能让您的生活变得轻松。'

关于linux - 如何在 ioctl 中获取 struct i2c_client *client 结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17491023/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com