uclibc patch

Kreuzuebersetzer, Diskussion über Änderungen im Tuxbox-CDK und Tuxbox-CVS
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Re: uclibc patch

Beitrag von Houdini »

danke für das uclibc update - läuft auch bei mir.

zu den segfaults:
Sieht so aus als ob da noch was im threading klemmt

Code: Alles auswählen

Core was generated by `neutrino'.                                                                   
Program terminated with signal 11, Segmentation fault.                                              
[New process 242]                                                                                   
#0  0x30460264 in pthread_rwlock_timedwrlock () from /lib/libpthread.so.0                           
(gdb) bt                                                                                            
#0  0x30460264 in pthread_rwlock_timedwrlock () from /lib/libpthread.so.0                           
#1  0x3045d1e8 in _L_unlock_1247 () from /lib/libpthread.so.0                                       
Backtrace stopped: previous frame inner to this frame (corrupt stack?)                              
(gdb) quit                                                                                          
harald@houdini:~/tuxbox-cvs/dbox2/cdkroot$ /home/harald/tuxbox-cvs/dbox2/cdk/bin/powerpc-linux-gnu-gdb /home/harald/tuxbox-cvs/dbox2/cdkroot/bin/timerd core.266                                      
GNU gdb 6.8                                                                                       
Copyright (C) 2008 Free Software Foundation, Inc.                                                 
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>                     
This is free software: you are free to change and redistribute it.                                
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"                        
and "show warranty" for details.                                                                  
This GDB was configured as "--host=i686-pc-linux-gnu --target=powerpc-linux-gnu"...               

warning: .dynamic section for "/lib/libpthread.so.0" is not at the expected address (wrong library or version mismatch?)                                                                                
Reading symbols from /home/harald/tuxbox-cvs/dbox2/cdkroot
...
Core was generated by `timerd -d'.                                                                  
Program terminated with signal 11, Segmentation fault.                                              
[New process 266]                                                                                   
#0  0x30090264 in pthread_rwlock_timedwrlock () from /lib/libpthread.so.0                           
(gdb) bt                                                                                            
#0  0x30090264 in pthread_rwlock_timedwrlock () from /lib/libpthread.so.0                           
#1  0x3008d1e8 in _L_unlock_1247 () from /lib/libpthread.so.0                                       
#2  0x1b6efcd6 in ?? ()                                                                             
#3  0x3008d1e8 in _L_unlock_1247 () from /lib/libpthread.so.0                                       
#4  0xb75dfcdc in ?? ()                                                                             
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Re: uclibc patch

Beitrag von Houdini »

ich denke mal das hier ist die Lösung zumindest für den timerd:
http://buildroot.uclibc.org/lists/uclib ... 08718.html
Für den Internetradio segfault (den hab ich auch) muss ich mal suchen wo das da benutzt wird

Damit startet timerd:

Code: Alles auswählen

RCS file: /cvs/tuxbox/apps/tuxbox/neutrino/daemons/timerd/timermanager.cpp,v
retrieving revision 1.86
diff -b -B -u -r1.86 timermanager.cpp
--- a/timermanager.cpp	4 Mar 2006 09:51:47 -0000	1.86
+++ b/timermanager.cpp	28 Sep 2008 19:49:33 -0000
@@ -96,7 +96,9 @@
 				dprintf("waiting for time to be set\n");
 				wait.tv_sec = time(NULL) + 5 ;
 				wait.tv_nsec = 0;
+				pthread_mutex_lock(&dummy_mutex);
 				pthread_cond_timedwait(&dummy_cond, &dummy_mutex, &wait);
+				pthread_mutex_unlock(&dummy_mutex);
 			}
 		}
 		else
@@ -186,7 +188,10 @@
 
 			wait.tv_sec = (((time(NULL) / sleeptime) * sleeptime) + sleeptime);
 			wait.tv_nsec = 0;
+
+			pthread_mutex_lock(&dummy_mutex);
 			pthread_cond_timedwait(&dummy_cond, &dummy_mutex, &wait);
+			pthread_mutex_unlock(&dummy_mutex);
 		}
 	}
 	return 0;
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: uclibc patch

Beitrag von seife »

Klingt logisch, steht ja auch so in der doku:

Code: Alles auswählen

DESCRIPTION
       The pthread_cond_timedwait() and pthread_cond_wait() functions shall
       block on a condition variable. They shall be called with mutex locked by
       the calling thread or undefined behavior results.
Von segfault steht dort zwar nix, aber auch das ist "undefined" :)
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

rhabarber1848 hat geschrieben:- uclibc-nobinutils.diff (eigentlicher uClibc-Patch ohne kbd und binutils, aktualisiert für Kernel 2.6 und timerd)
Patch nochmals aktualisiert, Kompilieren von yadd-neutrino mit uClibc und Kernel 2.6 läuft
erstmals komplett durch. timerd-Patch ist ebenfalls enthalten.
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Re: uclibc patch

Beitrag von Houdini »

