Libraries für die original Firmware kompilieren

kmeleon

Neuer User
Mitglied seit
8 Okt 2009
Beiträge
73
Punkte für Reaktionen
3
Punkte
8
Hallo!

Ich versuche gerade, mittels freetz-trunk die aktuelle libusb für eine original Firmware (also nicht freetz) zu kompilieren. Das klappt auch ohne Compiler-Fehler. Ein Programm, das die libusb verwendet, konnte ich auf der Fritzbox aufrufen, allerdings beschwert es sich dann, dass die libusb nicht gefunden wurde. Die Toolchain scheint damit aber ja schonmal vernünftig genutzt zu werden. Dann versuche ich über "mount -o bind mein_lib_pfad /lib" die libs einzubinden und das System beschwert sich auf einmal ganz massiv, dass es die Funktion "sleep" nicht mehr findet. So tief habe ich in Linux noch nie reingeguckt, aber so klappt es wohl nicht? Oder ist das eher ein Problem der falschen Config / ucLibc?

Ich habe mir schon vieles über freetz durchgelesen (auch wie man eigene Programme kompiliert), aber bei der Konfiguration (über make menuconfig) war ich mir nicht sicher, was und wie ich das alles einstellen muss. Es heißt in einer Anleitung, dass die uclibc config bei einer originalen Firmware angepasst werden muss. Einstellen kann ich dort "mod" und "8MB". Leider ist kein Kommentar dafür verfügbar, aber ich habe mich für die Einstellung "8MB" entschieden, weil ich ja kein "mod" habe/möchte. War das korrekt? Was muss ich sonst noch einstellen, damit ich alle Programme für die originale Firmware kompilieren und nutzen kann?

Gibt es noch irgendwas zu beachten? Wie kann ich denn meine erzeugten libs in die FritzBox bekommen, wenn nicht über mount und auch nicht über LD_LIBRARY_PATH?

Kann mir hier jemand weiterhelfen?

Ich danke Euch!

Viele Grüße
Sven
 
Zuletzt bearbeitet:
Ja, 8 MB ist richtig.
Was sagt er denn, wenn du den LD_LIBRARY_PATH setzt?
Wenn du ein "mount -o bind" machst, müssen natürlich in dem neuen Pfad zusätzlich zu deinen Libs auch alle Original-Libs vorhanden sein, da ja im ursprünglichen Pfad nicht mehr nachgeschaut wird, d.h. du musst sie vorher dorthin kopieren.
 
Wenn Du Hilfe willst, solltest Du genau beschreiben, was Du gemacht hast. So kann man allenfalls raten.

Und mit LD_LIBRARY_PATH hat es nicht funktioniert? Du hast nicht einmal erwähnt, daß Du es damit probiert hast, geschweige denn, wie.
 
Tut mir leid, ich sollte diese halbherzigen Nachrichten um diese Uhrzeit nicht mehr schreiben!

Beim Setzen von LD_LIBRARY_PATH hat er "bad variable name" ausgegeben. Ich hatte das aber über ein Skript mit folgendem Inhalt gemacht:

LD_LIBRARY_PATH=/var/media/ftp/USB-DEVICENAME/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH

Das mag er irgendwie nicht! Vielleicht muss ich es mit "source skriptname" starten? Erst einmal egal, wenn ich es über die Konsole mit dem Befehl LD_LIBRARY_PATH=/var/media/ftp/USB-DEVICENAME/lib:$LD_LIBRARY_PATH" mache, dann hat er das ohne Fehler angenommen. Die Library finden konnte das Programm trotzdem noch nicht, weil es die genaue Versionsnummer der libusb-Datei gesucht hat und ich nur die Datei libusb.so kopiert hatte.

Wie kann ich die Installation möglichst einfach auf der FritzBox durchführen? Mit "make install" kann ich es ja nur auf dem Hostrechner installieren, das bringt mir aber nichts. Gibt es eine Möglichkeit, die lib (inkl. Symlinks und alles andere, was wichtig ist) auf der Fritzbox zu installieren oder muss ich dann selber ein makefile/Skript dafür schreiben?

@linuskasten: Das mit dem mount-Befehl wusste ich nicht! Ich dachte, er hängt das zusätzlich zum anderen Pfad ins System. Dann ist natürlich klar, dass das ganze System nicht mehr funktioniert. Der Fehler kam von dem debug.cfg-Skript, das ich dort eingehängt hatte. Dieses sollte alle 30 Sekunden etwas ausführen (danach wurde der sleep-Befehl ausgeführt), aber die Busybox (die den sleep-Befehl bereitstellt) war nicht mehr ausführbar. Das ist also alles inzwischen erklärbar! Danke Euch für den Tip!

Leider bin ich gerade bei meiner Freundin und kann nichts mehr mit der FritzBox machen (die steht zu Hause). Auf die Schnelle habe ich dropbear nicht kompiliert bekommen. Da werde ich mich jetzt auch nochmal dran machen!

Wenn Ihr mir noch einen Tip bezüglich der oberen Frage geben könntet, wäre mir schon geholfen!

Danke Euch!
 
Wenn nach dem Namen mit Nummern gesucht wird (was normal ist), dann kopiere eben diese Datei. Normalerweise ist sowieso das die richtige Datei, die anderen Namen sind nur Links darauf.

