将属性添加到现有kobject

时间:2015-08-19 17:57:26

标签: linux-kernel linux-device-driver udev

我正在努力将我为2.6.x内核系列编写的驱动程序移植到3.x(即RH EL 6 - > RH EL 7)。我的驱动程序解决方案实际上有两个模块:ahci.c的修改形式(来自内核树)和我自己的上层字符驱动程序,用于访问AHCI寄存器甚至对驱动器执行命令。

在移植到CentOS 7时,我遇到了一个有趣的问题。对构建的驱动程序的更改将删除对SYSFS中scsi_host属性的访问权限。那么我的问题是,我可以将属性附加到SYSFS中已存在的设备上吗?我遇到的每个例子都显示了在设备创建时创建属性,例如:

static ssize_t port_show(struct kobject *kobj, struct kobj_attribute *attr,
                         char *buff);
static struct kobj_attribute pxclb_attr = __ATTR(pxclb, 0664, port_show, NULL);
static struct attribute *attrs[] = {
    &pxclb_attr.attr,
    NULL,
};

static struct attribute_group port_group = {
    .attrs = attrs,
};

/* much other code */

sysfs_create_group(&kobj, &port_group);

此示例来自我的角色驱动程序。我在Google上完成的所有搜索以及引用我的Linux Foundation Drivers课程都显示了在设备创建时完成的属性创建。我可以随时添加吗?似乎可以随时拨打sysfs_create_group()。这是真的吗?

1 个答案:

答案 0 :(得分:0)

您可以随时在sysfs中添加attribute

几乎所有驱动程序在attribute中添加probe的原因是用户空间对何时创建属性有严格的期望。当在内核中注册新设备时,会生成一个uevent来通知用户空间(如udev)新设备可用。如果在注册设备后添加属性,则用户空间不会收到通知,用户空间也不会知道新属性。

相关问题