@seife
im sectionsd sind auch noch so ein paar Konstrukte wo ich nicht weiss ob da der mutex vorher gelockt wird (beim Warten dass die Zeit gesetzt ist)
amiga23
Einsteiger
Einsteiger
Beiträge: 238
Registriert: Sonntag 14. November 2004, 23:44

Re: uclibc patch

Beitrag von amiga23 »

Bekomme jetzt diesen Fehler mit den aktuellen patches und kernel 2.6:

Code: Alles auswählen

make[5]: Entering directory `/media/disk/tuxbox-uclibc-new-2.6/tuxbox-cvs/apps/tuxbox/neutrino/src/gui'
powerpc-linux-gnu-g++ -DHAVE_CONFIG_H -I. -I../.. -I../../daemons -I../../src -I/media/disk/tuxbox-uclibc-new-2.6/dbox2/cdkroot/include/tuxbox   -I/media/disk/tuxbox-uclibc-new-2.6/dbox2/cdkroot/include/freetype2 -I/media/disk/tuxbox-uclibc-new-2.6/dbox2/cdkroot/include/tuxbox -I/media/disk/tuxbox-uclibc-new-2.6/dbox2/cdkroot/include/tuxbox   -I/media/disk/tuxbox-uclibc-new-2.6/dbox2/cdkroot/include/tuxbox/mpegtools   -I/media/disk/tuxbox-uclibc-new-2.6/dbox2/cdkroot/include -I/media/disk/tuxbox-uclibc-new-2.6/tuxbox-cvs/driver/include -I../../lib   -I/media/disk/tuxbox-uclibc-new-2.6/dbox2/cdkroot/include -I/media/disk/tuxbox-uclibc-new-2.6/tuxbox-cvs/driver/include  -Wall -pipe -Os -MT alphasetup.o -MD -MP -MF .deps/alphasetup.Tpo -c -o alphasetup.o alphasetup.cpp
In file included from alphasetup.cpp:56:
/media/disk/tuxbox-uclibc-new-2.6/tuxbox-cvs/driver/include/dbox/fb.h:13: error: conflicting declaration 'typedef struct fb_copyarea fb_copyarea'
/media/disk/tuxbox-uclibc-new-2.6/dbox2/cdk/lib/gcc/powerpc-tuxbox-linux-uclibc/3.4.6/../../../../powerpc-tuxbox-linux-uclibc/include/linux/fb.h:323: error: 'struct fb_copyarea' has a previous declaration as `struct fb_copyarea'
make[5]: *** [alphasetup.o] Fehler 1
make[5]: Leaving directory `/media/disk/tuxbox-uclibc-new-2.6/tuxbox-cvs/apps/tuxbox/neutrino/src/gui'
make[4]: *** [all-recursive] Fehler 1
make[4]: Leaving directory `/media/disk/tuxbox-uclibc-new-2.6/tuxbox-cvs/apps/tuxbox/neutrino/src/gui'
make[3]: *** [all-recursive] Fehler 1
make[3]: Leaving directory `/media/disk/tuxbox-uclibc-new-2.6/tuxbox-cvs/apps/tuxbox/neutrino/src'
make[2]: *** [all-recursive] Fehler 1
make[2]: Leaving directory `/media/disk/tuxbox-uclibc-new-2.6/tuxbox-cvs/apps/tuxbox/neutrino'
make[1]: *** [all] Fehler 2
make[1]: Leaving directory `/media/disk/tuxbox-uclibc-new-2.6/tuxbox-cvs/apps/tuxbox/neutrino'
make: *** [/media/disk/tuxbox-uclibc-new-2.6/dbox2/cdkflash/root-neutrino] Fehler 2
EDIT: also die patches habe ich zu folgender Zeit runtergeladen:

28. Sep 22:11 binutils-2.17-uclibc.diff
28. Sep 22:11 rules-make-uclibc.diff
28. Sep 22:11 uclibc-nobinutils.diff
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Re: uclibc patch

Beitrag von Houdini »

So, hier die "Lösung" zum Internetradioproblem.
Es gibt scheinbar jetzt das Problem das die sw bei einem pthread_mutex_unlock() auf ein nicht gelocktes mutex abranzt.

"If a thread attempts to unlock a mutex that it has not locked or a mutex which is unlocked, undefined behavior results."

Hier mal bruteforcemässig ein möglicher fix:

Code: Alles auswählen

RCS file: /cvs/tuxbox/apps/tuxbox/neutrino/src/driver/netfile.cpp,v
retrieving revision 1.36
diff -b -B -u -r1.36 netfile.cpp
--- a/netfile.cpp	1 Aug 2008 20:59:35 -0000	1.36
+++ b/netfile.cpp	28 Sep 2008 21:10:18 -0000
@@ -889,7 +888,7 @@
 
 							/* but writeable. */
 							dprintf(stderr, "f_open: unlocking write direction\n");
-							pthread_mutex_unlock( &cache[i].writeable );
+//							pthread_mutex_unlock( &cache[i].writeable );
 						}
 
 						/* send the file request and check it'S revurn value */
@@ -1118,8 +1117,11 @@
 		cache[i].closed = 1;		/* indicate that the cache is closed */
 
 		/* remove the cache looks */
+		pthread_mutex_trylock( &cache[i].writeable );
 		pthread_mutex_unlock( &cache[i].writeable );
+		pthread_mutex_trylock( &cache[i].readable );
 		pthread_mutex_unlock( &cache[i].readable );
+		pthread_mutex_trylock( &cache[i].cache_lock );
 		pthread_mutex_unlock( &cache[i].cache_lock );
 
 		/* wait for the fill thread to finish */
@@ -1388,18 +1389,23 @@
 
 //	dprintf(stderr, "push: %d/%d bytes written [filled: %d of %d], stream: %x\n", amt[0] + amt[1], rval, cache[i].filled, CACHESIZE, fd);
 
+				pthread_mutex_trylock( &cache[i].cache_lock );
 				pthread_mutex_unlock( &cache[i].cache_lock );
 
 				/* unlock the cache for read access, if it */
 				/* contains some data */
-				if(cache[i].filled)
+				if(cache[i].filled){
+					pthread_mutex_trylock( &cache[i].readable );
 					pthread_mutex_unlock( &cache[i].readable );
 			}
+			}
 
 			/* if there is still space in the cache, unlock */
 			/* it again for further writing by anyone */
-			if(cache[i].csize - cache[i].filled)
+			if(cache[i].csize - cache[i].filled){
+				pthread_mutex_trylock( & cache[i].writeable );
 				pthread_mutex_unlock( & cache[i].writeable );
+			}
 			else
 				dprintf(stderr, "push: buffer overrun; cache full - leaving cache locked\n");
 
@@ -1497,18 +1503,23 @@
 					break;//len = rval;
 
 				/* allow write access again */
+				pthread_mutex_trylock( &cache[i].cache_lock );
 				pthread_mutex_unlock( &cache[i].cache_lock );
 
 				/* unlock the cache for write access, if it */
 				/* has some free space */
-				if(cache[i].csize - cache[i].filled)
+				if(cache[i].csize - cache[i].filled){
+					pthread_mutex_trylock( &cache[i].writeable );
 					pthread_mutex_unlock( &cache[i].writeable );
 			}
+			}
 
 		/* if there is still data in the cache, unlock */
 		/* it again for further reading by anyone */
-		if(cache[i].filled)
+		if(cache[i].filled){
+			pthread_mutex_trylock( & cache[i].readable );
 			pthread_mutex_unlock( & cache[i].readable );
+		}
 		else
 			dprintf(stderr, "pop: buffer underrun; cache empty - leaving cache locked\n");
 
@@ -1580,6 +1591,8 @@
 
 	/* close the cache if the stream disrupted */
 	cache->closed = 1;
+	pthread_mutex_trylock( &cache->writeable );
+	pthread_mutex_trylock( &cache->readable );
 	pthread_mutex_unlock( &cache->writeable );
 	pthread_mutex_unlock( &cache->readable );
 
amiga23
Einsteiger
Einsteiger
Beiträge: 238
Registriert: Sonntag 14. November 2004, 23:44

Re: uclibc patch

Beitrag von amiga23 »

sorry, ich habe keine Ahnung wie das mit diff und patch funktioniert.
Habe houdinis patch in eine datei kopiert und versucht netfile.cpp zu patchen.
Bekomme folgenden Fehler:

Code: Alles auswählen

amiga@thinkpad /media/disk/tuxbox-uclibc-new-2.6/tuxbox-cvs/apps/tuxbox/neutrino/src/driver $ patch -p1 </media/disk/tuxbox/TKS/inetradio.patch 
patching file netfile.cpp
Hunk #1 FAILED at 888.
Hunk #2 FAILED at 1117.
patch: **** malformed patch at line 29: //   dprintf(stderr, "push: %d/%d bytes written [filled: %d of %d], stream: %x\n", amt[0] + amt[1], 

amiga@thinkpad /media/disk/tuxbox-uclibc-new-2.6/tuxbox-cvs/apps/tuxbox/neutrino/src/driver $ 
Houdini
Developer
Beiträge: 2183
Registriert: Mittwoch 10. Dezember 2003, 07:59

Re: uclibc patch

Beitrag von Houdini »

amiga23
Einsteiger
Einsteiger
Beiträge: 238
Registriert: Sonntag 14. November 2004, 23:44

Re: uclibc patch

Beitrag von amiga23 »

cool, danke Dir, funktioniert jetzt.
In ~35 Minuten kann ich es testen und dann kann ich mich morgen wieder von meiner DBox wecken lassen :-)

Script für 2.4er kernel mit funktionierendem timerd und internetradio:

Code: Alles auswählen

rm -Rf $HOME/.ccache/*

# You only need to change these three paths ###############
export type=uclibc-new-2.4
export location=/media/disk/tuxbox-$type
export archivedir=/media/disk/tuxbox/Archive
###########################################################

export cvspatchdir=$location/cvspatches
export cvsdir=$location/tuxbox-cvs
export cdkdir=$cvsdir/cdk
export distridir=$location/dbox2


mkdir $location || exit
mkdir $cvsdir || exit
mkdir $cvspatchdir || exit

cd $cvsdir || exit
export CVS_RSH=ssh
BUILDDIR=$PWD
CVS=:ext:anoncvs@cvs.tuxbox.org:/cvs/tuxbox
cvs -qz9 -d $CVS co -f -r newmake -P . || exit

# kbd.diff - already checked in
#wget -nv -O kbd.diff "http://tuxbox-upload.wittnet.de/index.php?action=downloadfile&filename=kbd.diff&directory=Diffs" || exit
#patch -p1 <$cvspatchdir/kbd.diff || exit

# binutils-2.17-uclibc.diff - basiert auf Patch von seife
wget -nv -O $cvspatchdir/binutils-2.17-uclibc.diff "http://tuxbox-upload.wittnet.de/index.php?action=downloadfile&filename=binutils-2.17-uclibc.diff&directory=Diffs" || exit
patch -p1 <$cvspatchdir/binutils-2.17-uclibc.diff || exit

# uclibc-nobinutils.diff - eigentlicher uClibc-Patch ohne kbd und binutils
wget -nv -O $cvspatchdir/uclibc-nobinutils.diff "http://tuxbox-upload.wittnet.de/index.php?action=downloadfile&filename=uclibc-nobinutils.diff&directory=Diffs" || exit
patch -p1 <$cvspatchdir/uclibc-nobinutils.diff || exit

# rules-make-uclibc.diff löst Kompilierprobleme von amiga23
wget -nv -O $cvspatchdir/rules-make-uclibc.diff "http://tuxbox-upload.wittnet.de/index.php?action=downloadfile&filename=rules-make-uclibc.diff&directory=Diffs" || exit
patch -p1 <$cvspatchdir/rules-make-uclibc.diff || exit

# netfile-uclibc.patch
wget -nv -O $cvspatchdir/netfile-uclibc.patch "http://home.arcor.de/houdini/dbox/uclibc/netfile-uclibc.patch" || exit
cd $cvsdir/apps/tuxbox/neutrino/src/driver || exit
patch -p1 <$cvspatchdir/netfile-uclibc.patch || exit

cd $cdkdir || exit
# No need to download the archives again and again
ln -s $archivedir || exit

./autogen.sh || exit
./configure --enable-german-keymaps \
            --enable-uclibc \
            --enable-maintainer-mode \
            --prefix=$distridir \
            --enable-flashrules \
            --enable-cdkVcInfo \
            --disable-ext3 \
            --with-checkImage=rename \
            --with-cvsdir=$cvsdir \
            --disable-ccache || exit

time make flash-neutrino-squashfs-all
make flash-tuxcal
make flash-neutrino-squashfs-all
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: uclibc patch

Beitrag von seife »

Houdini hat geschrieben:@seife
im sectionsd sind auch noch so ein paar Konstrukte wo ich nicht weiss ob da der mutex vorher gelockt wird (beim Warten dass die Zeit gesetzt ist)

Code: Alles auswählen

inline bool waitForTimeset(void)
{
        pthread_mutex_lock(&timeIsSetMutex);
        while(!timeset)
                pthread_cond_wait(&timeIsSetCond, &timeIsSetMutex);
        pthread_mutex_unlock(&timeIsSetMutex);
        writeLockMessaging();
        messaging_last_requested = time(NULL);
        unlockMessaging();
        return true;
}
Alles grün IMVHO.
Wo ich etwas Zweifel habe ist das:

Code: Alles auswählen

                                if (auto_scanning) {
                                        pthread_mutex_unlock( &dmxNIT.start_stop_mutex );
#ifdef PAUSE_EQUALS_STOP
                                        dmxNIT.real_unpause();
#endif
                                        dmxNIT.change( 0 );
                                }
Wenn euch also sectionsd um die Ohren fliegt, macht mal das _unlock weg (gibts nochmal mit dmxSDT).
amiga23
Einsteiger
Einsteiger
Beiträge: 238
Registriert: Sonntag 14. November 2004, 23:44

Re: uclibc patch

Beitrag von amiga23 »

YEAH, timerd und inetradio gehen wieder :-) Vielen Dank!
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

Hier der aktuelle uClibc-Patch: EDIT: Der Patch ist nun in zwei Dateien geteilt und hier zu finden:
http://forum.tuxbox-cvs.sourceforge.net ... 63#p361263
http://forum.tuxbox-cvs.sourceforge.net ... 65#p361265

Die Änderungen vom 09.10.2008 sind bereits im CVS.

Changelog:
- (12.11.2008): Patch basiert auf uClibc 0.9.30, Enigma kompiliert und läuft mit kleinen Problemen
- (09.10.2008): wegen veralteter ./configure oder unvollständiger libjpeg.la.in bauten libjpeg, freetype, curl, libdvbpsi, expat, libffi, libfribidi, libxml2, lirc, SDL, libmad und libid3tag keine dynamischen Libraries, deren Funktionen wurden statisch gelinkt, z.B. in Neutrino. Dadurch wurde das Image ca. 500kb größer, Problem behoben
- (08.10.2008): C99-Unterstützung wieder aktiviert für Pulseaudio
- (08.10.2008): Kompilierfehler in sambaserver behoben
- (08.10.2008): Kompilierfehler in nfs-utils behoben (getgrouplist existiert nicht in uClibc, Backport von getrpcbynumber_r (1, 2) nach uClibc 0.29.8.3)
- (08.10.2008): ld-uClibc-0.9.28.so und ld-uClibc.so.0 sind nicht mehr doppelt im Flashimage enthalten
- (08.10.2008): ./configure --enable-xfs --enable-uclibc bricht mit Fehlermeldung ab, da nicht kompilierbar
- (05.10.2008): ./configure --enable-flac --enable-uclibc bricht mit Fehlermeldung ab, da FLAC zu einer Endlosschleife in mklibs.py führt
- (05.10.2008): uClibc .config: DO_C99_MATH testweise deaktiviert (libm.so wird dadurch 43kb kleiner)
- (03.10.2008): Update für aktuelles CVS, $gnu_target entfernt da veraltete config.[sub|guess] nun aktualisiert werden
- (03.10.2008): aktuelle Version von netfile-uclibc.patch eingebaut
- (03.10.2008): Kompilierproblem in e2fsprogs behoben
- (03.10.2008): Linkproblem in lcdmenu behoben, tritt scheinbar nur mit uClibc auf
- (01.10.2008): Einige Patches für uClibc-0.9.28.3 vom OpenWRT-Projekt hinzugefügt:
120-more_standard_math.patch
150-portability.patch
300-let-optimized-stringops-override-default-ones.patch
301-fix-getrusage-argument-type.patch
302-fix-__libc_fcntl64-varargs-prototype.patch
303-fix-broken-__libc_open-declaration.patch
- (01.10.2008): cdk/Patches/uclibc-0.9.11.diff entfernt, überflüssig
- (30.09.2008): strace aus dem Patch entfernt, ist nun Teil von [url=http://forum.tuxbox-cvs.sourceforge.net/forum
/viewtopic.php?p=360980#p360980]rules-make.diff[/url]
- (30.09.2008): speichere uClibc-locale-030818.tgz in cdk/Archive für spätere Wiederverwendung
- angepasst ans aktuelle CVS, da binutils-uclibc und rules-make-minimum committed wurden (@seife: Danke!)
- gcc-g++.diff entfernt, da kein binutils-Update stattfinden wird
- netfile-uclibc.patch integriert, behebt Internetradio-Absturz
- timerd-Patch integriert
- GCC/configure --disable-__cxa_atexit nur bei uClibc, somit keine Änderung bei glibc
- cdk/make/linuxkernel.mk, target driver: if KERNEL26-Bedingung entfernt, da beide Codefragmente identisch

Kompletter Funktionsumfang:
- dieser Patch basiert auf dem uClibc-Patch von zaphot
- neue ./configure-Option --enable-uclibc, kompiliert Tuxbox mit uClibc anstatt glibc
- busybox - CONFIG_FEATURE_SHADOWPASSWDS im yadd deaktiviert wg. Kompilierproblemen mit uClibc, (12.11.2008): rückgängig gemacht, uClibc 0.9.30 hat shadow password-Support
- pthread_mutex-Patches von Houdini für timerd und Internetradio

To-Do (kopiert von hier) (aktualisiert 03.10.2008):
- mklibs.py soll auch uClibc.so* verkleinern in einer späteren Patchversion, jetzt nicht unbedingt nötig
- uClibc 0.9.30rc1 (23.09.08 veröffentlicht) in einer späteren Patchversion, uClibc 0.9.28.3 funktioniert, neuere uClibc-Versionen habe ich angetestet und viele Probleme festgestellt - (12.11.2008): erledigt, uClibc 0.9.30 wird genutzt
- Enigma (posix_fadvise64 fehlt in uClibc) (Patch?) erledigt durch uClibc 0.9.30 und GNU Gettext
- ist UCLIBC_HAS_FOPEN_LARGEFILE_MODE und UCLIBC_HAS_GETTEXT_AWARENESS in uClibc .config nötig? Hatte es aktiviert zu Debugzwecken. (09.10.2008: erledigt: Squashfs-Image wird bei Aktivierung nicht größer, Inhalt nur um 8kb, die Optionen bleiben drin) - (12.11.2008): UCLIBC_HAS_GETTEXT_AWARENESS deaktiviert, Enigma läuft nur mit GNU Gettext
- xfsprogs kompiliert nicht: "FATAL ERROR: could not find a valid <aio.h> header."
- Endlosschleife in mklibs.py wenn --enable-flac aktiviert ist
Zuletzt geändert von rhabarber1848 am Sonntag 7. Dezember 2008, 00:34, insgesamt 22-mal geändert.
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: uclibc patch

Beitrag von seife »

Den binutils diff habe ich committed, der rules-make-uclibc.diff macht offensichtlich viel mehr als nur Kompilierprobleme zu fixen, mit uclibc.diff warte ich noch auf Testergebnisse (Ich selbst kann unter der Woche nicht testen).

Enigma: fadvise64 ist nicht so wichtig, im Kernel 2.4 gibts das eh nicht ;), das ist aber bisher auch keinem aufgefallen.

Die pthread_mutex-Sachen sind klare Bugfixes, auch mit glibc, es ist wohl bisher nur noch niemand aufgefallen, dass da evtl. was schief geht. Allerdings ist der Internetradio-"Fix" wirklich die Holzhammermethode, insofern würde ich da vorziehen, wenn sich jemand mal das Locking in netfile.c anschaut. Was ich so auf den ersten Blick gesehen habe, war IMVHO nicht korrekt.
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

seife hat geschrieben:der rules-make-uclibc.diff macht offensichtlich viel mehr als nur Kompilierprobleme zu fixen
Stimmt, ich habe hier eine reduzierte Version hochgeladen, die IMHO CVS-tauglich ist: EDIT: Patch ist im CVS

Inhalt:
- libdirectfb/configure: --disable-vnc, behebt Probleme, wenn vnc-dev lokal installiert ist
- libpng: erstellt $(hostprefix)/bin/libpng-config, analog zum target libfreetype, damit wird eine evtl. vorhandene /usr/bin/libpng-config ignoriert
- aktualisiere libdvb von Version 0.5.5 auf 0.5.5.1, Patch libdvb-0.5.5/include/DVB.hh ist upstream enthalten
- neue URL für gnuboy
- neue URL für libungif
Zuletzt geändert von rhabarber1848 am Montag 29. September 2008, 12:32, insgesamt 1-mal geändert.
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: uclibc patch

Beitrag von seife »

rules-make-minimum.diff ist im CVS.
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

seife hat geschrieben:rules-make-minimum.diff ist im CVS.
uclibc.diff ist ans aktuelle CVS angepasst: http://forum.tuxbox-cvs.sourceforge.net ... 37#p360937
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

Testbericht, Zwischenstand:

getestet: yadd-neutrino, Kernel 2.4, glibc + uclibc
timerd und Internetradio funktionieren in beiden yadd-Varianten
keine weiteren Auffälligkeiten
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

seife hat geschrieben:Enigma: fadvise64 ist nicht so wichtig, im Kernel 2.4 gibts das eh nicht ;), das ist aber bisher auch keinem aufgefallen.
Enigma funktioniert mit glibc/Kernel 2.4 + 2.6.

Beim Kompilieren mit uClibc (Kernel 2.4 + 2.6) kommt folgender Fehler:
record.cpp: In member function `int eDVBRecorder::flushBuffer()':
record.cpp:180: error: `posix_fadvise64' was not declared in this scope
record.cpp:180: warning: unused variable 'posix_fadvise64'
record.cpp: In member function `int eDVBRecorder::openFile(int)':
record.cpp:381: error: `posix_fadvise64' was not declared in this scope
record.cpp:381: warning: unused variable 'posix_fadvise64'
make[5]: *** [record.o] Fehler 1
make[5]: Leaving directory `/root/tuxbox/work_uclibc26/compile/apps/tuxbox/enigma/lib/dvb'
Auch bei zaphot hat der Enigma-build mit uClibc nicht funktioniert.
seife
Developer
Beiträge: 4189
Registriert: Sonntag 2. November 2003, 12:36

