sysfs_remove_group(&i2c->dev.kobj, &lcd_bias_group);
时间: 2024-10-27 19:06:36 浏览: 15
`sysfs_remove_group` 是 Linux 内核中的一个函数,用于从设备节点(Device File System, sysfs)中移除一组关联的属性或子目录。在这个上下文中,`&i2c->dev.kobj` 是 I2C 设备对象的句柄,`&lcd_bias_group` 则指向要从该设备上移除的特定属性组(比如 LCD 显示器偏置设置组)。
这个函数调用通常出现在 I2C 设备驱动程序中,在关闭或卸载设备时,用来清理与 sysfs 相关的资源,确保系统中不再存在与此设备相关的可配置属性。
具体示例可能看起来像这样:
```c
static void i2c_lcd_driver_exit(struct device *dev)
{
struct i2c_dev *i2c = to_i2c_dev(dev);
/* 移除sysfs group */
sysfs_remove_group(&i2c->dev.kobj, &lcd_bias_group);
}
```
当设备卸载 (`driver_exit`) 或停止运行时,`i2c_lcd_driver_exit` 函数会被调用,执行上述 `sysfs_remove_group` 语句来清理 sysfs 中的 LCD 偏置相关配置。
相关问题
还是刚刚那个问题,ops操作set_alarm 调用我的驱动里面的pm8xxx_rtc_set_alarm,我在另一个c文件中看到如下代码:static bool rtc_does_wakealarm(struct rtc_device *rtc) { return rtc->ops->set_alarm != NULL; } static umode_t rtc_attr_is_visible(struct kobject *kobj, struct attribute *attr, int n) { struct device *dev = container_of(kobj, struct device, kobj); struct rtc_device *rtc = to_rtc_device(dev); umode_t mode = attr->mode; if (attr == &dev_attr_wakealarm.attr) { if (!rtc_does_wakealarm(rtc)) mode = 0; } else if (attr == &dev_attr_offset.attr) { if (!rtc->ops->set_offset) mode = 0; } else if (attr == &dev_attr_range.attr) { if (!(rtc->range_max - rtc->range_min)) mode = 0; } return mode; } static struct attribute_group rtc_attr_group = { .is_visible = rtc_attr_is_visible, .attrs = rtc_attrs, }; static const struct attribute_group *rtc_attr_groups[] = { &rtc_attr_group, NULL }; 可是这里后面又不知道它是怎么被framwork调用的来了
这段代码是定义了 rtc 设备的属性组,包含了属性的可见性和属性本身。在 Linux 的设备模型中,设备属性可以通过 sysfs 接口进行访问和操作。这里定义了一个 attribute_group 结构体,其中包含了 is_visible 函数指针和 attrs 数组。is_visible 函数的作用是判断属性是否可见,如果不可见则返回 0,否则返回属性的 mode 值。attrs 数组则是属性的集合。
在 Linux 系统中,设备驱动通常会通过注册设备和属性来向框架注册自己。具体来说,设备驱动会调用函数如 device_register 和 sysfs_create_group 来将设备和属性注册到系统中。这些函数会将设备和属性添加到设备树和 sysfs 中,使得用户可以通过 sysfs 接口来访问和操作这些设备和属性。
分析函数sysfs_create_group(cradle_kobj, &cradle_prop_attr_group);
该函数是Linux内核中的一个函数,用于在sysfs中创建一个新的组。具体参数的含义如下:
- cradle_kobj:要创建组的内核对象。
- attr:指向struct attribute的指针,表示要添加到组中的属性。
- group:指向struct kobj_attribute的指针,表示要创建的组。
该函数的主要作用是将属性添加到组中,并将组添加到sysfs中。这样,用户可以通过sysfs接口来访问和修改这些属性。
在具体实现上,该函数会调用sysfs_create_group中的kobj_attribute_init函数将kobj_attribute结构体中的成员变量进行初始化。然后,通过调用sysfs_create_group函数,将该组添加到sysfs中。如果添加成功,则返回0,否则返回一个负数错误码。
总的来说,sysfs_create_group函数是一个非常重要的函数,它为Linux内核中的sysfs提供了一个简单而强大的接口,使得开发者可以轻松地向系统中添加新的属性和组。
阅读全文