【发布时间】:2019-02-25 12:44:40
【问题描述】:
我正在开发 I2C 内核驱动程序,并希望在新文件夹 - /sys/devices/MySensor 中提供 sysfs 文件接口。但是,当我这样做时,我不知道如何将 i2c 客户端与新的 kobject 关联起来。
因此,当我调用设备属性函数时,传入的设备对象不允许我检索已注册的 i2c 客户端。
我声明我的属性如下:
static ssize_t my_sensor_do_something(struct device *dev, struct device_attribute *attr, char *buf)
{
struct i2c_client *client;
struct my_sensor_data *data;
int size = 0;
client = to_i2c_client(dev);
my_sensor_dbgmsg("Client Address:0x%02x\n", client->addr);
data = i2c_get_clientdata(client);
return 0
}
static DEVICE_ATTR(do_something, S_IRUGO, my_sensor_do_something, NULL);
static struct attribute *my_sensor_attributes[] = {
&dev_attr_do_something.attr,
NULL
};
static const struct attribute_group my_sensor_attr_group = {
.attrs = my_sensor_attributes,
};
然后,在我的探测函数中,创建我的子文件夹
struct device *my_dev = root_device_register("my_sensor");
err = sysfs_create_group(&my_dev->kobj, &my_sensor_attr_group);
在 /sys/kernel/ 中创建子文件夹和 do_something 文件,但是当调用 do_something() 时,检索 I2C 客户端的尝试失败 - client->addr 为 0 并且 i2c_get_client_data 返回 null。
关于信息,i2c 设备是在设备树中定义的,我可以成功地将设备属性添加到现有文件夹中
err = sysfs_create_group(client->dev.kobj, &my_sensor_attr_group);
/sys/bus/i2c/devices/i2c-7/7-004c/
如果这个问题含糊不清或缺乏足够的细节,我们深表歉意。我对此比较陌生。
有人知道我在创建新的 sysfs 文件夹以将其与我注册的 i2c 客户端相关联时缺少什么吗?
谢谢
【问题讨论】: