Hallo, ich habe mit dem msp430-g++ ein Projekt kompiliert, gebunden und per LinkerScript extra einen bestimmten Speicherplatz für ein Modul reserviert. Das ganze ist so etwas wie ein Betriebssystemkern. Jetzt habe ich ein paar Source-Dateien (Modul), die ich gern gegen die Symboltabelle dieses "Kerns" linken möchte, um den entstandenen Binärcode dann auf den Mikrocontroller zu übertragen. Im Kern habe ich schon einen Funktionspointer als Einsprungpunkt vorgesehen. Ist so etwas mit dem gnu-compiler/linker überhaupt möglich? Die Symboltabelle habe ich mit nm erhalten, aber ich verstehe nicht, wie ich den Linker damit in einem zweiten Schritt füttern kann. Vielen Dank für Hinweise
Nun, das würde wohl auf eine Art shared lib hinauslaufen. Ist aber eigentlich Overkill für das, was du vorhast. Schreib doch einfach eine separate Datei, die die Einsprungpunkte deines OS beschreibt, so in der Art:
1 | typedef void (*osfunc)(void); |
2 | |
3 | void call_os(void) |
4 | {
|
5 | osfunc entry1 = (osfunc)0x8000; |
6 | |
7 | entry1(); |
8 | }
|
Hallo Jörg, danke für den Tipp. Aber die Einsprungpunkte von Hand zu setzen, wäre zu aufwändig. Das Betriebssystem ist in C++ geschrieben, die Module erben von Klassen, die schon im System vorhanden sind und erweitern sie um neue Funktionalitäten. Das heißt, es gibt viel zu viele Sprünge und Abhängigkeiten. Im Prinzip bestehen die Module nur aus Objekten. Methodenaufrufe von außen sind rein virtuell. Von daher klappt das auch wunderbar. Jetzt möchte ich diese Module halt gern auf dem PC linken. Es soll ja Leute geben, die einen ELF-Linker in 3KB Code gequetscht haben, aber das kann doch nicht die einzige Möglichkeit sein. Was du außerdem mit Shared Libraries ansprichst, würde so weit ich weiß mit dem msp430-gcc nicht funktionieren, da er das nicht unterstützt. Richard EDIT: Ich nehme letzteres zurück. Msp430-ld verwendet selbst eine lbgcc.a für Spezialfunktionen. Also kann er es anscheinend doch.
eine .a ist üblicherweise keine shared lib, sondern statisch, oder?
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.