<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.openmoko.org/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.openmoko.org/api.php?action=feedcontributions&amp;user=Chooseopen&amp;feedformat=atom</id>
		<title>Openmoko - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.openmoko.org/api.php?action=feedcontributions&amp;user=Chooseopen&amp;feedformat=atom"/>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Special:Contributions/Chooseopen"/>
		<updated>2013-05-23T01:31:14Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.19.6</generator>

	<entry>
		<id>http://wiki.openmoko.org/wiki/USB_Networking</id>
		<title>USB Networking</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/USB_Networking"/>
				<updated>2008-01-25T01:58:27Z</updated>
		
		<summary type="html">&lt;p&gt;Chooseopen: /* Name resolution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Neo1973 side =&lt;br /&gt;
&lt;br /&gt;
== Name resolution ==&lt;br /&gt;
&lt;br /&gt;
By default Neo1973 has usb0 interface working due to Ethernet gadget (g_ether) compiled into kernel.&lt;br /&gt;
&lt;br /&gt;
On the Neo, if you want to reach out to the internets using full qualified hostnames, you need to define your DNS server. Create a file /etc/resolv.conf with at least one line saying&lt;br /&gt;
&lt;br /&gt;
 nameserver xxx.xxx.xxx.xxx&lt;br /&gt;
&lt;br /&gt;
e.g. nameserver 192.168.1.1&lt;br /&gt;
&lt;br /&gt;
Then you can also easily update your 2007.2 OpenMoko packages with &amp;quot;ipkg update &amp;amp;&amp;amp; ipkg upgrade&amp;quot; on the Neo.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
A better approach is it edit: /etc/network/interfaces and modify the line:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
up echo nameserver 192.168.0.200 &amp;gt;/etc/resolv.conf&lt;br /&gt;
&amp;lt;/code&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
to specify your preferred DNS server instead of 192.168.0.200.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
example:  &amp;lt;code&amp;gt;up echo nameserver 4.2.2.2 &amp;gt;/etc/resolv.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another approach is to symlink  (NOW OBSOLETE?)&lt;br /&gt;
&lt;br /&gt;
 ln -s /var/run/resolv.conf /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
and fill the file at bootup with a script /etc/network/if-up.d/08setupdns containing:&lt;br /&gt;
&lt;br /&gt;
 #!/bin/sh -e&lt;br /&gt;
 echo  nameserver 192.168.0.200 &amp;gt; /var/run/resolv.conf&lt;br /&gt;
&lt;br /&gt;
this way the file is correctly handled from ppp package when dialing into gprs.&lt;br /&gt;
&lt;br /&gt;
== Routing ==&lt;br /&gt;
&lt;br /&gt;
You need a additional route for traffic to the internet. This traffic can be routed through your pc (see below) if the pc is the default route destination. you can achieve this by adding&lt;br /&gt;
&lt;br /&gt;
 gateway 192.168.0.200&lt;br /&gt;
&lt;br /&gt;
to your /etc/network/interfaces in the usb0 section.&lt;br /&gt;
&lt;br /&gt;
= Desktop side =&lt;br /&gt;
&lt;br /&gt;
== Manual method ==&lt;br /&gt;
&lt;br /&gt;
With the device connected, modprobe usbnet module and configure usb0 interface (as root):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ifconfig usb0 192.168.0.200 netmask 255.255.255.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If your eth0 interface is also in the same 'range' (e.g. 192.168.0.105) then you can do the following:&lt;br /&gt;
&lt;br /&gt;
1. ping the Neo with&lt;br /&gt;
 # ping -I usb0 192.168.0.202&lt;br /&gt;
2. add a route to your Neo:&lt;br /&gt;
 # /sbin/route add -host 192.168.0.202/32 dev usb0&lt;br /&gt;
3 log in to the Neo&lt;br /&gt;
 # ssh root@192.168.0.202&lt;br /&gt;
&lt;br /&gt;
If you don't have the necessary modules to get usb0 going, make sure you have the following kernel options enabled:&lt;br /&gt;
* CONFIG_USB_USBNET&lt;br /&gt;
* CONFIG_USB_NET_CDCETHER&lt;br /&gt;
Both options are available in the Device Drivers -&amp;gt; USB support -&amp;gt; USB Network Adapters. For more info see the [http://www.linux-usb.org/usbnet/ usbnet driver homepage].&lt;br /&gt;
&lt;br /&gt;
== Automatic method ==&lt;br /&gt;
&lt;br /&gt;
Took from [http://blog.haerwu.biz/2007/03/22/hotpluging-usbnet/ Hotplugging usbnet] post by Marcin 'Hrw' Juszkiewicz.&lt;br /&gt;
&lt;br /&gt;
=== Debian or similar ===&lt;br /&gt;
Edit /etc/network/interfaces:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow-hotplug usb0&lt;br /&gt;
iface usb0 inet static&lt;br /&gt;
        address 192.168.0.200&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 192.168.0.0&lt;br /&gt;
        post-up iptables -A POSTROUTING -t nat -j MASQUERADE -s 192.168.0.0/24&lt;br /&gt;
        post-up echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        post-up iptables -P FORWARD ACCEPT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Ubuntu (Tested with Feisty and Gutsy) ===&lt;br /&gt;
Edit /etc/network/interfaces:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auto usb0&lt;br /&gt;
iface usb0 inet static&lt;br /&gt;
        address 192.168.0.200&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 192.168.0.0&lt;br /&gt;
        up iptables -A POSTROUTING -t nat -j MASQUERADE -s 192.168.0.0/24 &amp;amp;&lt;br /&gt;
        up echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward &amp;amp;&lt;br /&gt;
        up iptables -P FORWARD ACCEPT &amp;amp;&lt;br /&gt;
        down iptables -D POSTROUTING -t nat -j MASQUERADE -s 192.168.0.0/24 &amp;amp;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are doing the echo 1 &amp;gt; /proc/... command manually, sudo may not be enough, then you will have to execute it from a sudo bash.&lt;br /&gt;
&lt;br /&gt;
Ubuntu Feisty and Gutsy appear to have a bug where ifdown is not run when the interface is unplugged, meaning this only works once after the system is booted.&lt;br /&gt;
One can patch /etc/udev/rules.d/85-ifupdown.rules, editing the two lines at the end of the file:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;net&amp;quot;, DRIVERS==&amp;quot;?*&amp;quot;, GOTO=&amp;quot;net_start&amp;quot;&lt;br /&gt;
GOTO=&amp;quot;net_end&amp;quot;&lt;br /&gt;
&lt;br /&gt;
LABEL=&amp;quot;net_start&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Bring devices up and down only if they're marked auto.&lt;br /&gt;
# Use start-stop-daemon so we don't wait on dhcp&lt;br /&gt;
ACTION==&amp;quot;add&amp;quot;,          RUN+=&amp;quot;/sbin/start-stop-daemon --start --background --pidfile /var/run/network/bogus --startas /sbin/ifup -- --allow auto $env{INTERFACE}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
LABEL=&amp;quot;net_end&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ACTION==&amp;quot;remove&amp;quot;,       RUN+=&amp;quot;/sbin/start-stop-daemon --start --background --pidfile /var/run/network/bogus --startas /sbin/ifdown -- --allow auto $env{INTERFACE}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
the bug is that the LABEL=&amp;quot;net_end&amp;quot; is at the wrong position&lt;br /&gt;
=== SuSE ===&lt;br /&gt;
/etc/sysconfig/network/ifcfg-usb0&lt;br /&gt;
 # USB configuration for PDAs (openmoko)&lt;br /&gt;
 IPADDR=192.168.0.200&lt;br /&gt;
 NETMASK=255.255.255.0&lt;br /&gt;
 STARTMODE=onboot&lt;br /&gt;
=== Fedora (Tested with FC8) ===&lt;br /&gt;
/etc/sysconfig/network-scripts/ifcfg-usb0&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# USB configuration for PDAs (openmoko)&lt;br /&gt;
# from http://www.handhelds.org/moin/moin.cgi/UsbNet&lt;br /&gt;
DEVICE=usb0&lt;br /&gt;
BOOTPROTO=none&lt;br /&gt;
IPADDR=192.168.0.200&lt;br /&gt;
NETMASK=255.255.255.0&lt;br /&gt;
ONBOOT=yes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Red Hat or similar ===&lt;br /&gt;
Edit /etc/sysconfig/network-scripts/net.hotplug:&lt;br /&gt;
&lt;br /&gt;
After this command&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    case $INTERFACE in&lt;br /&gt;
	# interfaces that are registered after being &amp;quot;up&amp;quot; (?)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
add&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	usb0)&lt;br /&gt;
		ifconfig usb0 192.168.0.200 netmask 255.255.255.0&lt;br /&gt;
		route add 192.168.0.202 usb0&lt;br /&gt;
		iptables -I INPUT 1 -s 192.168.0.202 -j ACCEPT&lt;br /&gt;
		iptables -I OUTPUT 1 -s 192.168.0.200 -j ACCEPT&lt;br /&gt;
                iptables -A POSTROUTING -t nat -j MASQUERADE -s 192.168.0.0/24&lt;br /&gt;
                echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
		exit 0&lt;br /&gt;
	;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
=== Gentoo ===&lt;br /&gt;
* Open /etc/conf.d/net and add:&lt;br /&gt;
 # Neo1973&lt;br /&gt;
 config_usb0=( &amp;quot;192.168.0.200 netmask 255.255.255.0&amp;quot; )&lt;br /&gt;
 routes_usb0=( &amp;quot;192.168.0.202/32 via 192.168.0.200&amp;quot; )&lt;br /&gt;
* Create a new init script:&lt;br /&gt;
 cd /etc/init.d&lt;br /&gt;
 ln -s net.lo net.usb0&lt;br /&gt;
* Put iptables into use:&lt;br /&gt;
 iptables -I INPUT 1 -s 192.168.0.202 -j ACCEPT&lt;br /&gt;
 iptables -I OUTPUT 1 -s 192.168.0.200 -j ACCEPT&lt;br /&gt;
 iptables -A POSTROUTING -t nat -j MASQUERADE -s 192.168.0.0/24&lt;br /&gt;
* Store them&lt;br /&gt;
 /etc/init.d/iptables save&lt;br /&gt;
* If you want the routing by default:&lt;br /&gt;
 rc-update add iptables default&lt;br /&gt;
* You must also inform the kernel, to start forwarding.  One way to automate this is to create /etc/conf.d/net.usb0 as follows&lt;br /&gt;
 &lt;br /&gt;
 preup() {&lt;br /&gt;
        echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        return 0&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 postdown() {&lt;br /&gt;
        echo 0 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        return 0&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
This way, packet forwarding will be turned on when Neo is plugged in, and off when it's not.&lt;br /&gt;
&lt;br /&gt;
=== MacOS X ===&lt;br /&gt;
See the [[MacOS_X#USB_Networking|USB Networking section in the MacOS X article]].&lt;br /&gt;
&lt;br /&gt;
= Mobile development  =&lt;br /&gt;
&lt;br /&gt;
== Proxying DNS requests ==&lt;br /&gt;
&lt;br /&gt;
If, like me, you move about quite a lot, connecting to various networks as you go and getting your ip via dhcp, you'll probably be annoyed at having to constantly update your resolv.conf on the Neo 1973.&lt;br /&gt;
&lt;br /&gt;
To get round this, as part of my setup script, I run a proxy dns on the ip address the neo comes in on at the usb0 port. This means that my Neo /etc/resolv.conf only contains:&lt;br /&gt;
&lt;br /&gt;
 nameserver 192.168.0.200 &lt;br /&gt;
&lt;br /&gt;
and my laptop will proxy all dns requests based on it's own /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
'''note that we only run the dns proxy on the usb0 interface so that we don't break any other networking'''&lt;br /&gt;
&lt;br /&gt;
=== Proxying with dnrd ===&lt;br /&gt;
&lt;br /&gt;
The script is designed to use [http://dnrd.sourceforge.net/ dnrd] as the dns proxy. The [http://buildhost.automated.it/gta01 script] and a copy of [http://buildhost.automated.it/dnrd-2.20.3.tar.gz dnrd] are available from my site. The script also performs the initial setup of the connection as per the [[USB_Networking#Manual_method]] above.&lt;br /&gt;
&lt;br /&gt;
=== Proxying with a UDP forwarder ===&lt;br /&gt;
Another easy setup is using a udp forwarder like the one from http://www.tapor.com/udpf/ - is use it with the command&lt;br /&gt;
&lt;br /&gt;
 udpf-elf\&lt;br /&gt;
        -p=53\&lt;br /&gt;
        -f=`cat /etc/resolv.conf|awk '$1 == &amp;quot;nameserver&amp;quot;{print $2; exit(0);}'`:53&lt;br /&gt;
&lt;br /&gt;
=== Proxying with iptables ===&lt;br /&gt;
Its is possible to forward DNS requests with iptables using the DNAT target&lt;br /&gt;
&lt;br /&gt;
 iptables -t nat -A PREROUTING -p tcp -s 192.168.0.202 -d 192.168.0.200 --dport domain -j DNAT --to-destination 192.168.0.1&lt;br /&gt;
 iptables -t nat -A PREROUTING -p udp -s 192.168.0.202 -d 192.168.0.200 --dport domain -j DNAT --to-destination 192.168.0.1&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;tt&amp;gt;192.168.0.1&amp;lt;/tt&amp;gt; is the IP of your residential gateway (router). This is the easiest method, but its not recommended if you have a direct connection to the Internet as ISP DNS servers can change, and this does no load-balancing.&lt;br /&gt;
&lt;br /&gt;
= Connecting to phone =&lt;br /&gt;
&lt;br /&gt;
Then &amp;lt;tt&amp;gt;ssh root@192.168.0.202&amp;lt;/tt&amp;gt; with empty password to get into phone.&lt;br /&gt;
&lt;br /&gt;
NOTE: the ssh daemon (dropbear 0.49) on the OpenMoko appears to have a bug when sending the exit status back to the client. From time to time you receive an exit status of 255.&lt;br /&gt;
&lt;br /&gt;
===SSH Extras===&lt;br /&gt;
&lt;br /&gt;
If you get fed up with typing root@192.168.0.202, on your PC edit /etc/hosts and add an entry for 'phone'&lt;br /&gt;
&lt;br /&gt;
 192.168.0.202 phone&lt;br /&gt;
&lt;br /&gt;
then edit ~/.ssh/config (or create it) and add&lt;br /&gt;
&lt;br /&gt;
 host phone&lt;br /&gt;
 user root&lt;br /&gt;
&lt;br /&gt;
then all you need to do is type &lt;br /&gt;
&lt;br /&gt;
 # ssh phone&lt;br /&gt;
&lt;br /&gt;
To avoid ssh added a new line for every ssh host-key to you known_hosts you can add the following to the phone section in ~/.ssh/config&lt;br /&gt;
&lt;br /&gt;
  UserKnownHostsFile /dev/null&lt;br /&gt;
&lt;br /&gt;
You might want to use keys to bypass the login prompt too.&lt;br /&gt;
&lt;br /&gt;
===SSH Keys===&lt;br /&gt;
====From host to phone====&lt;br /&gt;
&lt;br /&gt;
To generate ssh keys for use as a login mechanism type&lt;br /&gt;
&lt;br /&gt;
 ssh-keygen -t rsa&lt;br /&gt;
&lt;br /&gt;
when prompted for a password either hit enter for no password (''not really a good idea'') or enter a password for this key. ssh into the phone and create ~/.ssh&lt;br /&gt;
&lt;br /&gt;
 # mkdir ~/.ssh&lt;br /&gt;
&lt;br /&gt;
then from your PC copy the '''.pub''' file to the phone.&lt;br /&gt;
&lt;br /&gt;
 # scp ~/.ssh/id_rsa.pub phone:.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
You should now be able to ssh directly into the phone.&lt;br /&gt;
&lt;br /&gt;
To disable password logins ('''after setting up key access''') edit /etc/init.d/dropbear and change the following line:&lt;br /&gt;
&lt;br /&gt;
 DROPBEAR_EXTRA_ARGS=&lt;br /&gt;
&lt;br /&gt;
to &lt;br /&gt;
&lt;br /&gt;
 DROPBEAR_EXTRA_ARGS=&amp;quot;-s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You will need to restart dropbear for this to take effect.&lt;br /&gt;
&lt;br /&gt;
====From phone to host====&lt;br /&gt;
Generate the key&lt;br /&gt;
&lt;br /&gt;
  dropbearkey -t rsa -f id_rsa&lt;br /&gt;
&lt;br /&gt;
The output will look something like this:&lt;br /&gt;
&lt;br /&gt;
  Will output 1024 bit rsa secret key to 'id_rsa'&lt;br /&gt;
  Generating key, this may take a while...&lt;br /&gt;
  Public key portion is:&lt;br /&gt;
  ssh-rsa AAAAB3Nza[...]&lt;br /&gt;
  Fingerprint: md5 ca:e8:f0:b7:f6:7b:c2:b6:b9:71:e4:45:86:a9:ff:b8&lt;br /&gt;
&lt;br /&gt;
Copy and paste the one line (in this example, starting with 'ssh-rsa' onto the end of the host's authorized_keys file (often in ~/.ssh/).&lt;br /&gt;
&lt;br /&gt;
From the phone, ssh with -i:&lt;br /&gt;
&lt;br /&gt;
  ssh -i id_rsa user@host&lt;br /&gt;
&lt;br /&gt;
This works for me.  I ripped off these instructions from: [[http://forum.openwrt.org/viewtopic.php?pid=53705]]&lt;br /&gt;
&lt;br /&gt;
===GUI on desktop through SSH===&lt;br /&gt;
&lt;br /&gt;
If you need to get the GUI on the phone onto the desktop via usb, you can use ssh as follows&lt;br /&gt;
&lt;br /&gt;
  ssh -l root -X -v 192.168.0.202&lt;br /&gt;
&lt;br /&gt;
Login, and run openmoko-finger-demo for example, and it will open up on the desktop. To get landscape view, just resize the GUI window on the desktop.&lt;br /&gt;
&lt;br /&gt;
===Remote apps on neo===&lt;br /&gt;
&lt;br /&gt;
To get desktop apps to show up on your neo, first log in to the phone&lt;br /&gt;
&lt;br /&gt;
  ssh -l root 192.168.0.202&lt;br /&gt;
&lt;br /&gt;
Then once inside, run:&lt;br /&gt;
&lt;br /&gt;
  DISPLAY=:0 xhost +192.168.0.200&lt;br /&gt;
&lt;br /&gt;
After this you can close the ssh session. Back on the desktop computer, run:&lt;br /&gt;
&lt;br /&gt;
  DISPLAY=moko:0 xclock&lt;br /&gt;
&lt;br /&gt;
Note that the xhost command will allow remote applications on 192.168.0.200 to access the X server. It will allow anyone on the desktop machine to access the X server of the neo, including snooping anything you type on it. To disallow remote applications again, run this in the neo:&lt;br /&gt;
&lt;br /&gt;
  DISPLAY=:0 xhost -192.168.0.200&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;bottom&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; &lt;br /&gt;
{{Languages|USB Networking}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]]&lt;br /&gt;
[[Category:Implemented]]&lt;/div&gt;</summary>
		<author><name>Chooseopen</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Manually_using_Bluetooth</id>
		<title>Manually using Bluetooth</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Manually_using_Bluetooth"/>
				<updated>2008-01-20T01:49:52Z</updated>
		
		<summary type="html">&lt;p&gt;Chooseopen: /* Being able to use HID devices */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{InProgress}}&lt;br /&gt;
Bluetooth is one of the core functions of the Neo1973, however it is basically unimplemented on the software side at the moment.&lt;br /&gt;
Hardware problems in the P1 phone mean that the CPU has to be active in order to wake on external bluetooth events, which will reduce the battery life to some 2 days at best in standby.&lt;br /&gt;
&lt;br /&gt;
This page details how to use bluetooth from the command line.&lt;br /&gt;
We have quite a lot of plans about what exactly Bluetooth should be used for.&lt;br /&gt;
&lt;br /&gt;
== Power it up ==&lt;br /&gt;
&lt;br /&gt;
Power up the adapter by clicking on the bluetooth icon in the top bar and selecting power on.&lt;br /&gt;
&lt;br /&gt;
The old way to do it is a shell command:&lt;br /&gt;
&lt;br /&gt;
 root@fic-gta01:~$ echo &amp;quot;1&amp;quot; &amp;gt; /sys/bus/platform/devices/gta01-pm-bt.0/power_on&lt;br /&gt;
&lt;br /&gt;
At the shell, &amp;quot;hciconfig&amp;quot; should print information about the adapter if it powered up properly:&lt;br /&gt;
&lt;br /&gt;
 hciconfig&lt;br /&gt;
&lt;br /&gt;
The devices should show as UP. If not you can use &lt;br /&gt;
&lt;br /&gt;
 hciconfig &amp;lt;device&amp;gt; up&lt;br /&gt;
&lt;br /&gt;
== Bluetooth Functions ==&lt;br /&gt;
&lt;br /&gt;
===Configuring Bluetooth on OpenMoko 2007.2 (August 27 snapshot with kernel 2.6.21.6-moko11) ===&lt;br /&gt;
&lt;br /&gt;
In file /etc/bluetooth/hcid.conf you should change the passkey from BlueZ to something numeric. For testing you may use &amp;quot;0000&amp;quot;. Also, you can set the name to &amp;quot;Neo (%d)&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Scanning for bluetooth devices ===&lt;br /&gt;
&lt;br /&gt;
 hcitool scan&lt;br /&gt;
&lt;br /&gt;
This will list the addresses of any discoverable bluetooth devices in the vicinity&lt;br /&gt;
&lt;br /&gt;
=== passkey agent example ===&lt;br /&gt;
&lt;br /&gt;
There should be a passkey agent built into openmoko, but for now you can start up the example passkey agent and set the pin code there. This will allow for new pairings to be made when you attempt a connection.&lt;br /&gt;
&lt;br /&gt;
 passkey-agent --default 0000 &amp;amp;&lt;br /&gt;
&lt;br /&gt;
Note: the passkey-agent is not required in OpenMoko 2007.2 with kernel 2.6.21.6 as of at least since August 27 (maybe earlier).&lt;br /&gt;
&lt;br /&gt;
=== HID (Human Input Device) ===&lt;br /&gt;
&lt;br /&gt;
==== Being able to use HID devices ====&lt;br /&gt;
&lt;br /&gt;
We want to be able to use a bluetooth keyboard to type into the various applications of our Neo1973.&lt;br /&gt;
To use a Bluetooth Keyboard type: (11:22:33:44:55:66 is the Address of your BT-Keyboard)&lt;br /&gt;
&lt;br /&gt;
 hidd --connect 11:22:33:44:55:66&lt;br /&gt;
&lt;br /&gt;
and press &amp;quot;Connect&amp;quot; on your BT-KB.  Alternately, if you know that only one BT-Keyboard is within range, you can just:&lt;br /&gt;
&lt;br /&gt;
 hidd --search&lt;br /&gt;
