Können zwei verschiedene Kernelmodule durch einen Aufruf von ioremap_nocache () auf denselben Speicherbereich zugreifen?
Ich habe einen drahtlosen Treiber und ein separates Modul. Ich möchte, dass das separate Modul die Rauschwerte auf der Karte erfasst, während der Treiber noch in Betrieb ist. Daher meine Frage oben.
Eine Möglichkeit, die ich erkundet habe, bestand darin, einen Kernel-Thread vom Treiber aus zu starten. Anschließend habe ich ein Semaphor implementiert, um zu verhindern, dass Race-Bedingungen durch gleichzeitiges Lesen / Schreiben in denselben Adressraum entstehen. Ich hoffte, dass ein untergeordneter Thread auf denselben Speicherbereich zugreifen kann.
Leider hat das nicht wie erwartet funktioniert. Ich würde mich über Vorschläge freuen.
Antworten:
Ich nehme an, Sie beabsichtigen, ein anderes Kernelmodul zu implementieren, da Sie der Meinung sind, dass es einfacher ist, Daten zwischen Kernelmodulen auszutauschen. Aber vielleicht ist es keine gute Wahl. Wenn es möglich ist, das Rauschen im Benutzerbereich zu "profilieren", ist es meiner Meinung nach eine bessere Lösung, den "Profiler" im Benutzerbereich zu implementieren.
In dieser Lösung liest der User Space Profiler Daten, führt einige Berechnungen durch und übermittelt dann das Ergebnis.
Wenn diese Lösung in Ordnung ist, ist die Implementierung wie folgt.
Im Kernelmodul müssen Sie lediglich ein char-Gerät in '/ proc' registrieren und die Grundelemente 'read' und 'write' implementieren. Im Benutzerbereich müssen Sie lediglich den Profiler implementieren, lesen und auf das char-Gerät schreiben. Details und Informationen zu dieser Implementierung finden Sie hier .
quelle