uclibc patch

Kreuzuebersetzer, Diskussion über Änderungen im Tuxbox-CDK und Tuxbox-CVS
amiga23
Einsteiger
Einsteiger
Beiträge: 238
Registriert: Sonntag 14. November 2004, 23:44

Re: uclibc patch

Beitrag von amiga23 »

Nachdem das mit den Images und uclibc ja jetzt super funktioniert, habe ich heute mal eine Yadd mit allem drum und drann gebaut.
Nur 3 make targets funktionieren nicht:
enigma, kermit, mrouted
Ansonsten kompiliert alles :-) also alles was bei make everything gebaut wird. Mit glibc funktionieren sie.
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

amiga23 hat geschrieben:Nur 3 make targets funktionieren nicht:
enigma, kermit, mrouted
Patch für kermit und mrouted: http://forum.tuxbox-cvs.sourceforge.net ... 96#p361296
Es ist bekannt, dass Enigma nicht kompiliert: http://forum.tuxbox-cvs.sourceforge.net ... 57#p360957
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

Seit mehreren Tage versuche ich schon, uClibc-0.9.30-rc2 zum Laufen zu bekommen,
ohne Erfolg: http://busybox.net/bugs/view.php?id=5694

Wer Lust hat, sich damit herumzuärgern, bitte sehr: (Patch entfernt, uClibc 0.9.30 funktioniert!)
Zuletzt geändert von rhabarber1848 am Donnerstag 20. November 2008, 23:19, insgesamt 2-mal geändert.
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

rhabarber1848 hat geschrieben:Leicht optimierte Version von EDIT: Patch ist im CVS
Kleines kosmetisches Update in cdk/make/bootstrap.mk, keine neue Funktionalität.
Zuletzt geändert von rhabarber1848 am Mittwoch 3. Dezember 2008, 14:01, insgesamt 1-mal geändert.
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

Was aber funktioniert, soeben erstmals getestet, ist yadd-neutrino mit uClibc 0.9.29.
Hier ist der Patch: (Patch entfernt, uClibc 0.9.30 funktioniert!)

Auch hier muss erst uclibc.diff eingespielt werden, dann uclibc29.diff
Wenn uClibc 0.9.29 gut funktioniert, würde ich diese Version für das CVS bevorzugen,
dazu bedarf es aber noch weiterer Tests.
Zeit genug haben wir ja, solange seife im Urlaub ist ;)
Zuletzt geändert von rhabarber1848 am Donnerstag 20. November 2008, 23:20, insgesamt 1-mal geändert.
amiga23
Einsteiger
Einsteiger
Beiträge: 238
Registriert: Sonntag 14. November 2004, 23:44

Re: uclibc patch

Beitrag von amiga23 »

Uclibc29.diff führt bei mir zu dieser Endlosschleife.
Kannst Du die lib reduction nicht ganz rausnehmen? Funktioniert doch eh nicht.

Code: Alles auswählen

I: Using ld-uClibc.so.0 as dynamic linker.
I: library reduction pass 1
878 symbols, 835 unresolved
I: library reduction pass 2
1031 symbols, 56 unresolved
I: library reduction pass 3
1031 symbols, 5 unresolved
I: library reduction pass 4
1031 symbols, 5 unresolved
I: library reduction pass 5
1031 symbols, 5 unresolved
I: library reduction pass 6
1031 symbols, 5 unresolved
I: library reduction pass 7
1031 symbols, 5 unresolved
I: library reduction pass 8
1031 symbols, 5 unresolved
I: library reduction pass 9
1031 symbols, 5 unresolved
I: library reduction pass 10
1031 symbols, 5 unresolved
I: library reduction pass 11
1031 symbols, 5 unresolved
I: library reduction pass 12
1031 symbols, 5 unresolved
I: library reduction pass 13
1031 symbols, 5 unresolved
I: library reduction pass 14
1031 symbols, 5 unresolved
amiga23
Einsteiger
Einsteiger
Beiträge: 238
Registriert: Sonntag 14. November 2004, 23:44

Re: uclibc patch

Beitrag von amiga23 »

Mit der uclibc.diff version vom 25.10. habe ich jetzt das Problem, daß die libs falsch verlinkt werden.

libpthread.so.0 -> libpthread-0.9.28.3.so
libresolv.so.0 -> libresolv-0.9.28.3.so
librt.so.0 -> librt-0.9.28.3.so
libm.so.0 -> libm-0.9.28.3.so
libnsl.so.0 -> libnsl-0.9.28.3.so
libpthread.so.0 -> libpthread-0.9.28.3.so
libresolv.so.0 -> libresolv-0.9.28.3.so
librt.so.0 -> librt-0.9.28.3.so
libuClibc.so.0 -> libuClibc-0.9.28.3.so
libutil.so.0 -> libutil-0.9.28.3.so

