If you can't read please download the document
Upload
smancke
View
1.941
Download
0
Embed Size (px)
Citation preview
Mein Titel
Java-Linux-Mobile Plattform
Status
Zuwachs an kleinen mobilen Linux Endgerten
Java auf mobilen Endgerten
Classpath & co sind 'erwachsen'
dennoch!
Freies Java auf Linux-Embedded ist kaum im Einsatz.
Java embedded?
Was ist Java?
J2ME CLDC
J2ME CDC
J2ME CDC + AGUI (JSR 209)
J2SE
Nur zertifizierte Plattformen (JVMs+Klassenbibliothek) drfen sich 'Java' nennen.
Die alternativen, freien JVMs sind nicht zertifiziert
Java und Java-like Implementierungen
Sun J2SE (GPL und proprietr)
Sun J2ME PhoneME (GPL)
J2ME IBM J9 (proprietr)
Gnu Classpath (GPL) mit verschiedenen JVMs
cacaojvm (GPL)
jamvm (GPL)
kaffe (GPL)
...
Aonix, Perc (proprietr)
Aicas, JamaicaVM (proprietr)
...
}
Realtime fhig
Wie immer die GUI machts!
Auer J2ME CLDC ist alles weitestgehend >= Java 1.3.
Prgnant: Die unterschiedlichen GUI Anstze.
MIDP 2.0 (minimal)
AWT (kleine Featuremenge)
Swing (Performance Probleme)
SWT (mit GTK peer: Viele Abhngigkeiten)
SWT (mit QT peer: proprietr)
Weitere Mglichkeiten
Java-gnome
escher (pure java X library)
jsdl (java sdl bindings)
Pocket-Size Linux
Distributionen
Familiar (OpenEmbedded, ipkg)
ngstrm (OpenEmbedded, ipkg)
Maemo (Scratchbox, apt, dpkg)
OpenMoko (OpenEmbedded, ipkg)
Environments
Opie (Framebuffer/QT embedded)
GPE (Xserver/GTK)
Maemo (Xserver/GTK + Hildon + Osso)
OpenMoko (Xserver/GTK + libmokoui + libmokocore)
Java @ Pocket-Size Linux
Meist sporadisch:
z.B. jamvm und altes gnu classpath
Selten aktualisiert
Kein Konzept fr Packaging und weitere Integration
GUI: Meist AWT (mit gtk peer)
OpenEmbedded: jamvm 1.4.2/classpath 0.90
Maemo:
jamvm 1.4.2/classpath 0.91 (ohne 'hildonizing')
sun PhoneME (als tar.gz, ohne gui)
JaLiMo
Welche Probleme gibt es?
Bei der Java-Portierung
Build Prozess ist meist etwas anders
Abhngigkeiten fr die GUI
Fehlende Abstimmung auf embedded Bereich
Gre & Modularisierung
Startup-Geschwindigkeit
Bei der Entwicklung
Embedded Java ist etwas anderes
Fehlende Integration in die Umgebungen
Packaging + Dependency Management
Fehlende Abhngigkeiten und Bindings
Schlechte Framework Untersttzung
JaLiMo
JaLiMo ist eine Initiative um einen vollstndigen freien Java-Stack fr mobile Linux Endgerte aufzubauen.
Im Vordergrund steht die Integration und Ergnzung existierender Projekte.
"Java-like environment for mobile Linux devices"
Hauptaufgabe sind die Probleme nach der Portierung der JVM!
JaLiMo - Wer?
Gesponsort von Tarent GmbH
Sebastian Mancke
Robert Schuster (Gnu Classpath)
Fabian Kster
Untersttzt durch
Christian Thalinger (cacaojvm.org)
Roman Kennke (Gnu Classpath, escher)
Guillaume Legris (MIDPath)
Andrew Cowie (java-gnome)
...
JaLiMo - Was?
CACAO JVMJamVMGNU ClasspathphoneMEMIDPathSwing/escherjava-gnomeSWTmaven packaging pluginOpenEmbedded integrationmvn2deblibjalimo-corelibopenmokolibmaemomaemo...?...openmokoIntegration
Integration
GUI
Runtime
Build
Plattform
Build Strategien - Cross Compiling
Cross Toolchain (gcc, ld, .. fr arm)
Rootstrap
setzen von: PATH, CC, LD, AR, PKG_CONFIG_PATH
wrapper fr: dpkg-architecture und pkg-config
Vorteile:
Die Host Tools (z.B. javac, javah, jar) stehen zur Verfgung.
Verwendung zusammen mit dpkg-buildpackage
Probleme
Pflege des Rootstrap
Fehleranfllig durch fehlendes chroot
Build Strategien - Scratchbox
Auf Qemu basierender Emulator
Mit Toolchain und Rootstrap integriert
Vorteile:
Direkte Nachbildung des Zielsystems
Kein Cross Compiling mehr
Probleme
Keine Untersttzung spezieller Build Tools (z.B. javac, javah, ..)
Java binaries (z.B. jamvm oder cacao) funktionieren nicht in der scratchbox
Build Strategien - maven2
Etablierte Java Build Umgebung
Vorteile
Management von dependencies
Standardisierter Build Prozess
Plugin Architektur
Nachteile
Sehr Java zentriert
Schlechte Untersttzung fr JNI und Cross Compiling
Kein Packaging Konzept
maven packaging plugin
Packaging
IzPack installer (fr Desktop)
.deb (fr Desktop und embedded)
.ipkg (geplant)
Generierung von Startscripten
Orientierung an debian guidelines
Umsetzung der maven Abhngigkeiten auf debian Abhngigkeiten
Von tarent (Robert Schuster) entwickeltes maven Plugin zur
Paketierung von Projekten -- unter (GPL) frei gegeben.
maven packaging plugin
Java package fur maemo in 5 min!
.. code schreiben und pom.xml anpassen ..
.. fertig ist das .deb archive!
mvn archetype:create \-DarchetypeGroupId=org.jalimo.archetype \-DarchetypeArtifactId=gtkapp -DarchetypeVersion=0.1.0-SNAPSHOT \ -DremoteRepositories=http://www.jalimo.org/maven \-DgroupId= -DartifactId=
mvn -Dmaven.test.skip=true pkg:deb
maven mit JNI code
Normales maven packaging Projekt + Makefile
Ablauf: mvn pkg:deb
Kompilieren der Java Klassen
Generieren der header files mit javah
Kompilieren des C-codes in der scratchbox ber /scratchbox/login
Einsammeln der Binaries
Generieren des .deb Archives
Viele Projekte bestehen aus java und C code
}
}
}
Host
Host
Emulator
Beispiel: java-gnome
Java-gnome
Java-gnome ist ein bereits 9 Jahre bestehendes Projekt
Version 2 hat eine recht hohe API-Abdeckung, jedoch zu viele Probleme.
Seit 1,5 Jahren: rewrite java-gnome4
Sauberes Design
Leichtgewichtig
Geringe API-Abdeckung
Kommt leider langsam vorwrts
Aber: gutes Konzept
Java-gnome - Konzept
Code Generierung der JNI Schicht
Aus den GTK Header Files werden Objekt Definitionen erstellt.
Pro Gtk 'Klasse' wird eine C und ein Java Datei generiert, die den gesamten JNI-Code enthlt.
Java Sichtbarkeiten dieser Schicht sind auf 'package' beschrnkt.
In einer sauberen API Schicht erfolgt die Umsetzung des prozeduralen Codes in eine objekt-orientierte API.
Die pseudo-Klassenstruktur von GTK wird dabei sauber in Java abgebildet.
Das Vorgehen und der Codegenerator eignen sich evtl. auch fr andere Bibliotheken: z.B. Hildon oder libopenmoko.
Java-gnome
Warum von Java-gnome
Performant und leichtgewichtig
Nahtlose Integration mglich
Untersttzung durch Glade2 GUI Builder
Einfache, schne API
Java-gnome - Abdeckung
Im Upstream Projekt sehr gering:
Window, Widget, Button, Label, Hbox, VBox
Prototypische Erweiterung an zwei Abenden um:
Entry
TextView, TextBuffer
ToggleButton
CheckButton
ComboBox
MenuBar, Menu, MenuItem
ScrolledWindow
Frame
Notebook
HSeparator, VSeparator
Image
Offensichtlich: gutes Konzept!
libmaemo
Erweiterungen der java-gnome Komponenten mit Bindings zum Hildon Framework. Ntige Schritte:
Wrapper fr HildonWindow und HildonProgram (existieren schon)
Erweiterte Widgets des Hildon Frameworks
Bindings fr Status Bar Plugins
Wrapper fr die libosso
Nachrichten Kommunikation zwischen den Applikationen
Evtl. ber bestehendes Projekt java-dbus mglich
MIDPath
MIDPath ist eine MIDP2 Implementierung auf Basis des MIDP
codes der Sun PhoneME.
Im Gegensatz zur PhoneME luft MIDPath auf Java SE sowie auf Java ME CLDC.
Damit kann es out of the box mit Kaffe, Cacao, JamVM oder anderen JVMs verwendet werden.
Guillaume Legris hat fr JaLiMo ein GTK Backend geschrieben, was wir an das Maemo Input Framework anpassen konnten.
MIDPath - Architektur
Durch unterschiedliche Backends ist MIDPath recht portabel.
Fr den Einsatz auf kleinen Gerten gibt es eine Variante, die mit der Cacao CLDC Version aus kommt.
MIDPATHJava ME CLDCAWTSWTJavaSound
SDL
X11ALSACacaoJamVMKaffeCacao CLDCGNU Classpath JVMsStandardLibrariesBackendsCoreGTK
MIDPath - Status
Status:
Recht Stabil
APIs: JSR-118 + FileConnection (JSR-75)
Fehlend: SSL, UDP, tone playing
OGG/MP3 Untersttzung
Bald:
Audio streaming support
Midlet Verwaltung fr Maemo
Zukunft:
Weitere Java ME JSRs hinzufgen
Swing/Escher
Swing/AWT Support von GNU Classpath in maemo hngt an der gtk Version.
Alternative
Pure Java X library: Escher
Classpath hat unterschiedliche peers fr AWT und Swing
Swing/Escher luft auf maemo, ist aber noch nicht fertig:
Probleme im Fenster Handling
Repainting
Soft Tastatur Input
Look and Feel Customizing
Swing/Escher - Maemo Input Problematik
Soft Keyboard lst keine X Key-Events aus
Text orientiert
Undokumentierte Xmessages, die ber das Hildon/GTK Input Framework in GTK umgesetzt werden.
TODO:
Generieren von XMessages an Softkeyboard (raise/lower)
Empfangen von Messages, umwandeln in AWT Key Events
lib-JaLiMo Zielausrichtung
JaLiMo steht am Projekt Anfang
Vollstndigkeit einer 1.0 geplant fr Ende 2008
Bisher: Fokus auf Basis Plattform
Hauptschlich jedoch: Applikationsframework
Erstellen von mobilen Applikationen
zur Umsetzung von End-to-End Business Prozessen.
lib-JaLiMo Konzepte
Messaging
Asynchrones Messaging als Grundbaustein der Applikationen
Anbindung verschiedener Quellen ber Konnektoren z.B. SOAP/HTTP, XMPP, RMI, dbus
Applikation
Komponente AMessageBroker
Komponente B
lib-JaLiMo Konzepte
Data-Binding
Bindung von Daten und View ber Nachrichten aneinander
Deklarative Verknpfung, ohne gegenseitiges Referenzieren der einzelnen Objekte
Bietet strkere Entkoppelung als MVC-Paradigma
Action Framework
Konsequenter Einsatz des Command Patterns in GUI Applikationen
Alle Aktionen werden als Action definiert und knnen an unterschiedlichen Stellen verwendet werden.
lib-JaLiMo Konzepte
GUI Templating
Erstellung von Teilen der GUI durch Beschreibungssprachen z.B.
HTML embedded in Swing
Glade fr Java-Gnome
JSP oder Velocity fr Web
Verbindung von GUI und Applikation ber Actions und Bindings
Ziel:
Leichteres Wiederverwenden von Applikationen in unterschiedlichen Kontexten
Rapid Prototyping
Trennung von Gestaltung und Programmierung
JaLiMo - Robot Aktion
Warum? Zur Verdeutlichung, wie einfach sich offene
Standard-Komponenten fr komplexe Architekturen eignen.
Autonome Java Steuereinheit
Java-gnome GUI
Asynchrone Kommunikation ber XMPP
Entwicklungsaufwand
~ 1 Woche
Jazelle DBX (Direct Bytecode eXecution)
Das N770 und das N800 besitzen die proprietre Jazelle
Erweiterung im Prozessor.
DBX ist ein zustzlicher instruction modus des arm Prozessors.
Nach einem sog. branch to java kann bytecode nativ ausgefhrt werden.
123 Bytecodes werden dabei direkt untersttzt. Fr die brigen wird ein Software Interrupt ausgelst.
Leider hlt Arm die Spezifikation zurck!!!
Wre es mglich sie trotzdem zu nutzen?
#include "stdio.h" int code[] = {0x10, //bipush 0x00, 0x00, 0x00, 0x2a, // dummy int: 42 0x3B, // istore_0 0x1A, // iload_0 0xB1, // return 0x00, 0x00, 0x00, 0x00, 0x00 // any rubbish}; int* codepos = code; int main(int argc, char** argv) { printf("codepos is %d\n", codepos); asm volatile("ldr r0, %[code]\n\ bxj r0\n\ mov pc, lr" : : [code] "m" (codepos) : "r0", "r3", "memory"); return 0;}
Jazelle DBX (Direct Bytecode eXecution)
In den DBX-Modus zu wechseln scheint kein Problem zu sein
Mit dem db lsst sich nachvollziehen, dass das Programm immer nach dem letzten bekannten bytecode abstrzt. Alle vorangegangenen mssen also abgearbeitet worden sein.
Nach einem der unbehandelten Bytecodes steht der program counter auf 0x11000. Dies scheint der Zustand nach dem interrupt zu sein.
Offene Fragen:
Wie muss der entsprechende Interrupt handler aussehen?
Wie erfolgt eine Parameterbergabe/Parameterrckgabe?
JaLiMo Ressourcen
www.jalimo.org
Bald zustzlich: www.elvolvis.org
Gforge infrastruktur
ffentliches svn
Mailinglisten
Bessere Verwaltung von Einzelprojekten
Ansonsten: [email protected]
Klicken Sie, um das Format des Titeltextes
Klicken Sie, um die Formate des Gliederungstextes zu bearbeiten
Zweite Gliederungsebene
Dritte Gliederungsebene
Vierte Gliederungsebene
Fnfte Gliederungsebene
Sechste Gliederungsebene
Siebente Gliederungsebene
Achte Gliederungsebene
Neunte Gliederungsebene
Java-Linux-Mobile Plattform
Open Source Workflowmanagement mit BPEL
Klicken Sie, um die Formate des Gliederungstextes zu bearbeiten
Zweite Gliederungsebene
Dritte Gliederungsebene
Vierte Gliederungsebene
Fnfte Gliederungsebene
Sechste Gliederungsebene
Siebente Gliederungsebene
Achte Gliederungsebene
Neunte Gliederungsebene
Dipl.-Inform. Sebastian Mancke