2012-04-06 6 views
2

Ich versuche einen Weg zu finden, innerhalb eines Moduls den letzten Block zu verfolgen, der in ein Blockgerät geschrieben wurde. Das spezielle Gerät, das ich benötige, ist das, das im root installiert ist (ich kenne den/dev/name im Voraus, wenn das hilft.)LKM: Der letzte auf das Gerät geschriebene Block

Meine ursprüngliche Idee war, die Funktion submit_bio zu umbrechen, da sie bereits eine Protokollierungsfunktion hat "echo 1>/proc/sys/vm/block_dump". Leider muss ich den Quellcode ändern, um diese Funktion zu einem Zeiger zu machen. Ich möchte das alles so gut wie möglich im Modul behalten.

Danach habe ich nach dem Dateisystemtyp gesucht und die Standard-Dateioperationen eingewickelt (diese sind ja schon Funktionszeiger). Diese werden jedoch als const deklariert.

Das ist eine seltsame Sache zu versuchen, ich verstehe. Muss es trotzdem tun. Hat jemand irgendwelche Ideen, die mich in Gang bringen könnten?

Antwort

1

Der Linux-Kernel bietet mehrere verschiedene Tracing-Toolkits; Die blktrace tools wurden speziell für Block-Geräte entwickelt. Das Tool blkparse(1) analysiert die Ausgabe des blktrace(8)-Dienstprogramms. (Zumindest Ubuntu hat diese im Paket blktrace verpackt; ich erwarte, dass andere Distributionen ähnlich sind.) Das bklparse(1) Tool kann Ihnen die Sektorinformationen geben.

Documentation/trace/events.txt beschreibt einen anderen Verfolgungs-Mechanismus, mit dem Sie dem block:block_bio_complete-Ereignis folgen können, das die Sektorinformationen enthält. Dies erfordert nicht die Installation der bkltrace Toolkit, aber ich werde (verlegen) zugeben, dass ich nicht weiß, wo lesen Sie die Trace-Protokoll.

+0

Dies endete ziemlich gut, danke. –