Speicherzugriff auf das Kernelmodul


9

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.


Warum benötigen Sie ein Kernelmodul, um die Rauschwerte zu profilieren?
Gertvdijk

Vielen Dank für die Frage, der drahtlose Treiber ist sehr komplex, und eine Änderung der Periodizität der Kalibrierungen kann zu unbeabsichtigten Ergebnissen führen. Ich müsste dies tun, da es nur für Intervalle kalibriert, die für meine Bedürfnisse viel zu lang sind. Da ich genau weiß, wie das Gerät in einem separaten Modul profiliert wird, bin ich nur gespannt, ob ich auf denselben Speicherbereich zugreifen kann, mit dem der Treiber arbeitet.
Radagasp

2
Bitte bearbeiten Sie Ihre Frage, um alle Details zu Ihren vorherigen Versuchen / Ansätzen aufzunehmen. So funktioniert diese Seite. Es ist kein Diskussionsforum, sondern eine Q & A-Site.
Gertvdijk

Die Diskussion kann Fragen und Antworten enthalten, einige richtig und andere falsch - es scheint, dass die Interpretation von Regeln über die Administratoren hinweg in der Provinz der Semantik liegt. Ich habe natürlich meine Frage aktualisiert.
Radagasp

Antworten:


7

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 .


Ich glaube nicht, dass ich Ihre Antwort ganz verstehe ... so wie ich es verstehe, müsste ich immer noch ein Modul schreiben, und dieses Modul würde versuchen, von einem Aufruf von ioremap_nocache () auf den gleichen Speicherbereich zuzugreifen wie das andere Modul verwendet. Oder sagen Sie, dass ich das char-Gerät im drahtlosen Modul
registriere

1
Richtig, Sie müssen eine Software implementieren, aber kein Modul. Sie müssen ein normales User Space-Programm schreiben, das einfacher als ein Modul ist und aus '/ dev / nameofdevice' liest und darauf schreibt. Sie müssen 'ioremap_nocache ()' nicht verwenden, sondern rufen nur syscalls als 'open', 'read', 'write', 'close' auf. Und ja, das Funkmodul muss das char-Gerät '/ dev / nameofdevice' im Inneren registrieren, um die Daten dem Benutzerland zugänglich zu machen.
vitorafsr
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.