/ / Wie kann ich vom Benutzerprogramm in RT Linux auf den Kernelspeicher zugreifen? - c, Linux, Sockets, Linux-Kernel, Zeitstempel

Wie kann man auf den Kernel-Speicher vom Benutzerprogramm in RT Linux zugreifen? - c, Linux, Sockets, Linux-Kernel, Zeitstempel

Client- und Server-Kommunikation in RT Linux. Der Client sendet die Daten und der Server ist der Empfänger. UDP wird für die Kommunikation zwischen Client und Server verwendet. Wenn der Server (rt linux) die Daten vom Client empfängt, sollte der Kernel seine Arbeit beenden und mit der Ausführung der neu eingetroffenen Daten beginnen. Ich möchte die Zeit berechnen, zu der der Interrupt im Kernel auftritt (Zeitstempel). In RT-Linux findet der gesamte Betriebssystembetrieb im Kernel statt. Ich berechne also die Unterbrechungszeit im Kernel-Quellcode. Also habe ich den Kernel-Quellcode im Verzeichnis /usr/src/linux-version/net/core/dev.c wie folgt geändert: Ich berechne die Zeit und speichere in einem Puffer skb.

// Dieser Code befindet sich auf der Ebene der Netzwerkgerätetreiber.

int netif_rx(struct sk_buff *skb)
{
__net_timestamp(skb);//I modify the code in kernel to get the timestamp and store in buffer
}

// nach dem Speichern der Daten im Puffer. Kernel sendet es an die oberen Schichten wie IP, UDP, INET und schließlich SOCKET des Kernel-Space.

aber ich möchte das Zeitstempelpaket aus dem Kernel-Space durch den User-Space lesen. mein Programm.

Ich verwende recvfrom api, um die Daten aus dem Kernel-Abstand (der sich im Kernelspeicher befindet) zu lesen.

FRAGE: Kann mir jemand sagen, wie ich auf das Kernel-Memory zugreifen kann, das die Zeitstempeldaten des Benutzerprogramms enthält?

Antworten:

0 für die Antwort № 1

Sie können nicht direkt aus dem Benutzerraum auf den Kernelspeicher zugreifen - Sie müssen eine Art API verwenden.

Sie können:

  • Exportieren Sie den Zeitstempel durch sysfs oder debugfs und lesen Sie ihn als reguläre Datei
  • Syscall hinzufügen, damit der Kernel den aktuellen Zeitstempelwert zurückgibt
  • Viele andere verrückte Varianten wie Netlink Socket oder Shared Memory