&lt;br /&gt;
to find and connect to any BT-Keyboard.&lt;br /&gt;
&lt;br /&gt;
Tested on:&lt;br /&gt;
* [http://www.logitech.com/index.cfm/products/details/US/EN,CRID=2166,CONTENTID=10717 Logitech Dinovo Edge]&lt;br /&gt;
* [http://www.logitech.com/index.cfm/keyboards/keyboard_mice_combos/devices/164&amp;amp;cl=us,en Logitech Dinovo Media Desktop (keyboard)]&lt;br /&gt;
* [http://www.nokia.es/A4181580 Nokia SU-8W].  Switched on the BT keyboard, scanned for BT address and ran the connect statement above.  Works fine.&lt;br /&gt;
* [http://blog.russnelson.com/chordite Chordite].  This keyboard uses the Broadcom BCM2042 BT keyboard controller along with a custom driver.&lt;br /&gt;
* [http://www.apple.com/keyboard/ Apple's Aluminum Keyboard]. You may have to add 'auth enable; encrypt enable;' to device {} in  hcid.conf. Run the passkey agent the first time. --search works to pair and every time after.&lt;br /&gt;
* The freedom keyboard from freedominput.com and its many rebranded models (they look like this: [http://rabenfrost.net/openmoko/keyboard.jpg]) need 'modprobe uinput' to circumvent the 'Can't open input device: No such file or directory (2)' error of 'hidd --search' but it still not works on openmoko but on my ubuntu box - maybe another kernel module is missing?&lt;br /&gt;
&lt;br /&gt;
==== Acting as HID device ====&lt;br /&gt;
&lt;br /&gt;
We want to be able to use the Neo1973 as a HID device, being able to use it as controller for presentations.&lt;br /&gt;
&lt;br /&gt;
=== RFCOMM ===&lt;br /&gt;
&lt;br /&gt;
Here's how to connect to an external Bluetooth GPS and read NMEA data (Tested with a Holux GPSSlim236 and a Nokia LD-3W ).&lt;br /&gt;
&lt;br /&gt;
First, switch on the GPS and identify the BT address:&lt;br /&gt;
&lt;br /&gt;
  hcitool scan&lt;br /&gt;
&lt;br /&gt;
Then, edit /etc/bluetooth/rfcomm.conf, which by default has all settings commented out, to something like this:&lt;br /&gt;
&lt;br /&gt;
  rfcomm0 {&lt;br /&gt;
        # Automatically bind the device at startup&lt;br /&gt;
        bind no;&lt;br /&gt;
        # Bluetooth address of the device&lt;br /&gt;
        device 00:11:22:33:44:55;&lt;br /&gt;
        # RFCOMM channel for the connection (check your GPS docs for details)&lt;br /&gt;
        channel 1;&lt;br /&gt;
        # Description of the connection&lt;br /&gt;
        comment &amp;quot;Bluetooth GPS&amp;quot;;&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
Restart the BT services:&lt;br /&gt;
&lt;br /&gt;
  root@neo:~$ /etc/init.d/bluetooth stop&lt;br /&gt;
  root@neo:~$ /etc/init.d/bluetooth start&lt;br /&gt;
&lt;br /&gt;
You should now be able to bind the GPS to /dev/rfcomm0, like this:&lt;br /&gt;
&lt;br /&gt;
  root@neo:~$ rfcomm bind 0&lt;br /&gt;
&lt;br /&gt;
Confirm the connect:&lt;br /&gt;
&lt;br /&gt;
  root@neo:~$ rfcomm&lt;br /&gt;
  rfcomm0: 00:11:22:33:44:55 channel 1 clean &lt;br /&gt;
&lt;br /&gt;
... and watch the NMEA strings coming from your GPS:&lt;br /&gt;
&lt;br /&gt;
  root@neo:~$ cat /dev/rfcomm0 &lt;br /&gt;
  $GPGGA,111748.000,5907.6964,N,01121.1787,E,1,06,1.2,57.7,M,40.1,M,,0000*6F&lt;br /&gt;
  $GPRMC,111748.000,A,5907.6964,N,01121.1787,E,0.00,94.94,160807,,,A*50&lt;br /&gt;
  $GPVTG,94.94,T,,M,0.00,N,0.0,K,A*3D&lt;br /&gt;
&lt;br /&gt;
If you have nothing better to do, you can now pinpoint my office :-).&lt;br /&gt;
&lt;br /&gt;
=== OBEX ===&lt;br /&gt;
&lt;br /&gt;
=== Networking ===&lt;br /&gt;
&lt;br /&gt;
=== Bluetooth networking with a Linux system ===&lt;br /&gt;
&lt;br /&gt;
Bluetooth should behave just like our usbnet and provide full TCP/IP access to the phone.  BNEP has to be used.&lt;br /&gt;
&lt;br /&gt;
On the laptop&lt;br /&gt;
&lt;br /&gt;
* Start bluetooth&lt;br /&gt;
 elara /home/alphaone # /etc/init.d/bluetooth start&lt;br /&gt;
&lt;br /&gt;
* Start pand as server&lt;br /&gt;
 elara /home/alphaone # pand -s&lt;br /&gt;
&lt;br /&gt;
* As soon as pand is started on the phone configure your IP address&lt;br /&gt;
 elara /home/alphaone # ip a add 10.0.0.1/24 dev bnep0&lt;br /&gt;
 elara /home/alphaone # ip l set bnep0 up&lt;br /&gt;
&lt;br /&gt;
* Configure IP forwarding and masquerading to your liking (see [[USB_Networking]]). You can even set up Udev rules to do this for you once the bnep0 interface appears.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the Neo&lt;br /&gt;
&lt;br /&gt;
* Power on bluetooth (see above)&lt;br /&gt;
&lt;br /&gt;
* Scan for the laptop&lt;br /&gt;
 root@fic-gta01:~$ hcitool scan&lt;br /&gt;
 Scanning ...&lt;br /&gt;
         00:0E:6D:C0:0l:6A       Sho&lt;br /&gt;
         00:20:E0:5A:FE:C8       BlueZ (0)&lt;br /&gt;
&lt;br /&gt;
* Connect to the laptop pand&lt;br /&gt;
 root@fic-gta01:~$ pand -c 00:20:E0:5A:FE:C8&lt;br /&gt;
&lt;br /&gt;
* Configure your IP address&lt;br /&gt;
 ip a add 10.0.0.2/24 dev bnep0&lt;br /&gt;
 ip r add default via 10.0.0.1&lt;br /&gt;
&lt;br /&gt;
* Enjoy&lt;br /&gt;
&lt;br /&gt;
=== Bluetooth networking with a MacOS X system ===&lt;br /&gt;
&lt;br /&gt;
Please refer to [[MacOS_X#Bluetooth_2]]&lt;br /&gt;
&lt;br /&gt;
=== Bluetooth networking with a Windows XP system ===&lt;br /&gt;
&lt;br /&gt;
This was tested with a Windows XP SP2 on a IBM Thinkpad T41 with the Widcomm BT stack&lt;br /&gt;
&lt;br /&gt;
* Start bluetooth on Windows XP&lt;br /&gt;
&lt;br /&gt;
* Enable &amp;quot;Network Access&amp;quot; in the Bluetooth configuration&lt;br /&gt;
&lt;br /&gt;
* Scan for the Neo and pair with the Neo (right click, select pair)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
On the Neo&lt;br /&gt;
&lt;br /&gt;
* Enable PAN support on the Neo by changing Autostart from false to true in /etc/bluetooth/network.service&lt;br /&gt;
&lt;br /&gt;
* Power on bluetooth (see above)&lt;br /&gt;
&lt;br /&gt;
* Scan for the laptop&lt;br /&gt;
 root@fic-gta01:~$ hcitool scan&lt;br /&gt;
 Scanning ...&lt;br /&gt;
         &amp;lt;laptop_bt_address&amp;gt;     Thinkpad&lt;br /&gt;
         ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Connect to the laptop pand&lt;br /&gt;
 pand -c &amp;lt;laptop_bt_address&amp;gt; -r PANU -d NAP -e bnep0 -A -E -S&lt;br /&gt;
(add '-n' to see the pand status messages until you get it right)&lt;br /&gt;
&lt;br /&gt;
For some reason, I was not able to initiate PAN connections from the Neo, I got 'Permission denied (13)' even when I had explicitly allowed the Neo to connect (right click on Neo icon, set properties, on Authorization tab). But initiating 'PAN User' from Windows worked when executing on Neo:&lt;br /&gt;
 pand -l -r PANU -d NAP -e bnep0 -A -E -S&lt;br /&gt;
(add '-n' to see the pand status messages until you get it right)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* Configure your IP address. It should work like when connecting to Linux:&lt;br /&gt;
 ip a add 10.0.0.2/24 dev bnep0&lt;br /&gt;
 ip r add default via 10.0.0.1&lt;br /&gt;
If this does not work, the IP stacks may have auto-assigned network addresses to themselves. You can look this up with 'ifconfig' on the Neo and with 'ipconfig' on Windows.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* You should now be able to ssh/putty from Windows to your Neo. Enjoy!&lt;br /&gt;
By setting up the Windows Bluetooth connection properly, it should also be possible to share the Internet Connection of the Windows box with the Neo.&lt;br /&gt;
&lt;br /&gt;
=== PPP Networking ===&lt;br /&gt;
&lt;br /&gt;
If you are unable to use the 'BNEP' method described above, you may be able to use [[PPP]] and a DUN (dialup-networking) emulation mode. On the Neo:&lt;br /&gt;
&lt;br /&gt;
* Edit the /etc/default/bluetooth file and set the following options:&lt;br /&gt;
 RFCOMM_ENABLE=true&lt;br /&gt;
 DUND_ENABLE=true&lt;br /&gt;
 DUND_OPTIONS=&amp;quot;--listen --persist call dun&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Create an /etc/ppp/peers/dun file with options like the following:&lt;br /&gt;
 115200&lt;br /&gt;
 192.168.2.202:192.168.2.200&lt;br /&gt;
 passive&lt;br /&gt;
 local&lt;br /&gt;
 noipdefault&lt;br /&gt;
 noauth&lt;br /&gt;
 nodefaultroute&lt;br /&gt;
 &lt;br /&gt;
* Restart bluetooth (/etc/init.d/bluetooth stop ; /etc/init.d/bluetooth start)&lt;br /&gt;
&lt;br /&gt;
To connect from a MacOS 10.3 client:&lt;br /&gt;
&lt;br /&gt;
* Open &amp;quot;Applications/Utilities/Bluetooth Serial Utility&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Click on &amp;quot;New&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Choose a name, then click &amp;quot;Choose Device&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Locate your Neo, then select the &amp;quot;LAN Access Point&amp;quot; service. If your device is not found, or if this service does not show up, then you will need to troubleshoot and fix that before continuing. Bluetooth is designed for short-range communication, so make sure that the devices are physically close to each other. &lt;br /&gt;
&lt;br /&gt;
* Select &amp;quot;Port type: RS-232&amp;quot; and &amp;quot;Show in Network Preferences&amp;quot;. Click OK.&lt;br /&gt;
&lt;br /&gt;
* Open the Network Preferences page then &amp;quot;Show: Network Port Configurations&amp;quot;. Enable the new device that you defined in the previous step and drag it to the bottom of the device list (so that it will not interfere with your other network connections)&lt;br /&gt;
&lt;br /&gt;
* Choose &amp;quot;Show: &amp;lt;your-device-name&amp;gt;&amp;quot;, then click &amp;quot;Modem&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Select &amp;quot;Null Modem 115200&amp;quot; from the list of available devices. Uncheck &amp;quot;Wait for dial tone&amp;quot; and &amp;quot;Enable error correction and compression in modem&amp;quot;. Optionally check &amp;quot;Show modem status in menu bar&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
* Click &amp;quot;Connect&amp;quot;. If everything worked, you will end up with a 'ppp0' device on your Mac with a local address of 192.168.2.200 and you will be able to access your Neo at 192.168.2.202.&lt;br /&gt;
&lt;br /&gt;
=== A2DP quickie ===&lt;br /&gt;
&lt;br /&gt;
It's now possible (if a little hackish) to stream mp3 to a bluetooth headset. It's a known problem that the playback rate changes (pitch varies). Timing issues are also likely the reason for gaps in playback.&lt;br /&gt;
&lt;br /&gt;
If the bluez packages are recent enough, you can use a shortcut. I'll document it here and leave the longer version below (the long version also demonstrates the API used by the GUI to manage headsets)&lt;br /&gt;
&lt;br /&gt;
Create /etc/asound.conf with your bluetooth headset's address filled in:&lt;br /&gt;
&lt;br /&gt;
 pcm.!default {&lt;br /&gt;
  type bluetooth&lt;br /&gt;
  device &amp;quot;xx:xx:xx:xx:xx:xx&amp;quot;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
then play a song&lt;br /&gt;
&lt;br /&gt;
 madplay /media/card/song.mp3 --sample-rate=44100 --output=wave:- | aplay&lt;br /&gt;
&lt;br /&gt;
or for smoother results...&lt;br /&gt;
&lt;br /&gt;
 madplay /media/card/song.mp3 --sample-rate=44100 --output=wave:song.wav&lt;br /&gt;
 aplay song.wav&lt;br /&gt;
&lt;br /&gt;
=== A2DP ===&lt;br /&gt;
&lt;br /&gt;
If that doesn't work... all the more hackish... install required packages:&lt;br /&gt;
&lt;br /&gt;
 echo &amp;quot;src/gz python http://www.angstrom-distribution.org/unstable/feed/armv4t/python/&amp;quot; &amp;gt;&amp;gt; /etc/ipkg/angstrom-python.conf &lt;br /&gt;
 echo &amp;quot;src/gz base http://www.angstrom-distribution.org/unstable/feed/armv4t/base/&amp;quot; &amp;gt;&amp;gt; /etc/ipkg/angstrom-base.conf&lt;br /&gt;
 ipkg update ; ipkg install python-core python-xml python-dbus bluez-utils bluez-utils-alsa&lt;br /&gt;
&lt;br /&gt;
Create /etc/asound.conf:&lt;br /&gt;
&lt;br /&gt;
 pcm.!default {&lt;br /&gt;
  type bluetooth&lt;br /&gt;
 }&lt;br /&gt;
 ctl.!default {&lt;br /&gt;
  type bluetooth&lt;br /&gt;
 }&lt;br /&gt;
 pcm.bluetooth {&lt;br /&gt;
  type bluetooth&lt;br /&gt;
 }&lt;br /&gt;
 ctl.bluetooth {&lt;br /&gt;
  type bluetooth&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
Run the passkey agent (see above in this page)&lt;br /&gt;
&lt;br /&gt;
Fill in your bluetooth headset address below and execute the python script (with your headset turned on)&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 import dbus&lt;br /&gt;
 bus = dbus.SystemBus()&lt;br /&gt;
 manager = dbus.Interface(bus.get_object('org.bluez', '/org/bluez'), 'org.bluez.Manager')&lt;br /&gt;
 conn = manager.ActivateService('audio')&lt;br /&gt;
 audio = dbus.Interface(bus.get_object(conn, '/org/bluez/audio'), 'org.bluez.audio.Manager')&lt;br /&gt;
 path = audio.CreateDevice('00:0D:3C:44:33:22')&lt;br /&gt;
 audio.ChangeDefaultDevice(path)&lt;br /&gt;
 sink = dbus.Interface(bus.get_object(conn, path), 'org.bluez.audio.Sink')&lt;br /&gt;
 sink.Connect()&lt;br /&gt;
&lt;br /&gt;
FINALLY: play a song&lt;br /&gt;
&lt;br /&gt;
 madplay /media/card/song.mp3 --sample-rate=44100 --output=wave:- | aplay&lt;br /&gt;
&lt;br /&gt;
=== Headset Audio ===&lt;br /&gt;
&lt;br /&gt;
[[Neo1973_Audio_Subsystem]] has detail about alsa settings and a proposal for audio scenario management.&lt;br /&gt;
&lt;br /&gt;
To try this out, follow the instructions in the a2dp section to install software and run the passkey agent.&lt;br /&gt;
&lt;br /&gt;
Remove or disable the stuff you put in asound.conf. When using a voice headset, the application uses the regular system audio device and it gets routed to bluetooth in the codec.&lt;br /&gt;
&lt;br /&gt;
Put the headset in pairing mode. Replace the bluetooth address below with your headset's and run the python script:&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 import dbus&lt;br /&gt;
 bus = dbus.SystemBus()&lt;br /&gt;
 manager = dbus.Interface(bus.get_object('org.bluez', '/org/bluez'), 'org.bluez.Manager')&lt;br /&gt;
 conn = manager.ActivateService('audio')&lt;br /&gt;
 audio = dbus.Interface(bus.get_object(conn, '/org/bluez/audio'), 'org.bluez.audio.Manager')&lt;br /&gt;
 path = audio.CreateHeadset('00:0B:2E:39:33:22')&lt;br /&gt;
 audio.ChangeDefaultHeadset(path)&lt;br /&gt;
 headset = dbus.Interface (bus.get_object(conn, path), 'org.bluez.audio.Headset')&lt;br /&gt;
 headset.Connect()&lt;br /&gt;
 headset.Play()&lt;br /&gt;
&lt;br /&gt;
Now place a call and try to route it to bluetooth (after it's in progress):&lt;br /&gt;
&lt;br /&gt;
 alsactl -f /etc/gsmbluetooth.state restore&lt;br /&gt;
&lt;br /&gt;
You may also be able to listen to system audio given the right state file:&lt;br /&gt;
&lt;br /&gt;
 alsactl -f /etc/systembluetooth.state restore&lt;br /&gt;
 madplay song.mp3&lt;br /&gt;
&lt;br /&gt;
=== Bluetooth networking with a Linux system - More secure way ===&lt;br /&gt;
&lt;br /&gt;
''Check this, probably needs some corrections''&lt;br /&gt;
&lt;br /&gt;
Bluetooth should behave just like our usbnet and provide full TCP/IP access to the phone.  BNEP has to be used.&lt;br /&gt;
&lt;br /&gt;
On the laptop&lt;br /&gt;
&lt;br /&gt;
* check these options in /etc/bluetooth/hcid.conf&lt;br /&gt;
 security auto;&lt;br /&gt;
 passkey &amp;quot;your pin&amp;quot;;&lt;br /&gt;
 lm master;&lt;br /&gt;
&lt;br /&gt;
* Start bluetooth&lt;br /&gt;
 # /etc/init.d/bluetooth start&lt;br /&gt;
&lt;br /&gt;
* Start pand as server&lt;br /&gt;
  pand --listen --role NAP --encrypt&lt;br /&gt;
&lt;br /&gt;
* Add in /etc/network/interfaces (see [[USB_Networking]])&lt;br /&gt;
 auto bnep0&lt;br /&gt;
 iface bnep0 inet static&lt;br /&gt;
 address 192.168.1.1&lt;br /&gt;
 netmask 255.255.255.0&lt;br /&gt;
 network 192.168.1.0&lt;br /&gt;
        post-up iptables -A POSTROUTING -t nat -j MASQUERADE -s 192.168.1.0/24&lt;br /&gt;
        post-up echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        post-up iptables -P FORWARD ACCEPT&lt;br /&gt;
&lt;br /&gt;
On the Neo&lt;br /&gt;
&lt;br /&gt;
* Power on bluetooth (see above)&lt;br /&gt;
&lt;br /&gt;
* Scan for the laptop&lt;br /&gt;
 root@fic-gta01:~$ hcitool scan&lt;br /&gt;
 Scanning ...&lt;br /&gt;
         00:20:E0:5A:FE:C8       laptop&lt;br /&gt;
&lt;br /&gt;
* Set pin&lt;br /&gt;
 root@fic-gta01:~$ passkey-agent 'your pin' 00:20:E0:5A:FE:C8 &amp;amp;&lt;br /&gt;
&lt;br /&gt;
* Connect to the laptop pand&lt;br /&gt;
 root@fic-gta01:~$ pand -c 00:20:E0:5A:FE:C8&lt;br /&gt;
&lt;br /&gt;
* Configure your IP address&lt;br /&gt;
 root@fic-gta01:~$ ifconfig bnep0 192.168.1.2&lt;br /&gt;
 root@fic-gta01:~$ route add default gateway 192.168.1.1&lt;br /&gt;
&lt;br /&gt;
* Enjoy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Further reading ==&lt;br /&gt;
&lt;br /&gt;
http://www.holtmann.org/papers/bluetooth/ols2006_slides.pdf&lt;br /&gt;
http://wiki.bluez.org/wiki/Audio#org.bluez.Audio&lt;br /&gt;
&lt;br /&gt;
{{Languages|Manually_using_Bluetooth}}&lt;br /&gt;
[[Category:Neo1973 Hardware]]&lt;br /&gt;
[[Bluetooth]]&lt;/div&gt;</summary>
		<author><name>Chooseopen</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Users_Repositories</id>
		<title>Users Repositories</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Users_Repositories"/>
				<updated>2007-10-11T00:28:38Z</updated>
		
		<summary type="html">&lt;p&gt;Chooseopen: /* Repositories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Repositories ===&lt;br /&gt;
here you can find prebuilt kernels and root file systems.&lt;br /&gt;
&lt;br /&gt;
* official downloads&lt;br /&gt;
::http://buildhost.openmoko.org/OM2007.1/tmp/deploy/images/?C=M;O=D&lt;br /&gt;
::http://buildhost.openmoko.org/OM2007.2/tmp/deploy/glibc/images/fic-gta01/?C=M;O=D&lt;br /&gt;
:* the 2007.08 snapshot, as announced by Sean on August 19&lt;br /&gt;
:::http://buildhost.openmoko.org/snapshots/2007.08/images/&lt;br /&gt;
* [[User:ChooseOpen|ChooseOpen]] unofficial builds:&lt;br /&gt;
::http://chooseopen.com:81/openmoko/build/2007.1/?M=D&lt;br /&gt;
::http://chooseopen.com:81/openmoko/build/2007.2/?M=D&lt;br /&gt;
::http://chooseopen.com:81/openmoko/build/qtopia/?M=D (Qtopia)&lt;br /&gt;
* [[User:ScaredyCat|ScaredyCat]] unofficial builds:&lt;br /&gt;
::http://buildhost.automated.it/OM2007.1/?M=D&lt;br /&gt;
::http://buildhost.automated.it/OM2007.2/?M=D&lt;br /&gt;
&lt;br /&gt;
::ScaredyCat also has a ipkg repository for 2007.2 where e.g. gpe-filemanager and a lot more (e.g. ntpd) can be installed from. On the Neo do:&lt;br /&gt;
&lt;br /&gt;
 cd /etc/ipkg&lt;br /&gt;
 wget http://buildhost.automated.it/OM2007.2/packages/scaredycat.conf &lt;br /&gt;
 ipkg update&lt;br /&gt;
 ipkg install gpe-filemanager&lt;br /&gt;
 ipkg install gpe-timesheet&lt;br /&gt;
 ipkg install gpe-todo&lt;br /&gt;
 ipkg install mysql&lt;br /&gt;
 ipkg install mtpaint&lt;br /&gt;
 ipkg install sqlite&lt;br /&gt;
 ipkg install ntp&lt;br /&gt;
 #(you get the idea)&lt;br /&gt;
 /etc/init.d/xserver-nodm restart    # to make the new applications appear in the menu&lt;br /&gt;
&lt;br /&gt;
* - (2007.2)&lt;br /&gt;
::http://ipkg.nslu2-linux.org/feeds/openmoko/images/?C=M;O=D&lt;br /&gt;
* - (2007.2)&lt;br /&gt;
::http://www.totalueberwachung.de/~alphaone/openmoko-build/glibc/images/fic-gta01/?C=M;O=D&lt;br /&gt;
* - (2007.2)&lt;br /&gt;
::http://celtune.morb-design.com/images/fic-gta01/?C=M;O=D&lt;br /&gt;
::http://celtune.morb-design.com/ipk/&lt;br /&gt;
::Celtune offers Standard-Builds (.jffs2, .tar, .bin, .ipk) &lt;br /&gt;
&lt;br /&gt;
 cd /etc/ipkg &amp;amp;&amp;amp; wget http://celtune.morb-design.com/celtune.conf&lt;br /&gt;
&lt;br /&gt;
If you want to add a link, it would be nice to enforce a standard format of these feeds so that they can be browsed automatically.&lt;/div&gt;</summary>
		<author><name>Chooseopen</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Neo_1973_audio_subsystem</id>
		<title>Neo 1973 audio subsystem</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Neo_1973_audio_subsystem"/>
				<updated>2007-07-28T04:05:08Z</updated>
		
		<summary type="html">&lt;p&gt;Chooseopen: /* Phase0 Quick Start */  Streaming Radio&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Phase0 Quick Start ===&lt;br /&gt;
&lt;br /&gt;
In my experience this works but what comes out is not stereo and it comes out the speaker and headphones.&lt;br /&gt;
&lt;br /&gt;
 alsactl -f /etc/alsa/stereoout.state restore&lt;br /&gt;
 madplay myfavoritesong.mp3&lt;br /&gt;
&lt;br /&gt;
Another simple test (assuming you have USB networking configured) is to listen to a radio stream:&lt;br /&gt;
&lt;br /&gt;
 wget -O - http://radioparadise.steadyhost.com:8050 | madplay -&lt;br /&gt;
&lt;br /&gt;
If for some reason you're missing stereoout.state, try getting a similar copy (a couple of volume levels are different is all)&lt;br /&gt;
&lt;br /&gt;
  wget http://opensource.wolfsonmicro.com/~gg/neo1973/stereoout.state&lt;br /&gt;
&lt;br /&gt;
=== Voice Calls ===&lt;br /&gt;
&lt;br /&gt;
neo uses http://wolfson.co.uk/products/WM8753/ , picture of its internal signal routing is at http://wolfson.co.uk/uploads/images/en//WM8753_BlockDiagram.gif .&lt;br /&gt;
&lt;br /&gt;
==== using phone-internal microphone and speaker ====&lt;br /&gt;
&lt;br /&gt;
This is the default case.&lt;br /&gt;
&lt;br /&gt;
* microphone path&lt;br /&gt;
** input: built in microphone attached to wolfson MIC2/MIC2N&lt;br /&gt;
** routed from wolfson MIC2/MIC2N to MONO1/MONO2&lt;br /&gt;
** arrives at GSM Modem input MICIP/MICIN&lt;br /&gt;
* speaker path&lt;br /&gt;
** input: GSM Modem attached to wolfson RXN/RXP&lt;br /&gt;
** routed from wolfson RXN/RXP to ROUT1/LOUT1&lt;br /&gt;
** arrives on LM4857 RIN/LIN&lt;br /&gt;
** routed on LM4856 to EP+/EP-&lt;br /&gt;
&lt;br /&gt;
===== Internal Codec Route =====&lt;br /&gt;
&lt;br /&gt;
Neo Mode is GSM Handset&lt;br /&gt;
Amp Mode is Call Speaker&lt;br /&gt;
&lt;br /&gt;
* audio path Mic -&amp;gt; GSM&lt;br /&gt;
** MIC2/MIC2N&lt;br /&gt;
** Mic2 Volume&lt;br /&gt;
** ALC Micer Mic2&lt;br /&gt;
** Left PGA&lt;br /&gt;
** Mic Sidetone Mux [Left PGA]&lt;br /&gt;
** Mono Sidetone Volume&lt;br /&gt;
** Mono Mixer Sidetone Playback Switch&lt;br /&gt;
** Mono Volume&lt;br /&gt;
** Mono 2 Mux [Inverted Mono 1]&lt;br /&gt;
&lt;br /&gt;
* audio path GSM -&amp;gt; Speaker&lt;br /&gt;
** RXP/RXN&lt;br /&gt;
** Rx Mixer [RXP - RXN]&lt;br /&gt;
** Line Left Mux [Rx Mix]/Line Right Mux [Rx Mix]&lt;br /&gt;
** Left Mixer Bypass Playback Switch/Right Mixer Bypass Playback Switch&lt;br /&gt;
** Headphone Volume&lt;br /&gt;
&lt;br /&gt;
===== Driver Status =====&lt;br /&gt;
&lt;br /&gt;
This should be supported by ASoC 0.13rc3 (-moko7 kernel) on.&lt;br /&gt;
&lt;br /&gt;
ASoC 0.13.3 should have same functionality but has renamed the soundcard to neo1973.&lt;br /&gt;
&lt;br /&gt;
===== asound.state =====&lt;br /&gt;
&lt;br /&gt;
https://people.openmoko.org/laforge/gta01/gta01b_v2/alsa/gsmhandset.state&lt;br /&gt;
&lt;br /&gt;
For ASoC 0.13.3 http://opensource.wolfsonmicro.com/~gg/neo1973/gsmhandset.state&lt;br /&gt;
&lt;br /&gt;
==== using analog (4pin 2.5mm) headset ====&lt;br /&gt;
&lt;br /&gt;
This is also a quite common case, since we ship the headset with the&lt;br /&gt;
phone&lt;br /&gt;
&lt;br /&gt;
Headset Detection is done via GPIO on S3C2410&lt;br /&gt;
&lt;br /&gt;
* microphone path&lt;br /&gt;
** input: headset mic vial HS_MIC attached to wolfson MIC1&lt;br /&gt;
** routed from wolfson MIC1 to MONO1/MONO2&lt;br /&gt;
** arrives at GSM Modem input MICIP/MICIN&lt;br /&gt;
* speaker path&lt;br /&gt;
** input: GSM Modem attached to wolfson RXN/RXP&lt;br /&gt;
** routed from wolfson RXN/RXP to ROUT1/LOUT1&lt;br /&gt;
** arrives on LM4857 RIN/LIN&lt;br /&gt;
** routed on LM4856 to LHP/RHP&lt;br /&gt;
&lt;br /&gt;
===== Internal Codec Route =====&lt;br /&gt;
&lt;br /&gt;
Neo Mode is GSM Headset&lt;br /&gt;
Amp Mode is Headphones&lt;br /&gt;
&lt;br /&gt;
* audio path Mic -&amp;gt; GSM&lt;br /&gt;
** MIC1&lt;br /&gt;
** Mic Selection Mux [Mic 1]&lt;br /&gt;
** ALC Mixer Mic1&lt;br /&gt;
** Left PGA&lt;br /&gt;
** Mic Sidetone Mux [Left PGA]&lt;br /&gt;
** Mono Sidetone Volume&lt;br /&gt;
** Mono Mixer Sidetone Playback Switch&lt;br /&gt;
** Mono Volume&lt;br /&gt;
** Mono 2 Mux [Inverted Mono 1]&lt;br /&gt;
&lt;br /&gt;
* Audio path GSM -&amp;gt; Headphones&lt;br /&gt;
** RXP/RXN&lt;br /&gt;
** Rx Mixer [RXP - RXN]&lt;br /&gt;
** Line Left Mux [Rx Mix]/Line Right Mux [Rx Mix]&lt;br /&gt;
** Left Mixer Bypass Playback Switch/Right Mixer Bypass Playback Switch&lt;br /&gt;
** Headphone Volume&lt;br /&gt;
&lt;br /&gt;
===== Driver Status =====&lt;br /&gt;
&lt;br /&gt;
Supported in ASoC 0.13.3&lt;br /&gt;
&lt;br /&gt;
===== asound.state =====&lt;br /&gt;
&lt;br /&gt;
http://opensource.wolfsonmicro.com/~gg/neo1973/gsmheadset.state&lt;br /&gt;
&lt;br /&gt;
==== using Bluetooth headset with GSM ====&lt;br /&gt;
&lt;br /&gt;
Headset detection via software&lt;br /&gt;
&lt;br /&gt;
* microphone path&lt;br /&gt;
** input: from bluetooth via PCM interface to wolfson&lt;br /&gt;
** wolfson: DAC&lt;br /&gt;
** wolfson routes analog signal to MONO1/MONO2&lt;br /&gt;
** arrives at GSM Modem input MICIP/MICIN&lt;br /&gt;
* speaker path&lt;br /&gt;
** input: GSM Modem attached to wolfson RXN/RXP&lt;br /&gt;
** wolfson: ADC&lt;br /&gt;
** wolfson: routes digital signal to PCM&lt;br /&gt;
** arrives on bluetooth chip via PCM&lt;br /&gt;
&lt;br /&gt;
===== Internal Codec Route =====&lt;br /&gt;
&lt;br /&gt;
Neo Mode is GSM Bluetooth&lt;br /&gt;
Amp Mode is Off&lt;br /&gt;
&lt;br /&gt;
* audio path BT -&amp;gt; GSM&lt;br /&gt;
** Vx DAC&lt;br /&gt;
** Mono Voice Volume&lt;br /&gt;
** Mono Mixer Voice Playback Switch&lt;br /&gt;
** Mono Volume&lt;br /&gt;
** Mono 2 Mux [Inverted Mono 1]&lt;br /&gt;
&lt;br /&gt;
* audio path GSM -&amp;gt; BT&lt;br /&gt;
** RXP/RXN&lt;br /&gt;
** Rx Mixer [RXP - RXN]&lt;br /&gt;
** ALC Mixer Rx&lt;br /&gt;
** Left PGA&lt;br /&gt;
** Capture Mixer Mux [PGA]&lt;br /&gt;
** Capture Left Mixer [Analogue Mix Left]&lt;br /&gt;
** Left ADC&lt;br /&gt;
&lt;br /&gt;
===== Driver Status =====&lt;br /&gt;
&lt;br /&gt;
Should be support by ASoC 0.13.3&lt;br /&gt;
&lt;br /&gt;
Example of how to setup PCM-&amp;gt;BT link.&lt;br /&gt;
&lt;br /&gt;
http://opensource.wolfsonmicro.com/~gg/bluetooth-pcm/bluetooth_pcm.c&lt;br /&gt;
&lt;br /&gt;
===== asound.state =====&lt;br /&gt;
&lt;br /&gt;
http://opensource.wolfsonmicro.com/~gg/neo1973/gsmbluetooth.state&lt;br /&gt;
&lt;br /&gt;
==== using Bluetooth headset with system audio ====&lt;br /&gt;
&lt;br /&gt;
For example, using a voip app on the phone with a bt voice headset. This would also be a good way to work on the bluetooth driver without requiring a working GSM and placing a lot of calls.&lt;br /&gt;
&lt;br /&gt;
See ticket 583 for a state file that should route system audio *out* to the headset. The codec does not allow for duplex system audio connected to a headset, so audio in is still using the mic.&lt;br /&gt;
&lt;br /&gt;
=== Multimedia ===&lt;br /&gt;
&lt;br /&gt;
==== sound playback to speakers ====&lt;br /&gt;
&lt;br /&gt;
This is an important mode since it is also required for ringtone&lt;br /&gt;
playback&lt;br /&gt;
&lt;br /&gt;
* speaker path &lt;br /&gt;
** input: from S3C2410 via IIS interface to wolfson&lt;br /&gt;
** wolfson: DAC&lt;br /&gt;
** wolfson: route to ROUT1/LOUT1&lt;br /&gt;
** LM4857: arrives on RIN/LIN&lt;br /&gt;
** LM4857: route to LLS+-/RLS+-&lt;br /&gt;
&lt;br /&gt;
===== Driver Status =====&lt;br /&gt;
&lt;br /&gt;
This is working since ASoC 0.13rc2 (-moko6 kernel)&lt;br /&gt;
&lt;br /&gt;
This should also work on ASoC 0.13.3&lt;br /&gt;
&lt;br /&gt;
===== asound.state =====&lt;br /&gt;
&lt;br /&gt;
https://people.openmoko.org/laforge/gta01/gta01b_v2/alsa/stereoout.state&lt;br /&gt;
&lt;br /&gt;
For ASoC 0.13.3 http://opensource.wolfsonmicro.com/~gg/neo1973/stereoout.state&lt;br /&gt;
&lt;br /&gt;
==== sound playback to headphone ====&lt;br /&gt;
&lt;br /&gt;
* speaker path&lt;br /&gt;
** input: from S3C2410 via IIS interface to wolfson&lt;br /&gt;
** wolfson: DAC&lt;br /&gt;
** wolfson: route to ROUT1/LOUT1&lt;br /&gt;
** LM4857: arrives on RIN/LIN&lt;br /&gt;
** routed on LM4856 to LHP/RHP&lt;br /&gt;
&lt;br /&gt;
===== Driver Status =====&lt;br /&gt;
&lt;br /&gt;
This is working since ASoC 0.13rc2 (-moko6 kernel)&lt;br /&gt;
&lt;br /&gt;
==== sound playback via A2DP ====&lt;br /&gt;
&lt;br /&gt;
One way to do this is to use a pulse plugin for bluetooth audio. Pulse would be routed either to the plugin or the default route to the codec. The plugin would watch for headset connect/disconnect events generated by a bluez audio daemon to keep the list of available output devices current.&lt;br /&gt;
&lt;br /&gt;
===== Driver Status =====&lt;br /&gt;
&lt;br /&gt;
There is early work on the bluez daemon to handle this. It has been combined with an alsa plugin in the bluez tree but the alsa plugin probably will not be sufficient for neo.&lt;br /&gt;
&lt;br /&gt;
==== voice recording ==== &lt;br /&gt;
&lt;br /&gt;
This is mainly used to record notes&lt;br /&gt;
&lt;br /&gt;
* microphone path&lt;br /&gt;
** can be from built-in mic&lt;br /&gt;
** or from headset&lt;br /&gt;
** or bluetooth headset&lt;br /&gt;
&lt;br /&gt;
===== Driver Status =====&lt;br /&gt;
&lt;br /&gt;
UNKNOWN&lt;br /&gt;
&lt;br /&gt;
=== Call recording ===&lt;br /&gt;
&lt;br /&gt;
This is a nice wishlist item.  The user should be able to receive the&lt;br /&gt;
full-duplex audio from the wolfson codec, and record it using the&lt;br /&gt;
S3C2410 IIS.  &lt;br /&gt;
&lt;br /&gt;
==== recording ====&lt;br /&gt;
&lt;br /&gt;
FIXME&lt;br /&gt;
===== Driver Status =====&lt;br /&gt;
&lt;br /&gt;
UNKNOWN&lt;br /&gt;
==== playback ====&lt;br /&gt;
&lt;br /&gt;
FIXME&lt;br /&gt;
===== Driver Status =====&lt;br /&gt;
&lt;br /&gt;
UNKNOWN&lt;br /&gt;
&lt;br /&gt;
== Userspace Sound Control Daemon ==&lt;br /&gt;
&lt;br /&gt;
The userspace sound control deamon might be a separate process or (more likely) part of some larger general hardware management daemon.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
It will provide the following features:&lt;br /&gt;
&lt;br /&gt;
=== audio playback ===&lt;br /&gt;
&lt;br /&gt;
In order to provide the desired functionality, the daemon first needs to be capable of doing audio playback.&lt;br /&gt;
&lt;br /&gt;
* supported formats&lt;br /&gt;
** mp3 (libmad)&lt;br /&gt;
** ogg/vorbis (libtremor)&lt;br /&gt;
** mod (mikmod)&lt;br /&gt;
** sid (sidplay)&lt;br /&gt;
* supported functionality&lt;br /&gt;
** start and stop playback&lt;br /&gt;
** interrupt previous sound to play new sound&lt;br /&gt;
** enqueue new sound at end of previous sound&lt;br /&gt;
** smooth fade-in/fade-out&lt;br /&gt;
&lt;br /&gt;
=== audio event management ===&lt;br /&gt;
* manage a set of events (basically just a name for each event)&lt;br /&gt;
* manage a set of audio themes&lt;br /&gt;
** each theme contains list of event-&amp;gt;audio_file_name mappings&lt;br /&gt;
** themes stored/managed via gconf&lt;br /&gt;
* manage event sources&lt;br /&gt;
** built-in event sources, e.g. touchscreen/button press&lt;br /&gt;
** external event sources (e.g. gsmd, dbus, ...)&lt;br /&gt;
&lt;br /&gt;
=== audio scenario management ===&lt;br /&gt;
* e.g. dialer or even gsmd can request audio subsystem to switch to voicecall mode&lt;br /&gt;
* this mainly affects codec/amplifier analog audio routing&lt;br /&gt;
* integrated with bluetooth in case of BT headset or A2DP use&lt;br /&gt;
* How is this management performed currently?&lt;br /&gt;
&lt;br /&gt;
== Important issues/pitfalls ==&lt;br /&gt;
&lt;br /&gt;
=== Ringtone while headset playback ===&lt;br /&gt;
&lt;br /&gt;
If the user is listening to music on the headset, do we want to mix the&lt;br /&gt;
ring tones only into the headset audio, or actually interrupt and play it&lt;br /&gt;
on the speaker?&lt;br /&gt;
&lt;br /&gt;
[[Category:Neo1973 Hardware]]&lt;/div&gt;</summary>
		<author><name>Chooseopen</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:ChooseOpen</id>
		<title>User:ChooseOpen</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:ChooseOpen"/>
				<updated>2007-07-26T16:46:41Z</updated>
		
		<summary type="html">&lt;p&gt;Chooseopen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Gollum-OpenMoko.jpg]]&lt;/div&gt;</summary>
		<author><name>Chooseopen</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Openmoko_Local_Groups:_Chicago</id>
		<title>Openmoko Local Groups: Chicago</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Openmoko_Local_Groups:_Chicago"/>
				<updated>2007-07-26T15:31:41Z</updated>
		
		<summary type="html">&lt;p&gt;Chooseopen: Added myself&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the Chicago Openmoko page!&lt;br /&gt;
&lt;br /&gt;
This group is for anyone in Chicago and surrounding areas. Hopefully we'll be able to organize an event for when a few of us get the Neo1973s.&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Jason Elwell [ChooseOpen] - jason *at*chooseopen.com&lt;/div&gt;</summary>
		<author><name>Chooseopen</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Getting_Started_with_your_Neo_1973</id>
		<title>Getting Started with your Neo 1973</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Getting_Started_with_your_Neo_1973"/>
				<updated>2007-07-26T04:58:43Z</updated>
		
		<summary type="html">&lt;p&gt;Chooseopen: /* Hardware */  Need to re-flash&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Some first steps guide for those who have just received their first Neo1973 hardware&lt;br /&gt;
&lt;br /&gt;
== Hardware ==&lt;br /&gt;
&lt;br /&gt;
=== Inserting the battery ===&lt;br /&gt;
&lt;br /&gt;
See [[Disassembling Neo1973]].&lt;br /&gt;
&lt;br /&gt;
=== Powering up the phone ===&lt;br /&gt;
[[Image:Neo1973_uboot_splash.jpg|200px|thumb|bootloader splash screen]]&lt;br /&gt;
Just hitting the power button (depending on your [[u-boot]] version you have to press for &amp;gt;= 5 seconds) should get the phone first into the bootloader, then boot the kernel, and get into  X/OpenMoko.  &lt;br /&gt;
&lt;br /&gt;
Once you have pressed the power button sufficiently long, the vibrator makes a short pulse and the screen backlight turns on. You can now release the power button and watch the phone booting.&lt;br /&gt;
&lt;br /&gt;
If the battery is not sufficiently charged, the phone will not turn on, even if the usb cable is plugged in.&lt;br /&gt;
&lt;br /&gt;
=== Flashing the Neo1973 GTA01v4 ===&lt;br /&gt;
The GTA01v4 devices that are currently shipping do not boot out of the box.  Flashing the phone with the latest kernel and supporting file system (&amp;quot;rootfs&amp;quot;) is required before the phone will successfully boot.&lt;br /&gt;
&lt;br /&gt;
Read more information at about [[Flashing openmoko]].&lt;br /&gt;
  &lt;br /&gt;
&lt;br /&gt;
=== Powering down the phone ===&lt;br /&gt;
&lt;br /&gt;
==== While in bootloader mode, or if the phone has crashed ====&lt;br /&gt;
&lt;br /&gt;
If you press the power button for 9 seconds, the phone will switch off.  You can notice this by the backlight going dark.&lt;br /&gt;
&lt;br /&gt;
==== While running a full linux system with userspace ====&lt;br /&gt;
&lt;br /&gt;
In this mode, a power-button press of 5 seconds will be sufficient.  After this, the init process will take care of safely shutting down the phone, which might take up to 20 extra seconds.  The X server should get killed, you should drop back to a (garbled) console, and it should finally switch off - much like a regular Linux PC.&lt;br /&gt;
&lt;br /&gt;
=== Battery charging ===&lt;br /&gt;
&lt;br /&gt;
The [[Neo1973]] supports two charging modes: One 100mA charge mode (called pre-charge) and 500mA (called fast charge).  Charging is always done via the USB socket.  You can use any USB-A to USB-mini-B cable to connect the phone to any USB host.&lt;br /&gt;
&lt;br /&gt;
==== While in u-boot ====&lt;br /&gt;
&lt;br /&gt;
While you are in u-boot mode, the phone only charges with 100mA by default.  (This will change in one of the future revisions).&lt;br /&gt;
&lt;br /&gt;
However, using the u-boot console you can manually enable fast charging. See [[U-boot#Battery_charger_related]] for more information.&lt;br /&gt;
&lt;br /&gt;
==== While in Linux ====&lt;br /&gt;
&lt;br /&gt;
As soon as the phone is connected via USB cable, it will charge.  However, the default charging current is only 100mA, way too little if you want to operate the phone and charge at the same time. &lt;br /&gt;
&lt;br /&gt;
If your USB upstream port is capable of supplying 500mA, then it will configure the Neo1973 accordingly and use 500mA charging mode.  You can notice this by the following line in the kernel log&lt;br /&gt;
 usb0: full speed config #1: 500 mA, Ethernet Gadget, using CDC Ethernet&lt;br /&gt;
&lt;br /&gt;
=== Inserting the SIM card (optional) ===&lt;br /&gt;
&lt;br /&gt;
The slot is found just under the battery.  The card holder has arrows indicating which way to push it to unlock it - make sure you don't open it with force when it's locked or it may break.  Insert the SIM so that the pads make contact and push the holder firmly until it makes a click, then lock it - otherwise the card will not be detected.&lt;br /&gt;
&lt;br /&gt;
To check if the SIM card is inserted correctly in Linux, you can have a look in gsmd logs or use the instructions detailed in the [[Manually using GSM]] page and issue the ''AT+CIMI'' command.&lt;br /&gt;
&lt;br /&gt;
== Getting shell access on the phone ==&lt;br /&gt;
&lt;br /&gt;
=== By using the terminal emulator and on-screen keyboard ===&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Click&amp;quot; (using a stylus) the top-left arrow icon to get a drop-down menu with &amp;quot;Media&amp;quot;, &amp;quot;Settings&amp;quot;, &amp;quot;Utilities&amp;quot; and &amp;quot;Desktop&amp;quot;.  Choose &amp;quot;Utilities-&amp;gt;Panel-&amp;gt;Input Manager&amp;quot;, and a keyboard icon will appear on the top bar.  You can get an on-screen keyboard at any time by choosing it.&lt;br /&gt;
&lt;br /&gt;
With newer images, the keyboard comes up when you tap the white box in the top bar.&lt;br /&gt;
&lt;br /&gt;
From the desktop, choose &amp;quot;Active tasks-&amp;gt;rxvt&amp;quot; to get a root shell.&lt;br /&gt;
&lt;br /&gt;
Terminal is in the top level menu in recent images.&lt;br /&gt;
&lt;br /&gt;
=== By using Ethernet emulation over a USB cable ===&lt;br /&gt;
&lt;br /&gt;
The standard Neo1973 Linux [[kernel]] has support for the &amp;quot;cdc_ether USB gadget&amp;quot;, i.e. a standard implementation of how to emulate an Ethernet device over USB.&lt;br /&gt;
&lt;br /&gt;
As soon as the kernel is up and running, and you have the phone connected via USB, you should get a '''usb0''' device on your host.  &lt;br /&gt;
&lt;br /&gt;
The Phone will have the IPv4 address 192.168.0.202/24.  You can run `ifconfig` in the terminal on the phone to verify this (this is optional, just check it if it doesn't work given the instructions below)&lt;br /&gt;
&lt;br /&gt;
If you plug a USB cable into a laptop running Linux, you'll likely see the &amp;quot;cdc_ether&amp;quot; kernel module being loaded and a usb0 network interface appear.  &lt;br /&gt;
&lt;br /&gt;
On the '''host PC''', you should then configure your interface to 192.168.0.200 by using&lt;br /&gt;
 # ifconfig usb0 192.168.0.200 netmask 255.255.255.0&lt;br /&gt;
&lt;br /&gt;
Then you should be able to&lt;br /&gt;
 # ping 192.168.0.202&lt;br /&gt;
&lt;br /&gt;
and last, but not least&lt;br /&gt;
 # ssh root@192.168.0.202&lt;br /&gt;
&lt;br /&gt;
Once you press 'enter' (empty password), you should now have a root login.&lt;br /&gt;
&lt;br /&gt;
See [[USB_Networking]] for more details, including instructions on how to automatically setup masquerading so that your phone can get access to the internet through the host PC.&lt;br /&gt;
&lt;br /&gt;
=== By using the debug board/serial/JTAG ===&lt;br /&gt;
&lt;br /&gt;
Please see [[Debug Board#Usage_Instructions]]&lt;br /&gt;
&lt;br /&gt;
== Getting access to the bootloader console ==&lt;br /&gt;
&lt;br /&gt;
Please see [[u-boot#Using_usbtty_from_Linux]]&lt;br /&gt;
&lt;br /&gt;
== Useful commands in Linux ==&lt;br /&gt;
&lt;br /&gt;
=== Suspending ===&lt;br /&gt;
&lt;br /&gt;
Writing &amp;quot;mem&amp;quot; into ''/sys/power/state'' tells Linux to suspend - it will enter a low power mode where only the GSM and RAM are powered up and the CPU sleeps.  It will persist in this state until a wake-up event arrives.  Some currently enabled wake-up events are: AUX or POWER key press, USB cable detect.&lt;br /&gt;
&lt;br /&gt;
If you're connected over ssh, sshd will stop responding when the OS suspends, so to avoid locking up your ssh client, use the command&lt;br /&gt;
 # (sleep 1; echo mem &amp;gt; /sys/power/state) &amp;amp; exit&lt;br /&gt;
&lt;br /&gt;
=== Initial backup ===&lt;br /&gt;
&lt;br /&gt;
After getting your new Neo1973 booted for the first time you might want to make a back up of the original flash chip contents on your PC, before you overwrite the flash with a custom image or just update to a newer build.  This is a good idea because there are parts in the root filesystem that can't be distributed over internet so they are only found in the shipped ROM (see the [[GPS]] driver).  One easy way to back up all of the Flash, that doesn't require installing any special software, is with ''netcat'' over the [[USB Networking|USB ethernet]].  The following commands can be used for that.&lt;br /&gt;
{|&lt;br /&gt;
! On the host !! On the target&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
$ netcat -l -p 20000 &amp;gt; mtdblock0&lt;br /&gt;
$ netcat -l -p 20000 &amp;gt; mtdblock1&lt;br /&gt;
$ netcat -l -p 20000 &amp;gt; mtdblock2&lt;br /&gt;
$ netcat -l -p 20000 &amp;gt; mtdblock3&lt;br /&gt;
$ netcat -l -p 20000 &amp;gt; mtdblock4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|&amp;lt;pre&amp;gt;&lt;br /&gt;
# cat /dev/mtdblock0 | nc 192.168.0.200 20000&lt;br /&gt;
# cat /dev/mtdblock1 | nc 192.168.0.200 20000&lt;br /&gt;
# cat /dev/mtdblock2 | nc 192.168.0.200 20000&lt;br /&gt;
# cat /dev/mtdblock3 | nc 192.168.0.200 20000&lt;br /&gt;
# cat /dev/mtdblock4 | nc 192.168.0.200 20000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This stores the five NAND partitions in files named mtdblock*.  Knowing the partition layout (u-boot &amp;quot;mtdparts&amp;quot; command or Linux dmesg) you can restore the whole flash with it.&lt;br /&gt;
&lt;br /&gt;
=== Where to from here ===&lt;br /&gt;
&lt;br /&gt;
You'll probably want to play with some of the interesting hardware in this device. Obviously, you can explore the applications available through the touch-screen interface. But for those who prefer doing things more in the raw from a shell prompt, you can [[Manually_using_GSM | manually use GSM]] or you can start playing with the [[GPS]].&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;bottom&amp;quot;&amp;gt;{{Languages|Getting_Started_with_your_Neo1973}}&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Documentation]]&lt;br /&gt;
[[Category:Neo1973_Phase_1_related]]&lt;/div&gt;</summary>
		<author><name>Chooseopen</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Flashing_the_Neo_1973</id>
		<title>Flashing the Neo 1973</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Flashing_the_Neo_1973"/>
				<updated>2007-07-26T02:19:58Z</updated>
		
		<summary type="html">&lt;p&gt;Chooseopen: /* Putting the device into DFU mode */  Updated for GTA01BV4&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This describes how to update your openmoko to the latest software. We'll update the kernel, the root filesystem and optionally u-boot (new uboot is only recommended for Phase0 phones, because otherwise you get kernel crashes later; you should probably not flash uboot on a Phase 1 phone without a very good reason).&lt;br /&gt;
&lt;br /&gt;
== Files to download ==&lt;br /&gt;
&lt;br /&gt;
Necessary files are at:&lt;br /&gt;
*http://buildhost.openmoko.org/tmp/deploy/images/&lt;br /&gt;
&lt;br /&gt;
*http://chooseopen.com/openmoko/build/ (Unofficial, temporary location of more current builds.)&lt;br /&gt;
&lt;br /&gt;
Get:&lt;br /&gt;
* [[dfu-util]] (the precompiled binary on http://buildhost.openmoko.org is for Linux/i386)&lt;br /&gt;
* openmoko-devel-image-fic-gta01-2007********.rootfs.jffs2&lt;br /&gt;
* uImage-2.6.21.*-moko10-r*_0_****_0-fic-gta01.bin&lt;br /&gt;
* for phase 0 (Bv03) phones:&lt;br /&gt;
** Tested by a few people:&amp;lt;BR&amp;gt;u-boot-gta01bv3-r8_70124c2602ae2d4c5d3dba05b482d91548242de8_0_2040.bin&amp;lt;BR&amp;gt;MD5SUM: 60c5aeba1bd6642b05b3a5e6f2dafe83&lt;br /&gt;
** Tested by hrw:&amp;lt;BR&amp;gt;u-boot-gta01bv3-r8_70124c2602ae2d4c5d3dba05b482d91548242de8_0_2062.bin&amp;lt;BR&amp;gt;MD5SUM: 716f1eba9b0f2be4a0a3be4a56724935&lt;br /&gt;
* for phase 1 phones, uboot update should not be necessary.&lt;br /&gt;
&lt;br /&gt;
== Putting the device into DFU mode ==&lt;br /&gt;
&lt;br /&gt;
You'll need to boot your openmoko into uboot menu.  To do this:&lt;br /&gt;
&lt;br /&gt;
*Unplug all usb devices from the host.&lt;br /&gt;
*Hold AUX button while pressing POWER button. &lt;br /&gt;
*The uboot menu should appear. &lt;br /&gt;
*Plug Neo1973 into host with supplied USB cable. (Plug the phone directly into the host not via a hub.)&lt;br /&gt;
&lt;br /&gt;
Note:  Some devices have been reported to turn off after a short period of inactivity while on the uboot menu.  To avoid this, simply press the AUX button every 30 seconds or so.&lt;br /&gt;
&lt;br /&gt;
== Actually flashing things into the device ==&lt;br /&gt;
&lt;br /&gt;
Double check that u-boot matches your hardware version. Flashing u-boot is really a critical part. You probably only want to do that on phase0 phones.&lt;br /&gt;
&lt;br /&gt;
To update u-boot:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Warning: Do not update u-boot unless you have debug board or are really sure about what you are doing. Flashing wrong u-boot image will brick your device! Note especially that image below is for GTA01B_v03, not GTA01B_v04&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 ./dfu-util -a 1 -R -D u-boot-gta01bv3-r8_70124c2602ae2d4c5d3dba05b482d91548242de8_0_2040.bin&lt;br /&gt;
&lt;br /&gt;
To update the kernel:&lt;br /&gt;
 ./dfu-util -a 3 -R -D ./uImage-2.6.21.1-moko10-r0_0_1883_0-fic-gta01.bin&lt;br /&gt;
&lt;br /&gt;
To update the root filesystem:&lt;br /&gt;
 ./dfu-util -a 5 -R -D ./openmoko-devel-image-fic-gta01-20070501054014.rootfs.jffs2&lt;br /&gt;
&lt;br /&gt;
...now, you'll end up with system that boots, but does not see audio/SD card. You'll need to download corresponding modules.tgz and copy them over to openmoko.  - UPDATE:  GTA01 phones appear to not need this step.&lt;br /&gt;
&lt;br /&gt;
Old versions of uboot are buggy: You may have to press the aux button few times so that machine does not sleep while flashing. It also does not erase rootfs before flashing it... to do that, do minicom /dev/ttyACM0, then nand erase clean rootfs . Unfortunately, old versions of uboot are not really usable, because they fail to enable high 64MB of RAM, and you get nasty crashes after kernel boots.&lt;br /&gt;
&lt;br /&gt;
Good luck!&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting notes ==&lt;br /&gt;
&lt;br /&gt;
If you're facing errors in seemingly random places during the flashing of images, most likely the USB hub or cable through which your Neo1973 is connected, is of too poor quality.  It is recommended that you always connect the phone directly to the host when using dfu-util.&lt;br /&gt;
&lt;br /&gt;
If dfu-util reports a message like the following, before it starts flashing:&amp;lt;pre&amp;gt;&lt;br /&gt;
Resetting USB...&lt;br /&gt;
not at least 2 device changes found ?!?&lt;br /&gt;
Lost device after RESET?&amp;lt;/pre&amp;gt; just retry the command - it should work on a second run.&lt;br /&gt;
&lt;br /&gt;
See other notes on [[Dfu-util]] page.&lt;br /&gt;
&lt;br /&gt;
[[Category:Platform| ]]&lt;/div&gt;</summary>
		<author><name>Chooseopen</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Flashing_the_Neo_1973</id>
		<title>Flashing the Neo 1973</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Flashing_the_Neo_1973"/>
				<updated>2007-07-26T02:11:40Z</updated>
		
		<summary type="html">&lt;p&gt;Chooseopen: /* Files to download */  Updated for GTA01BV4&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This describes how to update your openmoko to the latest software. We'll update the kernel, the root filesystem and optionally u-boot (new uboot is only recommended for Phase0 phones, because otherwise you get kernel crashes later; you should probably not flash uboot on a Phase 1 phone without a very good reason).&lt;br /&gt;
&lt;br /&gt;
== Files to download ==&lt;br /&gt;
&lt;br /&gt;
Necessary files are at:&lt;br /&gt;
*http://buildhost.openmoko.org/tmp/deploy/images/&lt;br /&gt;
&lt;br /&gt;
*http://chooseopen.com/openmoko/build/ (Unofficial, temporary location of more current builds.)&lt;br /&gt;
&lt;br /&gt;
Get:&lt;br /&gt;
* [[dfu-util]] (the precompiled binary on http://buildhost.openmoko.org is for Linux/i386)&lt;br /&gt;
* openmoko-devel-image-fic-gta01-2007********.rootfs.jffs2&lt;br /&gt;
* uImage-2.6.21.*-moko10-r*_0_****_0-fic-gta01.bin&lt;br /&gt;
* for phase 0 (Bv03) phones:&lt;br /&gt;
** Tested by a few people:&amp;lt;BR&amp;gt;u-boot-gta01bv3-r8_70124c2602ae2d4c5d3dba05b482d91548242de8_0_2040.bin&amp;lt;BR&amp;gt;MD5SUM: 60c5aeba1bd6642b05b3a5e6f2dafe83&lt;br /&gt;
** Tested by hrw:&amp;lt;BR&amp;gt;u-boot-gta01bv3-r8_70124c2602ae2d4c5d3dba05b482d91548242de8_0_2062.bin&amp;lt;BR&amp;gt;MD5SUM: 716f1eba9b0f2be4a0a3be4a56724935&lt;br /&gt;
* for phase 1 phones, uboot update should not be necessary.&lt;br /&gt;
&lt;br /&gt;
== Putting the device into DFU mode ==&lt;br /&gt;
&lt;br /&gt;
You'll need to boot your openmoko into uboot menu (hold AUX button while pressing power button). Unplug all other usb devices from the host. Plug the phone directly into the host not via a hub.&lt;br /&gt;
&lt;br /&gt;
It also seems that once you've booted your openmoko into the uboot menu, you then should plug it into the USB port.  It should show a status message when you do so in terms of &amp;quot;Switching to DFU mode&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Actually flashing things into the device ==&lt;br /&gt;
&lt;br /&gt;
Double check that u-boot matches your hardware version. Flashing u-boot is really a critical part. You probably only want to do that on phase0 phones.&lt;br /&gt;
&lt;br /&gt;
To update u-boot:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Warning: Do not update u-boot unless you have debug board or are really sure about what you are doing. Flashing wrong u-boot image will brick your device! Note especially that image below is for GTA01B_v03, not GTA01B_v04&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 ./dfu-util -a 1 -R -D u-boot-gta01bv3-r8_70124c2602ae2d4c5d3dba05b482d91548242de8_0_2040.bin&lt;br /&gt;
&lt;br /&gt;
To update the kernel:&lt;br /&gt;
 ./dfu-util -a 3 -R -D ./uImage-2.6.21.1-moko10-r0_0_1883_0-fic-gta01.bin&lt;br /&gt;
&lt;br /&gt;
To update the root filesystem:&lt;br /&gt;
 ./dfu-util -a 5 -R -D ./openmoko-devel-image-fic-gta01-20070501054014.rootfs.jffs2&lt;br /&gt;
&lt;br /&gt;
...now, you'll end up with system that boots, but does not see audio/SD card. You'll need to download corresponding modules.tgz and copy them over to openmoko.  - UPDATE:  GTA01 phones appear to not need this step.&lt;br /&gt;
&lt;br /&gt;
Old versions of uboot are buggy: You may have to press the aux button few times so that machine does not sleep while flashing. It also does not erase rootfs before flashing it... to do that, do minicom /dev/ttyACM0, then nand erase clean rootfs . Unfortunately, old versions of uboot are not really usable, because they fail to enable high 64MB of RAM, and you get nasty crashes after kernel boots.&lt;br /&gt;
&lt;br /&gt;
Good luck!&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting notes ==&lt;br /&gt;
&lt;br /&gt;
If you're facing errors in seemingly random places during the flashing of images, most likely the USB hub or cable through which your Neo1973 is connected, is of too poor quality.  It is recommended that you always connect the phone directly to the host when using dfu-util.&lt;br /&gt;
&lt;br /&gt;
If dfu-util reports a message like the following, before it starts flashing:&amp;lt;pre&amp;gt;&lt;br /&gt;
Resetting USB...&lt;br /&gt;
not at least 2 device changes found ?!?&lt;br /&gt;
Lost device after RESET?&amp;lt;/pre&amp;gt; just retry the command - it should work on a second run.&lt;br /&gt;
&lt;br /&gt;
See other notes on [[Dfu-util]] page.&lt;br /&gt;
&lt;br /&gt;
[[Category:Platform| ]]&lt;/div&gt;</summary>
		<author><name>Chooseopen</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Flashing_the_Neo_1973</id>
		<title>Flashing the Neo 1973</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Flashing_the_Neo_1973"/>
				<updated>2007-07-25T22:59:53Z</updated>
		
		<summary type="html">&lt;p&gt;Chooseopen: /* Actually flashing things into the device */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This describes how to update your openmoko to the latest software. We'll update the kernel, the root filesystem and optionally u-boot (new uboot is only recommended for Phase0 phones, because otherwise you get kernel crashes later; you should probably not flash uboot on a Phase 1 phone without a very good reason).&lt;br /&gt;
&lt;br /&gt;
== Files to download ==&lt;br /&gt;
&lt;br /&gt;
Neccessary files are at http://buildhost.openmoko.org/tmp/deploy/images/ (the precompiled [[dfu-util]] binary there is for Linux/i386, you may need to compile your own for other platforms).&lt;br /&gt;
&lt;br /&gt;
Get:&lt;br /&gt;
* [[dfu-util]]&lt;br /&gt;
* openmoko-devel-image-fic-gta01-20070501054014.rootfs.jffs2&lt;br /&gt;
* uImage-2.6.21.1-moko10-r0_0_1883_0-fic-gta01.bin&lt;br /&gt;
* for phase 0 (Bv03) phones:&lt;br /&gt;
** Tested by a few people:&amp;lt;BR&amp;gt;u-boot-gta01bv3-r8_70124c2602ae2d4c5d3dba05b482d91548242de8_0_2040.bin&amp;lt;BR&amp;gt;MD5SUM: 60c5aeba1bd6642b05b3a5e6f2dafe83&lt;br /&gt;
** Tested by hrw:&amp;lt;BR&amp;gt;u-boot-gta01bv3-r8_70124c2602ae2d4c5d3dba05b482d91548242de8_0_2062.bin&amp;lt;BR&amp;gt;MD5SUM: 716f1eba9b0f2be4a0a3be4a56724935&lt;br /&gt;
* for phase 1 phones, uboot update should not be neccessary.&lt;br /&gt;
&lt;br /&gt;
You may want to take the latest versions.&lt;br /&gt;
&lt;br /&gt;
== Putting the device into DFU mode ==&lt;br /&gt;
&lt;br /&gt;
You'll need to boot your openmoko into uboot menu (hold AUX button while pressing power button). Unplug all other usb devices from the host. Plug the phone directly into the host not via a hub.&lt;br /&gt;
&lt;br /&gt;
It also seems that once you've booted your openmoko into the uboot menu, you then should plug it into the USB port.  It should show a status message when you do so in terms of &amp;quot;Switching to DFU mode&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
== Actually flashing things into the device ==&lt;br /&gt;
&lt;br /&gt;
Double check that u-boot matches your hardware version. Flashing u-boot is really a critical part. You probably only want to do that on phase0 phones.&lt;br /&gt;
&lt;br /&gt;
To update u-boot:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Warning: Do not update u-boot unless you have debug board or are really sure about what you are doing. Flashing wrong u-boot image will brick your device! Note especially that image below is for GTA01B_v03, not GTA01B_v04&amp;lt;/b&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 ./dfu-util -a 1 -R -D u-boot-gta01bv3-r8_70124c2602ae2d4c5d3dba05b482d91548242de8_0_2040.bin&lt;br /&gt;
&lt;br /&gt;
To update the kernel:&lt;br /&gt;
 ./dfu-util -a 3 -R -D ./uImage-2.6.21.1-moko10-r0_0_1883_0-fic-gta01.bin&lt;br /&gt;
&lt;br /&gt;
To update the root filesystem:&lt;br /&gt;
 ./dfu-util -a 5 -R -D ./openmoko-devel-image-fic-gta01-20070501054014.rootfs.jffs2&lt;br /&gt;
&lt;br /&gt;
...now, you'll end up with system that boots, but does not see audio/SD card. You'll need to download corresponding modules.tgz and copy them over to openmoko.  - UPDATE:  GTA01 phones appear to not need this step.&lt;br /&gt;
&lt;br /&gt;
Old versions of uboot are buggy: You may have to press the aux button few times so that machine does not sleep while flashing. It also does not erase rootfs before flashing it... to do that, do minicom /dev/ttyACM0, then nand erase clean rootfs . Unfortunately, old versions of uboot are not really usable, because they fail to enable high 64MB of RAM, and you get nasty crashes after kernel boots.&lt;br /&gt;
&lt;br /&gt;
Good luck!&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting notes ==&lt;br /&gt;
&lt;br /&gt;
If you're facing errors in seemingly random places during the flashing of images, most likely the USB hub or cable through which your Neo1973 is connected, is of too poor quality.  It is recommended that you always connect the phone directly to the host when using dfu-util.&lt;br /&gt;
&lt;br /&gt;
If dfu-util reports a message like the following, before it starts flashing:&amp;lt;pre&amp;gt;&lt;br /&gt;
Resetting USB...&lt;br /&gt;
not at least 2 device changes found ?!?&lt;br /&gt;
Lost device after RESET?&amp;lt;/pre&amp;gt; just retry the command - it should work on a second run.&lt;br /&gt;
&lt;br /&gt;
See other notes on [[Dfu-util]] page.&lt;br /&gt;
&lt;br /&gt;
[[Category:Platform| ]]&lt;/div&gt;</summary>
		<author><name>Chooseopen</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:Chooseopen</id>
		<title>User:Chooseopen</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:Chooseopen"/>
				<updated>2007-07-22T02:32:23Z</updated>
		
		<summary type="html">&lt;p&gt;Chooseopen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Image:Gollum-OpenMoko.jpg]]&lt;/div&gt;</summary>
		<author><name>Chooseopen</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/File:Gollum-OpenMoko.jpg</id>
		<title>File:Gollum-OpenMoko.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/File:Gollum-OpenMoko.jpg"/>
				<updated>2007-07-22T02:31:44Z</updated>
		
		<summary type="html">&lt;p&gt;Chooseopen: OpenMoko developer portrait&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OpenMoko developer portrait&lt;/div&gt;</summary>
		<author><name>Chooseopen</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/UI_Improvements</id>
		<title>UI Improvements</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/UI_Improvements"/>
				<updated>2007-07-14T18:52:23Z</updated>
		
		<summary type="html">&lt;p&gt;Chooseopen: Left-handed Mode for UI&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
  Obviously the tools are in the wild to build interfaces that could rival&lt;br /&gt;
  (or better IMO) anything Apple comes up with. We just need to organize&lt;br /&gt;
  this stuff. This would need hardware that can support dynamic&lt;br /&gt;
  interfaces. I can help here, too.&lt;br /&gt;
  sean@openmoko.com&lt;br /&gt;
&lt;br /&gt;
In fact, this place shall be dedicated to human-machine interactions improvements discussion;&lt;br /&gt;
&lt;br /&gt;
Human-machine interaction can be separated into several aspects:&lt;br /&gt;
* the physical contact/input device: the mono-touch touchscreen&lt;br /&gt;
* the graphics: &lt;br /&gt;
** accelerated rendering can add more consistency to zooming user interfaces, which seem to be quite an interesting concept for embedded scrensize-limited devices&lt;br /&gt;
** adding physics &amp;quot;look and feel&amp;quot; to (ex: menu's) behaviours can add coherence too&lt;br /&gt;
* the input methods&lt;br /&gt;
** the virtual keyboard&lt;br /&gt;
** handgestures&lt;br /&gt;
&lt;br /&gt;
==Finding inspiration ...==&lt;br /&gt;
&lt;br /&gt;
===Seen Live===&lt;br /&gt;
&lt;br /&gt;
'''Multi-touch'''&lt;br /&gt;
*[http://www.youtube.com/watch?v=89sz8ExZndc Multi-Touchscreen experiments video @youtube]&lt;br /&gt;
*[http://www.youtube.com/watch?v=nPqqfVLQ_qY iPhone UI features demo @youtube]&lt;br /&gt;
&lt;br /&gt;
'''Zooming user interfaces'''&lt;br /&gt;
*[http://www.zenzui.com/products.html ZenZui], a [http://en.wikipedia.org/wiki/ZUI ZUI (zooming user interface)]&lt;br /&gt;
*[http://labs.live.com/Deepfish/videos.aspx Microsoft Bluefish's ZUI] (new mobile webbrowser)&lt;br /&gt;
*[http://googlesystem.blogspot.com/2007/04/opera-920-more-homepages-at-your.html Opera speed dial]&lt;br /&gt;
&lt;br /&gt;
'''Graphics'''&lt;br /&gt;
*[http://www.rasterman.com/files/eem.avi EEM], Rasterman's EFL libs on handelds proof of concept (doesn't DO anything, just showing off the EFLs on a handeld)&lt;br /&gt;
*[http://www.youtube.com/watch?v=8kLFPfaxQ6U&amp;amp;eurl= Nvidia's cutting-edge techno], an [http://www.khronos.org/openkode/ Openkode] demo.&lt;br /&gt;
&lt;br /&gt;
'''Science fiction'''&lt;br /&gt;
*[http://www.youtube.com/watch?v=G_FS2TiK3AI UPMC Future?]&lt;br /&gt;
&lt;br /&gt;
'''Links:'''&lt;br /&gt;
*[http://elevate.sourceforge.net/links.html elevate project's links] sums up quite greatly the latest innovations in the desktop area&lt;br /&gt;
*[http://nooface.net/ Nooface] is a human-machine news site&lt;br /&gt;
*Asus-Intel's [http://www.hothardware.com/articles/Hands_on_with_the_ASUS_Eee/?page=2 Eee]'s interface&lt;br /&gt;
&lt;br /&gt;
===Clever hacks===&lt;br /&gt;
&lt;br /&gt;
It's been said that having no multitouch screen allows less freedom for innovation. Maybe we could get something out of our touchscreen drivers.&lt;br /&gt;
&lt;br /&gt;
Why ? Think of apple's scroll up/down feature on macbooks touchpads (which '''aren't multi touch''', it's a [http://iscroll2.sourceforge.net/ clever driver hack, iscroll2]):&lt;br /&gt;
&lt;br /&gt;
  To scroll, just place two fingers on your trackpad instead of one. Both fingers&lt;br /&gt;
  need to be placed next to each other horizontally (not vertically, the trackpad &lt;br /&gt;
  cannot detect that). Some people get better results with their finger spaced a&lt;br /&gt;
  little bit apart, while others prefer having the fingers right next to each other.&lt;br /&gt;
&lt;br /&gt;
  iScroll2 provides two scrolling modes: Linear and circular scrolling.&lt;br /&gt;
&lt;br /&gt;
  For linear scrolling, move the two fingers up/down or left/right in a straight &lt;br /&gt;
  line, respectively, to scroll in that direction.&lt;br /&gt;
&lt;br /&gt;
  Circular scrolling works in a way similar to the iPod's scroll wheel: Move the two&lt;br /&gt;
  fingers in a circle to scroll up or down, depending   on whether you move in a &lt;br /&gt;
  clockwise or counterclockwise direction.&lt;br /&gt;
&lt;br /&gt;
Maybe we can port/adapt/get inspiration from this macintosh driver.&lt;br /&gt;
&lt;br /&gt;
===n-D navigation: the polyhedra inspiration===&lt;br /&gt;
&lt;br /&gt;
When we want to navigate files, mp3s in an mp3 player, etc... Every control that the application needs is a button. What about looking at the polyhedrons? We could find one for each usage, with as many surrounding subzones that way be used as controls. Ex: you need 5 buttons, let's take a pentagon with 5 surrounding zones all around. That way, it's always optimized...&lt;br /&gt;
&lt;br /&gt;
http://en.wikipedia.org/wiki/Polyhedra&lt;br /&gt;
http://en.wikipedia.org/wiki/List_of_uniform_polyhedra&lt;br /&gt;
&lt;br /&gt;
===Our weapons===&lt;br /&gt;
&lt;br /&gt;
We can't improve the human-machine interface without knowing the strenghts / weaknesses of our hardware; some of the weaknesses might turn out as exploitable features, some strengths as limiting constraints.&lt;br /&gt;
&lt;br /&gt;
====The touchscreen====&lt;br /&gt;
&lt;br /&gt;
Question:&lt;br /&gt;
&lt;br /&gt;
  What exactly does the touchscreen see when  you touch the screen with 2 fingers&lt;br /&gt;
  at the same time, when you move them, when you move only one of the 2, etc. I'm &lt;br /&gt;
  also interested in knowing how precise the touchscreen is (ex: refresh rate, &lt;br /&gt;
  possible pressure indication, ...)?&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
&lt;br /&gt;
* The output is the center of the bounding box of the touched area&lt;br /&gt;
* The touch point skips instantly on double touch&lt;br /&gt;
* Pressure has almost no effect on a single touch, but not so on a double touch. The relative pressures will cause a significant skewing effect towards the harder touch. You can easily move the pointer along the line between your two fingers by changing the relative pressure.&lt;br /&gt;
&lt;br /&gt;
Conclusions:&lt;br /&gt;
* we can detect double touch as jumps, and that's all&lt;br /&gt;
* no pressure&lt;br /&gt;
* This could be an interesting input method for games - e.g. holding the Neo in landscape view, letting each thumb rest on a specific input area; probably needs to be checked for usability with a real device&lt;br /&gt;
&lt;br /&gt;
Question:&lt;br /&gt;
&lt;br /&gt;
  What does one see when sliding two fingers in parallel up(L,R)-&amp;gt;down(L,R)?&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
&lt;br /&gt;
* In theory you see a slide along the center line between your two fingers. In practice, you can't keep the pressure equal, so you will see some kind of zig-zag line somewhere between the two pressure points in the direction of your slide.&lt;br /&gt;
&lt;br /&gt;
Question:&lt;br /&gt;
&lt;br /&gt;
  What does one see when narrowing two fingers in slide (=zoom effect on iphone)?&lt;br /&gt;
&lt;br /&gt;
Answer:&lt;br /&gt;
&lt;br /&gt;
* In theory you see the pointer stay at the center of the zoom movement. In practice, you can't keep the pressure equal for both fingers, so the pointer will move towards one of the two pressure points.&lt;br /&gt;
&lt;br /&gt;
====Graphics and computational capabilities====&lt;br /&gt;
&lt;br /&gt;
It would be good to report what performance the current hardware allows:&lt;br /&gt;
* There was no pure X11 benchmarking done (AFAIK) (how many fps at full VGA scrolling, ex: 1024*480 image scrolling?)&lt;br /&gt;
* what about the lcd reactivity? What if we don't see anything but blur while moving items fast?&lt;br /&gt;
&lt;br /&gt;
Please report here your impressions.&lt;br /&gt;
&lt;br /&gt;
==Areas of improvement==&lt;br /&gt;
&lt;br /&gt;
* OpenGL for fluid zooming interfaces (2D: the infinite sphere model, 1D: the infinite wheel of fortune/ribbon model, exposé)&lt;br /&gt;
* HandGestures&lt;br /&gt;
* Physics-model based improvements: inertia and friction&lt;br /&gt;
* multi touch screen for natural handgestures &lt;br /&gt;
* improved virtual keyboard&lt;br /&gt;
* switching to another GUI toolkit (EFLs)&lt;br /&gt;
&lt;br /&gt;
===Physics-inspired animation a.k.a. &amp;quot;Digital Physics&amp;quot;===&lt;br /&gt;
&lt;br /&gt;
If we want to add eye candy &amp;amp; usability to the UI (such as smooth realistic list scrolling, as seen in apple's&lt;br /&gt;
iphone demo on contacts lists for instance), we'll need a physics engine, so that moves &amp;amp; animations aren't all linear.&lt;br /&gt;
&lt;br /&gt;
The following aticle explains the [http://www.readwriteweb.com/archives/the_physics_of_iphone.php Digital Physics] term from the iPhone example.&lt;br /&gt;
&lt;br /&gt;
The most used technique for calculating trajectories and systems of related geometrical objects seems to be [http://en.wikipedia.org/wiki/Verlet_integration verlet integration] implementation; it is an alternative to Euler's integration method, using fast approximation. &lt;br /&gt;
&lt;br /&gt;
We may have no need for such a mathematical method at first, but perhaps there are other use cases. For instance, it may be useful to gesture recognition (i'm not aware if existing gesture recognition engines measure speed, acceleration...).&lt;br /&gt;
&lt;br /&gt;
====Open Dynamics Engine====&lt;br /&gt;
&lt;br /&gt;
ODE is an open source, high performance library for simulating rigid body dynamics. It is fully featured, stable, mature and platform independent with an easy to use C/C++ API. It has advanced joint types and integrated collision detection with friction. ODE is useful for simulating vehicles, objects in virtual reality environments and virtual creatures. It is currently used in many computer games, 3D authoring tools and simulation tools.&lt;br /&gt;
&lt;br /&gt;
http://www.ode.org/&lt;br /&gt;
&lt;br /&gt;
====Libakamaru====&lt;br /&gt;
&lt;br /&gt;
The [http://people.freedesktop.org/~krh/akamaru.git/ akamaru library] is the code behind [http://www.youtube.com/watch?v=VekgyKQoTeM kiba dock]'s fun and dynamic behaviour. It's dependencies are light (needs just GLib). It takes elasticity, friction, gravity into account.&lt;br /&gt;
&lt;br /&gt;
If you want to take a quick look at the code:&lt;br /&gt;
svn co http://svn.kiba-dock.org/akamaru/ akamaru&lt;br /&gt;
&lt;br /&gt;
The only (AFAIK) application using this library is kiba-dock, a *fun* app launcher, but we may find another use to it in the future.&lt;br /&gt;
&lt;br /&gt;
As suggested on the mailing list, it is mostly overkill for the uses we intend to have, but this library may be optimized already, the API can spare some time for too. Furthermore, ''Qui peut le plus, peut le moins''.&lt;br /&gt;
&lt;br /&gt;
====Verlet integration implementation from e17====&lt;br /&gt;
&lt;br /&gt;
There's an undergoing verlet integration implementation into the e17 project (by rephorm) see http://rephorm.com/news/tag/physics , so we may see some UI physics integration into e17 someday.&lt;br /&gt;
&lt;br /&gt;
====Robert Pernner's easy equations====&lt;br /&gt;
&lt;br /&gt;
http://www.robertpenner.com/easing/&lt;br /&gt;
&lt;br /&gt;
See the demo: implements non linear behaviour (actionscript), but may give inspiration&lt;br /&gt;
&lt;br /&gt;
===Extending the touchscreen capabilities and input methods===&lt;br /&gt;
&lt;br /&gt;
* '''Multitouchscreen emulation'''&lt;br /&gt;
&lt;br /&gt;
If we got it right, when touching the screen on a second place, the cursor oscillates between the two points depending on relative pressure distribution. Using averaging algorithms, we may have the opportunity to detect peculiar behaviours.&lt;br /&gt;
&lt;br /&gt;
We need raw data (x,y,t) from the real hardware for the following behaviours:&lt;br /&gt;
* slide two fingers in parallel - vertical up/down (scroll)&lt;br /&gt;
* turn the two fingers around (rotate)&lt;br /&gt;
* slide two fingers towards each other (zoom-)&lt;br /&gt;
* slide two fingers apart (zoom+)&lt;br /&gt;
&lt;br /&gt;
When touching the screen with two fingers at the same time, we necessarily see the two points, or are able to extrapolate the position of the second one. This solution can add feature, but will probably be little erratic...&lt;br /&gt;
&lt;br /&gt;
* '''Touchscreen kernel module hacking'''&lt;br /&gt;
&lt;br /&gt;
We may correct the &amp;quot;half distance&amp;quot; phenomenon on double touch: if double touch is detected, then assimilate the cursor as twice further than the first touch. It would allow finer control, but higher instability.&lt;br /&gt;
&lt;br /&gt;
The double touch detection may be implemented in the driver itself, as well as stabilization.&lt;br /&gt;
&lt;br /&gt;
* '''Other detectable behaviours'''&lt;br /&gt;
&lt;br /&gt;
The warping can be used in the 4 diagonals, plus the up/down/right/left cross:&lt;br /&gt;
&lt;br /&gt;
  ----------------  ----------------  ----------------  ----------------&lt;br /&gt;
  - 1            -  - 1          2 -  - 1            -  -      2       -&lt;br /&gt;
  -              -  -              -  -              -  -              -&lt;br /&gt;
  -              -  -              -  -              -  -              -&lt;br /&gt;
  -              -  -              -  -              -  -              -&lt;br /&gt;
  -              -  -              -  -              -  -              -&lt;br /&gt;
  -              -  -              -  -              -  -              -&lt;br /&gt;
  -             2-  -              -  - 2            -  -      1       -&lt;br /&gt;
  ----------------  ----------------  ----------------  ----------------&lt;br /&gt;
&lt;br /&gt;
It's not double touch, but two sequential presses with a short time in between (~0.5 s)&lt;br /&gt;
&lt;br /&gt;
===Improved virtual keyboard===&lt;br /&gt;
&lt;br /&gt;
One nice idea for virtual input is [http://www.micropp.se/openmoko/ finger-splash]&lt;br /&gt;
&lt;br /&gt;
Yet, optimization does not only apply to the plain one-letter-at-a-time input. We need some sort of T9 (dictionary-based input help). When typing a word, the first letter determines the next possible ones. Therefore, we may let disappear the less-probable following letters. Ex: type an L, there's no way an X follows...&lt;br /&gt;
&lt;br /&gt;
Hints: &lt;br /&gt;
* ZIP's huffmann compression applied to SMSs/mails for detecting the most used characters/words/sentences.&lt;br /&gt;
* html tag-couds, one-letter tag clouds ; font size proportional to the probability of being used&lt;br /&gt;
&lt;br /&gt;
The most critical point is the initial disposition of the letters, before any letter is typed. We may also want to use horizontal two-parts keyboard (with the neo in hands like a psp..)&lt;br /&gt;
&lt;br /&gt;
The [http://www.strout.net/info/ideas/hexinput.html hexinput] concept is interesting. What about hiding the less probable letters and increasing the remaining ones during typing?&lt;br /&gt;
&lt;br /&gt;
===Choosing the right GUI toolkit===&lt;br /&gt;
&lt;br /&gt;
There are [http://www.hbmobile.org/wiki/index.php?title=GUI_Frameworks lots of possible GUI frameworks] with various software architectures that can be used for OpenMoko.&lt;br /&gt;
&lt;br /&gt;
GTA01 hardware uses GTK+/matchbox without hardware acceleration, and it's not enough: this is a first that a mobile linux device has such a high DPI resolution.&lt;br /&gt;
&lt;br /&gt;
Benchmarking will be needed to compare the different alternatives: qt, directfbgtk, ...&lt;br /&gt;
&lt;br /&gt;
====Switching to the Enlightenment Foundation Libraries====&lt;br /&gt;
&lt;br /&gt;
''Moved [[E17|here]]''&lt;br /&gt;
&lt;br /&gt;
====Distant future: OpenGL compositing====&lt;br /&gt;
&lt;br /&gt;
Compositing seems to give zooming interfaces reality (at last!).&lt;br /&gt;
&lt;br /&gt;
Well, considering recent changes in destkop applications, opengl has a definite future. For instance, the expose (be it apple's or beryl's) is a very interesting and usable feature. Using compositing allows the physics metaphore: '''the human brain doesn't like &amp;quot;gaps&amp;quot;/jumps (for instance while scrolling a text), it needs continuity''', which can be provided by opengl. When you look at apple's iphone prototype, it's not just eye candy, it's maybe the most natural/human way of navigating, because it's sufficiently&lt;br /&gt;
realistic for the brain to forget the non-physical nature of what's inside.&lt;br /&gt;
&lt;br /&gt;
So, opengl hardware will be needed in a more or less distant hardware,&lt;br /&gt;
for 100% fluid operation.&lt;br /&gt;
&lt;br /&gt;
How cool will solid-based (polygons, as seen in beryl) interfaces be? :) Real ZUIs...&lt;br /&gt;
&lt;br /&gt;
====Clutter Toolkit====&lt;br /&gt;
&lt;br /&gt;
Clutter, an openedhand project, is an open source software library for creating fast, visually rich graphical user interfaces. The most obvious example of potential usage is in media center type applications. We hope however it can be used for a lot more.&lt;br /&gt;
&lt;br /&gt;
http://clutter-project.org/&lt;br /&gt;
&lt;br /&gt;
Clutter uses OpenGL (and optionally '''OpenGL ES''') for rendering but with an API which hides the underlying GL complexity from the developer. The Clutter API is intended to be easy to use, efficient and flexible.&lt;br /&gt;
&lt;br /&gt;
From the [http://en.wikipedia.org/wiki/OpenGL_ES wikipedia article], OpenGL ES (OpenGL for Embedded Systems) is a subset of the OpenGL 3D graphics API designed for embedded devices such as mobile phones, PDAs, and video game consoles.&lt;br /&gt;
&lt;br /&gt;
==Improvement ideas==&lt;br /&gt;
&lt;br /&gt;
Please add here any idea that seems of relevance.&lt;br /&gt;
&lt;br /&gt;
===1D list scrolling: looped physics-driven item list===&lt;br /&gt;
&lt;br /&gt;
====Description====&lt;br /&gt;
&lt;br /&gt;
Take an item list (ex: adress book), print it on a ribbon of paper, and glue it on a wheel (on the tire). You're looking in the front of it, so when you want to go from the A to Z, you touch the wheel and drag it up. When you let the wheel go, it goes furter, taken by it's inertia. Stop the wheel when you got your contact. Got the idea? That's why we may speak of an &amp;quot;infinite wheel&amp;quot;, so that the surface is flat. For our case here, we always want to display square content, so the [http://en.wikipedia.org/wiki/Uniform_prism n-sided uniform prism] analogy is mathematically more exact.&lt;br /&gt;
&lt;br /&gt;
Important features:&lt;br /&gt;
* '''weight''': the biggest the item list, the faster it scrolls; that way, you don't have to wait too long for big lists, and you don't miss your item on shorter lists&lt;br /&gt;
* '''friction''': there is friction where the wheel is fixed, so that the wheel doesn't turn infinitely; more friction on short lists, less on big ones&lt;br /&gt;
* the '''initial speed and acceleration vector''' you give it determines it's futher rotation&lt;br /&gt;
* it's &amp;quot;round&amp;quot;/cyclic, so you can '''browse the list in two directions'''&lt;br /&gt;
* we may want to add a &amp;quot;progression indicator&amp;quot;, ex the current alphabetical letter, with a font size adequate to the proportion of the number of entries in the letter subcategory, or a reduced map of the distribution of the first letters...&lt;br /&gt;
 &lt;br /&gt;
We can add &amp;quot;parallel wheels&amp;quot;, symbolizing different sorting methods. Slide long to the left / right to look at a different wheel = items organization.&lt;br /&gt;
&lt;br /&gt;
====Controls====&lt;br /&gt;
&lt;br /&gt;
* Sliding up/down = Single click + maintained for a minimal distance&lt;br /&gt;
&lt;br /&gt;
Effect: scroll in an inverted/negated fashion (slide down = scroll up, slide up = scroll down)&lt;br /&gt;
&lt;br /&gt;
When finger is released (i.e. touchscreen doesn't detect any press):&lt;br /&gt;
  if (last_speed_seen &amp;gt; 0 ) then keep this speed and acceleration, with friction&lt;br /&gt;
  else stop scrolling&lt;br /&gt;
&lt;br /&gt;
Scrolling here is seen as unidimensional, but can apply to bidimensional situations (ex: zoomed image) too&lt;br /&gt;
&lt;br /&gt;
* Action = quick double tap&lt;br /&gt;
&lt;br /&gt;
* Details/select = short single tap&lt;br /&gt;
&lt;br /&gt;
* Right click = long tap&lt;br /&gt;
&lt;br /&gt;
* Sliding left/right: switch sorting method&lt;br /&gt;
&lt;br /&gt;
====Parts to modify====&lt;br /&gt;
&lt;br /&gt;
''Having a scroll that isn't a 1:1 map to the user's action isn't hard. It's just an extra calculation in the scroll code.''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;---- Where is the scroll code? :)&lt;br /&gt;
&lt;br /&gt;
* libmokoui&lt;br /&gt;
** [[Stylus_Scrolling | Stylus scrolling widget]]&lt;br /&gt;
** [[Finger_Scrolling | Finger scrolling wheel widget]]&lt;br /&gt;
* gtk&lt;br /&gt;
** [http://www.gtk.org/api/2.6/gtk/GtkVScrollbar.html GtkVScrollbar]&lt;br /&gt;
&lt;br /&gt;
The best would be to add the feature for both finger and stylus scrolling.&lt;br /&gt;
&lt;br /&gt;
TODO:&lt;br /&gt;
* make the entire list a &amp;quot;scrolling zone&amp;quot;, i.e. an overlay transparent scrolling widget?&lt;br /&gt;
* define controls&lt;br /&gt;
* add the inertia feature&lt;br /&gt;
&lt;br /&gt;
===1D Scrolling: inertia friction integration into openmoko's finger wheel=== &lt;br /&gt;
&lt;br /&gt;
The same, but for the wheel. It can be very short to do: you don't have 1:1 anymore, but, for example, 1/4 wheel turn = 1 item. It's demultiplicated, but has inertia.&lt;br /&gt;
&lt;br /&gt;
===Left-handed UI Support===&lt;br /&gt;
&lt;br /&gt;
====Description====&lt;br /&gt;
A discussion on the community list identified a desire to have the ability to switch the OpenMoko UI into &amp;quot;left-handed&amp;quot; mode.  &lt;br /&gt;
&lt;br /&gt;
 The main problem is scrollbars, when they're on the right dragging  &lt;br /&gt;
 the scrollbar left handed results in your hand covering the screen so  &lt;br /&gt;
 you can't see what you are doing. So having the option of scrollbars  &lt;br /&gt;
 on the left would be useful.&lt;br /&gt;
&lt;br /&gt;
 I don't think the whole screen should be mirrored! There are some elements&lt;br /&gt;
 that should remain..like the main top bar with the status icons and such.&lt;br /&gt;
 Scrollbars are the main thing I can think of right now.&lt;br /&gt;
&lt;br /&gt;
===Handgesture recognition proposals===&lt;br /&gt;
&lt;br /&gt;
====Using simple, localized warp as modifier key====&lt;br /&gt;
&lt;br /&gt;
As discussed on community list:&lt;br /&gt;
&lt;br /&gt;
  If you hold down one finger and tap the other one, the mouse pops over and back&lt;br /&gt;
  again. If you keep your second finger touching, the cursor follows it. When you&lt;br /&gt;
  release it, cursor goes back to first finger position. This could be a way to&lt;br /&gt;
  set a bounding box or turn on the mode. So the second finger can do something&lt;br /&gt;
  like rotating around the first, or increase or lower the distance to the first.&lt;br /&gt;
&lt;br /&gt;
* the so-called &amp;quot;first touch&amp;quot; can be done on the mokowheel zone itself: put your left thumb on the black area; if you touch the screen with another finger, there is a '''warp'''; the warp is detectable and allows to enter &amp;quot;fake multi-touchscreen mode&amp;quot;&lt;br /&gt;
* afterwards,&lt;br /&gt;
     * slide your right-hand finger down, it scrolls up&lt;br /&gt;
     * slide your right-hand finger up, it scrolls down&lt;br /&gt;
     * slide it left, next page/item&lt;br /&gt;
     * slide it right, previous page/item&lt;br /&gt;
     * do a circle: rotation&lt;br /&gt;
     * narrow towards the black circle: zoom -&lt;br /&gt;
     * go away: zoom +&lt;br /&gt;
* if you had kept your first finger on the black quarter circle, you can continue issuing other gestures&lt;br /&gt;
&lt;br /&gt;
The advantages of using simple origin-driven cursor warping as double touch detection criteria is that:&lt;br /&gt;
* you don't have to use the wheel as button, which would slow things down and generate errors (false button presses)&lt;br /&gt;
* simpler detection algorithms that can pass by the fluctuation due to pressure relative distribution&lt;br /&gt;
* the space taken by the wheel itself is &amp;quot;useless&amp;quot; (i.e. displays no information); using it as modifier allows to keep the screen clean for reading&lt;br /&gt;
* the origin of this zone lets use maximum surface of the screen, allowing more fine controlling&lt;br /&gt;
&lt;br /&gt;
[[Image:Fake_multitouch_rotate_right.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Fake_multitouch_scroll_previous.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Fake_multitouch_scroll_down.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Fake_multitouch_zoom-.png]]&lt;br /&gt;
&lt;br /&gt;
*Pros:&lt;br /&gt;
** who said we need multi-touch hardware?&lt;br /&gt;
** this may be the easiest way (in terms of design/implementation complexity, reliability)&lt;br /&gt;
*Cons: &lt;br /&gt;
** no matter what we'll invent, we'll need two hands for on-the-move controlling&lt;br /&gt;
** what about left-handed people?&lt;br /&gt;
&lt;br /&gt;
====What is to modify ?====&lt;br /&gt;
&lt;br /&gt;
We need to emulate key presses. We need to work at a layer where we can get raw cursor coordinates. &amp;lt;---- X server layer?&lt;br /&gt;
&lt;br /&gt;
====Full multi-touch emulation====&lt;br /&gt;
&lt;br /&gt;
Doable, but tricky...&lt;br /&gt;
&lt;br /&gt;
==Open questions==&lt;br /&gt;
&lt;br /&gt;
* will the neo/openmoko graphics system be powerful enough for such uses? I apple uses an OpenGL ES acceleration on this device (as well as on recent iPods), which is on the way with GTA02&lt;br /&gt;
* how does the touchscreen behave? We need a detailed touchscreen wiki information page, with visual traces. How hardware-specific is it?&lt;br /&gt;
* is multi touch really that awesome? I guess not.&lt;br /&gt;
&lt;br /&gt;
[[Category:User Interfaces]]&lt;/div&gt;</summary>
		<author><name>Chooseopen</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Openmoko_Local_Groups:_Chicago</id>
		<title>Openmoko Local Groups: Chicago</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Openmoko_Local_Groups:_Chicago"/>
				<updated>2007-07-13T22:26:28Z</updated>
		
		<summary type="html">&lt;p&gt;Chooseopen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the Chicago Openmoko page!&lt;br /&gt;
&lt;br /&gt;
This group is for anyone in Chicago and surrounding areas. Hopefully we'll be able to organize an event for when a few of us get the Neo1973s.&lt;/div&gt;</summary>
		<author><name>Chooseopen</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Openmoko_Local_Groups:_Chicago</id>
		<title>Openmoko Local Groups: Chicago</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Openmoko_Local_Groups:_Chicago"/>
				<updated>2007-07-13T22:24:58Z</updated>
		
		<summary type="html">&lt;p&gt;Chooseopen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Are there any other OpenMoko community members located in the Chicago area?&lt;/div&gt;</summary>
		<author><name>Chooseopen</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Openmoko_Local_Groups</id>
		<title>Openmoko Local Groups</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Openmoko_Local_Groups"/>
				<updated>2007-07-13T22:24:19Z</updated>
		
		<summary type="html">&lt;p&gt;Chooseopen: /* USA */ Added Chicago, IL&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__TOC__&lt;br /&gt;
'''OpenMoko Local Groups...'''&lt;br /&gt;
&lt;br /&gt;
* can be used for developers to meet and get to know each other&lt;br /&gt;
* can be used for developing&lt;br /&gt;
* may provide the room for real-life discussions away from mailinglists/wiki&lt;br /&gt;
* can support early support handling their GTA01Bv4 and exchange experiences&lt;br /&gt;
* fasten the community's cohesion&lt;br /&gt;
* give motivation&lt;br /&gt;
&lt;br /&gt;
==EU==&lt;br /&gt;
&lt;br /&gt;
=== Austria ===&lt;br /&gt;
==== [[OpenMoko_Local_Groups: Vienna|Vienna]] ====&lt;br /&gt;
&lt;br /&gt;
=== Finland ===&lt;br /&gt;
==== [[OpenMoko_Local_Groups: Helsinki|Helsinki]] ====&lt;br /&gt;
&lt;br /&gt;
=== Germany ===&lt;br /&gt;
==== [[OpenMoko_Local_Groups: Berlin|Berlin]] ====&lt;br /&gt;
&lt;br /&gt;
=== Poland ===&lt;br /&gt;
==== [[OpenMoko_Local_Groups: Warsaw|Warsaw]] ====&lt;br /&gt;
&lt;br /&gt;
=== Spain ===&lt;br /&gt;
==== [[OpenMoko_Local_Groups: Madrid|Madrid]] ====&lt;br /&gt;
&lt;br /&gt;
=== Sweden ===&lt;br /&gt;
==== [[OpenMoko_Local_Groups: Gothenburg|Gothenburg]] ====&lt;br /&gt;
&lt;br /&gt;
===UK===&lt;br /&gt;
==== [[OpenMoko_Local_Groups: Birmingham|Birmingham]] ====&lt;br /&gt;
==== [[OpenMoko_Local_Groups: London|London]] ====&lt;br /&gt;
&lt;br /&gt;
==USA==&lt;br /&gt;
===Oregon===&lt;br /&gt;
==== [[OpenMoko_Local_Groups: Eugene|Eugene]] ====&lt;br /&gt;
[[Category:Community]]&lt;br /&gt;
[[Category:Neo1973 Phase 1 related]]&lt;br /&gt;
===California===&lt;br /&gt;
==== [[OpenMoko_Local_Groups: San Diego|San Diego]] ====&lt;br /&gt;
==== [[OpenMoko_Local_Groups: San Francisco|San Francisco]] ====&lt;br /&gt;
[[Category:Community]]&lt;br /&gt;
[[Category:Neo1973 Phase 1 related]]&lt;br /&gt;
===Illinois===&lt;br /&gt;
==== [[OpenMoko_Local_Groups: Chicago|Chicago]] ====&lt;br /&gt;
[[Category:Community]]&lt;br /&gt;
[[Category:Neo1973 Phase 1 related]]&lt;br /&gt;
===Michigan===&lt;br /&gt;
==== [[OpenMoko_Local_Groups: Detroit|Detroit]] ====&lt;br /&gt;
[[Category:Community]]&lt;br /&gt;
[[Category:Neo1973 Phase 1 related]]&lt;br /&gt;
===Ohio===&lt;br /&gt;
==== [[OpenMoko_Local_Groups: Cleveland|Cleveland]] ====&lt;br /&gt;
[[Category:Community]]&lt;br /&gt;
[[Category:Neo1973 Phase 1 related]]&lt;br /&gt;
===Texas===&lt;br /&gt;
==== [[OpenMoko_Local_Groups: North Texas|North Texas]] ====&lt;br /&gt;
[[Category:Community]]&lt;br /&gt;
[[Category:Neo1973 Phase 1 related]]&lt;br /&gt;
&lt;br /&gt;
==CANADA==&lt;br /&gt;
===Quebec===&lt;br /&gt;
==== [[OpenMoko_Local_Groups: Montreal|Montreal]] ====&lt;/div&gt;</summary>
		<author><name>Chooseopen</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/MokoMakefile</id>
		<title>MokoMakefile</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/MokoMakefile"/>
				<updated>2007-07-13T13:08:38Z</updated>
		
		<summary type="html">&lt;p&gt;Chooseopen: /* QEMU */  Added 'sdl' dependency&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==MokoMakefile==&lt;br /&gt;
MokoMakefile is a fully automated way of setting up an OpenMoko development environment.  It is an invaluable tool for getting new developers up and running with a build environment which is configured the same as all the other existing developers.  It brings the same repeatability to build environment creation and maintenance as that which OpenEmbedded brings to the main task of actually building embedded software distributions.&lt;br /&gt;
&lt;br /&gt;
Note that MokoMakefile does *not* replace bitbake, or svn, or monotone, or openembedded, or qmake, or anything else.  It is a wrapper around all that to make it easy to set up and maintain a development environment that fully complies with the setup instructions published by OpenMoko.  Note that you need about 7 GB of available disk space for MokoMakefile to succeed.&lt;br /&gt;
&lt;br /&gt;
MokoMakefile is developed by [[User:RodWhitby|Rod Whitby]] - it is not an official product of OpenMoko (although I would be happy for them to pick it up and use it internally).  If there is any discrepancy between the [[Building_OpenMoko_from_scratch|official OpenMoko build instructions]], and the operation of the MokoMakefile, then you should consider the official instructions to be correct.&lt;br /&gt;
&lt;br /&gt;
=== Before you begin ===&lt;br /&gt;
'''Check that your /bin/sh (ls -l /bin/sh) is not linked to dash rather than bash.''' Using dash will cause you pain. This is true for a standard install of Ubuntu 7.04 (at least when installing from Live CD). If your /bin/sh points to /bin/dash, correct it with (as root):&lt;br /&gt;
 ln -sf /bin/bash /bin/sh&lt;br /&gt;
&lt;br /&gt;
If you have previously built with dash as your sh shell then your perl compile is probably broken.  One symptom is that the build will error and whine about an 'Unterminated quote string' another symptom is a message that says 'You haven't done a &amp;quot;make depend&amp;quot; yet!'  If you get these then you need to:&lt;br /&gt;
 make clean-package-perl&lt;br /&gt;
 make clean-package-perl-native&lt;br /&gt;
and rebuild.&lt;br /&gt;
 &lt;br /&gt;
If all else fails then just rm -rf the perl work dir and the perl stamps here's an i686 host example:&lt;br /&gt;
 rm -rf build/tmp/work/i686-linux/perl-native-5.8.7-r3 &lt;br /&gt;
 rm -f  build/tmp/stamps/i686-linux/perl*&lt;br /&gt;
&lt;br /&gt;
As of r99, MokoMakefile has patches which should make it build correctly with dash.&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
Here are the steps to use it:&lt;br /&gt;
&lt;br /&gt;
1 - Make sure your build host is set up according to:&lt;br /&gt;
   http://www.openembedded.org/wiki/OEandYourDistro&lt;br /&gt;
2 - Create your $OMDIR directory:&lt;br /&gt;
   mkdir /home/moko ; cd /home/moko&lt;br /&gt;
3 - Grab MokoMakefile:&lt;br /&gt;
   wget http://www.rwhitby.net/files/openmoko/Makefile&lt;br /&gt;
4 - Set up the environment:&lt;br /&gt;
   make setup&lt;br /&gt;
5 - Start building. Before starting a lenghty make process, check in Tips section about how to make Make multicore aware. You may want to modify the build/conf/local.conf file for your target (emulation/chroot) enviroment:&lt;br /&gt;
   make openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
This will set up the recommended directory structure as described in [[Building OpenMoko from scratch]], will download all the required software (from the right places with the right versions), and will immediately start building an image.&lt;br /&gt;
&lt;br /&gt;
Once you have done this, you can choose to continue using the MokoMakefile to initiate your subsequent builds, or you can go into the build directory and run bitbake commands manually.  The choice is yours.&lt;br /&gt;
&lt;br /&gt;
===Updating the environment=== &lt;br /&gt;
For easy maintenance of your build environment the following commands are available.&lt;br /&gt;
&lt;br /&gt;
1 - To update the MokoMakefile to the latest version:&lt;br /&gt;
   make update-makefile &lt;br /&gt;
&lt;br /&gt;
2 - To update the OpenMoko repository checkout and the MokoMakefile patches to the latest version:&lt;br /&gt;
   make update&lt;br /&gt;
&lt;br /&gt;
3 - To make sure that any recent changes to the build directory structure have been applied:&lt;br /&gt;
   make setup &lt;br /&gt;
&lt;br /&gt;
A quick way to rebuild a new image with the latest updates:&lt;br /&gt;
   make update-makefile &amp;amp;&amp;amp; make update setup openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
===Reporting Problems===&lt;br /&gt;
&lt;br /&gt;
First, make sure that the problem is reproducable after running&lt;br /&gt;
&lt;br /&gt;
 make update-makefile ; make update ; make setup&lt;br /&gt;
&lt;br /&gt;
then running&lt;br /&gt;
&lt;br /&gt;
 make clean-package-&amp;lt;foo&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(where you replace &amp;lt;foo&amp;gt; with the name of the package which is failing)&lt;br /&gt;
&lt;br /&gt;
then running&lt;br /&gt;
&lt;br /&gt;
 make all&lt;br /&gt;
&lt;br /&gt;
If you can get the error to occur three times in a row after running that sequence of commands three times, then feel free to report it to rwhitby in #openmoko on [http://wiki.openmoko.org/wiki/Development_resources#IRC IRC].&lt;br /&gt;
&lt;br /&gt;
===Work-arounds===&lt;br /&gt;
&lt;br /&gt;
Work-arounds for temporary or isolated problems should be added to the [[Talk:MokoMakefile|Discussion page]] which is associated with this page.  As they are fixed, they will be removed from that page.&lt;br /&gt;
&lt;br /&gt;
===Tips=== &lt;br /&gt;
*You can reduce the amount of consumed disk space significantly by adding&lt;br /&gt;
   INHERIT += &amp;quot;rm_work&amp;quot;&lt;br /&gt;
in your local.conf (e.g. /home/moko/build/conf/local.conf). This will remove the contents of each build/tmp/work/*/&amp;lt;package&amp;gt; directory after the corresponding package builds correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*If you an encounter an error with monotone similar to the following:&lt;br /&gt;
   mtn: misuse: database /home/moko/OE.mtn is laid out according to an old schema&lt;br /&gt;
Then you need to upgrade OE.mtn  Use the following command while in /home/moko:&lt;br /&gt;
   # mtn --db OE.mtn db migrate&lt;br /&gt;
&lt;br /&gt;
*If a certain package does not build due to corrupted download or some such try to remove the sources and rebuild it.&lt;br /&gt;
 rm sources/&amp;lt;package&amp;gt;*&lt;br /&gt;
 cd build&lt;br /&gt;
 . ../setup-env&lt;br /&gt;
 bitbake -crebuild &amp;lt;package&amp;gt;&lt;br /&gt;
after that your build might just work again.&lt;br /&gt;
&lt;br /&gt;
*For people with multiple CPU's (or dual-core ones) this small patch might be useful to build things faster.&lt;br /&gt;
Edit the local.conf and add the following lines:&lt;br /&gt;
 PARALLEL_MAKE = &amp;quot;-j 4&amp;quot;&lt;br /&gt;
 BB_NUMBER_THREADS = &amp;quot;4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Change the PARALLEL_MAKE and BB_NUMBER_THREADS values to something that suits better if it chokes your machine.&lt;br /&gt;
&lt;br /&gt;
*For amd64 host users you need the patch from http://bugs.openembedded.org/show_bug.cgi?id=1765 to build db3-native&lt;br /&gt;
&lt;br /&gt;
===QEMU===&lt;br /&gt;
The MokoMakefile now has support for automatically building, flashing, and running [[OpenMoko under QEMU|the new Neo1973 emulator]] (which is based on QEMU).&lt;br /&gt;
&lt;br /&gt;
Dependencies: &lt;br /&gt;
 &lt;br /&gt;
*lynx ('apt-get install lynx' in Ubuntu 7.04)&lt;br /&gt;
*netpbm ('apt-get install netpbm' in Ubuntu 7.04)&lt;br /&gt;
*sdl-devel ('apt-get install libsdl1.2-dev in Ubuntu .704')&lt;br /&gt;
&lt;br /&gt;
“make qemu” will build qemu-neo1973, download the latest official OpenMoko images, flash the images into the virtual NAND flash, and run the emulator (you still need to install the makefile as mentioned above, however).&lt;br /&gt;
&lt;br /&gt;
Other targets are “make download-images” (to download the latest official images), “make flash-qemu-official” (to flash those images) and “make flash-qemu-local” (which will flash your latest locally built images), which can then be followed by “make run-qemu” or “make run-qemu-snapshot” to run the emulator with the most recently flashed images.&lt;br /&gt;
&lt;br /&gt;
Make sure you have the “lynx” and “netpbm” packages installed on your build host first.&lt;br /&gt;
&lt;br /&gt;
You're also invited to read more about how to run [[OpenMoko under QEMU]] in the article dedicated to this subject.&lt;br /&gt;
&lt;br /&gt;
===Developing with MokoMakefile===&lt;br /&gt;
&lt;br /&gt;
To make in-tree changes and have them built and used by qemu:&lt;br /&gt;
&lt;br /&gt;
  cd /home/moko/openmoko&lt;br /&gt;
  quilt new descriptive-patch-name.patch&lt;br /&gt;
  quilt add trunk/src/name-of-file-to-change # do this for every file you are about to modify&lt;br /&gt;
  ...make the changes...&lt;br /&gt;
  quilt refresh # this creates a file in /home/moko/patches/openmoko-HEAD/ and updates the quilt series file there&lt;br /&gt;
&lt;br /&gt;
Note: Do '''NOT''' use absolute paths as this confuses quilt and will get you a diff of the file against /dev/null!&lt;br /&gt;
&lt;br /&gt;
To build the changes and have them used by qemu:&lt;br /&gt;
&lt;br /&gt;
  make build-qemu&lt;br /&gt;
  make flash-qemu-local&lt;br /&gt;
  make run-qemu&lt;br /&gt;
&lt;br /&gt;
If you want to modify applications instead of the openmoko toolchain, this is what you have to do (example: openmoko-messages):&lt;br /&gt;
&lt;br /&gt;
  /usr/src/openmoko# . ./setup-env&lt;br /&gt;
  /usr/src/openmoko# cd openmoko/&lt;br /&gt;
  /usr/src/openmoko/openmoko# bitbake -c unpack openmoko-messages&lt;br /&gt;
  /usr/src/openmoko/openmoko# cd \&lt;br /&gt;
  ../build/tmp/work/armv4t-linux/openmoko-messages-0.0.1+svnnow-r2_2276/openmoko-messages/&lt;br /&gt;
  /usr/src/openmoko/build/tmp/work/armv4t-linux/openmoko-messages-0.0.1+svnnow-r2_2276/openmoko-messages# \&lt;br /&gt;
  vim src/detail-area.c&lt;br /&gt;
  /usr/src/openmoko/build/tmp/work/armv4t-linux/openmoko-messages-0.0.1+svnnow-r2_2276/openmoko-messages# \&lt;br /&gt;
  cd -&lt;br /&gt;
  /usr/src/openmoko/openmoko# bitbake openmoko-messages&lt;br /&gt;
&lt;br /&gt;
Then continue with MokoMakefile usage.&lt;br /&gt;
&lt;br /&gt;
If you want to add an application to your openmoko distribution, do this:&lt;br /&gt;
All file edits should be done using quilt as described above. That way a patch can easily be submitted to the openmoko project.&lt;br /&gt;
First, create a directory that will correspond to your package and edit a '''.bb''' file in there:&lt;br /&gt;
  /usr/src/openmoko# cd openmoko/&lt;br /&gt;
  /usr/src/openmoko/openmoko# quilt new mycoolpackage.patch&lt;br /&gt;
  /usr/src/openmoko/openmoko# mkdir trunk/oe/packages/mycoolpackage&lt;br /&gt;
  /usr/src/openmoko/openmoko# quilt add trunk/oe/packages/mycoolpackage/mycoolpackage_1.bb&lt;br /&gt;
  /usr/src/openmoko/openmoko# quilt edit trunk/oe/packages/mycoolpackage/mycoolpackage_1.bb&lt;br /&gt;
&lt;br /&gt;
The file should have the following content:&lt;br /&gt;
  DESCRIPTION = &amp;quot;This is a cool package&amp;quot;&lt;br /&gt;
  SECTION = &amp;quot;username/mycoolpackage&amp;quot;&lt;br /&gt;
  PV = &amp;quot;1&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  inherit autotools&lt;br /&gt;
  &lt;br /&gt;
  SRC_URI = &amp;quot;http://www.example.com/download/mycoolpackage-1.tar.gz&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Explanation:&lt;br /&gt;
* DESCRIPTION - Just a short text explaining the package&lt;br /&gt;
* SECTION - I have no clue, but I'll use username/mycoolpackage for now&lt;br /&gt;
* PV - Package Version&lt;br /&gt;
* inherit autotools - The package can be compiled by './configure &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install' so we tell MokoMakefile to do it this way.&lt;br /&gt;
* SRC_URI = ... - This is the download location of the package source. It's imperative that the tar.gz contains a directory called '''packagename-packageversion''' (in this case: mycoolpackage-1) so that MokoMakefile can find it automatically or the build will fail.&lt;br /&gt;
&lt;br /&gt;
This is not all. We also need to tell MokoMakfile that it needs to build and include the package in the image. To do this, do&lt;br /&gt;
  /usr/src/openmoko/openmoko# quilt edit trunk/oe/packages/tasks/task-openmoko.bb&lt;br /&gt;
Here, increase the value '''PR''' by one and add '''mycoolpackage \''' (with the backslash!) just before the line reading '''#  update-alternatives \'''.&lt;br /&gt;
&lt;br /&gt;
Now run&lt;br /&gt;
  /usr/src/openmoko/openmoko# quilt refresh&lt;br /&gt;
  /usr/src/openmoko/openmoko# cd ..&lt;br /&gt;
  /usr/src/openmoko# make update all&lt;br /&gt;
&lt;br /&gt;
And if everything's alright you should now have an OpenMoko image to flash to your phone or run in qemu as described above.&lt;br /&gt;
&lt;br /&gt;
===Testimonials=== &lt;br /&gt;
MokoMakefile is recommended by 4 out of 4 new developers on #openmoko, with testimonials such as &amp;quot;For some reason last night I couldn't get my manual install of everything to work (bb complained about my bbpath I think) ... but with your makefile, it works great!&amp;quot;, and &amp;quot;MokoMakefile rocks!&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Project page:&lt;br /&gt;
http://mokomakefile.projects.openmoko.org/&lt;br /&gt;
&lt;br /&gt;
{{Languages|MokoMakefile}}&lt;/div&gt;</summary>
		<author><name>Chooseopen</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Modular_phone</id>
		<title>Modular phone</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Modular_phone"/>
				<updated>2007-07-13T03:16:55Z</updated>
		
		<summary type="html">&lt;p&gt;Chooseopen: typos&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A number of manufacturers produce modular components suitabel for embedded systems. Some of these components are suitable for a hobbyist to put together a modular phone. This page is intended as a starting-point for building an OpenMoko compatible phone.&lt;br /&gt;
&lt;br /&gt;
==Component Suppliers==&lt;br /&gt;
[http://www.sparkfun.com/commerce/categories.php Spark Fun]&amp;lt;br&amp;gt;&lt;br /&gt;
[http://gumstix.com/ Gumstix]&lt;/div&gt;</summary>
		<author><name>Chooseopen</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/MokoMakefile</id>
		<title>MokoMakefile</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/MokoMakefile"/>
				<updated>2007-07-12T23:32:54Z</updated>
		
		<summary type="html">&lt;p&gt;Chooseopen: /* QEMU */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==MokoMakefile==&lt;br /&gt;
MokoMakefile is a fully automated way of setting up an OpenMoko development environment.  It is an invaluable tool for getting new developers up and running with a build environment which is configured the same as all the other existing developers.  It brings the same repeatability to build environment creation and maintenance as that which OpenEmbedded brings to the main task of actually building embedded software distributions.&lt;br /&gt;
&lt;br /&gt;
Note that MokoMakefile does *not* replace bitbake, or svn, or monotone, or openembedded, or qmake, or anything else.  It is a wrapper around all that to make it easy to set up and maintain a development environment that fully complies with the setup instructions published by OpenMoko.  Note that you need about 7 GB of available disk space for MokoMakefile to succeed.&lt;br /&gt;
&lt;br /&gt;
MokoMakefile is developed by [[User:RodWhitby|Rod Whitby]] - it is not an official product of OpenMoko (although I would be happy for them to pick it up and use it internally).  If there is any discrepancy between the [[Building_OpenMoko_from_scratch|official OpenMoko build instructions]], and the operation of the MokoMakefile, then you should consider the official instructions to be correct.&lt;br /&gt;
&lt;br /&gt;
=== Before you begin ===&lt;br /&gt;
'''Check that your /bin/sh (ls -l /bin/sh) is not linked to dash rather than bash.''' Using dash will cause you pain. This is true for a standard install of Ubuntu 7.04 (at least when installing from Live CD). If your /bin/sh points to /bin/dash, correct it with (as root):&lt;br /&gt;
 ln -sf /bin/bash /bin/sh&lt;br /&gt;
&lt;br /&gt;
If you have previously built with dash as your sh shell then your perl compile is probably broken.  One symptom is that the build will error and whine about an 'Unterminated quote string' another symptom is a message that says 'You haven't done a &amp;quot;make depend&amp;quot; yet!'  If you get these then you need to:&lt;br /&gt;
 make clean-package-perl&lt;br /&gt;
 make clean-package-perl-native&lt;br /&gt;
and rebuild.&lt;br /&gt;
 &lt;br /&gt;
If all else fails then just rm -rf the perl work dir and the perl stamps here's an i686 host example:&lt;br /&gt;
 rm -rf build/tmp/work/i686-linux/perl-native-5.8.7-r3 &lt;br /&gt;
 rm -f  build/tmp/stamps/i686-linux/perl*&lt;br /&gt;
&lt;br /&gt;
As of r99, MokoMakefile has patches which should make it build correctly with dash.&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
Here are the steps to use it:&lt;br /&gt;
&lt;br /&gt;
1 - Make sure your build host is set up according to:&lt;br /&gt;
   http://www.openembedded.org/wiki/OEandYourDistro&lt;br /&gt;
2 - Create your $OMDIR directory:&lt;br /&gt;
   mkdir /home/moko ; cd /home/moko&lt;br /&gt;
3 - Grab MokoMakefile:&lt;br /&gt;
   wget http://www.rwhitby.net/files/openmoko/Makefile&lt;br /&gt;
4 - Set up the environment:&lt;br /&gt;
   make setup&lt;br /&gt;
5 - Start building. Before starting a lenghty make process, check in Tips section about how to make Make multicore aware. You may want to modify the build/conf/local.conf file for your target (emulation/chroot) enviroment:&lt;br /&gt;
   make openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
This will set up the recommended directory structure as described in [[Building OpenMoko from scratch]], will download all the required software (from the right places with the right versions), and will immediately start building an image.&lt;br /&gt;
&lt;br /&gt;
Once you have done this, you can choose to continue using the MokoMakefile to initiate your subsequent builds, or you can go into the build directory and run bitbake commands manually.  The choice is yours.&lt;br /&gt;
&lt;br /&gt;
===Updating the environment=== &lt;br /&gt;
For easy maintenance of your build environment the following commands are available.&lt;br /&gt;
&lt;br /&gt;
1 - To update the MokoMakefile to the latest version:&lt;br /&gt;
   make update-makefile &lt;br /&gt;
&lt;br /&gt;
2 - To update the OpenMoko repository checkout and the MokoMakefile patches to the latest version:&lt;br /&gt;
   make update&lt;br /&gt;
&lt;br /&gt;
3 - To make sure that any recent changes to the build directory structure have been applied:&lt;br /&gt;
   make setup &lt;br /&gt;
&lt;br /&gt;
A quick way to rebuild a new image with the latest updates:&lt;br /&gt;
   make update-makefile &amp;amp;&amp;amp; make update setup openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
===Reporting Problems===&lt;br /&gt;
&lt;br /&gt;
First, make sure that the problem is reproducable after running&lt;br /&gt;
&lt;br /&gt;
 make update-makefile ; make update ; make setup&lt;br /&gt;
&lt;br /&gt;
then running&lt;br /&gt;
&lt;br /&gt;
 make clean-package-&amp;lt;foo&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(where you replace &amp;lt;foo&amp;gt; with the name of the package which is failing)&lt;br /&gt;
&lt;br /&gt;
then running&lt;br /&gt;
&lt;br /&gt;
 make all&lt;br /&gt;
&lt;br /&gt;
If you can get the error to occur three times in a row after running that sequence of commands three times, then feel free to report it to rwhitby in #openmoko on [http://wiki.openmoko.org/wiki/Development_resources#IRC IRC].&lt;br /&gt;
&lt;br /&gt;
===Work-arounds===&lt;br /&gt;
&lt;br /&gt;
Work-arounds for temporary or isolated problems should be added to the [[Talk:MokoMakefile|Discussion page]] which is associated with this page.  As they are fixed, they will be removed from that page.&lt;br /&gt;
&lt;br /&gt;
===Tips=== &lt;br /&gt;
*You can reduce the amount of consumed disk space significantly by adding&lt;br /&gt;
   INHERIT += &amp;quot;rm_work&amp;quot;&lt;br /&gt;
in your local.conf (e.g. /home/moko/build/conf/local.conf). This will remove the contents of each build/tmp/work/*/&amp;lt;package&amp;gt; directory after the corresponding package builds correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*If you an encounter an error with monotone similar to the following:&lt;br /&gt;
   mtn: misuse: database /home/moko/OE.mtn is laid out according to an old schema&lt;br /&gt;
Then you need to upgrade OE.mtn  Use the following command while in /home/moko:&lt;br /&gt;
   # mtn --db OE.mtn db migrate&lt;br /&gt;
&lt;br /&gt;
*If a certain package does not build due to corrupted download or some such try to remove the sources and rebuild it.&lt;br /&gt;
 rm sources/&amp;lt;package&amp;gt;*&lt;br /&gt;
 cd build&lt;br /&gt;
 . ../setup-env&lt;br /&gt;
 bitbake -crebuild &amp;lt;package&amp;gt;&lt;br /&gt;
after that your build might just work again.&lt;br /&gt;
&lt;br /&gt;
*For people with multiple CPU's (or dual-core ones) this small patch might be useful to build things faster.&lt;br /&gt;
Edit the local.conf and add the following lines:&lt;br /&gt;
 PARALLEL_MAKE = &amp;quot;-j 4&amp;quot;&lt;br /&gt;
 BB_NUMBER_THREADS = &amp;quot;4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Change the PARALLEL_MAKE and BB_NUMBER_THREADS values to something that suits better if it chokes your machine.&lt;br /&gt;
&lt;br /&gt;
*For amd64 host users you need the patch from http://bugs.openembedded.org/show_bug.cgi?id=1765 to build db3-native&lt;br /&gt;
&lt;br /&gt;
===QEMU===&lt;br /&gt;
The MokoMakefile now has support for automatically building, flashing, and running [[OpenMoko under QEMU|the new Neo1973 emulator]] (which is based on QEMU).&lt;br /&gt;
&lt;br /&gt;
Dependencies: &lt;br /&gt;
 &lt;br /&gt;
*lynx ('apt-get install lynx' in Ubuntu 7.04)&lt;br /&gt;
*netpbm ('apt-get install netpbm' in Ubuntu 7.04)&lt;br /&gt;
&lt;br /&gt;
“make qemu” will build qemu-neo1973, download the latest official OpenMoko images, flash the images into the virtual NAND flash, and run the emulator (you still need to install the makefile as mentioned above, however).&lt;br /&gt;
&lt;br /&gt;
Other targets are “make download-images” (to download the latest official images), “make flash-qemu-official” (to flash those images) and “make flash-qemu-local” (which will flash your latest locally built images), which can then be followed by “make run-qemu” or “make run-qemu-snapshot” to run the emulator with the most recently flashed images.&lt;br /&gt;
&lt;br /&gt;
Make sure you have the “lynx” and “netpbm” packages installed on your build host first.&lt;br /&gt;
&lt;br /&gt;
You're also invited to read more about how to run [[OpenMoko under QEMU]] in the article dedicated to this subject.&lt;br /&gt;
&lt;br /&gt;
===Developing with MokoMakefile===&lt;br /&gt;
&lt;br /&gt;
To make in-tree changes and have them built and used by qemu:&lt;br /&gt;
&lt;br /&gt;
  cd /home/moko/openmoko&lt;br /&gt;
  quilt new descriptive-patch-name.patch&lt;br /&gt;
  quilt add trunk/src/name-of-file-to-change # do this for every file you are about to modify&lt;br /&gt;
  ...make the changes...&lt;br /&gt;
  quilt refresh # this creates a file in /home/moko/patches/openmoko-HEAD/ and updates the quilt series file there&lt;br /&gt;
&lt;br /&gt;
Note: Do '''NOT''' use absolute paths as this confuses quilt and will get you a diff of the file against /dev/null!&lt;br /&gt;
&lt;br /&gt;
To build the changes and have them used by qemu:&lt;br /&gt;
&lt;br /&gt;
  make build-qemu&lt;br /&gt;
  make flash-qemu-local&lt;br /&gt;
  make run-qemu&lt;br /&gt;
&lt;br /&gt;
If you want to modify applications instead of the openmoko toolchain, this is what you have to do (example: openmoko-messages):&lt;br /&gt;
&lt;br /&gt;
  /usr/src/openmoko# . ./setup-env&lt;br /&gt;
  /usr/src/openmoko# cd openmoko/&lt;br /&gt;
  /usr/src/openmoko/openmoko# bitbake -c unpack openmoko-messages&lt;br /&gt;
  /usr/src/openmoko/openmoko# cd \&lt;br /&gt;
  ../build/tmp/work/armv4t-linux/openmoko-messages-0.0.1+svnnow-r2_2276/openmoko-messages/&lt;br /&gt;
  /usr/src/openmoko/build/tmp/work/armv4t-linux/openmoko-messages-0.0.1+svnnow-r2_2276/openmoko-messages# \&lt;br /&gt;
  vim src/detail-area.c&lt;br /&gt;
  /usr/src/openmoko/build/tmp/work/armv4t-linux/openmoko-messages-0.0.1+svnnow-r2_2276/openmoko-messages# \&lt;br /&gt;
  cd -&lt;br /&gt;
  /usr/src/openmoko/openmoko# bitbake openmoko-messages&lt;br /&gt;
&lt;br /&gt;
Then continue with MokoMakefile usage.&lt;br /&gt;
&lt;br /&gt;
If you want to add an application to your openmoko distribution, do this:&lt;br /&gt;
All file edits should be done using quilt as described above. That way a patch can easily be submitted to the openmoko project.&lt;br /&gt;
First, create a directory that will correspond to your package and edit a '''.bb''' file in there:&lt;br /&gt;
  /usr/src/openmoko# cd openmoko/&lt;br /&gt;
  /usr/src/openmoko/openmoko# quilt new mycoolpackage.patch&lt;br /&gt;
  /usr/src/openmoko/openmoko# mkdir trunk/oe/packages/mycoolpackage&lt;br /&gt;
  /usr/src/openmoko/openmoko# quilt add trunk/oe/packages/mycoolpackage/mycoolpackage_1.bb&lt;br /&gt;
  /usr/src/openmoko/openmoko# quilt edit trunk/oe/packages/mycoolpackage/mycoolpackage_1.bb&lt;br /&gt;
&lt;br /&gt;
The file should have the following content:&lt;br /&gt;
  DESCRIPTION = &amp;quot;This is a cool package&amp;quot;&lt;br /&gt;
  SECTION = &amp;quot;username/mycoolpackage&amp;quot;&lt;br /&gt;
  PV = &amp;quot;1&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  inherit autotools&lt;br /&gt;
  &lt;br /&gt;
  SRC_URI = &amp;quot;http://www.example.com/download/mycoolpackage-1.tar.gz&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Explanation:&lt;br /&gt;
* DESCRIPTION - Just a short text explaining the package&lt;br /&gt;
* SECTION - I have no clue, but I'll use username/mycoolpackage for now&lt;br /&gt;
* PV - Package Version&lt;br /&gt;
* inherit autotools - The package can be compiled by './configure &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install' so we tell MokoMakefile to do it this way.&lt;br /&gt;
* SRC_URI = ... - This is the download location of the package source. It's imperative that the tar.gz contains a directory called '''packagename-packageversion''' (in this case: mycoolpackage-1) so that MokoMakefile can find it automatically or the build will fail.&lt;br /&gt;
&lt;br /&gt;
This is not all. We also need to tell MokoMakfile that it needs to build and include the package in the image. To do this, do&lt;br /&gt;
  /usr/src/openmoko/openmoko# quilt edit trunk/oe/packages/tasks/task-openmoko.bb&lt;br /&gt;
Here, increase the value '''PR''' by one and add '''mycoolpackage \''' (with the backslash!) just before the line reading '''#  update-alternatives \'''.&lt;br /&gt;
&lt;br /&gt;
Now run&lt;br /&gt;
  /usr/src/openmoko/openmoko# quilt refresh&lt;br /&gt;
  /usr/src/openmoko/openmoko# cd ..&lt;br /&gt;
  /usr/src/openmoko# make update all&lt;br /&gt;
&lt;br /&gt;
And if everything's alright you should now have an OpenMoko image to flash to your phone or run in qemu as described above.&lt;br /&gt;
&lt;br /&gt;
===Testimonials=== &lt;br /&gt;
MokoMakefile is recommended by 4 out of 4 new developers on #openmoko, with testimonials such as &amp;quot;For some reason last night I couldn't get my manual install of everything to work (bb complained about my bbpath I think) ... but with your makefile, it works great!&amp;quot;, and &amp;quot;MokoMakefile rocks!&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Project page:&lt;br /&gt;
http://mokomakefile.projects.openmoko.org/&lt;br /&gt;
&lt;br /&gt;
{{Languages|MokoMakefile}}&lt;/div&gt;</summary>
		<author><name>Chooseopen</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/MokoMakefile</id>
		<title>MokoMakefile</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/MokoMakefile"/>
				<updated>2007-07-12T23:31:46Z</updated>
		
		<summary type="html">&lt;p&gt;Chooseopen: /* QEMU */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==MokoMakefile==&lt;br /&gt;
MokoMakefile is a fully automated way of setting up an OpenMoko development environment.  It is an invaluable tool for getting new developers up and running with a build environment which is configured the same as all the other existing developers.  It brings the same repeatability to build environment creation and maintenance as that which OpenEmbedded brings to the main task of actually building embedded software distributions.&lt;br /&gt;
&lt;br /&gt;
Note that MokoMakefile does *not* replace bitbake, or svn, or monotone, or openembedded, or qmake, or anything else.  It is a wrapper around all that to make it easy to set up and maintain a development environment that fully complies with the setup instructions published by OpenMoko.  Note that you need about 7 GB of available disk space for MokoMakefile to succeed.&lt;br /&gt;
&lt;br /&gt;
MokoMakefile is developed by [[User:RodWhitby|Rod Whitby]] - it is not an official product of OpenMoko (although I would be happy for them to pick it up and use it internally).  If there is any discrepancy between the [[Building_OpenMoko_from_scratch|official OpenMoko build instructions]], and the operation of the MokoMakefile, then you should consider the official instructions to be correct.&lt;br /&gt;
&lt;br /&gt;
=== Before you begin ===&lt;br /&gt;
'''Check that your /bin/sh (ls -l /bin/sh) is not linked to dash rather than bash.''' Using dash will cause you pain. This is true for a standard install of Ubuntu 7.04 (at least when installing from Live CD). If your /bin/sh points to /bin/dash, correct it with (as root):&lt;br /&gt;
 ln -sf /bin/bash /bin/sh&lt;br /&gt;
&lt;br /&gt;
If you have previously built with dash as your sh shell then your perl compile is probably broken.  One symptom is that the build will error and whine about an 'Unterminated quote string' another symptom is a message that says 'You haven't done a &amp;quot;make depend&amp;quot; yet!'  If you get these then you need to:&lt;br /&gt;
 make clean-package-perl&lt;br /&gt;
 make clean-package-perl-native&lt;br /&gt;
and rebuild.&lt;br /&gt;
 &lt;br /&gt;
If all else fails then just rm -rf the perl work dir and the perl stamps here's an i686 host example:&lt;br /&gt;
 rm -rf build/tmp/work/i686-linux/perl-native-5.8.7-r3 &lt;br /&gt;
 rm -f  build/tmp/stamps/i686-linux/perl*&lt;br /&gt;
&lt;br /&gt;
As of r99, MokoMakefile has patches which should make it build correctly with dash.&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
Here are the steps to use it:&lt;br /&gt;
&lt;br /&gt;
1 - Make sure your build host is set up according to:&lt;br /&gt;
   http://www.openembedded.org/wiki/OEandYourDistro&lt;br /&gt;
2 - Create your $OMDIR directory:&lt;br /&gt;
   mkdir /home/moko ; cd /home/moko&lt;br /&gt;
3 - Grab MokoMakefile:&lt;br /&gt;
   wget http://www.rwhitby.net/files/openmoko/Makefile&lt;br /&gt;
4 - Set up the environment:&lt;br /&gt;
   make setup&lt;br /&gt;
5 - Start building. Before starting a lenghty make process, check in Tips section about how to make Make multicore aware. You may want to modify the build/conf/local.conf file for your target (emulation/chroot) enviroment:&lt;br /&gt;
   make openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
This will set up the recommended directory structure as described in [[Building OpenMoko from scratch]], will download all the required software (from the right places with the right versions), and will immediately start building an image.&lt;br /&gt;
&lt;br /&gt;
Once you have done this, you can choose to continue using the MokoMakefile to initiate your subsequent builds, or you can go into the build directory and run bitbake commands manually.  The choice is yours.&lt;br /&gt;
&lt;br /&gt;
===Updating the environment=== &lt;br /&gt;
For easy maintenance of your build environment the following commands are available.&lt;br /&gt;
&lt;br /&gt;
1 - To update the MokoMakefile to the latest version:&lt;br /&gt;
   make update-makefile &lt;br /&gt;
&lt;br /&gt;
2 - To update the OpenMoko repository checkout and the MokoMakefile patches to the latest version:&lt;br /&gt;
   make update&lt;br /&gt;
&lt;br /&gt;
3 - To make sure that any recent changes to the build directory structure have been applied:&lt;br /&gt;
   make setup &lt;br /&gt;
&lt;br /&gt;
A quick way to rebuild a new image with the latest updates:&lt;br /&gt;
   make update-makefile &amp;amp;&amp;amp; make update setup openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
===Reporting Problems===&lt;br /&gt;
&lt;br /&gt;
First, make sure that the problem is reproducable after running&lt;br /&gt;
&lt;br /&gt;
 make update-makefile ; make update ; make setup&lt;br /&gt;
&lt;br /&gt;
then running&lt;br /&gt;
&lt;br /&gt;
 make clean-package-&amp;lt;foo&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(where you replace &amp;lt;foo&amp;gt; with the name of the package which is failing)&lt;br /&gt;
&lt;br /&gt;
then running&lt;br /&gt;
&lt;br /&gt;
 make all&lt;br /&gt;
&lt;br /&gt;
If you can get the error to occur three times in a row after running that sequence of commands three times, then feel free to report it to rwhitby in #openmoko on [http://wiki.openmoko.org/wiki/Development_resources#IRC IRC].&lt;br /&gt;
&lt;br /&gt;
===Work-arounds===&lt;br /&gt;
&lt;br /&gt;
Work-arounds for temporary or isolated problems should be added to the [[Talk:MokoMakefile|Discussion page]] which is associated with this page.  As they are fixed, they will be removed from that page.&lt;br /&gt;
&lt;br /&gt;
===Tips=== &lt;br /&gt;
*You can reduce the amount of consumed disk space significantly by adding&lt;br /&gt;
   INHERIT += &amp;quot;rm_work&amp;quot;&lt;br /&gt;
in your local.conf (e.g. /home/moko/build/conf/local.conf). This will remove the contents of each build/tmp/work/*/&amp;lt;package&amp;gt; directory after the corresponding package builds correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*If you an encounter an error with monotone similar to the following:&lt;br /&gt;
   mtn: misuse: database /home/moko/OE.mtn is laid out according to an old schema&lt;br /&gt;
Then you need to upgrade OE.mtn  Use the following command while in /home/moko:&lt;br /&gt;
   # mtn --db OE.mtn db migrate&lt;br /&gt;
&lt;br /&gt;
*If a certain package does not build due to corrupted download or some such try to remove the sources and rebuild it.&lt;br /&gt;
 rm sources/&amp;lt;package&amp;gt;*&lt;br /&gt;
 cd build&lt;br /&gt;
 . ../setup-env&lt;br /&gt;
 bitbake -crebuild &amp;lt;package&amp;gt;&lt;br /&gt;
after that your build might just work again.&lt;br /&gt;
&lt;br /&gt;
*For people with multiple CPU's (or dual-core ones) this small patch might be useful to build things faster.&lt;br /&gt;
Edit the local.conf and add the following lines:&lt;br /&gt;
 PARALLEL_MAKE = &amp;quot;-j 4&amp;quot;&lt;br /&gt;
 BB_NUMBER_THREADS = &amp;quot;4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Change the PARALLEL_MAKE and BB_NUMBER_THREADS values to something that suits better if it chokes your machine.&lt;br /&gt;
&lt;br /&gt;
*For amd64 host users you need the patch from http://bugs.openembedded.org/show_bug.cgi?id=1765 to build db3-native&lt;br /&gt;
&lt;br /&gt;
===QEMU===&lt;br /&gt;
The MokoMakefile now has support for automatically building, flashing, and running [[OpenMoko under QEMU|the new Neo1973 emulator]] (which is based on QEMU).&lt;br /&gt;
&lt;br /&gt;
Dependencies: &lt;br /&gt;
 &lt;br /&gt;
*lynx ('apt-get install lynx' in Ubuntu 7.04) /n&lt;br /&gt;
*netpbm ('apt-get install netpbm' in Ubuntu 7.04)&lt;br /&gt;
&lt;br /&gt;
“make qemu” will build qemu-neo1973, download the latest official OpenMoko images, flash the images into the virtual NAND flash, and run the emulator (you still need to install the makefile as mentioned above, however).&lt;br /&gt;
&lt;br /&gt;
Other targets are “make download-images” (to download the latest official images), “make flash-qemu-official” (to flash those images) and “make flash-qemu-local” (which will flash your latest locally built images), which can then be followed by “make run-qemu” or “make run-qemu-snapshot” to run the emulator with the most recently flashed images.&lt;br /&gt;
&lt;br /&gt;
Make sure you have the “lynx” and “netpbm” packages installed on your build host first.&lt;br /&gt;
&lt;br /&gt;
You're also invited to read more about how to run [[OpenMoko under QEMU]] in the article dedicated to this subject.&lt;br /&gt;
&lt;br /&gt;
===Developing with MokoMakefile===&lt;br /&gt;
&lt;br /&gt;
To make in-tree changes and have them built and used by qemu:&lt;br /&gt;
&lt;br /&gt;
  cd /home/moko/openmoko&lt;br /&gt;
  quilt new descriptive-patch-name.patch&lt;br /&gt;
  quilt add trunk/src/name-of-file-to-change # do this for every file you are about to modify&lt;br /&gt;
  ...make the changes...&lt;br /&gt;
  quilt refresh # this creates a file in /home/moko/patches/openmoko-HEAD/ and updates the quilt series file there&lt;br /&gt;
&lt;br /&gt;
Note: Do '''NOT''' use absolute paths as this confuses quilt and will get you a diff of the file against /dev/null!&lt;br /&gt;
&lt;br /&gt;
To build the changes and have them used by qemu:&lt;br /&gt;
&lt;br /&gt;
  make build-qemu&lt;br /&gt;
  make flash-qemu-local&lt;br /&gt;
  make run-qemu&lt;br /&gt;
&lt;br /&gt;
If you want to modify applications instead of the openmoko toolchain, this is what you have to do (example: openmoko-messages):&lt;br /&gt;
&lt;br /&gt;
  /usr/src/openmoko# . ./setup-env&lt;br /&gt;
  /usr/src/openmoko# cd openmoko/&lt;br /&gt;
  /usr/src/openmoko/openmoko# bitbake -c unpack openmoko-messages&lt;br /&gt;
  /usr/src/openmoko/openmoko# cd \&lt;br /&gt;
  ../build/tmp/work/armv4t-linux/openmoko-messages-0.0.1+svnnow-r2_2276/openmoko-messages/&lt;br /&gt;
  /usr/src/openmoko/build/tmp/work/armv4t-linux/openmoko-messages-0.0.1+svnnow-r2_2276/openmoko-messages# \&lt;br /&gt;
  vim src/detail-area.c&lt;br /&gt;
  /usr/src/openmoko/build/tmp/work/armv4t-linux/openmoko-messages-0.0.1+svnnow-r2_2276/openmoko-messages# \&lt;br /&gt;
  cd -&lt;br /&gt;
  /usr/src/openmoko/openmoko# bitbake openmoko-messages&lt;br /&gt;
&lt;br /&gt;
Then continue with MokoMakefile usage.&lt;br /&gt;
&lt;br /&gt;
If you want to add an application to your openmoko distribution, do this:&lt;br /&gt;
All file edits should be done using quilt as described above. That way a patch can easily be submitted to the openmoko project.&lt;br /&gt;
First, create a directory that will correspond to your package and edit a '''.bb''' file in there:&lt;br /&gt;
  /usr/src/openmoko# cd openmoko/&lt;br /&gt;
  /usr/src/openmoko/openmoko# quilt new mycoolpackage.patch&lt;br /&gt;
  /usr/src/openmoko/openmoko# mkdir trunk/oe/packages/mycoolpackage&lt;br /&gt;
  /usr/src/openmoko/openmoko# quilt add trunk/oe/packages/mycoolpackage/mycoolpackage_1.bb&lt;br /&gt;
  /usr/src/openmoko/openmoko# quilt edit trunk/oe/packages/mycoolpackage/mycoolpackage_1.bb&lt;br /&gt;
&lt;br /&gt;
The file should have the following content:&lt;br /&gt;
  DESCRIPTION = &amp;quot;This is a cool package&amp;quot;&lt;br /&gt;
  SECTION = &amp;quot;username/mycoolpackage&amp;quot;&lt;br /&gt;
  PV = &amp;quot;1&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  inherit autotools&lt;br /&gt;
  &lt;br /&gt;
  SRC_URI = &amp;quot;http://www.example.com/download/mycoolpackage-1.tar.gz&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Explanation:&lt;br /&gt;
* DESCRIPTION - Just a short text explaining the package&lt;br /&gt;
* SECTION - I have no clue, but I'll use username/mycoolpackage for now&lt;br /&gt;
* PV - Package Version&lt;br /&gt;
* inherit autotools - The package can be compiled by './configure &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install' so we tell MokoMakefile to do it this way.&lt;br /&gt;
* SRC_URI = ... - This is the download location of the package source. It's imperative that the tar.gz contains a directory called '''packagename-packageversion''' (in this case: mycoolpackage-1) so that MokoMakefile can find it automatically or the build will fail.&lt;br /&gt;
&lt;br /&gt;
This is not all. We also need to tell MokoMakfile that it needs to build and include the package in the image. To do this, do&lt;br /&gt;
  /usr/src/openmoko/openmoko# quilt edit trunk/oe/packages/tasks/task-openmoko.bb&lt;br /&gt;
Here, increase the value '''PR''' by one and add '''mycoolpackage \''' (with the backslash!) just before the line reading '''#  update-alternatives \'''.&lt;br /&gt;
&lt;br /&gt;
Now run&lt;br /&gt;
  /usr/src/openmoko/openmoko# quilt refresh&lt;br /&gt;
  /usr/src/openmoko/openmoko# cd ..&lt;br /&gt;
  /usr/src/openmoko# make update all&lt;br /&gt;
&lt;br /&gt;
And if everything's alright you should now have an OpenMoko image to flash to your phone or run in qemu as described above.&lt;br /&gt;
&lt;br /&gt;
===Testimonials=== &lt;br /&gt;
MokoMakefile is recommended by 4 out of 4 new developers on #openmoko, with testimonials such as &amp;quot;For some reason last night I couldn't get my manual install of everything to work (bb complained about my bbpath I think) ... but with your makefile, it works great!&amp;quot;, and &amp;quot;MokoMakefile rocks!&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Project page:&lt;br /&gt;
http://mokomakefile.projects.openmoko.org/&lt;br /&gt;
&lt;br /&gt;
{{Languages|MokoMakefile}}&lt;/div&gt;</summary>
		<author><name>Chooseopen</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/MokoMakefile</id>
		<title>MokoMakefile</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/MokoMakefile"/>
				<updated>2007-07-12T23:28:54Z</updated>
		
		<summary type="html">&lt;p&gt;Chooseopen: /* QEMU */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==MokoMakefile==&lt;br /&gt;
MokoMakefile is a fully automated way of setting up an OpenMoko development environment.  It is an invaluable tool for getting new developers up and running with a build environment which is configured the same as all the other existing developers.  It brings the same repeatability to build environment creation and maintenance as that which OpenEmbedded brings to the main task of actually building embedded software distributions.&lt;br /&gt;
&lt;br /&gt;
Note that MokoMakefile does *not* replace bitbake, or svn, or monotone, or openembedded, or qmake, or anything else.  It is a wrapper around all that to make it easy to set up and maintain a development environment that fully complies with the setup instructions published by OpenMoko.  Note that you need about 7 GB of available disk space for MokoMakefile to succeed.&lt;br /&gt;
&lt;br /&gt;
MokoMakefile is developed by [[User:RodWhitby|Rod Whitby]] - it is not an official product of OpenMoko (although I would be happy for them to pick it up and use it internally).  If there is any discrepancy between the [[Building_OpenMoko_from_scratch|official OpenMoko build instructions]], and the operation of the MokoMakefile, then you should consider the official instructions to be correct.&lt;br /&gt;
&lt;br /&gt;
=== Before you begin ===&lt;br /&gt;
'''Check that your /bin/sh (ls -l /bin/sh) is not linked to dash rather than bash.''' Using dash will cause you pain. This is true for a standard install of Ubuntu 7.04 (at least when installing from Live CD). If your /bin/sh points to /bin/dash, correct it with (as root):&lt;br /&gt;
 ln -sf /bin/bash /bin/sh&lt;br /&gt;
&lt;br /&gt;
If you have previously built with dash as your sh shell then your perl compile is probably broken.  One symptom is that the build will error and whine about an 'Unterminated quote string' another symptom is a message that says 'You haven't done a &amp;quot;make depend&amp;quot; yet!'  If you get these then you need to:&lt;br /&gt;
 make clean-package-perl&lt;br /&gt;
 make clean-package-perl-native&lt;br /&gt;
and rebuild.&lt;br /&gt;
 &lt;br /&gt;
If all else fails then just rm -rf the perl work dir and the perl stamps here's an i686 host example:&lt;br /&gt;
 rm -rf build/tmp/work/i686-linux/perl-native-5.8.7-r3 &lt;br /&gt;
 rm -f  build/tmp/stamps/i686-linux/perl*&lt;br /&gt;
&lt;br /&gt;
As of r99, MokoMakefile has patches which should make it build correctly with dash.&lt;br /&gt;
&lt;br /&gt;
=== Installation ===&lt;br /&gt;
Here are the steps to use it:&lt;br /&gt;
&lt;br /&gt;
1 - Make sure your build host is set up according to:&lt;br /&gt;
   http://www.openembedded.org/wiki/OEandYourDistro&lt;br /&gt;
2 - Create your $OMDIR directory:&lt;br /&gt;
   mkdir /home/moko ; cd /home/moko&lt;br /&gt;
3 - Grab MokoMakefile:&lt;br /&gt;
   wget http://www.rwhitby.net/files/openmoko/Makefile&lt;br /&gt;
4 - Set up the environment:&lt;br /&gt;
   make setup&lt;br /&gt;
5 - Start building. Before starting a lenghty make process, check in Tips section about how to make Make multicore aware. You may want to modify the build/conf/local.conf file for your target (emulation/chroot) enviroment:&lt;br /&gt;
   make openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
This will set up the recommended directory structure as described in [[Building OpenMoko from scratch]], will download all the required software (from the right places with the right versions), and will immediately start building an image.&lt;br /&gt;
&lt;br /&gt;
Once you have done this, you can choose to continue using the MokoMakefile to initiate your subsequent builds, or you can go into the build directory and run bitbake commands manually.  The choice is yours.&lt;br /&gt;
&lt;br /&gt;
===Updating the environment=== &lt;br /&gt;
For easy maintenance of your build environment the following commands are available.&lt;br /&gt;
&lt;br /&gt;
1 - To update the MokoMakefile to the latest version:&lt;br /&gt;
   make update-makefile &lt;br /&gt;
&lt;br /&gt;
2 - To update the OpenMoko repository checkout and the MokoMakefile patches to the latest version:&lt;br /&gt;
   make update&lt;br /&gt;
&lt;br /&gt;
3 - To make sure that any recent changes to the build directory structure have been applied:&lt;br /&gt;
   make setup &lt;br /&gt;
&lt;br /&gt;
A quick way to rebuild a new image with the latest updates:&lt;br /&gt;
   make update-makefile &amp;amp;&amp;amp; make update setup openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
===Reporting Problems===&lt;br /&gt;
&lt;br /&gt;
First, make sure that the problem is reproducable after running&lt;br /&gt;
&lt;br /&gt;
 make update-makefile ; make update ; make setup&lt;br /&gt;
&lt;br /&gt;
then running&lt;br /&gt;
&lt;br /&gt;
 make clean-package-&amp;lt;foo&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(where you replace &amp;lt;foo&amp;gt; with the name of the package which is failing)&lt;br /&gt;
&lt;br /&gt;
then running&lt;br /&gt;
&lt;br /&gt;
 make all&lt;br /&gt;
&lt;br /&gt;
If you can get the error to occur three times in a row after running that sequence of commands three times, then feel free to report it to rwhitby in #openmoko on [http://wiki.openmoko.org/wiki/Development_resources#IRC IRC].&lt;br /&gt;
&lt;br /&gt;
===Work-arounds===&lt;br /&gt;
&lt;br /&gt;
Work-arounds for temporary or isolated problems should be added to the [[Talk:MokoMakefile|Discussion page]] which is associated with this page.  As they are fixed, they will be removed from that page.&lt;br /&gt;
&lt;br /&gt;
===Tips=== &lt;br /&gt;
*You can reduce the amount of consumed disk space significantly by adding&lt;br /&gt;
   INHERIT += &amp;quot;rm_work&amp;quot;&lt;br /&gt;
in your local.conf (e.g. /home/moko/build/conf/local.conf). This will remove the contents of each build/tmp/work/*/&amp;lt;package&amp;gt; directory after the corresponding package builds correctly.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*If you an encounter an error with monotone similar to the following:&lt;br /&gt;
   mtn: misuse: database /home/moko/OE.mtn is laid out according to an old schema&lt;br /&gt;
Then you need to upgrade OE.mtn  Use the following command while in /home/moko:&lt;br /&gt;
   # mtn --db OE.mtn db migrate&lt;br /&gt;
&lt;br /&gt;
*If a certain package does not build due to corrupted download or some such try to remove the sources and rebuild it.&lt;br /&gt;
 rm sources/&amp;lt;package&amp;gt;*&lt;br /&gt;
 cd build&lt;br /&gt;
 . ../setup-env&lt;br /&gt;
 bitbake -crebuild &amp;lt;package&amp;gt;&lt;br /&gt;
after that your build might just work again.&lt;br /&gt;
&lt;br /&gt;
*For people with multiple CPU's (or dual-core ones) this small patch might be useful to build things faster.&lt;br /&gt;
Edit the local.conf and add the following lines:&lt;br /&gt;
 PARALLEL_MAKE = &amp;quot;-j 4&amp;quot;&lt;br /&gt;
 BB_NUMBER_THREADS = &amp;quot;4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Change the PARALLEL_MAKE and BB_NUMBER_THREADS values to something that suits better if it chokes your machine.&lt;br /&gt;
&lt;br /&gt;
*For amd64 host users you need the patch from http://bugs.openembedded.org/show_bug.cgi?id=1765 to build db3-native&lt;br /&gt;
&lt;br /&gt;
===QEMU===&lt;br /&gt;
The MokoMakefile now has support for automatically building, flashing, and running [[OpenMoko under QEMU|the new Neo1973 emulator]] (which is based on QEMU).&lt;br /&gt;
&lt;br /&gt;
Dependencies:  &lt;br /&gt;
lynx ('apt-get install lynx' in Ubuntu 7.04)&lt;br /&gt;
netpbm ('apt-get install netpbm' in Ubuntu 7.04)&lt;br /&gt;
&lt;br /&gt;
“make qemu” will build qemu-neo1973, download the latest official OpenMoko images, flash the images into the virtual NAND flash, and run the emulator (you still need to install the makefile as mentioned above, however).&lt;br /&gt;
&lt;br /&gt;
Other targets are “make download-images” (to download the latest official images), “make flash-qemu-official” (to flash those images) and “make flash-qemu-local” (which will flash your latest locally built images), which can then be followed by “make run-qemu” or “make run-qemu-snapshot” to run the emulator with the most recently flashed images.&lt;br /&gt;
&lt;br /&gt;
Make sure you have the “lynx” and “netpbm” packages installed on your build host first.&lt;br /&gt;
&lt;br /&gt;
You're also invited to read more about how to run [[OpenMoko under QEMU]] in the article dedicated to this subject.&lt;br /&gt;
&lt;br /&gt;
===Developing with MokoMakefile===&lt;br /&gt;
&lt;br /&gt;
To make in-tree changes and have them built and used by qemu:&lt;br /&gt;
&lt;br /&gt;
  cd /home/moko/openmoko&lt;br /&gt;
  quilt new descriptive-patch-name.patch&lt;br /&gt;
  quilt add trunk/src/name-of-file-to-change # do this for every file you are about to modify&lt;br /&gt;
  ...make the changes...&lt;br /&gt;
  quilt refresh # this creates a file in /home/moko/patches/openmoko-HEAD/ and updates the quilt series file there&lt;br /&gt;
&lt;br /&gt;
Note: Do '''NOT''' use absolute paths as this confuses quilt and will get you a diff of the file against /dev/null!&lt;br /&gt;
&lt;br /&gt;
To build the changes and have them used by qemu:&lt;br /&gt;
&lt;br /&gt;
  make build-qemu&lt;br /&gt;
  make flash-qemu-local&lt;br /&gt;
  make run-qemu&lt;br /&gt;
&lt;br /&gt;
If you want to modify applications instead of the openmoko toolchain, this is what you have to do (example: openmoko-messages):&lt;br /&gt;
&lt;br /&gt;
  /usr/src/openmoko# . ./setup-env&lt;br /&gt;
  /usr/src/openmoko# cd openmoko/&lt;br /&gt;
  /usr/src/openmoko/openmoko# bitbake -c unpack openmoko-messages&lt;br /&gt;
  /usr/src/openmoko/openmoko# cd \&lt;br /&gt;
  ../build/tmp/work/armv4t-linux/openmoko-messages-0.0.1+svnnow-r2_2276/openmoko-messages/&lt;br /&gt;
  /usr/src/openmoko/build/tmp/work/armv4t-linux/openmoko-messages-0.0.1+svnnow-r2_2276/openmoko-messages# \&lt;br /&gt;
  vim src/detail-area.c&lt;br /&gt;
  /usr/src/openmoko/build/tmp/work/armv4t-linux/openmoko-messages-0.0.1+svnnow-r2_2276/openmoko-messages# \&lt;br /&gt;
  cd -&lt;br /&gt;
  /usr/src/openmoko/openmoko# bitbake openmoko-messages&lt;br /&gt;
&lt;br /&gt;
Then continue with MokoMakefile usage.&lt;br /&gt;
&lt;br /&gt;
If you want to add an application to your openmoko distribution, do this:&lt;br /&gt;
All file edits should be done using quilt as described above. That way a patch can easily be submitted to the openmoko project.&lt;br /&gt;
First, create a directory that will correspond to your package and edit a '''.bb''' file in there:&lt;br /&gt;
  /usr/src/openmoko# cd openmoko/&lt;br /&gt;
  /usr/src/openmoko/openmoko# quilt new mycoolpackage.patch&lt;br /&gt;
  /usr/src/openmoko/openmoko# mkdir trunk/oe/packages/mycoolpackage&lt;br /&gt;
  /usr/src/openmoko/openmoko# quilt add trunk/oe/packages/mycoolpackage/mycoolpackage_1.bb&lt;br /&gt;
  /usr/src/openmoko/openmoko# quilt edit trunk/oe/packages/mycoolpackage/mycoolpackage_1.bb&lt;br /&gt;
&lt;br /&gt;
The file should have the following content:&lt;br /&gt;
  DESCRIPTION = &amp;quot;This is a cool package&amp;quot;&lt;br /&gt;
  SECTION = &amp;quot;username/mycoolpackage&amp;quot;&lt;br /&gt;
  PV = &amp;quot;1&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  inherit autotools&lt;br /&gt;
  &lt;br /&gt;
  SRC_URI = &amp;quot;http://www.example.com/download/mycoolpackage-1.tar.gz&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Explanation:&lt;br /&gt;
* DESCRIPTION - Just a short text explaining the package&lt;br /&gt;
* SECTION - I have no clue, but I'll use username/mycoolpackage for now&lt;br /&gt;
* PV - Package Version&lt;br /&gt;
* inherit autotools - The package can be compiled by './configure &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install' so we tell MokoMakefile to do it this way.&lt;br /&gt;
* SRC_URI = ... - This is the download location of the package source. It's imperative that the tar.gz contains a directory called '''packagename-packageversion''' (in this case: mycoolpackage-1) so that MokoMakefile can find it automatically or the build will fail.&lt;br /&gt;
&lt;br /&gt;
This is not all. We also need to tell MokoMakfile that it needs to build and include the package in the image. To do this, do&lt;br /&gt;
  /usr/src/openmoko/openmoko# quilt edit trunk/oe/packages/tasks/task-openmoko.bb&lt;br /&gt;
Here, increase the value '''PR''' by one and add '''mycoolpackage \''' (with the backslash!) just before the line reading '''#  update-alternatives \'''.&lt;br /&gt;
&lt;br /&gt;
Now run&lt;br /&gt;
  /usr/src/openmoko/openmoko# quilt refresh&lt;br /&gt;
  /usr/src/openmoko/openmoko# cd ..&lt;br /&gt;
  /usr/src/openmoko# make update all&lt;br /&gt;
&lt;br /&gt;
And if everything's alright you should now have an OpenMoko image to flash to your phone or run in qemu as described above.&lt;br /&gt;
&lt;br /&gt;
===Testimonials=== &lt;br /&gt;
MokoMakefile is recommended by 4 out of 4 new developers on #openmoko, with testimonials such as &amp;quot;For some reason last night I couldn't get my manual install of everything to work (bb complained about my bbpath I think) ... but with your makefile, it works great!&amp;quot;, and &amp;quot;MokoMakefile rocks!&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Project page:&lt;br /&gt;
http://mokomakefile.projects.openmoko.org/&lt;br /&gt;
&lt;br /&gt;
{{Languages|MokoMakefile}}&lt;/div&gt;</summary>
		<author><name>Chooseopen</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Hardware:Neo1973:Alternate_Cases:Removal_of_free_space</id>
		<title>Hardware:Neo1973:Alternate Cases:Removal of free space</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Hardware:Neo1973:Alternate_Cases:Removal_of_free_space"/>
				<updated>2007-07-11T05:25:50Z</updated>
		
		<summary type="html">&lt;p&gt;Chooseopen: /* Interest */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Concept==&lt;br /&gt;
There is unnecessary free space within the case - this variant would remove that, possibly with some re-arrangement of components, to make the phone slightly smaller.&lt;br /&gt;
&lt;br /&gt;
==Rendered images==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3D model==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Materials==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Processes==&lt;br /&gt;
Stereolithography&lt;br /&gt;
&lt;br /&gt;
==Components==&lt;br /&gt;
&lt;br /&gt;
==Interest==&lt;br /&gt;
Leave your nickname here if you are interested in having one made. This is not an order form, but is intended to gauge interest before effort is expended designing the case.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!No  !! Nick !!&lt;br /&gt;
|-&lt;br /&gt;
|1. Chooseopen&lt;br /&gt;
|-&lt;br /&gt;
|2.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Neo1973_alternate_cases]]&lt;/div&gt;</summary>
		<author><name>Chooseopen</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Hardware:Neo1973:Alternate_Cases:Removal_of_free_space</id>
		<title>Hardware:Neo1973:Alternate Cases:Removal of free space</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Hardware:Neo1973:Alternate_Cases:Removal_of_free_space"/>
				<updated>2007-07-11T05:25:16Z</updated>
		
		<summary type="html">&lt;p&gt;Chooseopen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Concept==&lt;br /&gt;
There is unnecessary free space within the case - this variant would remove that, possibly with some re-arrangement of components, to make the phone slightly smaller.&lt;br /&gt;
&lt;br /&gt;
==Rendered images==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3D model==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Materials==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Processes==&lt;br /&gt;
Stereolithography&lt;br /&gt;
&lt;br /&gt;
==Components==&lt;br /&gt;
&lt;br /&gt;
==Interest==&lt;br /&gt;
Leave your nickname here if you are interested in having one made. This is not an order form, but is intended to gauge interest before effort is expended designing the case.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
!No  !! Nick !!&lt;br /&gt;
|-&lt;br /&gt;
|1. Chooseopen&lt;br /&gt;
|2.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Neo1973_alternate_cases]]&lt;/div&gt;</summary>
		<author><name>Chooseopen</name></author>	</entry>

	</feed>