Re: uclibc patch

Beitrag von seife »

Das ist klar. Da fadvise64 im 2.4er aber - wenn ich nicht total falsch liege - auch ein noop ist, könnte man das einfahc aus-#ifdef'en. Also wenn denn jemand enigma mit uclibc bauen wollte.
Ich vermute stark, dass die Lokalisierung auch Probleme hätte.
amiga23
Einsteiger
Einsteiger
Beiträge: 238
Registriert: Sonntag 14. November 2004, 23:44

Re: uclibc patch

Beitrag von amiga23 »

1. habe jetzt wieder das libtoolize Problem bei libpng.
Habe nur den uclibc.diff gepatched, alle anderen sind ja eingecheckt oder?
Ich bin übrigens "Update-Fetischist" ;-) , daher hat mir der komplette rules-make.diff besser gefallen

2. Noch eine Frage. Wenn ich einen 2.4 kernel bauen will, kann ich dann trotzdem den 2.6er driver branch auschecken? (Den hatte ich übrigens bei meinem letzten 2.6er versuch vergessen). Reicht es dann --disable-kernel26 zu setzen?
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

amiga23 hat geschrieben:1. habe jetzt wieder das libtoolize Problem bei libpng.
Bitte die komplette Fehlermeldung posten.
amiga23 hat geschrieben:Habe nur den uclibc.diff gepatched, alle anderen sind ja eingecheckt oder?
uclibc-Support für binutils und libpng-config/--disable-vnc sind im CVS
amiga23 hat geschrieben:Wenn ich einen 2.4 kernel bauen will, kann ich dann trotzdem den 2.6er driver branch auschecken?
Nein
amiga23
Einsteiger
Einsteiger
Beiträge: 238
Registriert: Sonntag 14. November 2004, 23:44

