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 »

Okay,
uclibc2.diff und uclibc3.diff getestet. Baut durch. Aber das Problem mit libdl.so.0 besteht noch *heul* *jammer* :-)
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

amiga23 hat geschrieben:Aber das Problem mit libdl.so.0 besteht noch *heul* *jammer* :-)
Darum werde ich mich noch kümmern
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

rhabarber1848 hat geschrieben:Eigentlicher uClibc-Patch, uclibc2.diff muss vorher eingespielt werden: EDIT: Patch ist im CVS
libdl.so sollte nun im Flashimage funktionieren.
Zuletzt geändert von rhabarber1848 am Mittwoch 3. Dezember 2008, 14:02, insgesamt 1-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:Eigentlicher uClibc-Patch, uclibc2.diff muss vorher eingespielt werden: EDIT: Patch ist im CVS
Patch aktualisiert: automount, uClibc und -fPIE mögen einander nicht.
Bitte mit glibc gegentesten, ob automount dort noch funktioniert.
Zuletzt geändert von rhabarber1848 am Mittwoch 3. Dezember 2008, 14:02, insgesamt 1-mal geändert.
Barf
Developer
Beiträge: 1475
Registriert: Dienstag 4. Februar 2003, 22:02

Re: uclibc patch

Beitrag von Barf »

Zum Problem mit libdl: Wo wird noch libdl benutzt? libdl wurde in den frühe 90 Jahren(?) geschrieben, und seitdem hat alle "Unix-ähnliche" Systeme diese Funktioinalität in dlopen(). Irgendwo (kann den Link nicht mehr finden) habe ich gelesen, dass die offizielle Standpunkt von GNU/FSF aus diesem Grund obsolet ist.

Wäre es nicht besser, anstatt diese Altlast zu entsorgen?

Ich habe den Thread nicht verfolgt; liege ich daneben lasse ich mich gerne belehren.
amiga23
Einsteiger
Einsteiger
Beiträge: 238
Registriert: Sonntag 14. November 2004, 23:44

Re: uclibc patch

Beitrag von amiga23 »

Moin,

neutrino tut wieder, also libdl ist gefixed. Danke rhabarber1848
Allerdings ist mir jetzt aufgefallen, das links im Grafikmodus nicht mehr geht. Hab nochmal ältere Images probiert, geht schon länger nicht mehr, also auch nicht mit uclibc28. Leider spuckt es keine Fehlermeldung aus sondern beendet sich einfach wieder. Scheint was mit libdirectfb zu tun haben. Bin grad' am rumprobieren...
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

Barf hat geschrieben:Zum Problem mit libdl: Wo wird noch libdl benutzt?
uClibc braucht das scheinbar, warum? Das weiß ich nicht.
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

uclibc2.diff ist im CVS, danke seife!
Es wird jetzt nur noch uclibc3.diff benötigt.
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

amiga23 hat geschrieben:Allerdings ist mir jetzt aufgefallen, das links im Grafikmodus nicht mehr geht.
Funktioniert hier einwandfrei:
# links -g de.wikipedia.org

=======================| DirectFB 1.0.0 |=======================
(c) 2001-2007 The DirectFB Organization (directfb.org)
(c) 2000-2004 Convergence (integrated media) GmbH
------------------------------------------------------------

