Frage

Ich versuche zur Zeit ein Kernel-Modul zu erstellen, die Daten basierend auf Kernel-Ereignisse produzieren und schieben Sie sie in einer Datei. Nach der Lektüre, dass dies schlecht ist (und ich stimme), habe ich beschlossen, es mehr Sinn machen würde, die Daten in einer / proc-Datei zu haben, der ein Anwenderprogramm bei Bedarf ziehen könnte. Allerdings führte diese Idee zu allen möglichen Problemen, vor allem, wann und wie diese Datei zu löschen. Also dachte ich ... „warum nicht ich eine Named Pipe in / proc machen und daraus lesen?“

Ich habe den allgemeinen Kern der Einrichtung eine Lesefunktion und eine Schreibfunktion für eine proc-Datei bekomme, aber ich habe immer noch konzeptionelle Probleme mit, wie ich über diese gehen würde. Das heißt, wie würde ich schreiben, eine solche Funktion, beliebige Daten zu nehmen und es zu einem solchen Rohr aus dem Kernel schreiben? Hat jemand eine Idee, wie Sie Daten in einer Named Pipe vom Kernel-Space drücken würden? Am Ende hat es nicht Haben eine / proc Datei zu sein (vor allem, wenn es falsch ist von mir, dies zu tun), aber das war die Schlussfolgerung, die ich zu mir kam. Dann werde ich habe, um herauszufinden, wie man es von einem User-Space-Programm anzubringen, aber ich glaube, das ist ein anderes Thema.

War es hilfreich?

Lösung

Statt eine Named Pipe zu machen, was Sie tun möchten, ist ein „Zeichengerät“ erstellen. Wenn Sie einfache Interaktion oder Streaming-Daten aus dem Kernel zu Userspace wollen und zurück, das ist die übliche Methode. Ich würde empfehlen, ähnliche Geräte im Linux-Kernel aufzublicken und zu sehen, was sie tun.

Andere Tipps

Ich denke, die Art und Weise dies in der Regel eine Netlink-Socket zu verwenden, erfolgt ist; ein oder mehr User-Space Prozesse zu einer „netlink“ Adresse binden können, und die Kernel Einrichtungsnachricht zu jedem / alle von ihnen als notwendig übertragen können.

Dies ist sicherlich, was einige Dinge tun, vor allem das Netzwerk-Subsystem. Es ist möglich, ein Programm User-Space für Änderungen in den Netzwerkschnittstellen (zum Beispiel neue IP-Adressen, Linkstatus ändern) mit dieser Methode zu beobachten.

Ich bin mit einer Zeichengerät Paul-Implementierung ist wahrscheinlich der beste Weg zu gehen. Vielleicht der Code Blick auf die Umsetzung / dev / kmem oder / dev / rtc [0-9]. Auch implementieren die seriellen Treiber ihre Fahrer unter Verwendung von Zeichengeräten.

Man denke nur an sie als virtuelles Gerät. : -)

/ proc ist nicht wirklich ein echtes Dateisystem ; es ist durch die auf Basis Kernel aufgebaut, was zur Zeit läuft. Ich glaube nicht, können Sie Named Pipes darin erstellen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top