schreibe ich derzeit ein Treibermodul, das einige Einträge in den sysfs bietet. Ich lese viel durch den Quellbaum des Treibers und das Internet. Ich habe zwei Approches gefunden, in denen die sysfs_create_group() aufgerufen wird:sysfs_create_group(): Wo anrufen?
a) am häufigsten: In der Funktion sonde() des Treibers. Wie hier adviced How to attach file operations to sysfs attribute in platform driver?
Zufall Ding sah ich an: https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/drivers/rtc/rtc-ds1307.c#n1580
b) In der Treiber-Struktur. http://kroah.com/log/blog/2013/06/26/how-to-create-a-sysfs-file-correctly/
Ich weiß, Greg KH ist ein sehr bekannter Entwickler. Also habe ich versucht seinem Rat zu folgen. In den bla_show()/bla_store() Funktionen habe ich versucht, meine Driver private Daten zu bekommen, aber meine printk()'s zeigten sehr unterschiedliche Adressen als ich in der Probe() Funktion ausgedruckt habe. Meine privaten Daten sind (null). Was ist falsch?
Wenn ich appch a) es funktioniert wie erwartet, aber wie Greg KH schlägt es auch falsch ist. Ich sehe es oft im Stallbaum bei verschiedenen Fahrern. Greg schreibt, der Userspace hat bereits die Benachrichtigung erhalten, dass es ein neues Gerät gibt, aber das LDD3-Buch gibt an, dass die Testfunktion vorhanden ist, um festzustellen, ob das Gerät vorhanden ist.
meine Frage Fazit:
- Warum die User-Space darüber benachrichtigt, selbst dann, wenn der Kernel tut wissen, ob es damit umgehen kann?
- Wo ist der richtige Ort, um sysfs_create_group() aufzurufen? Ist es a) oder b)?
LDD3: https://static.lwn.net/images/pdf/LDD3/ch14.pdf PDF Seite 24
Sonde ist eine Funktion namens die Existenz eines bestimmten Gerätes abzufragen (und ob diese Fahrer können damit arbeiten), entfernen wird aufgerufen, wenn die Gerät wird aus dem System entfernt, und Herunterfahren wird beim Herunterfahren Zeit zum Stilllegen des Geräts aufgerufen.
Ich bin verwirrter als vorher .....
Mit freundlichen Grüßen Georg