In Linux, wie Sie device_create innerhalb einer bestehenden Klasse?

Hinweis: Liste ich dieses problem, wie es heute ist, ich bin nicht Gegensatz zur änderung der Implementierung (verschieben der Erstellung der Klasse zu einem gemeinsamen Bereich, zum Beispiel), wenn es macht die Dinge einfacher... ich bin nur nicht sicher, wie es zu tun. :Ende Hinweis

Habe ich zwei linux-kernel-Modulen und-ich bin versucht, zu aktualisieren /sys-Einträge für Sie. Auf der Suche rund um bei google und anderen Quellen, die ich gesehen habe viel code, entlang der Linien von:

static dev_t MyDev;
static struct class *c1;

static int __init start_func(void)
{
    ...
    MyDev = MKDEV(nMajor, MINOR_VERSION);
    register_chrdev_region(MyDev, 1, MODULE_NAME);
    c1 = class_create(THIS_MODULE, "chardrv");
    device_create(c1, NULL, MyDev, NULL, MODULE_NAME);
    ....

Und ich habe festgestellt, meine erste Modul dieser code funktioniert, und dass es korrekt erstellt eine:

/sys/class/chardrv/<MODULE_NAME>

Eintrag. Was ich wissen möchte ist, wie man ein Gerät in eine vorhandene Klasse. In anderen Worten, eines meiner Module hat dieses neue chardrv Klasse, jetzt will ich meine anderen Modul in der Lage sein, auch die Anmeldung seiner Geräte unter der selben Klasse.

Kann ich nicht nennen class_create() wieder (im zweiten Modul), denn das "chardrv" - Klasse ist bereits vorhanden...

So kann ich eine Prüfung durchführen, um zu sehen, ob /sys/class/chardrv existiert, und dies kann helfen, mich zu entscheiden, wenn muss ich anrufen class_create() oder nicht, das ist nicht ein problem. Können einige pseudo-code in hier zu klären:

if ( path "/sys/class/chardrv" does not exist)
    new_class = class_create("chardrv")
else
    new_class = some how get class "chardrv" handle, or properties, or whatever
device_create(new_class, ...)

So wie in diesem Beispiel, wenn meine Klasse ist bereits vorhanden, und ich möchte nur hinzufügen mein neues Gerät in es von einem zweiten Modul ich nehme an, ich muss eine Klasse erstellen die Struktur und irgendwie füllt Sie mit den richtigen "chardrv class" - Attribute dann rufen Sie device_create wie vor, aber ich bin mir nicht sicher, wie das zu tun.

InformationsquelleAutor Mike | 2012-08-16

Schreibe einen Kommentar