Jalimo Slides Linuxtag2007

  • 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