Die Dateien mit .3 existieren nicht, daher werden sie auch nicht rüber kopiert. Richtig wäre libuClibc-0.9.28.so
Vielleicht ist es beim uclibc29.diff ein ähnliches Problem, so dass er die libs nicht findet?
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

amiga23 hat geschrieben:Mit der uclibc.diff version vom 25.10. habe ich jetzt das Problem, daß die libs falsch verlinkt werden.
Patch aktualisiert, Fehler behoben: (Patch entfernt)

Mit dem uClibc 0.9.29-Problem hatten die falschen Lib-Dateinamen nichts zu tun,
der Wurm muss woanders drin stecken...

@seife: Ich habe den $(BUILDENV_LIBS)-Kram wieder entfernt, da er nicht alle Libraries
berücksichtigt, namentlich jene, die zu Neutrino gehören wie libtuxbox.so.
Ersatz dafür ist dieser Code in cdk/configure.ac

Code: Alles auswählen

if test "$enable_uclibc" = "yes"; then
          CFLAGS="$CFLAGS -fPIC"
          TARGET_CFLAGS="$TARGET_CFLAGS -fPIC"
          TARGET_CXXFLAGS="$TARGET_CXXFLAGS -fPIC"
fi
Damit konnte ich einige Boot-Probleme mit uClibc-0.9.29 behoben, leider erzeugt
Neutrino selbst mit uClibc 0.9.29 immer noch einen Segfault, Busybox und die
meisten Daemons laufen allerdings. Mit uClibc 0.9.30-rc2-svn sieht es immer
noch duster aus, vielleicht haben die uClibc-Leute eine Idee, was da los sein
könnte. Mein Bugreport hat schon Rückmeldungen erhalten, eine Lösung ist
aber noch nicht absehbar.

Der 0.9.28.3-Bereich sollte allerdings so stabil laufen, dass Du den Patch nach
Deinem Urlaub jederzeit einchecken kannst. Intern arbeite ich bereits mit
Patches, die auf CVS+uclibc.diff aufsetzen, wie z.B. uclibc30.diff. Nur wenn
ich bei der Arbeit daran Dinge feststelle, die auch für uClibc 0.9.28.3
interessant sind, nehme ich sie in uclibc.diff auf, wie z.B. die Änderung bei
BUILDENV_LIBS.
Zuletzt geändert von rhabarber1848 am Donnerstag 20. November 2008, 23:20, insgesamt 1-mal geändert.
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

amiga23 hat geschrieben:Uclibc29.diff führt bei mir zu dieser Endlosschleife.
Kannst Du die lib reduction nicht ganz rausnehmen? Funktioniert doch eh nicht.
Die lib-reduction hat schon positive Auswirkungen, vergleiche mal cdkroot/bin und
cdkflash-root-neutrino-squashfs/bin. Die Endlosschleife bei uClibc-0.9.[29|30] konnte
ich bereits durch Änderungen an hostapps/mklibs/mklibs.py umgehen, leider gibt
es dort immer noch weitere Probleme, deshalb habe ich die Patches für diese
uClibc-Versionen erstmal wieder entfernt.
amiga23
Einsteiger
Einsteiger
Beiträge: 238
Registriert: Sonntag 14. November 2004, 23:44

Re: uclibc patch

Beitrag von amiga23 »

ja, jetzt fliegt es wieder :-)
Danke für Deine Arbeit.
Wenn's was zu testen gibt, sag bescheid. Man lernt ja sogar noch was dabei.
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

amiga23 hat geschrieben:"make links" baut dann links im textonly mode
"make links_g" baut links im graphic modus - hierzu muss aber auch directfb installiert sein.
Hier der fertige Patch dazu: http://forum.tuxbox-cvs.sourceforge.net ... 43#p361643

Sogar "links -g" (Grafikmodus) hat hier funktioniert, leider habe ich keine IR-Tastatur für
die Dbox, aber prinzipiell ist das schon eine nette Sache :D
amiga23
Einsteiger
Einsteiger
Beiträge: 238
Registriert: Sonntag 14. November 2004, 23:44

Re: uclibc patch

Beitrag von amiga23 »

Cool 8) , danke Dir!

