我正在为几个自定义硬件编写驱动程序。所有设备都通过 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”成员)没有暴露在任何地方?
任何帮助是极大的赞赏!