====== Debian ====== Wenn man dazu tendiert sich ungern zu beschränken und im Zweifelsfall lieber alles möchte, sollte man wohl nicht mit einem FS mit weniger als 1GB anfangen. Ob eine benutzbare Installation mit 250MB (also im NAND-Flash) möglich ist ist ungetestet. Wahrscheinlich kann man aber mit gutem Gewissen auf jeden Fall eine Installation auf eine möglichst grosse microSD empfehlen. Die SD-Card am Desktop oder Notebook zu partitionieren, formatieren, und per install.sh Debian darauf zu installieren dürfte auch bequemer sein... Das //install.sh// des [[http://wiki.debian.org/DebianOnFreeRunner|DebianOnFreeRunner]] Projekts unterstützt leider keine Installation mit dem Kernel im Rootfs. Mit diesem mutierten //[[http://brezn.muc.ccc.de/~x/install.sh|install.sh]]// funktioniert das. //ext2load// (um den Kernel aus einem ext2-FS zu lesen) wird erst von halbwegs neuen UBoot-Versionen (so etwa ab August 2008) supportet.\\ Ein entsprechender UBoot-Env Eintrag (Kernel im ext2-Rootfs = 1. Partition auf SD-Card) würde in etwa so aussehen: setenv menu_1 Boot from microSD partition 1 (ext2): setenv bootargs \${bootargs_base} rootfstype=ext2 root=/dev/mmcblk0p1 rootdelay=5 \${mtdparts} ro\; mmcinit\; ext2load mmc 1:1 0x32000000 /boot/uImage\; bootm 0x32000000 Das ganze ist ein Mix aus unstable und experimental tree. Kann also durchaus passieren dass zeitweise die Installation z.B. wegen Dependency-Problemen fehlschlägt. Einfach später nochmal probieren. ===== Kernel ===== Am einfachsten klaut man sich wohl den aktuellen Openmoko-Kernel.\\ Location im UBoot-Env Booteintrag eintragen nicht vergessen (oder besser um den Default zu benutzen einfach ///boot/uImage// zum Kernel Symlinken) ==== Issues ==== === usbcore, usbnet, cdc_ether === * //usb0// ist immer //UP//. Ohne Link sollte das Interface aber //DOWN// gehen. Konsequenz ist dass bei fehlendem Link das Interface nicht dekonfiguriert wird, und bei neuem Link nicht neu konfiguriert wird - muss man manuell mit //ifdown usb0// und //ifup usb0// machen. Nervt. * Die cpufreq modules scheinen zu fehlen? Eigentlich kaum zu glauben, bei 'nem Akkusensiblen Embedded-System!? === ALSA WM8753 Module === * Ob der WM8753 Mixing in Hardware supportet ist unklar. Das ALSA-Module dafür jedenfalls offenbar (noch) nicht? Wäre allerdings ein nicht ganz uninteressanter Punkt, da ALSA dmix (Software Mixing) nicht so performt dass das auf dem Neo wirklich brauchbar wäre... ===== Timezone ===== Timezone ist per default UTC.\\ Ändern mit: //dpkg-reconfigure tzdata// ===== USB Networking ===== Generell ist wohl eine dhcp Konfiguration von usb0 eine gute Idee. ///etc/network/interfaces// auto usb0 iface usb0 inet dhcp ===== GSM-Terminal ===== Um den Aufruf eines GSM-Terminals (möglicherweise via Mux) zu vereinfachen: //gsmterminal.sh// #!/bin/sh # # gsmterminal.sh This shell script starts a gsm terminal PATH=/bin:/usr/bin:/sbin:/usr/sbin GSM_DEV="/dev/ttySAC0" [ -f /etc/default/rcS ] && . /etc/default/rcS [ -f /etc/default/gsmd ] && . /etc/default/gsmd pid="`fuser "$GSM_DEV"`" if [ -n "$pid" ] && [ "`ps -o comm --no-heading -p $pid`" == "gsm0710muxd" ]; then tty="`dbus-send --system --print-reply --type=method_call --dest=org.pyneo.muxer /org/pyneo/Muxer org.freesmartphone.GSM.MUX.AllocChannel string:terminal | grep '^[ ]*string' | sed 's/^[ ]*string "\(.*\)"$/\1/'`" else [ -n "$GSM_POW" ] && ( echo "0" >"$GSM_POW"; sleep 1 ) [ -n "$GSM_POW" ] && ( echo "1" >"$GSM_POW"; sleep 1 ) [ -n "$GSM_RES" ] && ( echo "1" >"$GSM_RES"; sleep 1 ) [ -n "$GSM_RES" ] && ( echo "0" >"$GSM_RES"; sleep 2 ) tty="$GSM_DEV" fi screen "$tty" pid="`fuser "$GSM_DEV"`" if [ -z "$pid" ] || [ "`ps -o comm --no-heading -p $pid`" != "gsm0710muxd" ]; then [ -n "$GSM_POW" ] && echo "0" >"$GSM_POW" fi ==== PPP ==== Eine Art pppd-wrapper-daemon der dafür sorgt dem pppd immer ein tty zur Verfügung zu stellen. ///etc/ppp/gsmpppd.sh// #!/bin/sh # # gsmpppd.sh This shell script starts a gsm pppd PATH=/bin:/usr/bin:/sbin:/usr/sbin GSM_DEV="/dev/ttySAC0" [ -f /etc/default/rcS ] && . /etc/default/rcS [ -f /etc/default/gsmd ] && . /etc/default/gsmd [ -f /etc/default/pppd ] && . /etc/default/pppd if [ "$gsmpppd_phase" != "2" ]; then gsmpppd_phase="2" export gsmpppd_phase $0 & exit 0 fi; # making the shell send signals it receives to its children, too, would be # great... we could forget about signal handlers, would not have to care about # children pids, and would not have to detach pppd and then wait for it... sig_handler() { trap "" $1 # i don't know why, but at least TERM is signalled twice? logger gsmpppd.sh: signal $1 received #for i in `jobs -p`; do # does not work with ash - would work with bash for i in $gsmpppd_children; do logger gsmpppd.sh: sending child process $i signal $1 kill -$1 $i done exit 0 } trap "sig_handler HUP" SIGHUP trap "sig_handler INT" SIGINT trap "sig_handler QUIT" SIGQUIT trap "sig_handler KILL" SIGKILL trap "sig_handler TERM" SIGTERM while true; do pid="`fuser "$GSM_DEV"`" if [ -n "$pid" ] && [ "`ps -o comm --no-heading -p $pid`" == "gsm0710muxd" ]; then tty="`dbus-send --system --print-reply --type=method_call --dest=org.pyneo.muxer /org/pyneo/Muxer org.freesmartphone.GSM.MUX.AllocChannel string:pppd | grep '^[ ]*string' | sed 's/^[ ]*string "\(.*\)"$/\1/'`" else [ -n "$GSM_POW" ] && ( echo "0" >"$GSM_POW"; sleep 1 ) [ -n "$GSM_POW" ] && ( echo "1" >"$GSM_POW"; sleep 1 ) [ -n "$GSM_RES" ] && ( echo "1" >"$GSM_RES"; sleep 1 ) [ -n "$GSM_RES" ] && ( echo "0" >"$GSM_RES"; sleep 2 ) tty="$GSM_DEV" fi # as the following two lines are non-atomic, this qualifies as 'ugly' /usr/sbin/pppd file "/etc/ppp/$PPP_FILE.options" connect "chat -v -f /etc/ppp/default.chat -T '$PPP_PHONE' -U '$PPP_APN'" <"$tty" 1>&0 & gsmpppd_children="$gsmpppd_children $!" wait done ///etc/init.d/pppd// #!/bin/sh # # pppd This shell script starts and stops pppd. # # chkconfig: 345 90 40 # description: Pppd manages an ip link via a serial device, in this case a gsm data connection # processname: pppd PATH=/bin:/usr/bin:/sbin:/usr/sbin GSM_DEV="/dev/ttySAC0" [ -f /etc/default/rcS ] && . /etc/default/rcS [ -f /etc/default/gsmd ] && . /etc/default/gsmd case "$1" in start) echo -n "Starting PPP daemon: " start-stop-daemon -S -x /etc/ppp/gsmpppd.sh if [ "$?" == "0" ]; then echo "pppd." else echo "(failed.)" fi ;; stop) echo -n "Stopping PPP daemon: " #start-stop-daemon -K -x /etc/ppp/gsmpppd.sh # start-stop-daemon won't find it because it's just an argument to its interpreter pkill gsmpppd.sh pid="`fuser "$GSM_DEV"`" if [ -z "$pid" ] || [ "`ps -o comm --no-heading -p $pid`" != "gsm0710muxd" ]; then [ -n "$GSM_POW" ] && echo "0" >"$GSM_POW" fi echo "pppd." ;; restart|force-reload) $0 stop $0 start ;; *) echo "Usage: /etc/init.d/pppd {start|stop|restart|force-reload}" exit 1 ;; esac exit 0 ///etc/ppp/flat.options// lock noauth crtscts lcp-echo-failure 3 lcp-echo-interval 20 noipdefault usepeerdns defaultroute replacedefaultroute ///etc/ppp/demand.options//\\ (ungetestet, insbes. der active-filter dürfte wohl unter 'symbolische notation' fallen...) lock noauth demand idle 20 active-filter ( outbound dst port 53 ) or ( outbound tcp dst ( port 443 or port 80 or port 25 or port 22 ) or ( inbound tcp src ( port 443 or port 80 or port 25 or port 22 ) ) crtscts lcp-echo-failure 3 lcp-echo-interval 20 noipdefault usepeerdns defaultroute replacedefaultroute ///etc/ppp/default.chat// TIMEOUT 15 "" "\K\K\K\d+++ATH" OK-AT-OK ATZ OK ATE1 OK AT+CFUN? +CFUN:\s1-AT+CFUN=1-OK AT+COPS? +COPS:\s0-AT+COPS=0-OK AT+CGDCONT=1,\"IP\",\"\U\" OK ATD\T ABORT BUSY ABORT DELAYED ABORT "NO CARRIER" ABORT "NO ANSWER" ABORT "NO DIALTONE" ABORT VOICE ABORT ERROR ABORT RINGING TIMEOUT 60 CONNECT "" ///etc/default/pppd//\\ (Die jeweiligen Werte durch die für den [[http://wiki.openmoko.org/wiki/Manually_using_GPRS#Some_APN_names_for_reference|jeweiligen GSM Provider]] passenden Werte ersetzen - dieses Beispiel ist für EPlus und -Reseller) PPP_PHONE="*99#" PPP_APN="internet.eplus.de" PPP_FILE="flat" Falls für den GPRS-Zugang PAP oder CHAP Authentifizierung notwendig ist, noch die jeweiligen Daten in ///etc/ppp/pap-secrets// oder ///etc/ppp/chap-secrets// eintragen. Z.B. so (wieder EPlus und -Reseller, in dem Fall //chap-secrets//): * "eplus" "gprs" * Die PPP-Connection kann dann also mit ///etc/init.d/pppd// gestartet und gestoppt werden. //PPP_FILE="flat"// ist gedacht als 'always on' Variante. Ohne Daten-Flatrate sicher nicht zu empfehlen. //PPP_FILE="demand"// ist gedacht als 'on demand' Variante - ist aber ungetestet und funktioniert mit an Sicherheit grenzender Wahrscheinlichkeit nicht oder nicht so wie man das will, d.h. man kann davon ausgehen dass bei Benutzung die Welt untergeht. ;) \\ Automatisches Starten via Init ist allerdings wohl eine schlechte Idee. Der pppd wird die GSM-Serielle benutzen, da der //gsm0710muxd// erst später gestartet wird - bzw. würde, da das tty belegt ist wird das nicht funktionieren. D.h. will man den pppd automatisch starten, sollte man das tun nachdem der //gsm0710muxd// gestartet wird (der wird das irgendwie über X). Ohne Flatrate will man das alles aber vielleicht sowieso lieber manuell machen... ===== NTP ===== apt-get install ntp Damit wird mit einer Handvoll default Timeserver gesynced. ==== Issues ==== * Falls dhcp einen timeserver liefert, sollte der per //ntpdc addpeer// oder //addserver// hinzugefügt (und ggf. wieder entfernt) werden. Hinweise wie das ohne keyid geht sehr willkommen. :) ===== FSO/Zhone ===== Um mit FSO/Zhone zu beginnen, sollte man folgende Pakete installieren: apt-get install dbus-x11 fso-config-gta02 fso-sounds-none fso-sounds-openmoko-nonfree hicolor-icon-theme libgtk2.0-bin ==== Issues ==== * PIN-Dialog lässt sich wieder nicht direkt aufrufen. Wenn Zhone als (Autostart) Applikation gestartet wird passt das wohl (ggf. Zhone beenden, neustarten -> PIN-Dialog). * Kalender funktioniert irgendwie nie. Macht nix, gehört IMHO nicht wirklich in 'ne GSM-Applikation. ===== Matchbox ===== Um das Matchbox-Panel (wie bei den Openmoko-Distributionen) und die -Tastatur (wie bei Openmoko2007), zusätzlich noch einen Application-Launcher zu benutzen, folgende Pakete installieren: apt-get install matchbox matchbox-panel matchbox-panel-manager matchbox-keyboard matchbox-desktop ///etc/X11/Xresources/matchbox// matchbox.theme: x matchbox.titlebar: no matchbox.cursor: no Das eigene Theme (hier: x) gehört nach:\\ ///usr/share/themes/x//\\ und die zugehörigen Icons nach:\\ ///usr/share/icons/x//\\ (=> jeweils //default// nach //x// kopieren und je nach Geschmack anpassen) Ein deutsches Keyboard-Layout: ///usr/share/matchbox-keyboard/keyboard.xml// Hinweise wie man die Enter-Tasten über die zwei Rows hinweg zu einer machen kann wären sehr erwünscht :) Keybindings lassen sich in ///etc/matchbox/kbdconfig// konfigurieren. Per Installation wird X mit Zhone (///usr/bin/zhone-session//) via ///etc/init.d/zhone-session// gestartet. Um X mit Matchbox zu starten sollte man die //S*zhone-session// und //K*zhone-session// Links aus den ///etc/rc*.d// entfernen, for i in 0 1 6; do mv /etc/rc$i.d/K20zhone-session /etc/rc$i.d/xK20zhone-session; done for i in 2 3 4 5; do mv /etc/rc$i.d/S20zhone-session /etc/rc$i.d/xS20zhone-session; done und X mit ///usr/bin/matchbox-session// starten. Am einfachsten wohl ///etc/init.d/zhone-session// nach ///etc/init.d/matchbox-session// kopieren, //PROG_FSO// auf ///usr/bin/matchbox-session// setzen, und //S*matchbox-session/ / (rcs 2, 3, 4, 5) und / /K*matchbox-session// (rcs 0, 1, 6) Links in den jeweiligen ///etc/rc*.d// setzen. for i in 0 1 6; do ln -s ../init.d/matchbox-session /etc/rc$i.d/K20matchbox-session; done for i in 2 3 4 5; do ln -s ../init.d/matchbox-session /etc/rc$i.d/S20matchbox-session; done Die default-Session ist etwas spärlich, dem sollte folgendes abhelfen: ///etc/matchbox/session// #!/bin/sh gnome-screensaver & gnome-power-manager & zhone & matchbox-desktop & matchbox-panel --orientation north & matchbox-keyboard-toggle & exec matchbox-window-manager $@ ==== Issues ==== * Die Panel Orientation sollte ebenfalls per Xresources konfigurierbar sein. * Es liegt wohl nahe das Panel für die X-Session zu benutzen. Dann möchte man für div. Services (z.B. //matchbox-keyboard-toggle//, //gnome-screensaver//, //gnome-power-manager//, //gnome-volume-manager//, //zhone//, ...) geeigneterweise ein Autostart vom Panel beutzen. Dazu würde sich //~/.matchbox/mbdock.session// anbieten (btw auch für die Panel-Icon-Positionierungs-Sache) - leider funktioniert das nicht, alles ausser den //mb-applet-*// Apps wird darüber nicht gestartet... :/ * Das Clock-Applet benutzt als Font-Farbe offenbar fix #000000. Sollte aber //PanelFgColor// aus dem Theme nehmen... Datumsformat (Datum/Zeit, 24h, Sekunden) sollte konfigurierbar sein. * Das //matchbox-keyboard-toggle// Applet (python, btw) dockt nicht ins Panel. * //matchbox-keyboard// liefert für ein Shift-Tab (Left-Tab) offenbar nur Tab. * Folgende Applets fehlen: Tasklist (Title Anzeige der aktuellen Applikation im Panel, Menü mit Liste aller laufenden X-Applikationen und Desktop/Root, möglichst (optional) fingerfreundlich fullscreen), GSM, BT, USB, 'Sanduhr-Ersatz' * //mb-applet-battery// funktioniert nicht (aber man will eigentlich eh lieber //gnome-power-manager//). * //matchbox-desktop// widersetzt sich allen Konfigurationsversuchen. Es verwendet fix das Raleigh Theme, hört nicht auf //matchbox-remote//, und auch //--bg// setzen per Commandline funktioniert nicht. * //matchbox-desktop// benutzt wohl das Root-Window. Und das auf der gesamten Screengrösse - was schlecht ist, da Panel und ggf. Keyboard damit einen Teil verdecken. Falls das Beschränken auf den Teil zwischen Panel und Keyboard mit dem Root-Window nicht machbar ist, wäre ein normales Fenster - fullscreen - genauso gut. ===== Screensaver, Powermanager ===== Die Screensaver-/Locking-/Powermanagementfunktionalität des FSO-Frameworkd stört eigentlich sobald man nicht ausschliesslich Zhone, sondern verschiedene X Applikationen benutzen möchte.\\ In dem Fall möchte man ebendiese Aufgaben von einer X Lösung erledigt bekommen, z.B. dem //gnome-screensaver// und dem //gnome-power-manager//, letzterer dockt sich auch ans Panel. Dazu folgende Pakete installieren: apt-get install gnome-screensaver gnome-power-manager Um die besagte Funktionalität beim Frameworkd auszuschalten, folgende Parameter in der angegebenen Sektion hinzufügen: ///etc/frameworkd.conf// [odeviced.idlenotifier] # configure timeouts (in seconds) here. A value of 0 # means 'never fall into this state' (except programatically) idle = 0 idle_dim = 0 idle_prelock = 0 lock = 0 suspend = 0 ==== Issues ==== * Das Panel-Icon lässt sich zwar mittels //matchbox-panel-manager// positionieren, bei einem Neustart wird's aber wieder an der default-Position platziert. * //gnome-screensaver// lässt bei uid 0 kein Locking zu. In einem singleuser-Fall wie auf dem Neo ist das eher kontraproduktiv. * Die Zeiten sollten sowohl im //gnome-screensaver// als auch im //gnome-power-manager// in Sekundengranularität konfigurierbar sein. Schieberegler sind eh doofer als Felder in denen man das Intervall eingeben kann. * Der Countdown der 'Discharging' Notification des //gnome-power-manager// zählt nicht runter. * Als Unlockingmechanismus wünscht man sich eigentlich auch so Dinge wie die 1-2-3-4 Buttons, den Moko-Ball, andere Gestures, etc... z.Zt. supportet //gnome-screensaver// aber wohl nur die standard Passwort-Abfrage. * Die Dim-Geschwindigkeit sowie die einzelnen Helligkeitslevel (die reduce backlight when on battery option funktioniert btw nicht) sollten konfigurierbar sein. * Das Panel-Icon-Menü sollte einen Eintrag haben um eine (konfigurierbare) Konfigurationsapplikation zu starten. * Eigentlich sollten //gnome-screensaver// und //gnome-power-management// eins sein, funktionsmässig gehören die zam, und die Trennung führt nur zu komischen Dingen wie Blanking das sowohl im Screensaver als auch im Powermanagement (unterschiedlich) konfiguriert werden kann/muss... ===== Terminal ===== Mind. zwecks Themeing empfiehlt sich auch hier //gnome-terminal//. Das ist dann hübsch und gut benutzbar - hat aber im Vergleich zu //xterm// oder //rxvt// o.ä. einen relativ riesigen (wenn auch wohl grade noch erträglichen) Memory-Footprint... ===== Volumecontrol ===== Als Volume-Control Panel-Applikation empfiehlt sich //gnome-volume-manager//. Leider dockt der nicht ans Panel, womit er derzeit nicht brauchbar ist (macht de facto einfach garnichts). ===== X ===== X regelt. ==== Issues ==== * //xrandr// Rotation funktioniert nicht. Da fehlt irgendwie im X Server wahrscheinlich noch Landscape-Support? Bei Openmoko2007 gab's Landscape-Support, das war aber auch ein fbdev X? Hints welcome. * eine Gesten-Input-Applikation! Primär erstmal zum Scrollen wäre schonmal ein Riesenfortschritt.