habe einen neuen Thread eröffnet um hier nicht zu OffTopic zu werden. Geht auch ganz gut ohne Tastatur :D
http://tuxbox-forum.dreambox-fan.de/for ... 47#p361647

Habe noch ein kleines Problem mit den libs.

Wenn ich links sauber installiere:

Code: Alles auswählen

cp dbox2/cdkroot/bin/links dbox2/cdkflash/root
chmod 755 dbox2/cdkflash/root/links
touch dbox2/cdkflash/root
make flash-neutrino-squashfs-all
dann werden 2 Symbole nicht gefunden:

Still need: __fpcmp_parts_f
Still need: __thenan_sf

Wenn ich links aber unsauber installiere:

Code: Alles auswählen

# also erst mal wieder löschen
rm dbox2/cdkflash/root/links
touch dbox2/cdkflash/root
make flash-neutrino-squashfs-all

# jetzt unsauber installieren
cp dbox2/cdkroot/bin/links dbox2/cdkflash/root-neutrino-squashfs
chmod 755 dbox2/cdkflash/root-neutrino-squashfs/links
rm dbox2/cdkflash/root-neutrino.squashfs
make flash-neutrino-squashfs-all
Dann is' es im Image drin und läuft auch ohne diese 2 Symbole.
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

amiga23 hat geschrieben:dann werden 2 Symbole nicht gefunden:

Still need: __fpcmp_parts_f
Still need: __thenan_sf
Kannst Du bitte das Ergebnis dieses Befehls posten:

Code: Alles auswählen

dbox2/cdk/bin/powerpc*-readelf -a dbox2/cdkroot/bin/links | grep NEEDED
Ich weiß nicht, welches target Du genommen hast, daher "powerpc*-readelf",
Du musst hier den kompletten Dateinamen einsetzen.

Wichtig ist mir zu wissen, ob links auch gegen libm gelinkt wurde, von dort stammen die
fehlenden Symbole.
amiga23
Einsteiger
Einsteiger
Beiträge: 238
Registriert: Sonntag 14. November 2004, 23:44

Re: uclibc patch

Beitrag von amiga23 »

Ahh cool, so geht das.

Code: Alles auswählen

dbox2/cdk/bin/powerpc-tuxbox-linux-uclibc-readelf -a dbox2/cdkroot/bin/links | grep NEEDED
 0x00000001 (NEEDED)                     Shared library: [libjpeg.so.6]
 0x00000001 (NEEDED)                     Shared library: [libpng12.so.0]
 0x00000001 (NEEDED)                     Shared library: [libz.so.1]
 0x00000001 (NEEDED)                     Shared library: [libdirectfb-1.0.so.0]
 0x00000001 (NEEDED)                     Shared library: [libfusion-1.0.so.0]
 0x00000001 (NEEDED)                     Shared library: [libdirect-1.0.so.0]
 0x00000001 (NEEDED)                     Shared library: [libpthread.so.0]
 0x00000001 (NEEDED)                     Shared library: [libdl.so.0]
 0x00000001 (NEEDED)                     Shared library: [libm.so.0]
 0x00000001 (NEEDED)                     Shared library: [libgcc_s_nof.so.1]
 0x00000001 (NEEDED)                     Shared library: [libc.so.0]
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

@seife: Bitte checke die uclibc-Patches noch nicht ins CVS ein.

Ich habe es gerade erstmals geschafft, Neutrino mit einem aktuellen uClibc-
SVN-snapshot zu kompilieren und möchte, nach einigen Tests, dass diese
Version ins CVS gelangt. Dazu brauche ich allerdings noch etwas mehr Zeit.
Das uClibc-Team wird in naher Zukunft die Version 0.9.30 veröffentlichen,
z.Zt. ist rc3 draussen. Tuxbox soll diese Version nutzen, nicht die mehrere
Jahre alten 0.9.28.3- oder 0.9.29-Releases.
Wenn ich meine Patches etwas aufgeräumt habe, werde ich Ende der Woche
einen Patch für die Mutigen unter Euch veröffentlichen ;)
Das posix_fadvise64-Problem in Enigma ist bereits behoben, da die aktuelle
uClibc diese Funktion bereitstellt, bleibt "nur" noch I18N-Support...
../../include/lib/base/i18n.h:26:21: libintl.h: No such file or directory
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

rhabarber1848 hat geschrieben:bleibt "nur" noch I18N-Support...
../../include/lib/base/i18n.h:26:21: libintl.h: No such file or directory
Kurze Zwischenmeldung:

GNU gettext kompiliert mit uClibc, Enigma gegen libintl.so gelinkt funktioniert
mit uClibc! Libintl.so ist im Flash ~ 30KB groß, also kein Problem.