(*) DirectFB/Core: Single Application Core. (2008-11-22 14:19)
(*) Direct/Memcpy: Using ppcasm_memcpy()
(*) Direct/Thread: Running 'VT Switcher' (CRITICAL, 183)...
(*) Direct/Thread: Running 'Linux Input' (INPUT, 184)...
(*) DirectFB/Input: DBOX-2 FP IR 0.1 (directfb.org)
(!) Direct/Modules: Could not open module directory `/lib/directfb-1.0-0/gfxdrivers'!
--> No such file or directory
(*) DirectFB/Graphics: Generic Software Rasterizer 0.6 (directfb.org)
(*) DirectFB/Core/WM: Default 0.3 (directfb.org)
und auf dem Fernseher ist die Wikipedia-Seite zu sehen.

Ich habe allerdings yadd-none gestartet, es war also noch keine Grafikapplikation
vor dem Start von Links aktiv.
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

Patch-Update: EDIT: Patch ist im CVS

- Enigma configure sucht nur dann nach gettext, wenn libc dieses nicht beinhaltet. Glibc hat gettext-Support, uClibc nicht.
- GCC wird mit Patches/gcc-uclibc.diff nur im uClibc-Modus gepatcht

- neue Datei hostapps/mklibs/mklibs_uclibc.py
Anstatt mklibs.py zu patchen, wird nun eine gesonderte Version für uClibc mitgeliefert.
Beim CVS-commit ist darauf zu achten, dass die Datei im CVS ausführbar ist.

Damit wird einerseits Problemen im glibc-Modus vorgebeugt, andererseits bin ich mit
den mklibs-Patches noch unzufrieden, da ich nicht genau verstehe, warum es so viele
Probleme mit mklibs@uClibc gibt. Eigentlich müssten die uClibc-libs sich auch verkleinern
lassen, allerdings zerstört dies z.Zt. die Dateien. Zaphot, der sich als erster mit uClibc
hier beschäftigte, war mit diesem Problem allerdings auch schon konfrontiert...

Mein Vorschlag: Der Patch ist jetzt CVS-ready, stört den glibc-Betrieb nicht und erzeugt
voll funktionsfähige Neutrino-Yadd und Neutrino-Flashimages. Enigma-Yadd/Flash funktioniert
auch, mit Ausnahme der beschriebenen Probleme beim ersten Start und beim Runterfahren
der Box. Diese Bugs sollten IMHO das Einchecken des uClibc-Patches nicht behindern,
sondern eher als Ansporn für pthread-Experten dienen ;)

In einem weiteren Schritt werde ich mir mklibs_uclibc.py genauer anschauen und versuchen,
wieder eine gemeinsame Version für glibc und uClibc zu liefern. Auch dieser Zustand spricht
IMHO nicht gegen den CVS-commit des aktuellen Patches.
Zuletzt geändert von rhabarber1848 am Mittwoch 3. Dezember 2008, 14:02, insgesamt 1-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:Patch-Update: EDIT: Patch ist im CVS

- neue Datei hostapps/mklibs/mklibs_uclibc.py
[...]
Beim CVS-commit ist darauf zu achten, dass die Datei im CVS ausführbar ist.
Das Problem ist in der neuen Patch-Version durch Code in cdk/configure.ac behoben.
Zuletzt geändert von rhabarber1848 am Mittwoch 3. Dezember 2008, 14:03, 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:[1] sectionsd, zapit u.a. erzeugen einen Segfault, wenn deren Konfigurationsdateien nicht existieren,
touch behebt das Problem, es tritt nicht im Yadd auf...
Die aktuelle Version des Patches behebt das Problem: EDIT: Patch ist im CVS

Verantwortlich war die von mklibs_uclibc.py zerstörte Datei libtuxbox-configfile.so.0,
die nun als 7kb größeres Original ins Flash kopiert wird.
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

Der uClibc-Patch ist nun vollständig im CVS :D Viel Spass damit.
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Re: uclibc patch

Beitrag von Houdini »

mit

Code: Alles auswählen

			ac_cv_header_aio_h=yes \
			ac_cv_lib_rt_lio_listio=yes \
kommt man wenigstens durchs configure durch.
den header braucht xfsprogs wohl nicht.
bei der librt bin ich mir nicht so sicher,
beim Bauen von xfs_repair gibts folgenden Fehler.

Code: Alles auswählen

/home/harald/tuxbox-cvs/head-uclibc-new/cdk/xfsprogs-2.9.4/repair/progress.c:186: undefined refere to `timer_create'
/home/harald/tuxbox-cvs/head-uclibc-new/cdk/xfsprogs-2.9.4/repair/progress.c:189: undefined refere to `timer_settime'
/home/harald/tuxbox-cvs/head-uclibc-new/cdk/xfsprogs-2.9.4/repair/progress.c:277: undefined refere to `timer_delete'
collect2: ld returned 1 exit status
make[2]: *** [xfs_repair] Fehler 1
Vielleicht muß man auch im uClibc noch was (Highres timer?) nachaktivieren
doc
Contributor
Beiträge: 1623
Registriert: Donnerstag 10. Januar 2002, 20:03

Re: uclibc patch

Beitrag von doc »

Jo, da dürfte die entsprechende Funktionalität in uclibc nicht aktiviert sein.
An den entsprechenden Funktionen ist nämlich nicht besonders viel gearbeitet worden.
http://uclibc.org/cgi-bin/viewcvs.cgi/t ... 4&view=log
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: uclibc patch

Beitrag von seife »

Code: Alles auswählen

config UCLIBC_HAS_REALTIME
        bool "Realtime-related family of SUSv functions"
        default y
        help
          These functions are part of the Timers option and need not
          be available on all implementations.
          Includes AIO, message-queue, scheduler, semaphore functions:
Allerdings ist das eigentlich enabled.
Schaut doch mal im config.log, warum die header nicht gefunden werden, evtl. wird ja nur an der falschen Stelle gesucht oder so...
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

Houdini hat geschrieben:

Code: Alles auswählen