Re: uclibc patch

Beitrag von amiga23 »

Hier die Fehlermeldung:

Code: Alles auswählen

checking for correct ltmain.sh version... no
configure: error:

*** [Gentoo] sanity check failed! ***
*** libtool.m4 and ltmain.sh have a version mismatch! ***
*** (libtool.m4 = 1.5.26, ltmain.sh = 1.5.22) ***

Please run:

  libtoolize --copy --force

if appropriate, please contact the maintainer of this
package (or your distribution) for help.

make[1]: *** [.deps/libpng] Fehler 1
make[1]: Leaving directory `/media/disk/tuxbox-uclibc-2.4-20080929/tuxbox-cvs/cdk'
make: *** [/media/disk/tuxbox-uclibc-2.4-20080929/dbox2/cdkflash/root] Fehler 2
rhabarber1848
CDK-Experte
Beiträge: 4335
Registriert: Donnerstag 3. April 2008, 14:05

Re: uclibc patch

Beitrag von rhabarber1848 »

amiga23 hat geschrieben:Hier die Fehlermeldung:
Könntest Du noch ein paar Zeilen mehr posten? Ich kann nicht sehen,
was vorher passierte. Eine solche Fehlermeldung habe ich allerdings
bei mir nicht, obwohl ich heute sehr viel kompiliert habe.
amiga23
Einsteiger
Einsteiger
Beiträge: 238
Registriert: Sonntag 14. November 2004, 23:44

Re: uclibc patch

Beitrag von amiga23 »

Du hattest es schonmal für mich gefixed, oder es ging nur mit der neueren libpng version.

Wenn ich nach autogen.sh
libtoolize --copy --force
einbaue geht es.

Code: Alles auswählen

( rm -rf libpng-1.2.16 || /bin/true ) && bunzip2 -cd Archive/libpng-1.2.16.tar.bz2 | TAPE=- tar -x
cd libpng-1.2.16 && \
		./autogen.sh && \
		AR=powerpc-linux-gnu-ar AS=powerpc-linux-gnu-as CC=powerpc-linux-gnu-gcc CXX=powerpc-linux-gnu-g++ NM=powerpc-linux-gnu-nm RANLIB=powerpc-linux-gnu-ranlib CFLAGS="-pipe -Os" CXXFLAGS="-pipe -Os" LDFLAGS="-Wl,-O1" PKG_CONFIG_PATH=/media/disk/tuxbox-uclibc-2.4-20080929/dbox2/cdkroot/lib/pkgconfig CFLAGS="-pipe -Os -fPIC" \
		./configure \
			--build=x86_64-unknown-linux-gnu \
			--host=powerpc-linux-gnu \
			--prefix=/media/disk/tuxbox-uclibc-2.4-20080929/dbox2/cdkroot && \
		make all AR=powerpc-linux-gnu-ar AS=powerpc-linux-gnu-as CC=powerpc-linux-gnu-gcc CXX=powerpc-linux-gnu-g++ NM=powerpc-linux-gnu-nm RANLIB=powerpc-linux-gnu-ranlib CFLAGS="-pipe -Os" CXXFLAGS="-pipe -Os" LDFLAGS="-Wl,-O1" PKG_CONFIG_PATH=/media/disk/tuxbox-uclibc-2.4-20080929/dbox2/cdkroot/lib/pkgconfig CFLAGS="-pipe -Os -fPIC" && \
		make install && powerpc-linux-gnu-ar cru /media/disk/tuxbox-uclibc-2.4-20080929/dbox2/cdkroot/lib/libpng12_pic.a *.o && \
		rm -f /media/disk/tuxbox-uclibc-2.4-20080929/dbox2/cdk/bin/libpng-config && \
		ln -s /media/disk/tuxbox-uclibc-2.4-20080929/dbox2/cdkroot/bin/libpng-config /media/disk/tuxbox-uclibc-2.4-20080929/dbox2/cdk/bin/libpng-config
running libtoolize
running aclocal
running autoheader [ignore the warnings]
running automake
Makefile.am: installing `./compile'
running autoconf
autogen complete
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking for powerpc-linux-gnu-strip... powerpc-linux-gnu-strip
checking whether to enable maintainer-specific portions of Makefiles... no
checking for powerpc-linux-gnu-gcc... powerpc-linux-gnu-gcc
checking for C compiler default output file name... a.out
checking whether the C compiler works... yes
checking whether we are cross compiling... yes
checking for suffix of executables... 
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether powerpc-linux-gnu-gcc accepts -g... yes
checking for powerpc-linux-gnu-gcc option to accept ISO C89... none needed
checking for style of include used by make... GNU
checking dependency style of powerpc-linux-gnu-gcc... gcc3
checking for a sed that does not truncate output... /bin/sed
checking build system type... x86_64-unknown-linux-gnu
checking host system type... powerpc-unknown-linux-gnu
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for ld used by powerpc-linux-gnu-gcc... /media/disk/tuxbox-uclibc-2.4-20080929/dbox2/cdk/powerpc-tuxbox-linux-uclibc/bin/ld
checking if the linker (/media/disk/tuxbox-uclibc-2.4-20080929/dbox2/cdk/powerpc-tuxbox-linux-uclibc/bin/ld) is GNU ld... yes
checking how to run the C preprocessor... powerpc-linux-gnu-gcc -E
checking for powerpc-linux-gnu-sed... /bin/sed
checking for a BSD-compatible install... /usr/bin/install -c
checking whether ln -s works... yes
checking whether make sets $(MAKE)... (cached) yes
checking for /media/disk/tuxbox-uclibc-2.4-20080929/dbox2/cdk/powerpc-tuxbox-linux-uclibc/bin/ld option to reload object files... -r
checking for BSD-compatible nm... powerpc-linux-gnu-nm
checking how to recognize dependent libraries... pass_all
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking dlfcn.h usability... yes
checking dlfcn.h presence... yes
checking for dlfcn.h... yes
checking whether we are using the GNU C++ compiler... yes
checking whether powerpc-linux-gnu-g++ accepts -g... yes
checking dependency style of powerpc-linux-gnu-g++... gcc3
checking how to run the C++ preprocessor... powerpc-linux-gnu-g++ -E
checking for powerpc-linux-gnu-g77... no
checking for powerpc-linux-gnu-xlf... no
checking for powerpc-linux-gnu-f77... no
checking for powerpc-linux-gnu-frt... no
checking for powerpc-linux-gnu-pgf77... no
checking for powerpc-linux-gnu-cf77... no
checking for powerpc-linux-gnu-fort77... no
checking for powerpc-linux-gnu-fl32... no
checking for powerpc-linux-gnu-af77... no
checking for powerpc-linux-gnu-xlf90... no
checking for powerpc-linux-gnu-f90... no
checking for powerpc-linux-gnu-pgf90... no
checking for powerpc-linux-gnu-pghpf... no
checking for powerpc-linux-gnu-epcf90... no
checking for powerpc-linux-gnu-gfortran... no
checking for powerpc-linux-gnu-g95... no
checking for powerpc-linux-gnu-xlf95... no
checking for powerpc-linux-gnu-f95... no
checking for powerpc-linux-gnu-fort... no
checking for powerpc-linux-gnu-ifort... no
checking for powerpc-linux-gnu-ifc... no
checking for powerpc-linux-gnu-efc... no
checking for powerpc-linux-gnu-pgf95... no
checking for powerpc-linux-gnu-lf95... no
checking for powerpc-linux-gnu-ftn... no
checking for g77... no
checking for xlf... no
checking for f77... no
checking for frt... no
checking for pgf77... no
checking for cf77... no
checking for fort77... no
checking for fl32... no
checking for af77... no
checking for xlf90... no
checking for f90... no
checking for pgf90... no
checking for pghpf... no
checking for epcf90... no
checking for gfortran... gfortran
configure: WARNING: In the future, Autoconf will not detect cross-tools
whose name does not start with the host triplet.  If you think this
configuration is useful to you, please write to autoconf@gnu.org.
checking whether we are using the GNU Fortran 77 compiler... yes
checking whether gfortran accepts -g... yes
checking the maximum length of command line arguments... 98304
checking command to parse powerpc-linux-gnu-nm output from powerpc-linux-gnu-gcc object... ok
checking for objdir... .libs
checking for powerpc-linux-gnu-ar... powerpc-linux-gnu-ar
checking for powerpc-linux-gnu-ranlib... powerpc-linux-gnu-ranlib
checking for powerpc-linux-gnu-strip... (cached) powerpc-linux-gnu-strip
checking for correct ltmain.sh version... no
configure: error:

*** [Gentoo] sanity check failed! ***
*** libtool.m4 and ltmain.sh have a version mismatch! ***
*** (libtool.m4 = 1.5.26, ltmain.sh = 1.5.22) ***

Please run:

  libtoolize --copy --force

if appropriate, please contact the maintainer of this
package (or your distribution) for help.

make[1]: *** [.deps/libpng] Fehler 1
make[1]: Leaving directory `/media/disk/tuxbox-uclibc-2.4-20080929/tuxbox-cvs/cdk'
make: *** [/media/disk/tuxbox-uclibc-2.4-20080929/dbox2/cdkflash/root] Fehler 2

real	20m52.304s