Ich arbeite an einem Projekt auf Basis des arm9-Prozessors. Wir verwenden nur Bare-Metal ohne Betriebssystem, daher haben wir leider noch keine Unterstützung für Shared Libraries / Dynamic Loader.
Ich würde gerne Bibliotheken laden können, zum Beispiel von der SD-Karte, die auch die Funktionen von der Hauptanwendung aufrufen kann.
Mein erster Versuch war die Verwendung der Linker-Overlay-Funktion (Platzierung der Bibliothek in bestimmten absolut positionierten Sektionen), aber hier ist ein Problem beim Aufruf der Haupt-App-Funktionen, wie ich bereits erwähnt habe - & gt; Bei jeder Änderung der Hauptanwendung müssen die Bibliotheken erneut kompiliert werden, um einen Rückruf durchführen zu können.
Nach dieser Sache werde ich meinen eigenen dynamischen Lader schreiben müssen, aber ich bin Neuling in diesem Bereich. Könnte mir bitte jemand ein Beispiel geben, wie man damit umgeht oder wie man mit einem solchen Projekt anfängt? Wir verwenden gcc für Arm-Elf-Ziel.
Grüße Jan
Überprüfen Sie diese Anwendungsnotiz . Es beschreibt in einigen Details, wie dynamisches Verlinken funktioniert und was Sie tun müssen, um Ihren eigenen dynamischen Loader zu schreiben. Es gibt auch einige Alternativen dazu. Ich denke, die Sprungtabellen lassen sich recht einfach implementieren und lösen Ihr Problem mit sich ändernden API-Adressen.
Bearbeiten : So erstellen Sie eine einfache Jump-Tabelle. Entscheiden Sie zunächst, welche Funktionen Sie aus Ihrem Hauptprogramm exportieren möchten. Dann machen Sie eine Struktur von Funktionszeigern:
%Vor%Definieren Sie im Hauptprogramm eine Instanz dieser Struktur, geben Sie die Zeiger ein und platzieren Sie sie unter einer vordefinierten Adresse:
%Vor%(Wenn Sie diesen Ansatz verwenden, müssen Sie den Abschnitt .jumptb in der Linker-Datei beschreiben und sicherstellen, dass er eine feste Adresse erhält)
Rufen Sie im geladenen Modul den Zeiger auf den Jumptable und rufen Sie das Hauptprogramm auf:
%Vor%Hoffe, das hilft!
Tags und Links shared-libraries arm dynamic-data relocation bare-metal