Wie geil!!!
Es funzt!
Der GCC 3.3.4 cross compiler brauch ein Patch, sonst kompiliert er selbst nicht. Die betroffene Datei befindet sich in ${OE_HOME}/build/tmp/work/gcc-cross-3.3.4-r2/gcc-3.3.4/gcc/f
Code:
<i>
</i>--- com.h.orig 2006-01-05 08:07:51.000000000 +0100
+++ com.h 2006-01-05 08:06:47.000000000 +0100
@@ -234,7 +234,7 @@
tree ffecom_get_invented_identifier (const char *pattern, ...)
ATTRIBUTE_PRINTF_1;
-ffeinfoKindtype ffecom_gfrt_basictype (ffecomGfrt ix);
+/* ffeinfoKindtype ffecom_gfrt_basictype (ffecomGfrt ix); */
ffeinfoKindtype ffecom_gfrt_kindtype (ffecomGfrt ix);
void ffecom_init_0 (void);
Das Patch kann eingespielt werden, wenn der Fehler auftritt (irgendwann beim erstellen der Toolchain.)
Tipp:
Lies unbedingt die Doku von OE, dann ist dir recht schnell klar wie der Hase läuft. Hab keine Furcht vor der Fülle an neuen Infos! Als ich mein erstes Posting verfasst habe, wusste ich nur dass es sowas wie OE gibt, nicht aber was es kann und was mich erwarten würde. Jetzt einige Stunden später habe ich eine richtige (installierbare) glibc bauen lassen und bekomme sogar JamVM mit Classpath zum laufen.
Ganz dringend ans Herz legen möchte ich dir im Nachahmungsfall das USB Gadget Serial Modul, denn mit sterm macht das alles nicht son Spass. Minicom regelt da schon eher.
Wenn du deine Toolchain und das Programm deiner Wahl gebaut hast, kannst du hiermit weitermachen. Es geht im Prinzip darum, dass nicht-OpenEmbedded-kennende Linux auf dem GP2X mit ipkg, einer Paketverwaltung wie apt-get oder emerge, aufzumotzen.
1) Das für ARM-kompilierte ipkg_0.99.154-r2_arm.ipk und libipkg0_0.99.154-r2_arm.ipk auf deinem Rechner auspacken. Dafür das Programm ipkg-unbuild benutzen. Wenn es nicht in deiner Distri enthalten ist, baue mit bitbake das ipk-native Paket und lege dir dessen Binaries in den Pfad.
2) Kopiere das ausgepackte ipkg und libipk0 auf die SD card.
3) Kopiere dir die wichtigsten IPKs auf die SD card. Wer sich auskennt lässt weg, wovon er oder sie weiss, dass es nicht benötigt wird. Ich habe keine Ahnung und deshalb hab ich einfach alles draufkopiert.
5) Pack die Karte in den GP2X, starte das USB Serial Gadget Modul und die umgeleitete Bash. Dann verbinde dich vom PC aus mit Minicom oder benutze sterm wenn du ganz hartgesotten bist.
Eventuell musst du dein Root Ordner schreibbar machen:
6) mount / -o remount,rw,noatime
Dann kopiere die Helferbibliothek für ipkg auf den GP2X:
7) cp libipkg0_0.99.154-r2_arm/usr/lib/libipkg.so.0 /usr/lib
Und dann IPK selber:
8) cp ipkg_0.99.154-r2_arm/usr/bin/* /usr/bin
Jetzt kommt was Gefährliches.
Wir installieren eine glibc!
Da es dieselbe Version ist, wie die vorherige ist das aber kein Problem. Ausserdem gibt es durch diese Aktion ldconfig, was wichtig für alle folgenden Bibliotheksinstallationen ist.
9) ipkg-cl install libc6_2.2.5-r5_arm.ipk
Jetzt installieren wir nochmal vernünftig ipkg und libipkg.
10) ipkg-cl install libipkg0_0.99.154-r2_arm.ipk
11) ipkg-cl install ipkg_0.99.154-r2_arm.ipk
Jaja. Da hagelt es ein paar Fehlermeldungen, aber es klappt trotzdem. Irgendwie bräuchte es ein richtiges 'sed' und nicht den aus Busybox. Ich habe den GNU Sed auch übersetzt und installiert, aber die Fehler gehen nicht weg. Mal gucken ...
So. An dieser Stelle ist der GP2X für jeden Mist zu haben.
Ich habe dann zlib (1.2.nochwas), classpath-commons, classpath und jamvm installiert.
Weil Classpath 0.19 nicht in OE enthalten ist und es ausserdem in der gegebenen Konfiguration GTK und sowas benötigen würde, habe ich einfach ein abgespecktes Classpath 0.19 via bitbake Datei in die OE Umgebung eingepflegt.
Pack die Datei classpath_0.19.bb in ${OE_HOME}/org.openembedded.dev/packages/classpath:
Code:
<i>
</i>DESCRIPTION = "GNU Classpath standard Java libraries"
HOMEPAGE = "http://www.gnu.org/software/classpath/"
LICENSE = "Classpath"
PRIORITY = "optional"
MAINTAINER = "Rene Wagner <rw@handhelds.org>"
SECTION = "libs"
PR = "r1"
DEPENDS = "jikes-native zip-native"
RDEPENDS_${PN} = "${PN}-common (${PV})"
SRC_URI = "${GNU_MIRROR}/${PN}/${P}.tar.gz \
file://disable-automake-checks.patch;patch=1"
inherit autotools
EXTRA_OECONF = "--with-jikes --disable-alsa \
--disable-dssi --disable-gtk-peer \
--disable-examples"
PACKAGES += " ${PN}-common ${PN}-examples"
FILES_${PN} = "${libdir}/${PN}"
FILES_${PN}-common = "${datadir}/${PN}/glibj.zip"
do_stage() {
install -d ${STAGING_INCDIR}/classpath
install -m 0755 include/jni* ${STAGING_INCDIR}/classpath/
}
do_install() {
autotools_do_install
mv ${D}${libdir}/security ${D}${libdir}/${PN}
}
Und da Classpath 0.19 nur mit JamVM 1.4.1 richtig Spass macht, habe ich das eben auch hinzugefügt.
Packe jamvm_1.4.1.bb in ${OE_HOME}/org.openembedded.dev/packages/jamvm:
Code:
<i>
</i>DESCRIPTION = "A compact Java Virtual Machine which conforms to the JVM specification version 2."
HOMEPAGE = "http://jamvm.sourceforge.net/"
LICENSE = "GPL"
PRIORITY = "optional"
MAINTAINER = "Rene Wagner <rw@handhelds.org>"
SECTION = "interpreters"
DEPENDS = "zlib classpath"
RDEPENDS = "classpath (>= 0.19) classpath-common (>= 0.19)"
SRC_URI = "${SOURCEFORGE_MIRROR}/${PN}/${P}.tar.gz"
# This uses 32 bit arm, so force the instruction set to arm, not thumb
ARM_INSTRUCTION_SET = "arm"
inherit autotools update-alternatives
EXTRA_OECONF = "--with-classpath-install-dir=${prefix}"
CFLAGS += "-DDEFAULT_MAX_HEAP=16*MB"
PROVIDES = "virtual/java"
ALTERNATIVE_NAME = "java"
ALTERNATIVE_PATH = "${bindir}/jamvm"
ALTERNATIVE_PRIORITY = "10"
So. Dann habe ich mir nen kleines Java App geschrieben,
Code:
<i>
</i>public class Test {
public static void main(String[] args) {
System.out.println("Hello World");
System.out.println("This is " + System.getProperty("java.vm.name"));
System.out.println("running on " + System.getProperty("os.name"));
System.out.println("with GNU Classpath " + System.getProperty("gnu.classpath.version"));
}
}
via gcj (was sonst
) kompiliert: gcj -C Test.java und auf die SD card gepackt und dann via minicom auf dem GP2X ausgeführt...
Ich denke das spricht für sich selbst:
Code:
<i>
</i>bash-2.05a# jamvm Test
Hello World
This is JamVM
running on Linux
with GNU Classpath 0.19
So und morgen bauen wir sdljava ....
----
Also ich bin von OpenEmbedded sowas von begeistert. Wenn jetzt noch jemand den GPH Kernel und die Headers einpflegt, könnte man schon von einer richtigen Distribution für den GP2X sprechen ...