如何将设备链接到自定义sysfs类?

时间:2015-01-27 17:17:05

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

我正在为几个自定义硬件编写驱动程序。所有设备都通过PCIe连接到主机。为方便起见,我想将所有这些自定义设备组合成一个sysfs类(我认为这是可以接受的事情吗?)。不幸的是,LDD3中的信息已经过时了,我很难找到当前的文档来讨论我正在尝试做的事情。

创建我的自定义类很简单:

struct class MY_CLASS = class_create(THIS_MODULE, "myclass")

在我的探测调用中,我可以访问struct dev

static int probe(struct pci_dev *pcidev, const struct pci_device_id *id)
{
    ...

    struct dev *my_dev = &pcidev->dev;

    ...
}

我的问题是:现在我已经有了这个类和开发者,我如何在两者之间创建一个链接?

device_create()基本上可以做我想要的,但是因为我已经有了struct dev我的理解是我不应该再次调用device_create(即创建一个新设备)

我已经做了一些跟踪,发现由device_add()调用的device_create()调用了device_add_class_symlinks()(不幸导出),其执行的操作如下:

...
sysfs_create_link(&dev->class->p->subsys.kobj,&dev->kobj, dev_name(dev));
...

我在我的驱动程序中直接尝试了这样的东西来创建我想要的链接但我无法编译它,因为struct subsys_private(类结构中的“p”成员)没有暴露在任何地方? / p>

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

你的司机是否坐在特定的公交车上?如果没有,具体课程的目的是什么?

无论如何,对于首发

struct class devclass = {…}

probe()
{
  struct device *dev = …

  dev->class = &devclass;
}

init()
{
  class_register(&devclass);
}