Я работаю над драйвером ядра I2C и хотел бы предоставить интерфейс файла sysfs в новой папке - / sys / devices / MySensor.Однако, когда я делаю это, я не знаю, как связать клиента 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);
Подпапка иФайл do_something создается в / sys / kernel /, однако при вызове do_something () попытка получить клиент I2C завершается неудачно - client-> addr равен 0, а i2c_get_client_data возвращает ноль.
Для справки, i2cустройство определено в дереве устройств, и я могу успешно добавить атрибуты устройства в существующую папку
err = sysfs_create_group(client->dev.kobj, &my_sensor_attr_group);
/sys/bus/i2c/devices/i2c-7/7-004c/
Извинения, если этот вопрос является расплывчатым или недостаточно подробным.Я относительно новичок в этом.
Кто-нибудь знает, что мне не хватает, когда я создаю новую папку sysfs, чтобы связать это с моим зарегистрированным клиентом i2c?
Спасибо