我正在为多个定制硬件编写驱动程序。所有设备都通过 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_create()
调用的 device_add()
调用 device_add_class_symlinks()
(不幸的是没有导出),它执行如下操作:
...
sysfs_create_link(&dev->class->p->subsys.kobj,&dev->kobj, dev_name(dev));
...
我直接在驱动程序中尝试了类似的方法来创建我想要的链接,但无法编译它,因为struct subsys_private
(类结构中的“p”成员)没有在任何地方公开?
非常感谢任何帮助!
您的司机坐在特定的巴士上吗?如果不是,该类的具体用途是什么?
无论如何,首先
struct class devclass = {…}
probe()
{
struct device *dev = …
dev->class = &devclass;
}
init()
{
class_register(&devclass);
}
我是一名优秀的程序员,十分优秀!