Frage

Dupe auf Stackoverflow von einem meiner Freunde, der das gleiche Problem hat:

Ich habe den Code aus diesem Tutorial kopiert: http://www.thegeekstuff.com/2012/04/create-proc-files/

Und habe das Modul erstellt, das meine Profildatei erstellt hat.

Ich war froh, dass ich eine Profildatei erhalten habe, in der ich „text“ > proc/name_of_procfile wiedergeben konnte

Ich kann auch mit Katze lesen!!

Ich habe damit herumgespielt und habe jetzt eine beträchtliche Anzahl von Werten in meiner Profildatei – jedes Mal, wenn ich eine Katze verwende, durchläuft es diese Werte nacheinander:

F1: Ich frage mich: Wie lösche ich Werte aus der Profildatei?

AUCH später werde ich versuchen, das Verhalten zu erreichen, dass jedes Mal, wenn eine Datei meine Proc-Datei liest, sie den Wert dessen ändert, was sie gerade in der Proc-Datei gelesen hat.

Q2.Ich weiß, dass dies in meiner Methode „int read_info“ implementiert werden würde, aber gibt es Hinweise, wie das geht?

War es hilfreich?

Lösung

Q1.

Sie können diese Werte nicht im normalen Sinne eines Löschvorgangs in einem Dateisystem löschen.Sie können echo etwas in die Profildatei einfügen, wenn es beschreibbar ist.Dann hängt es vom Verhalten eines Moduls ab, wie diese „eingehenden“ Daten behandelt werden.Ob es gespeichert oder verworfen oder in irgendeiner Weise intern verbucht wird, entscheidet das Modul.Genauer gesagt definiert die Logik, die Sie in das Modul einfügen, die Behandlung.Das Modul aus diesem Beispiel hat eine sehr einfache Logik:Es speichert eine Zeichenfolge in seinem internen Puffer, wenn der Kernel es aufruft write_info Funktion – tatsächlich verkettet sie neue Daten mit dem aktuellen Inhalt.Dann kann es den Inhalt dieses Puffers zurückgeben, wenn der Kernel seine read_info-Funktion aufruft.Wenn Sie also Folgendes tun:

echo "some text">/proc/yourprocfile
echo "another text">/proc/yourprocfile

Dann cat /proc/yourprocfile würde drucken

some text
another text

auf dem Bildschirm.Zusammenfassen:Das vollständige Verhalten dieser Dateien ist module-defined.

Q2.

Sie könnten dies fast so tun, wie Sie es normalerweise tun C Programm.Es gibt zwei wesentliche Unterschiede:

  • Die im Kernelmodus zugängliche API ist unterschiedlich.Einige Funktionen haben die gleichen oder sehr ähnliche Namen und Funktionen wie ihre Analoga im Standard C Bibliothek hat.Die anderen Funktionen haben andere Namen, sind aber dennoch analog zu einigen User-Space-Funktionen.Und dann einige spezifische Funktionen, die nur im Kernel-Bereich verfügbar sind.

  • Alles, was Sie im Kernel-Space tun, sollte von Ihnen mehrmals überprüft und debuggt werden on the sheet of paper da jeder Fehler in Ihrem Modul mindestens einen Kernel-Core-Dump verursachen kann (der Kernel stoppt einfach und Sie müssen dann drücken). reset Klicken Sie auf die Schaltfläche, um Ihr System neu zu starten) und kann im schlimmsten Fall zu einer Datenbeschädigung Ihrer Dateisysteme führen.

Daher würde ich Ihnen empfehlen, das VirtualBox-Paket einzurichten;mit diesem schönen Tool eine virtuelle Maschine erstellen;um dort die minimale Linux-Version zu installieren und nach der Installation einen Snapshot der virtuellen Festplatte zu erstellen.Wenn also etwas schief geht, haben Sie jederzeit die Möglichkeit, den Schaden rückgängig zu machen.Sie müssen dort nicht alle Ihre Build-Tools und Kernel-Quellen installieren – Sie werden nur Ihre Module/Anwendungen auf dieser virtuellen Maschine laden und testen/debuggen.

Aber auf jeden Fall ist der Bereich, den Sie berühren werden, oder genauer gesagt, den Sie bereits berührt haben, sehr interessant.

Viel Glück

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