gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 03:46:01 26 4
gpt4 key购买 nike

我正在为多个定制硬件编写驱动程序。所有设备都通过 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);
}

关于linux - 如何将设备链接到自定义 sysfs 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28176154/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com