Bevor ich den neuen Patch veröffentlichen kann, will ich noch einige Probleme
(Tuxtxt, Enigma-Neustart nach Sprachkonfig) gelöst sehen, siehe dazu die
anderen Threads, in denen ich gerade aktiv bin. Nur das Neustart-Problem
scheint uClibc-spezifisch zu sein, der Rest taucht auch mit glibc auf.

Ich würde mir wünschen, dass die Enigma-commits vorher besser getestet
werden würden :wink:, das hätte mir einiges an Arbeit erspart, da ich bei
den Problemen zuerst von Inkompatiblitäten mit uClibc ausgegangen bin.
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

Der neue uClibc-Patch, basierend auf der heute veröffentlichen uClibc-Version 0.9.30: (Patch entfernt)

- shadow passwort-Support neu in uClibc, daher Patch in cdk/Patches/busybox.config.m4 rückgängig gemacht
- Anpassung in cdk/make/sambaserver.mk, da uClibc keinen YP-Support hat
- Enigma benötigt GNU Gettext, da uClibc kein vollwertiges Gettext liefert, apps/tuxbox/enigma/acinclude.m4 angepasst
- apps/tuxbox/neutrino/src/driver/netfile.cpp - pthread mutex locking-Patch von Houdini
- cdk/configure.ac: xfsprogs kompiliert nicht mit uClibc, FLAC und mklibs.py beim Bauen eines Flash-Images mögen sich nicht
- kleinere build-patches für GNU Gettext, Insight, Kermit und libxml2
- cdk/Patches/uclibc-0.9.28.3.diff & cdk/Patches/uclibc-0.9.28.3.config sind überflüssig, bitte löschen

Folgende uClibc-Optionen darf nicht aktiviert werden: UCLIBC_PREGENERATED_LOCALE_DATA
Wenn aktiviert, läuft keine einzige mit uClibc kompilierte Binary, da es wohl ein Endian-Problem gibt.
Das herauszufinden, hat vom 23.10. bis zum 10.11. gedauert. Ich musste dazu unzählige
uClibc-SVN-Revisionen kompilieren und testen um herauszufinden, welcher Commit für das Problem
verantwortlich war...
Ohne das Problem hätte ich schon früher einen aktualisierten uclibc.diff posten können.

Der Patch ist bisher nur als Yadd getestet, ein Flashimage kann zwar gebaut werden,
es wird sich aber seltsam[1] verhalten. Der Bereich mklibs.py ist noch sehr von meinen
Tests geprägt und darf so auf keinen Fall ins CVS.

[1] sectionsd, zapit u.a. erzeugen einen Segfault, wenn deren Konfigurationsdateien nicht existieren,
touch behebt das Problem, es tritt nicht im Yadd auf... Ob die GUIs starten, habe ich nicht getestet,
da ich uClibc 0.9.30* erstmal zum Laufen bringen musste.
Zuletzt geändert von rhabarber1848 am Montag 1. Dezember 2008, 18:02, insgesamt 2-mal geändert.
amiga23
Einsteiger
Einsteiger
Beiträge: 238
Registriert: Sonntag 14. November 2004, 23:44

Re: uclibc patch

Beitrag von amiga23 »

rhabarber1848 hat geschrieben: Der Patch ist bisher nur als Yadd getestet, ein Flashimage kann zwar gebaut werden,
es wird sich aber seltsam[1] verhalten. Der Bereich mklibs.py ist noch sehr von meinen
Tests geprägt und darf so auf keinen Fall ins CVS.
ja, als flashimage tut es nicht. Neutrino "segfaultet"

Code: Alles auswählen

Segmentation fault
Neutrino exited with nonzero exit status, restarting...
EDIT: links segfaultet auch
amiga23
Einsteiger
Einsteiger
Beiträge: 238
Registriert: Sonntag 14. November 2004, 23:44

Re: uclibc patch

Beitrag von amiga23 »

Das Problem ist die libdl.so.0
Interessanterweise wird sie durch das shrinken größer ?!?
Wenn ich libdl.so.0 austausche funktioniert Neutrino wieder.
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

amiga23 hat geschrieben:Das Problem ist die libdl.so.0
Hilft dieser Patch?

Code: Alles auswählen

diff -uNr ../compile2/hostapps/mklibs/mklibs.py ./hostapps/mklibs/mklibs.py
--- ../compile2/hostapps/mklibs/mklibs.py	2008-10-11 14:53:59.000000000 +0200
+++ ./hostapps/mklibs/mklibs.py	2008-11-15 23:19:36.000000000 +0100
@@ -176,12 +176,20 @@
     return ""
 
 # Find a PIC archive for the library
