Beiträge von zirias

    Ich bin dran ;)


    GCC 4.2 hat leider doch nicht, was ich brauche. Die aktuelle GNU Classpath Library hat allerdings
    gnu.java.awt.peer.headless.HeadlessToolkit, ich nehme stark an, dass es damit geht.


    Mit Google habe ich RPMs von gcc-java-dev gefunden, die das enthalten, also ist es offenbar möglich, diese aktuelle Classpath Library in die libgcj von GCC einzubauen. Das versuche ich gerade; leider kompiliert der Testrechner nicht gerade schnell :)


    Wer das Glück hat, dass seine Distribution eine libgcj ausliefert, die diese Klasse schon hat, kann es testen: Einfach ein -Dawt.toolkit=gnu.java.awt.peer.headless.HeadlessToolkit in das Kommando zum Linken. Kommt dann aber beim Startversuch diese Exception:

    Code
    Exception in thread "main" java.awt.AWTError: Cannot load AWT toolkit: gnu.java.awt.peer.headless.HeadlessToolkit

    dann ist die Klasse leider nicht vorhanden und man müsste im Zweifelsfall GCC selbst neu kompilieren wie ich es gerade versuche.


    Grüße, Felix

    Also meine Motivation für's "ausknobeln" war, projectx in einem schlanken LFS system ohne Java-VM zu installieren. Daraus wurde jetzt leider erstmal nichts, nachdem ich germerkt habe, dass es ohne GTK+ nicht läuft :(


    Eine Lösung scheint allerdings in Sicht: GCC 4.2 bietet offenbar ein headless AWT, ähnlich wie Sun. Ich bin gerade am runterladen und werde das HOWTO bei Erfolg entsprechend ergänzen :)


    Was Performance angeht: Native code sollte /immer/ schneller sein. Ab welcher Rechenleistung das wirklich spürbar wird weiß ich allerdings nicht.


    Danke für den interessanten Link!


    Grüße, Felix

    Neues HOWTO, 11.Oktober 2007


    Leider habe ich es nicht mehr geschafft, mit dem GCC-4.2 die .java-Files direkt zu compilieren, deshalb wird der Bytecode vom originalen Sun JDK erzeugt


    Build-Abhängigkeiten:


    Runtime-Abhängigkeiten:

    • libgcj
    • zlib1g
    • eventuell cairo, gtk, ...? (nicht direkt, aber über die libgcj -- noch zu testen auf einem LFS-System)


    Vorgehensweise:
    [list=1]
    [*]Compiler-Optimierungen wählen, z.B. für einen Athlon64
    (unbedingt auf den eigenen Prozessortyp anpassen!)


    Code
    export GCJFLAGS="-O3 -fomit-frame-pointer -pipe -march=k8"


    [*]ProjectX entpacken und build-script anpassen zum compilieren ohne GUI:


    Code
    unzip ProjectX_Source_0.90.3.01.zip
    cd ProjectX_Source_0.90.3.01
    sed -i -e's:sources.lst:noguisources.lst:' build.sh


    [*]Compilieren in Byte-Code:


    Code
    . ./build.sh


    [*]Libraries compilieren:


    Code
    cd lib
    gcj -c $GCJFLAGS -o jakarta-oro-2.0.8.o jakarta-oro-2.0.8.jar
    gcj -c $GCJFLAGS -Ijakarta-oro-2.0.8.jar -o commons-net-1.3.0.o \
            commons-net-1.3.0.jar
    cd ..


    [*]ProjectX compilieren und strippen:


    Code
    gcj $GCJFLAGS -fno-bounds-check -fno-store-check -fjni -encoding \
            "ISO-8859-1" --main=net.sourceforge.dvb.projectx.common.Start \
            -Dawt.toolkit=gnu.java.awt.peer.headless.HeadlessToolkit \
            -oprojectx -Ilib/commons-net-1.3.0.jar -Ilib/jakarta-oro-2.0.8.jar \
            ProjectX.jar lib/jakarta-oro-2.0.8.o lib/commons-net-1.3.0.o
    strip --strip-all projectx


    [/list=1]


    Hier noch ein bisher ungetesteter patch für das burn-plugin um die nativ compilierte Version von projectx zu verwenden:





    --- Ab hier folgt eine ALTE Version für GCC-4.1.x ---


    Hier mal eine Schritt für Schritt Anleitung, wie man sich projectx als optimierten native code compiliert.


    [edit] ACHTUNG: Leider habe ich gerade einen unschönen Effekt entdeckt: Das Binary ist abhängig von GTK+ und einem laufenden X-Server. Für den Headless-Einsatz ist das natürlich sehr hässlich :(



    Voraussetzungen:
    - ProjectX Source 0.90.4
    - GCC 4.1.x mit gcj und libgcj


    getestet auf Debian testing mit GCC 4.1.1 und auf einem LFS System mit GCC 4.1.2


    1. ProjectX entpacken und angehängten Patch einspielen

    Code
    unzip ProjectX_Source_eng_0.90.4.00.zip
    cd ProjectX_Source_0.90.4
    patch -Np1 -i ../ProjectX_0.90-gcc-build-fixes.1.diff

    Der Patch ergänzt ein paar explizite typecasts in einem source-file, die gcj unbedingt haben will.


    2. Optimierungen setzen (das hängt natürlich vom Prozessortyp ab). Ich habe folgendes gemacht:

    Code
    export GCJFLAGS="-g0 -O3 -fomit-frame-pointer -pipe -march=athlon-xp"


    3. Mitgelieferte libraries compilieren

    Code
    cd lib
    gcj -c $GCJFLAGS -o jakarta-oro-2.0.8.o jakarta-oro-2.0.8.jar
    gcj -c $GCJFLAGS -Ijakarta-oro-2.0.8.jar -o commons-net-1.3.0.o \
            commons-net-1.3.0.jar
    cd ..


    4. ProjectX selbst compilieren

    Code
    gcj -c $GCJFLAGS -fno-bounds-check -fno-store-check -fjni \
            -encoding "ISO-8859-1" -Ilib/commons-net-1.3.0.jar \
            -Ilib/jakarta-oro-2.0.8.jar -oprojectx.o @noguisources.lst

    Die Flags schalten Exceptions für Fehler im Umgang mit Arrays aus. Sollte ProjectX tatsächlich einen solchen Fehler haben ist die Folge undefiniertes Verhalten anstatt einer aussagekräftigen Exception. Wer will kann die Flags natürlich auch weglassen.


    5. Benötigte Resourcen

    Code
    gcj -c -o ac3.o --resource ac3.bin resources/ac3.bin
    gcj -c -o pjxresources_en.o --resource pjxresources_en.properties \
            resources/pjxresources_en.properties


    6. Linken

    Code
    gcj $GCJFLAGS --main=net.sourceforge.dvb.projectx.common.Start -o projectx \
            projectx.o ac3.o pjxresources_en.o \
            lib/jakarta-oro-2.0.8.o lib/commons-net-1.3.0.o


    Nach dieser Prozedur hat man ein dynamisch gegen libgcj gelinktes ca. 2.5 MB großes binary im aktuellen Verzeichnis. Durch strippen lässt es sich auf ca. 1.7 MB verkleinern:

    Code
    strip --strip-all projectx


    Ich habe damit testweise eine VDR-Aufnahme mit einer Video-, einer AC3- und zwei mp2-Tonspuren demuxt, es hat anstandslos funktioniert :)


    Grüße, Felix


    PS: Eventuell lässt sich noch weiter optimieren indem man
    - die verwendeten Libraries im Quellcode besorgt und ohne Umweg über Bytecode direkt mit gcj compiliert
    - ProjectX in Teile zerlegt, die mit JNI compiliert werden müssen, und solche, für die man CNI verwenden kann

    Etwas "holprige" Art, ein dist-upgrade rückgängig zu machen, nur für den Fall, dass du von experimental weg willst:


    apt-get install `apt-show-versions | grep "/<neuedist>" | sed -e 's:/<neuedist>.*:/<altedist>'`


    mit z.B. <neuedist>=experimental und <altedist>=testing


    Erfordert allerdings durchaus gelegentliches Eingreifen, z.B. Deinstallation von Paketen, die es in <altedist> gar nicht gibt.


    Grüße, Felix

    Zitat

    Original von MAK

    Code
    # apt-get --help
    Optionen:
    -q  protokollierbare (logbare) Ausgabe - kein Fortschrittsindikator
    Dieses APT hat Super-Kuh-Kräfte.

    moo :D

    Zitat

    Wie verwende ich diese Option? Komm damit nicht klar.


    Das heißt nur - wie da auch steht - dass die fortschrittsanzeigen (normalerweise in %) weggelassen werden. Für die Fortschrittsanzeigen werden spezielle esc-sequenzen genutzt, die es erlauben, an eine stelle im Terminal zu schreiben, an die schon geschrieben wurde. In Text- (log-) files macht das keinen Sinn und führt wahrscheinlich nicht zu sinnvollen Ergebnissen.


    Kurz gesagt: WENN du die Ausgabe loggen willst ist es sinnvoll, diese Option zu verwenden.


    Grüße, Felix

    Zitat

    Original von Saxman2k
    Mein zweiter Ansatz ist jetzt einen aktuelleren Kernel (2.6.18) auszuprobieren. Ich hoffe mal, daß der mit dem 4.1er gcc compiliert wurde. Wie kann man das eventuell herausfinden?


    Sinnvoller finde ich es, die Kernel-Pakete selbst zu bauen. Das ist an sich nicht besonders schwierig, einfach mal "kernel-package" installieren und dort in die Dokumentation schauen.


    Wenn du genau wie original Debian vollständig modulare Kernel willst, zusätzlich initramfs-tools installieren und nicht vergessen, ramdisk support und initrd support fest einzukompilieren. "update-initramfs" erzeugt dann die nötige initramfs zum booten.


    Wenn sich an der Maschine voraussichtlich selten etwas ändert ist es wohl wesentlich einfacher, die zum booten nötigen Treiber (IDE-disk bzw SCSI-disk und alles was dazu gehört, ein konsolen-treiber und das filesystem der root-Partition) fest in den Kernel zu kompilieren.


    Grüße, Felix

    Also für NFS kann man das elegant mit dem kernel automounter lösen. Erst beim Zugriff auf den Mountpoint wird ein mount versucht, bei einer gewissen zeit der inaktivität wird der mount wieder gelöst.


    smb:// klingt mir nach kioslaves, also KDE-Kram. Das ist dann kein echter mount. Klar, dass Software, die nur das normale vfs kennt, das nicht nutzen kann. Man kann aber auch SMB bzw CIFS "richtig" mounten (wahrscheinlich auch über den automounter, habe das selbst noch nie probiert), siehe "smbmount"


    Grüße, Felix

    Ok .. hab meinen Onkel zu Rate gezogen, der glücklicherweise im Besitz eines Oszilloskops ist.


    Erste Erkenntnis: Es ist wohl ne 30V Z-Diode.
    Zweite Erkenntnis: Die Spannung sieht soweit man das optisch erkennen kann absolut sauber aus.


    Ein Versuch mit einem keramischen Kondensator hat dann auch nichts geändert :( also Diode tauschen? Ich werd das bald mal angehen und hoffe, es bringt was....


    Grüße, Felix

    Zitat

    Original von UFO
    Falls tatsächlich eine Diode lichtempfindlich sein sollte, ist ihr Gehäuse nicht lichtdicht.
    -> Austauschen!


    Hmm ist das so ganz logisch? Wenn es nur im Dunkeln funktionieren würde, wäre die Sache eher klar, finde ich...


    Achja, wie finde ich denn heraus, was das an dieser Stelle für eine Diode sein soll? Ich kenne mich mit sowas nicht wirklich aus, aber auf jeden Fall haben diese SMD Dioden schonmal keine Beschriftungen :(


    Grüße, Felix

    Also, ich habe mit Hilfe einer hellen LED ausfindig gemacht, welche Diode bestrahlt werden muss, damit der Empfang klappt:
    [Blockierte Grafik: http://www.akk.org/~zorg/DVB-C-diode.jpg]


    Da ich hier schon mehrere Threads zu 256-QAM Empfangsproblemen gesehen habe: Wäre nett wenn mal jemand mit entsprechenden Problemen testen könnte, ob sich seine Karte auch so verhält!


    Ob eine Anfrage bei Hauppauge etwas bringen könnte?


    Grüße, Felix

    Zitat

    Original von foobar42
    Ungetestet: Ich glaube, das nützt dir bei einer randvollen Platte gar nichts, weil keinerlei Schreiboperationen - und dazu gehören auch Löschvorgänge - mehr möglich sein dürften, aber ich lasse mich gern eines Besseren belehren.


    Gut. Ist nämlich phalsch ;) Löschen geht immer, solange das Gerät beschreibbar ist und das fs rw gemountet.


    Trotzdem ist es natürlich Quark, wenn das System derart gegen die Wand laufen kann. Also sollte man auf der Partition, die /var enthält, den reservierten Bereich aktiv lassen. Auf allen anderen Partitionen ist er in der Tat überflüssig.


    Grüße, Felix

    > Voodoo!


    Ja, sowas in der Art kam mir gestern auch in den Sinn :rolleyes:


    > Klappt das auch dann noch, wenn die Lampe an einer ganz anderen
    > Steckdose (möglichst weit weg) angeschlossen ist?


    Das kommt noch viel besser :o Eben bei Tageslicht getestet (Gehäuse offen): Guter Empfang. Gehäuse zu -> Alles voller Klötzchen. Taschenlampe durch offene Slotblenden auf die Karte richten -> Guter Empfang.


    Also so langsam wird die Idee, eine halbwegs helle LED in das fertige Gerät einzubauen, recht verlockend :)


    Ist übrigens wirklich nur 256-QAM betroffen. Die 64-QAM Sender kommen immer absolut störungsfrei rein.


    Grüße, Felix

    Ganz so einfach ist es leider nicht ;)


    An der Platine gezogen hab ich schon genug (die war auch schon in verschiedenen Computern). Dagegen spricht außerdem, dass die Lichteinstrahlung (bzw deren Fehlen) sofort wirkt. Die Kaltkethoden-Röhre erzeugt auch vergleichsweise wenig Wärme.


    Trotzdem vielen Dank für die Antwort!


    Grüße, Felix

    Hallo zusammen,


    Ich habe hier mit meiner FF DVB-C Karte einen sehr seltsamen Effekt (und schon sehr viel Zeit verplempert, den überhaupt zu finden):


    QAM-256 Kanäle konnten nie empfangen werden, BER im hohen 5-stelligen Bereich und Änderungen an PWM (linux-Treiber) hatten überhaupt keinen Effekt, AFC war immer gleich (ich glaube so um die -24 kHz).


    Jetzt habe ich entdeckt, dass der Empfang klappt, wenn ich die Karte mit einer Kaltkathoden-Röhre bestrahle. Hört sich verrückt an, aber es besteht absolut kein Zweifel!


    Ich werde natürlich bei nächster Gelegenheit andere Lichtquellen testen.



    Kennt jemand den Effekt? Irgendwelche Ideen, woran das liegt? Ich würde mit dieser Karte gerne einen VDR bauen, aber das Problem sollte vorher gelöst sein :/


    TIA, Felix

    Zitat

    Original von mithrandir
    Bei WLAN wird die Bruttodatenrate angegeben, es gibt allerdings einen erheblichen Overhead. Bei 802.11b (11 Mbit/s brutto) ist die Nettodatenrate etwa 5,5 Mbit/s.


    Ist mir bekannt, aber ich bezog mich auf 802.11g. Wahrscheinlich habe ich in der Tat einfach einen miserablen Access Point :(


    Naja wie auch immer: In einem solchen Fall kann "long peamble" die Dinge etwas verbessern.


    Grüße, Felix

    Zitat

    Original von tüddelkopp
    Sender mit hohen Bitraten wie z.B. ZDF, ARD, ORF, SF etc. werden nicht zuverlässig funktionieren. Sender wie RTL, Pro7 etc. hingegen schon.


    Die Erfahrung kann ich bestätigen, obwohl mich das ehrlich gesagt erstaunt. Bei einer großzügig geschätzten Überschlagsrechnung komme ich auf durchschnittlich unter 5 MBit/s, das sollte ein 802.11g Netz eigentlich problemlos transportieren können.


    Bei meinem (billigen und miserablen) D-Link AP musste ich übrigens "long preamble" einschalten, um überhaupt einen DVB Stream (mit dem xine-plugin + netzwerk patch) transportieren zu können. Offenbar gibt es so viele Übertragungsfehler, dass sich die längere Prüfsume auf physical layer rentiert :( Vielleicht hilft das ja anderen bei ihren Versuchen.


    Grüße, Felix