1

いくつかのカスタム ハードウェア用のドライバーを作成しています。すべてのデバイスは、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;

    ...
}

私の質問は次のとおりです。クラスと開発者を取得したので、2 つの間のリンクを作成するにはどうすればよいですか?

基本的には私が望むことを行います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」メンバー) がどこにも公開されていないため、コンパイルできませんか?

どんな助けでも大歓迎です!

4

2 に答える 2