+# this is either an archive of the form base_name_pic.a or
+# base_name.a with a _GLOBAL_OFFSET_TABLE_
 def find_pic(lib):
     base_name = so_pattern.match(lib).group(1)
     for path in lib_path:
         for file in glob.glob(path + "/" + base_name + "_pic.a"):
             if os.access(file, os.F_OK):
                 return resolve_link(file)
+    for path in lib_path:
+        for file in glob.glob(root + path + base_name + ".a"):
+            relocs = command(target + "objdump", "-r", file)
+            # this must be size() > 1 to avoid stripping libdl
+            if os.access(file, os.F_OK) and regexpfilter(relocs,"(.*_GLOBAL_OFFSET_TABLE_)").size() > 1:
+                return resolve_link(file)
     return ""
 
 # Find a PIC .map file for the library
@@ -261,7 +269,7 @@
 libc_extras_dir = "/usr/lib/libc_pic"
 target = ""
 root = ""
-so_pattern = re.compile("((lib|ld).*)\.so(\..+)*")
+so_pattern = re.compile("(?:.*/)*((lib|ld)[^/]*?)(-[.\d]*)?\.so(\.[^/]]+)*")
 script_pattern = re.compile("^#!\s*/")
 
 try:
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

Ich bin dabei, den uClibc-Patch CVS-fertig zu machen. Dazu teile ich ihn
in verschiedene Teile auf. Hier poste ich einen Patch für gcc-3.4.6, der
zu benutzen ist, wenn UCLIBC_HAS_XLOCALE aktiviert ist. Zur Zeit wird
diese Funktion und damit der gcc-Patch nicht benötigt, daher ist dieses
Posting eher als Archivierung zu verstehen. UCLIBC_HAS_XLOCALE ist ein
experimentelles Feature und wird im Moment weder für Neutrino noch
Enigma benötigt. Hier der Patch: gcc-uclibc-locale.diff
Zuletzt geändert von rhabarber1848 am Sonntag 14. Dezember 2008, 20:51, insgesamt 1-mal geändert.
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

Ein weiterer vorbereitender Patch für uClibc:

- pthread locking-patch für netfile.cpp
- gettext, wird für Enigma@uClibc benötigt
- BUILDENV_LIBS wird nicht mehr benötigt
- Busybox - CONFIG_FEATURE_SHADOWPASSWDS reaktiviert
- uClibc-Kompilierpatch für Insight, Kermit und libxml2
- Entferne uClibc 0.9.28.3-Dateien

Dieser Patch ist CVS-ready, da er glibc nicht beeinträchtigt.
EDIT: Patch ist im CVS
Zuletzt geändert von rhabarber1848 am Samstag 22. November 2008, 13:58, insgesamt 1-mal geändert.
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

Eigentlicher uClibc-Patch, uclibc2.diff muss vorher eingespielt werden: EDIT: Patch ist im CVS
Zuletzt geändert von rhabarber1848 am Mittwoch 3. Dezember 2008, 14:02, insgesamt 1-mal geändert.
amiga23
Einsteiger
Einsteiger
Beiträge: 238
Registriert: Sonntag 14. November 2004, 23:44

Re: uclibc patch

Beitrag von amiga23 »

Hi Rhabarber1848,
sorry aber ich bin zu doof Deinen Patch vom Samstag 15. November 2008, 23:20 zu "applien". Mithilfe der Zitierfunktion kann ich ihn zwar richtig rauskopieren (mit Lerrzeichen und Tabs) aber er passt nicht zum aktuellen CVS + uclibc.diff und ich bin zu doof ihn anzupassen.

Meiner Meinung nach ist der patch Befehl buggy, aber wahrscheinlich liegt es doch eher am CKI "Chair Keyboard Interface" :dash:

Kannst Du ihn bitte nochmal bauen?


EDIT: welcher Patch? der vom Samstag 15. November 2008, 23:20
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

Vergiß uclibc.diff, nimm stattdessen das aktuelle CVS, dann uclibc2.diff, dann uclibc3.diff.
Ich habe uclibc.diff in zwei Teile aufgeteilt, einen, der sofort in CVS kann, weil er glibc
nicht beeinträchtigt und nur Vorbereitungen beinhaltet und den zweiten Teil, uclibc3.diff,
der neben der neuen configure-Option --enable-uclibc auch die build system-Anpassungen
beinhaltet.