Und wenn Du schreibst, daß es direkt in der Konsole geht, aber mit dem Skript nicht, dann ist vermutlich ein Fehler im Skript.

Einfach kannst Du die Installation mit Freetz ausführen. Komplizierter kannst Du es machen, wenn Du die gleichen Schritte von Hand ausführst. Und in eine unmodifizierte Firmware bekommst Du die Library gar nicht hinein, sonst wäre sie nicht mehr unmodifiziert.
 
Also ich habe das inzwischen fast alles gelöst bekommen. Mein Skript muss man mit "source Skript" aufrufen, ansonsten wird der LD_LIBRARY_PATH nicht an die Parent-Shell weitergereicht. Danach liefen die Programme so weit, dass ich sie ausführen konnte. Vielen Dank!

Inwzischen sind die Optionen "mod" und "8MB" für die uclibc entfernt worden (oder ich habe sie übersehen).

Weiß jemand zufällig hier auch noch, wie man dropbear für die original AVM Firmware, d.h. eigentlich für die AVM uclibc kompiliert? Die Version von freetz kann ich nicht nehmen, weil es dann mit der uclibc von AVM die Funktion "getspnam" nicht auflösen kann. Gibt es noch eine andere Mögilichkeit, als die Funktionalität von dropbear (so dass die Funktion nicht mehr aufgerufen wird) zu reduzieren?
 
Inwzischen sind die Optionen "mod" und "8MB" für die uclibc entfernt worden (oder ich habe sie übersehen).
Du musst im Freetz menuconfig in den Compiler Optionen "Build toolchain" anstatt "download and use precompiled toolchain" aktivieren, dann sollte der Punkt wieder sichtbar sein. Vielleicht löst sich dann auch das Problem mit dem nichtaufgelösten Symbol.
 
Stimmt, Du hast recht. Vor dem Bauen der Toolchain hatte ich noch etwas Respekt. Ich habe das jetzt mal angestoßen. Mal gucken, was passiert...
 
So, jetzt bekomme ich schon beim Kompilieren der BusyBox folgenden Fehler:

Code:
==========
loginutils/lib.a(passwd.o): In function `passwd_main':
passwd.c:(.text.passwd_main+0x154): undefined reference to `getspnam_r'
libbb/lib.a(correct_password.o): In function `correct_password':
correct_password.c:(.text.correct_password+0x58): undefined reference to `getspnam_r'
collect2: ld returned 1 exit status
make[1]: *** [busybox_unstripped] Fehler 1
make[1]: Verlasse Verzeichnis '/home/freetz/freetz-trunk/source/ref-8mb_26/busybox-1.15.3'

ERROR: Build failed.

Eigentlich ist das ja ein gutes Ergebnis: Da (fast) die gleiche Funktion nicht mehr verfügbar ist, scheint die uClibc ja jetzt "identischer" mit der original FritzBox uClibc zu sein. Weiter bringt es mich jetzt aber auch nicht :-(.

Gibt es hier jemanden, der dropbear0.52 linken konnte und das Kompilat auf der original FritzBox mit aktueller Firmware zum Laufen bekommen hat? Ansonsten bleibt mir wohl bloß das statische Linken über, oder?!


Ich habe gerade nochmal über etwas anderes nachgedacht:

Normalerweise könnte ich doch eine libc mit einem anderen Namen (z.B. uclibc_support) bauen, die nur die vermissten Funktionen enthält. Hatte ich versucht, aber dann werden gleich die nächsten Funktionen vermisst, obwohl es bei meiner kurzen Testapplikation (in main-Funktion Aufruf von getspnam und getspnam_r) klappt. Und da verlässt mich mein Wissen über Einbinden von statischen und dynamischen Libraries leider.

Wenn jemand noch einen Tipp hat, immer her damit!

Viele Grüße
 
Der noch vorher auftretende Fehler, ist der hier:

Code:
In file included from include/busybox.h:10,
                 from applets/applets.c:11:
include/libbb.h:83:22: error: shadow.h: No such file or directory
make[2]: *** [applets/applets.o] Fehler 1
make[1]: *** [applets_dir] Fehler 2
make[1]: *** Warte auf noch nicht beendete Prozesse...
make[1]: Verlasse Verzeichnis '/home/freetz/freetz-trunk/source/ref-8mb_26/busyb                              ox-1.15.3'

ERROR: Build failed.
 
Eine Library ohne getspnam bringt Dich auch nicht weiter, die gibt es ja schon fertig auf der Box.
Du brauchst einen Dropbear, der getspnam nicht aufruft. Ich weiß aber nicht, inwieweit das bei Dropbear vorgesehen ist.
 
Da bereits versucht wird, die Busybox zu bauen, ist die Toolchain samt uclibc schon fertig. Um das zu überprüfen, kannst du nochmal ein make toolchain machen. Wenn das durchgelaufen ist (oder "nichts mehr zu tun ist"), dann kannst du (vorher dropbear im menuconfig konfigurieren und dann) ein make dropbear(-precompiled?) probieren. Vielleicht benötigt dropbear die besagten Funktionen nicht.
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.