2012-03-29 6 views
0

Ich habe gerade angefangen, an VxWorks zu arbeiten. Ich arbeite derzeit an der folgenden: -Wie implementiert man eine Abstraktionsschicht über VxWorks, um Handles für die Ausnahmebehandlung und Speicherverwaltung bereitzustellen?

Ich muss ein Framework erstellen, die Ausnahme behandeln wird & Speicherverwaltung (z. B. Nullzeiger Verwendung). Alles in allem wird es wie eine Abstraktionsschicht über dem Betriebssystem sein. Dieses Framework wird in Form eines herunterladbaren Kernel-Moduls vorliegen. Unit-Tests (auch DKMs) würden von diesem Rahmen ausgehen.

Ich möchte die Ausnahme Handler manipulieren & behandeln sie selbst, aber ich weiß nicht wie.

Die ED & R-Komponente muss mit dem Kernel-Image konfiguriert werden, um mit bestimmten APIs zu arbeiten (wenn ich das richtig verstehe), aber wenn es ein DKM ist, der bereits im Kernel-Bereich ist, hat es keinen vollständigen Zugriff in den Speicher (RAM, persistenter Speicher) & kann also direkt zugreifen?

Können Sie mir einige Richtlinien geben, wie ich mein Ziel erreichen soll?

Derzeit, wenn eine Ausnahme auftritt, nach der Anzeige einiger Details, stoppt die Aufgabe & Ich bekomme eine Aufforderung, das Modul zu debuggen. Danach benutze ich den Befehl edrShow, um den Core Dump zu sehen.

Was ich tun möchte ist, die Debug-Eingabeaufforderung & loszuwerden, nachdem die Aufgabe beendet wird, zeigen Sie den Core-Dump dem Benutzer, ohne den Befehl explizit ausstellen zu müssen.

Ich habe in edrStub.c (edrKernelFatalPolicyHandler-Methode) untersucht, aber ich konnte nicht herausfinden, wie man es manipuliert, um das gewünschte Ergebnis zu erhalten.

Antwort

1

Ich denke, was du redest, ist eine Art Erweiterung des Ausnahmemechanismus zu implementieren.
ED & R behandelt bereits die von Ihnen erwähnten Bedingungen ziemlich gut. Eine anstößige Aufgabe wird normalerweise unterbrochen, so dass Sie einen Debugger damit verbinden können.

Wenn Sie die Standardbehandlung einer Ausnahme nicht mögen, dann können Sie den Code in comp/src/vxworks/edrStub.c ändern (ich denke, dass es dort ist). Sie könnten dann Ihre eigene Funktion implementieren, um schwerwiegende Ausnahmen zu behandeln.

Wenn Sie mit bestimmten Ausnahmen beschäftigen möchten, könnte der Sie die excLib verwenden in Ihrem eigenen Exception-Handler zu stopfen, aber Sie wollen wirklich wissen, was Sie tun ...

Was Sachen setzen in DKMs ist es am einfachsten, vordefinierte Funktionszeiger für bestimmte Funktionen zu haben. Wenn der Funktionszeiger gesetzt ist, dann rufen Sie diese Funktion anders auf, Sie rufen den regulären Code auf. In der DKM gibt es normalerweise eine Funktion dkmInit(), die die Funktionszeiger setzt.

So zum Beispiel:

void regularExceptionHandler() { 
    if (__myExceptionHandler != NULL) { 
     __myExceptionHandler(); 
     return; 
    } 

Natürlich hat __myExceptionHandler Teil des Basis vxWorks Kernel-Image sein.
Dieses Muster wird häufig in vxWorks verwendet.

Verwandte Themen