/home/harald/tuxbox-cvs/head-uclibc-new/cdk/xfsprogs-2.9.4/repair/progress.c:186: undefined refere to `timer_create'
/home/harald/tuxbox-cvs/head-uclibc-new/cdk/xfsprogs-2.9.4/repair/progress.c:189: undefined refere to `timer_settime'
/home/harald/tuxbox-cvs/head-uclibc-new/cdk/xfsprogs-2.9.4/repair/progress.c:277: undefined refere to `timer_delete'
collect2: ld returned 1 exit status
make[2]: *** [xfs_repair] Fehler 1
Soweit bin ich mittlerweile auch, uClibc dürfte diese Funktionen haben,
in uClibc-0.9.30/librt/timer*.c, dort ist z.B. zu finden:

Code: Alles auswählen

#ifdef __NR_timer_create
Dies define scheint aus dem Kernel zu kommen, nur leider:
linux-2.4.36.6/include/asm-ppc/unistd.h

Code: Alles auswählen

#if 0
[...]
#define __NR_timer_create       240
#define __NR_timer_settime      241
#define __NR_timer_gettime      242
#define __NR_timer_getoverrun   243
#define __NR_timer_delete       244
[...]
#endif
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

uClibc, Kernel 2.6 und xfsprogs kompilieren durch.
Was mit Kernel 2.4 ist, kann ich leider nicht sagen.

In uClibc müssen folgende Optionen zusätzlich aktiviert werden:
EDIT: diff entfernt

PS: Hier der Patch dazu: EDIT: Patch ist jetzt hier integriert:
http://forum.tuxbox-cvs.sourceforge.net ... 73#p362773
PPS: Ob xfsprogs überhaupt funktioniert, kann ich mangels IDE-Interface nicht testen.
Zuletzt geändert von rhabarber1848 am Freitag 12. Dezember 2008, 23:03, insgesamt 1-mal geändert.
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Re: uclibc patch

Beitrag von Houdini »

glibc hat eine eigene user space implementierung falls der system call nicht existiert, deswegen geht es mit glibc
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

Houdini hat geschrieben:glibc hat eine eigene user space implementierung falls der system call nicht existiert, deswegen geht es mit glibc
Das zu portieren, dürfte dann nicht schwierig sein, oder? Freiwillige vor! :wink:
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

uClibc hat folgende Option, die z.Zt. aktiviert ist:
http://sources.busybox.net/index.py/tru ... ortby=file
config UCLIBC_SUSV3_LEGACY
bool "Enable SuSv3 LEGACY functions"

Enable this option if you want to have SuSv3 LEGACY functions
in the library, else they are replaced by SuSv3 proposed macros.
Currently applies to:

bcmp, bcopy, bzero, index, rindex, ftime,
bsd_signal, (ecvt), (fcvt), gcvt, (getcontext),
(getwd), (makecontext),
mktemp, (pthread_attr_getstackaddr), (pthread_attr_setstackaddr),
scalb, (setcontext), (swapcontext), ualarm, usleep,
wcswcs.

WARNING! ABI incompatibility.
http://osdir.com/ml/lib.uclibc.buildroo ... 00008.html
You don't want UCLIBC_SUSV3_LEGACY_MACROS nor UCLIBC_SUSV3_LEGACY, as a
general rule of thumb.
Deshalb habe ich mal drangesetzt und Patches geschrieben, welche die
legacy-Funktionen durch aktuellen Code ersetzen.

Hier ein Beispiel (bzero/memset): http://const.tltsu.ru/susv3/functions/bzero.html
The memset() function is preferred over this function.

For maximum portability, it is recommended to replace the function call to bzero() as follows:

#define bzero(b,len) (memset((b), '\0', (len)), (void) 0)
In uClinux wurden bereits solche Patches eingepflegt:
http://mailman.uclinux.org/pipermail/uc ... 44788.html
bcopy/bzero/bcmp/index/rindex are marked LEGACY in SuSv3.
They are replaced as proposed by SuSv3.

Code: Alles auswählen

-	bzero(&addr, sizeof(addr));
+	memset(&addr, 0, sizeof(addr));
Hier der Patch für Tuxbox: EDIT: Patch ist im CVS
Zuletzt geändert von rhabarber1848 am Mittwoch 11. März 2009, 21:44, insgesamt 1-mal geändert.
amiga23
Einsteiger
Einsteiger
Beiträge: 238
Registriert: Sonntag 14. November 2004, 23:44

Re: uclibc patch

Beitrag von amiga23 »

Movieplayer2 nutzt auch bzero.

movieplayer2-susv3.diff
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

@Leute, die C können:

In uClibc 0.9.30 gibt es folgenden Code:

Code: Alles auswählen

#define _ISbit(bit)   (1 << (bit))
Diese Zeile ist im SVN HEAD entfernt worden.
Dies hat Auswirkungen auf cdk/Patches/gcc-uclibc.diff

Code: Alles auswählen

_M_bit[__k] = static_cast<mask>(_ISbit(__k));
Ist diese Zeile ein adäquater Ersatz?

Code: Alles auswählen

_M_bit[__k] = static_cast<mask>(1 << __k);
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: uclibc patch

Beitrag von seife »

Ja, sollte gehen, da ja #define vom Präprozessor ausgewertet wird, und der ja nur Textersetzung macht.
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

rhabarber1848 hat geschrieben:Hier der Patch für Tuxbox: EDIT: Patch ist im CVS
Mit der aktuellen uClibc-Version ist dieser Patch in Ordnung, allerdings
möchte ich nicht, dass er im Moment ins CVS kommt. Im uClibc SVN
wurde u.a. usleep() in die Option UCLIBC_SUSV3_LEGACY aufgenommen,
leider steckt diese Funktion in allerlei Programmen (u.a. busybox, kbd,
zapit) drin und der Ersatz, afaics mit nanosleep(), scheint nicht ganz
trivial zu sein.
Zuletzt geändert von rhabarber1848 am Mittwoch 11. März 2009, 21:44, insgesamt 1-mal geändert.