<?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=Dewey&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=Dewey&amp;feedformat=atom"/>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Special:Contributions/Dewey"/>
		<updated>2013-05-24T06:25:23Z</updated>
		<subtitle>User contributions</subtitle>
		<generator>MediaWiki 1.19.6</generator>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Manually_using_GPRS</id>
		<title>Manually using GPRS</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Manually_using_GPRS"/>
				<updated>2009-01-02T17:19:40Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: /* From OM2008.8 repositories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{note| These instructions are for OM2008.8 .  If you are using the FSO stack, see [[GPRS_FSO]].}}&lt;br /&gt;
&lt;br /&gt;
The GPRS connection is made using the PPP protocol to a server identified by an &amp;quot;APN&amp;quot; at the network operator.   Once a GPRS connection is made, it is possible to [[#Sharing_the_GPRS_connection_with_a_computer|share that connection with a connected computer]], allowing that computer to access the internet through the phone!&lt;br /&gt;
&lt;br /&gt;
= Option 1: With GSM multiplexing and with a GUI =&lt;br /&gt;
&lt;br /&gt;
{{note|The following does not appear to work if you have a SIM PIN.  The dialog to enter your SIM PIN never pops up and the GSM multiplexing daemon continuous loops and runs into a SIM PIN error.}}&lt;br /&gt;
&lt;br /&gt;
GSM multiplexing allows both a GPRS connection and a phone call to be handled at the same time.  By default, [[Om 2008.8]] does not multiplex the GSM device.  The [[FSO]] distribution, however, introduces GSM multiplexing with a new service and a DBus API to that service.  The instructions to modify the OM2008.8 distribution to make use of GSM multiplexing and allow you to start GPRS from a GUI can be found here: http://freeyourphone.de/portal_v1/viewtopic.php?f=21&amp;amp;t=295 ('''Note:''' Script package seems to be no longer be available, but a later post in the thread links to a version at [http://fyp-archiv.relei.de/ http://fyp-archiv.relei.de/].)&lt;br /&gt;
&lt;br /&gt;
== gsm0710muxd ==&lt;br /&gt;
&lt;br /&gt;
There are two sources, where you can find gsm0710muxd.&lt;br /&gt;
&lt;br /&gt;
=== From OM2008.8 repositories ===&lt;br /&gt;
&lt;br /&gt;
Good news, working gsm0710muxd can be installed just by typing &amp;quot;opkg install gsm0710muxd&amp;quot;&lt;br /&gt;
&lt;br /&gt;
NOTE: ASU2008.12 boots in 45s and gsm0710muxd has probably not enough time to initialize GSM modem (gsm0710muxd is unable to provide working tty device to qtopia =&amp;gt; qpe fails to open GSM modem and quits)&lt;br /&gt;
==&amp;gt; Some kind of delay may be needed in /etc/X11/Xsession.d/89qtopia&lt;br /&gt;
&lt;br /&gt;
==&amp;gt; It has also been suggested on the mailing lists that an &amp;quot;update-rc.d gsm0710muxd defaults 11&amp;quot; be issued to get this to start earlier in the boot process to give the modem a chance to initialize before QPE starts.&lt;br /&gt;
&lt;br /&gt;
=== From Angstrom Repositories ===&lt;br /&gt;
&lt;br /&gt;
If the gsm0710muxd that is found in the OM2008.8 repository refuses to work, you can use the one from the Angstrom Repositories (see [[Repositories]]) instead.&lt;br /&gt;
&lt;br /&gt;
Alternatively, if you simply want to download all the packages, you can get them from here:&lt;br /&gt;
&lt;br /&gt;
http://www.angstrom-distribution.org/feeds/2008/ipk/glibc/armv4t/base/gsm0710muxd_0.9.1+r0-gitr3ff86b129640b647ccba3d86eb243d864671b039-r0_armv4t.ipk&lt;br /&gt;
&lt;br /&gt;
I don't know if the package got renamed but that one wasn't in there the one i downloaded was&lt;br /&gt;
&lt;br /&gt;
http://www.angstrom-distribution.org/feeds/2008/ipk/glibc/armv4t/base/gsm0710muxd_0.9.2+gitr79e10fe8ad0828e5be9a5c087ac9ee04956674c1-r0.1_armv4t.ipk&lt;br /&gt;
&lt;br /&gt;
haven't gotten past this step yet well see how / if it works. :)&lt;br /&gt;
&lt;br /&gt;
This link was working for me on 11.12.2008 (I've successfully muxed GSM device and sent command for echo reduction - http://lists.openmoko.org/pipermail/community/2008-August/028495.html)&lt;br /&gt;
&lt;br /&gt;
http://shr.bearstech.com/shr-testing/ipk/armv4t/gsm0710muxd-dbg_0.9.2+gitr12+d8b36b923ef69a64cb5a2d3bca799d772b9c73c3-r0.1_armv4t.ipk&lt;br /&gt;
&lt;br /&gt;
and the dependencies from here:&lt;br /&gt;
&lt;br /&gt;
http://www.angstrom-distribution.org/repo/?pkgname=gsm0710muxd&lt;br /&gt;
&lt;br /&gt;
Make sure that you install the armv4t versions of all packages.&lt;br /&gt;
&lt;br /&gt;
=== Common part ===&lt;br /&gt;
&lt;br /&gt;
The most important step after installing gsm0710muxd is to tell QPE to use the MUX instead of the device directly.  If you follow the instructions in the link above, there is a step that replaces the 89qtopia init script with one from their script package.  The key difference is the addition of the following lines that tells QPE to use the MUX:&lt;br /&gt;
&lt;br /&gt;
in /etc/X11/Xsession.d/89qtopia&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
identvar=$(date +%s)&amp;lt;br/&amp;gt;&lt;br /&gt;
ptsvar=$(dbus-send --system --print-reply --type=method_call --dest=org.pyneo.muxer /org/pyneo/Muxer&lt;br /&gt;
org.freesmartphone.GSM.MUX.AllocChannel string:$identvar | grep string | awk -F '&amp;quot;' '{ print $2 }')&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
export QTOPIA_PHONE_DEVICE=$ptsvar&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The [[#Some APN names for reference|APN Reference]] table may come in handy when you are looking for the required network specific information for the other scripts.&lt;br /&gt;
&lt;br /&gt;
Once you follow through with all the instructions, you will notice that the &amp;quot;Services&amp;quot; GUI will crash.  This has to do with this bug: http://docs.openmoko.org/trac/ticket/1718&lt;br /&gt;
&lt;br /&gt;
The fix is to change the &amp;quot;init()&amp;quot; call on line 82 of /usr/lib/python2.5/site-packages/gtk-2.0/gtk/_init_.py  to &amp;quot;_init()&amp;quot; (add an underscore).&lt;br /&gt;
&lt;br /&gt;
You may also have to modify your /etc/resolv.conf file and add the nameserver (DNS Server) of your service provider if you have DNS resolution problems.&lt;br /&gt;
&lt;br /&gt;
Then, hopefully, you should be up in running with GPRS and a GUI to turn it on and off.  Note that you can use the command line scripts &amp;quot;gprson&amp;quot; and &amp;quot;gprsoff&amp;quot; in place of the GUI if you need to do some debugging.&lt;br /&gt;
&lt;br /&gt;
= Option 2: With GSM multiplexing and without a GUI =&lt;br /&gt;
&lt;br /&gt;
You will have to get gsm0710muxd the same way as detailed in Option 1.&lt;br /&gt;
&lt;br /&gt;
'''1) In /etc/rc5.d start gsm0710muxd before gsmd:'''&lt;br /&gt;
* S34gsm0710muxd -&amp;gt; ../init.d/gsm0710muxd&lt;br /&gt;
* S35gsmd -&amp;gt; ../init.d/gsmd&lt;br /&gt;
&lt;br /&gt;
'''2) Modify S35gsmd so it can start either with or without gsm0710muxd:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
start)&lt;br /&gt;
if [ &amp;quot;$(pidof gsm0710muxd)&amp;quot; ] ; then&lt;br /&gt;
id=$(date +%s)&lt;br /&gt;
GSM_DEV=$(dbus-send --system --print-reply --type=method_call --dest=org.pyneo.muxer /org/pyneo/Muxer org.freesmartphone.GSM.MUX.AllocChannel string:$id | grep string | cut -d \&amp;quot; -f 2)&lt;br /&gt;
else&lt;br /&gt;
[ -n &amp;quot;$GSM_POW&amp;quot; ] &amp;amp;&amp;amp; ( echo &amp;quot;0&amp;quot; &amp;gt;$GSM_POW; sleep 1 )&lt;br /&gt;
[ -n &amp;quot;$GSM_POW&amp;quot; ] &amp;amp;&amp;amp; ( echo &amp;quot;1&amp;quot; &amp;gt;$GSM_POW; sleep 1 )&lt;br /&gt;
[ -n &amp;quot;$GSM_RES&amp;quot; ] &amp;amp;&amp;amp; ( echo &amp;quot;1&amp;quot; &amp;gt;$GSM_RES; sleep 1 )&lt;br /&gt;
[ -n &amp;quot;$GSM_RES&amp;quot; ] &amp;amp;&amp;amp; ( echo &amp;quot;0&amp;quot; &amp;gt;$GSM_RES; sleep 2 )&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
if [ ! &amp;quot;$GSM_DEV&amp;quot; ] ; then&lt;br /&gt;
echo &amp;quot;GSM_DEV was not set&amp;quot;&lt;br /&gt;
exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo -n &amp;quot;Starting GSM daemon: &amp;quot;&lt;br /&gt;
start-stop-daemon -S -x /usr/sbin/gsmd -- gsmd -p $GSM_DEV $GSMD_OPTS -d -l /var/log/gsmd&lt;br /&gt;
&lt;br /&gt;
if [ $? = 0 ]; then&lt;br /&gt;
echo &amp;quot;gsmd.&amp;quot;&lt;br /&gt;
else&lt;br /&gt;
echo &amp;quot;(failed.)&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
;;&lt;br /&gt;
stop)&lt;br /&gt;
if [ ! &amp;quot;$(pidof gsm0710muxd)&amp;quot; ] ; then&lt;br /&gt;
[ -n &amp;quot;$GSM_POW&amp;quot; ] &amp;amp;&amp;amp; echo &amp;quot;0&amp;quot; &amp;gt;$GSM_POW&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
echo -n &amp;quot;Stopping GSM daemon: &amp;quot;&lt;br /&gt;
...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''3) Remove the tty from /etc/ppp/peers/simyo''' (replace simyo with your provider).&lt;br /&gt;
&lt;br /&gt;
'''4) Use a ppp start script like this:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat /usr/local/bin/ppp-start&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
id=$(date +%s)&lt;br /&gt;
TTY=$(dbus-send --system --print-reply --type=method_call --dest=org.pyneo.muxer /org/pyneo/Muxer org.freesmartphone.GSM.MUX.AllocChannel string:$id | grep string | cut -d \&amp;quot; -f 2)&lt;br /&gt;
logger -t ppp-start &amp;quot;using tty $TTY&amp;quot;&lt;br /&gt;
pppd $TTY call simyo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5) Use &amp;quot;killall pppd&amp;quot; to terminate the PPP connection.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[:Image:Gsmmuxd.trace.txt|Here]] is some strace information from gsm0710muxd, showing how the daemon responds when receiving a call when GPRS is up.&lt;br /&gt;
&lt;br /&gt;
[http://www.teaparty.net/technotes/openmoko-2.html#GPRS Here] is Tom's documentation on how he got it working (under 2008.08), with config files and example output.&lt;br /&gt;
&lt;br /&gt;
= Option 3: Without GSM multiplexing and without a GUI =&lt;br /&gt;
&lt;br /&gt;
[Important Note: It has been pointed out that this is only for 2007.2 and not for the 2008.8 images.  If someone can confirm this and update this comment with more detail it would help out this page.  Thanks]&lt;br /&gt;
&lt;br /&gt;
The program that implements PPP on Linux is [[pppd]], which we need to configure and run to get a connection. When that is working, we can configure pppd to wait until it's needed before it connects, and to disconnect if the connection becomes idle. Further, we can start pppd in the background during the boot process.&lt;br /&gt;
&lt;br /&gt;
== Configuring pppd for manual connections ==&lt;br /&gt;
&lt;br /&gt;
You'll need /etc/ppp/peers/gprs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Uncomment the following if you want some debug.&lt;br /&gt;
#debug&lt;br /&gt;
#logfile /var/volatile/log/pppd.log&lt;br /&gt;
lock&lt;br /&gt;
/dev/ttySAC0 115200&lt;br /&gt;
crtscts&lt;br /&gt;
connect /etc/ppp/gprs-connect-chat&lt;br /&gt;
disconnect /etc/ppp/gprs-disconnect-chat&lt;br /&gt;
hide-password&lt;br /&gt;
usepeerdns&lt;br /&gt;
ipcp-accept-local&lt;br /&gt;
noauth&lt;br /&gt;
noipdefault&lt;br /&gt;
novj&lt;br /&gt;
novjccomp&lt;br /&gt;
defaultroute&lt;br /&gt;
replacedefaultroute&lt;br /&gt;
# Reopen the connection if it fails, pausing for a while.&lt;br /&gt;
persist&lt;br /&gt;
holdoff 15&lt;br /&gt;
# Check the line every 20 seconds and presume&lt;br /&gt;
# the peer is gone if no replay for 4 times.&lt;br /&gt;
lcp-echo-interval 20&lt;br /&gt;
lcp-echo-failure 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Comment by Vasco: I also had to include this in order to survive a &amp;quot;'''IPCP: timeout sending Config-Requests'''&amp;quot; sporadic error that dropped my connection right in the beginning:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ipcp-restart 10&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Depending on the APN, you may need password authentication using CHAP or PAP. In /etc/ppp/pap-secrets you can add the following default line for &amp;quot;password-less&amp;quot; connections:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# client        server  secret                  IP addresses&lt;br /&gt;
*               *       &amp;quot;&amp;quot;                      *&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For CHAP, lines in /etc/ppp/chap-secrets are used. For PAP, the lines are in /etc/ppp/pap-secrets. The client should match the &amp;quot;user&amp;quot; option in pppd the config file (below). You can use * to mean any here, but the option user &amp;quot;&amp;quot; doesn't mean empty!&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Secrets for authentication using CHAP&lt;br /&gt;
# client        server  secret                  IP addresses&lt;br /&gt;
&amp;quot;user&amp;quot;         *       &amp;quot;password&amp;quot;                  *&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this you need the following options in /etc/ppp/peers/gprs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# username to use for authentication, should match &amp;quot;client&amp;quot; in /etc/ppp/{chap,pap}-secrets&lt;br /&gt;
user &amp;quot;user&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== gprs-connect-chat, version 1 ==&lt;br /&gt;
&lt;br /&gt;
You'll also need /etc/ppp/gprs-connect-chat (needs &amp;quot;chmod +x&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
exec chat -v -S -s\&lt;br /&gt;
TIMEOUT 15\&lt;br /&gt;
&amp;quot;&amp;quot; &amp;quot;\K\K\K\d+++ATH&amp;quot;\&lt;br /&gt;
OK-AT-OK ATZ\&lt;br /&gt;
OK ATE1\&lt;br /&gt;
ABORT BUSY\&lt;br /&gt;
ABORT DELAYED\&lt;br /&gt;
ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
ABORT VOICE\&lt;br /&gt;
ABORT ERROR\&lt;br /&gt;
ABORT RINGING\&lt;br /&gt;
TIMEOUT 60\&lt;br /&gt;
OK AT+CFUN=1\&lt;br /&gt;
OK AT+COPS\&lt;br /&gt;
OK AT+CGDCONT=1,\&amp;quot;IP\&amp;quot;,\&amp;quot;internet\&amp;quot;\&lt;br /&gt;
OK ATD*99#\&lt;br /&gt;
CONNECT /n/d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; In the 3rd last line, replace the word &amp;lt;i&amp;gt;internet&amp;lt;/i&amp;gt; by your provider's APN (listed below).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;(08/18/08) Note:&amp;lt;/b&amp;gt; I needed to add the command &amp;quot;AT+CMOD=2&amp;quot; (formatted as &amp;quot;OK AT+CMOD=2\&amp;quot; without the quotes) in order to get GPRS working with the above script (otherwise it would ERROR on the CFUN, COPS, or the ATD if the other two were removed).  I have T-Mobile (US) with the $5.99 &amp;quot;tzones&amp;quot; addon, which works with Minimo as it supports HTTP proxy setups.&lt;br /&gt;
&lt;br /&gt;
== gprs-connect-chat, version 2 ==&lt;br /&gt;
&lt;br /&gt;
Update: On my freerunner the first AT+CFUN=1 always generated ERROR. I managed to get gprs work by using the following script from http://lists.openmoko.org/pipermail/community/2008-July/023246.html:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
exec /usr/sbin/chat -v \&lt;br /&gt;
TIMEOUT 10 \&lt;br /&gt;
OK-AT-'' ''\&lt;br /&gt;
ABORT BUSY\&lt;br /&gt;
ABORT DELAYED\&lt;br /&gt;
ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
ABORT VOICE\&lt;br /&gt;
ABORT ERROR\&lt;br /&gt;
ABORT RINGING\&lt;br /&gt;
TIMEOUT 30 \&lt;br /&gt;
'' ATZ\&lt;br /&gt;
OK ATE1\&lt;br /&gt;
OK AT+CFUN=1\&lt;br /&gt;
ERROR AT+CPIN=\&amp;quot;XXXX\&amp;quot;\         &amp;lt;&amp;lt; USE YOUR OWN&lt;br /&gt;
OK AT+COPS\&lt;br /&gt;
OK AT+CGDCONT=1,\&amp;quot;IP\&amp;quot;,\&amp;quot;internet\&amp;quot;\&lt;br /&gt;
OK 'ATDT*99***1#'\&lt;br /&gt;
CONNECT ''&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The error seems to vary a bit, sometimes it's before AT+COPS, sometimes as above. I have two versions of the gprs-connect-chat, which I vary between depending on which is needed. Or is there a way to specify two acceptable answers like {OK,ERROR}?&lt;br /&gt;
&lt;br /&gt;
You will need to adjust the APN name &amp;quot;internet&amp;quot; in at+cgdcont line and possibly the phone number in the ATD line to match what your network operator provides. See below in the table &amp;quot;Some APN names for reference&amp;quot; for the right settings for your operator.&lt;br /&gt;
&lt;br /&gt;
== gprs-disconnect-chat ==&lt;br /&gt;
&lt;br /&gt;
Also good to have is /etc/ppp/gprs-disconnect-chat (needs &amp;quot;chmod +x&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
/usr/sbin/chat -v\&lt;br /&gt;
ABORT OK\&lt;br /&gt;
ABORT BUSY\&lt;br /&gt;
ABORT DELAYED\&lt;br /&gt;
ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
ABORT &amp;quot;NO CARRIER&amp;quot;\&lt;br /&gt;
ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
ABORT VOICE\&lt;br /&gt;
ABORT ERROR\&lt;br /&gt;
ABORT RINGING\&lt;br /&gt;
TIMEOUT 12\&lt;br /&gt;
&amp;quot;&amp;quot; &amp;quot;\K\K\K\d+++ATH&amp;quot;\&lt;br /&gt;
&amp;quot;NO CARRIER-AT-OK&amp;quot; &amp;quot;\c&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Starting PPP connection ==&lt;br /&gt;
&lt;br /&gt;
The following script can be used to start the ppp connection. First it stops gsmd because gsmd may put the phone in a unknown state. It then turns on the power to the phone, modifies the ownership, and then creates a tty connection. Finally it starts [[pppd]] with the gprs settings.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/init.d/gsmd stop&lt;br /&gt;
echo &amp;quot;1&amp;quot; &amp;gt; /sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
chown uucp.uucp /dev/ttySAC0&lt;br /&gt;
stty -F /dev/ttySAC0 crtscts&lt;br /&gt;
pppd call gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are having problems connecting ensure you have a good GSM signal and replace the last line with the below line. This will allow you to see the details of the connection on the console.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pppd debug nodetach call gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The config above will establish a persistant link over gprs. The battery will run low in less than an hour. See an example for an on-demand config below.&lt;br /&gt;
&lt;br /&gt;
=== Resolve.conf issues ===&lt;br /&gt;
&lt;br /&gt;
The latest build seems to have solved the following issue, it should be automatically updated by pppd.&lt;br /&gt;
&lt;br /&gt;
If you expeience DNS issues after connecting to DNS you may need a proper /etc/resolv.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln -sf /var/run/resolv.conf /etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If needed put your nameserver for usb-net into /var/run/resolv.conf, not in /etc.&lt;br /&gt;
&lt;br /&gt;
The image does not set a correct resolv.conf. i do so with an&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo  nameserver 192.168.0.201 &amp;gt; /var/run/resolv.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in the right place. because a post-up in /etc/network/interfaces is not supported i do that in /etc/network/if-up.d/08setupdns&lt;br /&gt;
&lt;br /&gt;
another problem is pppd's /etc/ppp/ip-down.d/92removedns which does not properly remove the link when shuting down ppp. my fix is this script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
ACTUALCONF=/var/run/resolv.conf&lt;br /&gt;
PPPCONF=/var/run/ppp/resolv.conf&lt;br /&gt;
if [ -f $PPPCONF ] ; then&lt;br /&gt;
if [ -f $ACTUALCONF ] ; then&lt;br /&gt;
if [ ! -h $ACTUALCONF -o ! &amp;quot;`readlink $ACTUALCONF 2&amp;gt;&amp;amp;1`&amp;quot; = &amp;quot;$PPPCONF&amp;quot; ] ; then&lt;br /&gt;
mv $ACTUALCONF $ACTUALCONF.ppporig&lt;br /&gt;
fi&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
ln -sf $PPPCONF $ACTUALCONF&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Some APN names for reference ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Country&lt;br /&gt;
! Carrier&lt;br /&gt;
! Plan&lt;br /&gt;
! APN/Phone&lt;br /&gt;
! user/password if required&lt;br /&gt;
! Working pppd scripts&lt;br /&gt;
|-&lt;br /&gt;
| Australia || Telstra || Any || telstra.internet ||  || use CHAP auth with &amp;quot;&amp;quot; secret ||&lt;br /&gt;
|-&lt;br /&gt;
| Australia || Virgin || Any || VirginInternet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Australia || Vodafone || Any || vfinternet.au || ||&lt;br /&gt;
|-&lt;br /&gt;
| Austria|| Orange/One|| Any || web.one.at || web/web || works with gsm0710d under om2008.9: [http://freeyourphone.de/portal_v1/viewtopic.php?f=21&amp;amp;t=295 howto] - complete /etc/ppp/ directory with settings can be found here: [http://www.true-binary.com/wp-content/uploads/2008/11/orange_ppp.tar.gz orange_ppp.tar.gz]&lt;br /&gt;
|-&lt;br /&gt;
| Canada || Fido || Any, behind NAT || internet.fido.ca || fido/fido || use pap authetication&lt;br /&gt;
proxy address 205.151.011.011:8080&lt;br /&gt;
&lt;br /&gt;
mdbus -s org.freesmartphone.frameworkd /org/freesmartphone/GSM/Device&lt;br /&gt;
org.freesmartphone.GSM.PDP.ActivateContext internet.fido.ca fido&lt;br /&gt;
fido&lt;br /&gt;
|-&lt;br /&gt;
| Canada || Rogers || Any, behind NAT || internet.com || wapuser1/wap || nameserver 207.181.101.4&lt;br /&gt;
|-&lt;br /&gt;
| Canada || Rogers || $7 unlimited browsing || goam.com || wapuser1/wap || Must use a proxy server 10.128.1.69:80 (or 172.25.0.107:80 or 208.200.67.150:8080)&lt;br /&gt;
|-&lt;br /&gt;
| Czech Republic || Vodafone || any postpaid || internet || must be empty || [[GPRS_FSO|Works with FSO]] Behind NAT.&lt;br /&gt;
|-&lt;br /&gt;
| Czech Republic || Vodafone || prepaid || ointernet || must be empty || [[GPRS_FSO|Works with FSO]] Behind NAT.&lt;br /&gt;
|-&lt;br /&gt;
| Czech Republic || 02 || Unlimited data plan || internet || must be empty || [[http://wiki.openmoko.org/index.php?title=Manually_using_GPRS&amp;amp;action=submit#Option_3:_Without_GSM_multiplexing_and_without_a_GUI Works with OM2008.9]].&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
| Denmark || Telmore || || wap || must be empty ||&lt;br /&gt;
|-&lt;br /&gt;
| Denmark || Unotel || || internet || must be empty || Note: APN not tested&lt;br /&gt;
|-&lt;br /&gt;
| Estonia || Elisa || Any, behind NAT || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Estonia || EMT || Any, behind NAT || internet.emt.ee || ||&lt;br /&gt;
|-&lt;br /&gt;
| Fiji || Digicel || Any || wap.digicelpacific.com || || nameserver 10.150.123.41 10.150.102.240 Must use a proxy server 10.150.122.12:8080&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Saunalahti || Any || internet.saunalahti || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Sonera   || Any, behind NAT || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Sonera   || Any, public IP  || prointernet || ||&lt;br /&gt;
|-&lt;br /&gt;
| France || SFR || 10.x.x.x? || websfr || || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || SFR || 10.x.x.x? || wapsfr&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;|| || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || Orange || ??? || orange || orange orange|| Work under OM2008.9 FDOM with UI ( gsm0710muxd )&lt;br /&gt;
|-&lt;br /&gt;
| France || Bouyges Telecom || Web &amp;amp; Mail || mmsbouygtel.com || || Work great under FSO. Just follow instructions at http://wiki.openmoko.org/wiki/GPRS_FSO. Proxy:  62.201.129.225:8080. For emails, only ports 25 (smtp) and 110 (pop) are allowed. (They use a transparent proxy ...)&lt;br /&gt;
|-&lt;br /&gt;
| Germany || E-Plus || BASE (and others?) || internet.eplus.de || eplus gprs || [[Base pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| Germany || E-Plus || Simyo || internet.eplus.de || simyo simyo || [[simyo pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| Germany || T-Mobile ||  || internet.t-mobile || ||&lt;br /&gt;
|-&lt;br /&gt;
| Germany || Vodafone || Any, behind NAT || web.vodafone.de || ||&lt;br /&gt;
|-&lt;br /&gt;
| Hungary || T-Mobile || Any || internet / *99***1# || must be empty || must disable chap auth: refuse-chap, refuse-mschap, refuse-mschap-v2&lt;br /&gt;
|-&lt;br /&gt;
| India || AirTel || MobileOffice || airtelgprs.com || ||&lt;br /&gt;
|-&lt;br /&gt;
| Ireland || Vodafone ||  || isp.vodafone.ie || vodafone/vodafone ||&lt;br /&gt;
|-&lt;br /&gt;
| Ireland || O2       ||  || open.internet || gprs/gprs ||&lt;br /&gt;
|-&lt;br /&gt;
| Italy   || Wind     || Superinternet, public IP  || internet.wind / *99# || wind/wind (any string) || [[Wind pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| Netherlands || Vodafone || Any || live.vodafone.com / *99***1#||  || [[Vodafone pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| New Zealand || Vodafone || Any || live.vodafone.com / *99***2#||  ||&lt;br /&gt;
|-&lt;br /&gt;
| Norway || Netcom || Any || internet.netcom.no || ||&lt;br /&gt;
|-&lt;br /&gt;
| Norway || OneCall || Any || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Norway || Telenor || Any || telenor || ||&lt;br /&gt;
|-&lt;br /&gt;
| Russia || MTS || Any || internet.mts.ru / *99***1# || mts/mts ||&lt;br /&gt;
|-&lt;br /&gt;
| Russia || Megafon || Any || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Spain   || Masmovil     || Any  || internetmas ||  ||&lt;br /&gt;
|-&lt;br /&gt;
| Spain   || Simyo     || Any  || gprs-service.com / *99# ||  ||&lt;br /&gt;
|-&lt;br /&gt;
| Spain   || Yoigo     || Any  || internet / *99***1 || must be empty || [[Yoigo pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| Sweden || Parlino ||  || internet.parlino.se || || [[GPRS_FSO|Works with FSO]]&lt;br /&gt;
|-&lt;br /&gt;
| Sweden || Telia ||  || online.telia.se || || [[GPRS_FSO|Works with FSO]]&lt;br /&gt;
|-&lt;br /&gt;
| Switzerland || Sunrise ||  || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Switzerland || Sunrise || MMS || mms.sunrise.ch || ||&lt;br /&gt;
|-&lt;br /&gt;
| Switzerland || Swisscom || e.g. Natel Basic Liberty, behind NAT || gprs.swisscom.ch || ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || T-Mobile|| || general.t-mobile.uk || ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || Virgin || || goto.virginmobile.uk || user ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || [http://www.filesaveas.com/gprs.html other providers] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || AT&amp;amp;T || Unlimited data plan (attached to pay-as-you-go voice plan) || wap.cingular / *99***1# || WAP@CINGULARGPRS.COM/CINGULAR1 ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || Cincinnati Bell Wireless || || wap.gocbw.com ||  cbw  ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || Cingular (AT&amp;amp;T) || Less than full internet || wap.cingular / may require *99***1# || ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || T-mobile || Anything less than full internet || wap.voicestream.com ||  || Need to set proxy to 216.155.165.50  T-Mobile docs say &amp;quot;216.155.165.050&amp;quot;.  050 octal = 40 decimal and will *not* work.  I think port is 8080 or 9100.  No luck w/ pppd scripts.  GPRS_FSO directions work under FSO though.&lt;br /&gt;
|-&lt;br /&gt;
| USA || T-mobile || Regular internet plan || internet2.voicestream.com || || [[T-Mobile pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| USA || T-mobile || &amp;quot;VPN&amp;quot; internet plan || internet3.voicestream.com || ||&lt;br /&gt;
|-&lt;br /&gt;
| Venezuela || Digitel || Pre- y post-pago || gprsweb.digitel.ve || ||&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[1] connected through a WAP proxy (slower, but the only way to access Vodafone live! and SFR portal)&lt;br /&gt;
&lt;br /&gt;
[2] Unless stated otherwise the phone number to call is &amp;quot;*99#&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Also see Ross Barkman's page for a detailed list of more [http://www.taniwha.org.uk/gprs.html global GPRS providers APN details]&lt;br /&gt;
&lt;br /&gt;
== Starting pppd automatically ==&lt;br /&gt;
&lt;br /&gt;
Once you have finished debugging your gprs-connect-chat and gprs options files, you may wish to automatically connect whenever needed and hang up when finished.  Make sure you understand the impact of this change to your carrier plan billing.  This is not recommended unless you have a large-use or unlimited data plan.  These scripts do NOT prompt you before connecting.&lt;br /&gt;
&lt;br /&gt;
=== On-demand connection settings ===&lt;br /&gt;
&lt;br /&gt;
Additional settings are needed if you want the actual connection to be up only while there is traffic. In the 'gprs' file above, insert the following, making sure 'nodetach' is commented out.  If 'nodetach' is on, the boot process will stop when it starts pppd. Also remove the option 'persist' mentioned above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Wait until needed before connecting&lt;br /&gt;
demand&lt;br /&gt;
&lt;br /&gt;
# Disconnect if idle for given amount of seconds&lt;br /&gt;
idle 20&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Start on boot (method 1) ===&lt;br /&gt;
&lt;br /&gt;
Add the following definition to /etc/network/interfaces:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auto ppp0&lt;br /&gt;
iface ppp0 inet ppp&lt;br /&gt;
provider gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That should be it. Now you can use 'ifup ppp0' and 'ifdown ppp0' manually too.&lt;br /&gt;
&lt;br /&gt;
=== Start on boot (method 2) ===&lt;br /&gt;
&lt;br /&gt;
Create the following file as /etc/ppp/ppp_on_boot (needs chmod +x).  The /etc/init.d/ppp script will call it to set up the daemon.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
#&lt;br /&gt;
#   Rename this file to ppp_on_boot and pppd will be fired up as&lt;br /&gt;
#   soon as the system comes up, connecting to `provider'.&lt;br /&gt;
#&lt;br /&gt;
#   If you also make this file executable, and replace the first line&lt;br /&gt;
#   with just &amp;quot;#!/bin/sh&amp;quot;, the commands below will be executed instead.&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# The location of the ppp daemon itself (shouldn't need to be changed)&lt;br /&gt;
PPPD=/usr/sbin/pppd&lt;br /&gt;
&lt;br /&gt;
# The default provider to connect to&lt;br /&gt;
$PPPD call gprs&lt;br /&gt;
&lt;br /&gt;
# Additional connections, which would just use settings from&lt;br /&gt;
# /etc/ppp/options.&amp;lt;tty&amp;gt;&lt;br /&gt;
#$PPPD ttyS0&lt;br /&gt;
#$PPPD ttyS1&lt;br /&gt;
#$PPPD ttyS2&lt;br /&gt;
#$PPPD ttyS3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, you need to add the /etc/init.d/ppp script to the init process by creating symbolic links from the appropriate directories.  I chose the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/rc0.d/K25ppp&lt;br /&gt;
/etc/rc1.d/K45ppp&lt;br /&gt;
/etc/rc2.d/S45ppp&lt;br /&gt;
/etc/rc3.d/S45ppp&lt;br /&gt;
/etc/rc4.d/S45ppp&lt;br /&gt;
/etc/rc5.d/S45ppp&lt;br /&gt;
/etc/rc6.d/K25ppp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Qt Extended =&lt;br /&gt;
If password/username is not mandotory for your provider, input anything e.g. x. Works fine with 4.4.2.&lt;br /&gt;
&lt;br /&gt;
= Sharing the GPRS connection with a computer =&lt;br /&gt;
&lt;br /&gt;
See [[Tethering]]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[pppd]]&lt;br /&gt;
* [[Manually using GSM]]&lt;br /&gt;
* [[Manually using Bluetooth]]&lt;br /&gt;
* [[GPRS FSO]]&lt;br /&gt;
{{Languages|Manually_using_GPRS}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Developer]]&lt;br /&gt;
[[Category:Networking]]&lt;br /&gt;
[[Category:GSM]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Dfu-util-windows</id>
		<title>Dfu-util-windows</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Dfu-util-windows"/>
				<updated>2008-11-12T03:26:28Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: /* Apply patch to compile with MinGW */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== dfu-util for Win32 ==&lt;br /&gt;
&lt;br /&gt;
{{Note|This has been reported to work on Windows 2000, Windows XP and Windows Vista with the Neo FreeRunner.  No reports have been received on whether it works with other versions of Windows or with the Neo 1973.  There are some reports that image downloads and uploads are extremely slow for some people.  The exact cause of this has not yet been pinpointed.}}&lt;br /&gt;
&lt;br /&gt;
In order to use dfu-util for Win32, you need to install a Windows driver when the device is in U-Boot.  Theoretically, a USB standard-compliant DFU class driver should work, unfortunately, Windows does not come bundled with one.  If you do not have a DFU class driver (ie. Windows does not recognize the device in U-Boot mode and pops up the New Device Wizard), the LibUSB-Win32 driver and accompanying INF file for the Neo FreeRunner can be used, this driver can be found in OpenmokoDFU.zip at the link below.  When the Windows New Device Wizard pops up, use this driver.&lt;br /&gt;
&lt;br /&gt;
Once the driver is installed, then you can proceed and use the instructions found at the main [[dfu-util]] page.  &lt;br /&gt;
&lt;br /&gt;
The above mentioned files can be downloaded at: [http://projects.openmoko.org/projects/dfu-util-win32/ http://projects.openmoko.org/projects/dfu-util-win32/]&lt;br /&gt;
&lt;br /&gt;
The information below is for developers who would like to know how to compile dfu-util for Win32.&lt;br /&gt;
&lt;br /&gt;
== Porting dfu-util to Windows ==&lt;br /&gt;
&lt;br /&gt;
{{Note|This is entirely work in progress. Nevertheless hopefully the information on this page will serve as a starting point for anyone who find the time to take this further. After all, as many people still use Windows PCs as their every day computers, having a convenient way to re-flash a Neo from Windows would probably open up the user base.}}&lt;br /&gt;
&lt;br /&gt;
=== Potential Approaches ===&lt;br /&gt;
&lt;br /&gt;
* Cygwin&lt;br /&gt;
: Not very attactive as Cygwin binaries require Cygwin in order to run. You will not get a simple, native dfu-util.exe which can be downloaded and used on any Windows machine that way.&lt;br /&gt;
&lt;br /&gt;
* MinGW/MSYS&lt;br /&gt;
: MinGW (Minimalist GNU for Windows) seems to be the platform of choice.&lt;br /&gt;
&lt;br /&gt;
* LibUSB-Win32&lt;br /&gt;
: Will only be able to be built on a Windows box&lt;br /&gt;
&lt;br /&gt;
=== MinGW/MSYS port ===&lt;br /&gt;
&lt;br /&gt;
The preferred order of installation is:&lt;br /&gt;
&lt;br /&gt;
# Install MinGW (the core installation should be sufficient)&lt;br /&gt;
# Install MSYS (Note: make comes with MSYS while GCC comes with MinGW)&lt;br /&gt;
&lt;br /&gt;
Here is step-by-step howto:&lt;br /&gt;
&lt;br /&gt;
1. Download MinGW-5.1.4.exe from http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=240780&amp;amp;release_id=529741 and execute the installer. It will download additional files required and install MinGW.&lt;br /&gt;
: {{Note|It has often been a good idea to install into a directory that has no spaces in the filename.}}&lt;br /&gt;
2. Download MSYS-1.0.10.exe from http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=24963 and install.&lt;br /&gt;
: {{Note|Make sure to open the &amp;quot;Current Version: 1.0.10&amp;quot; folder as the newer version 1.0.11 does not have an installer yet.}}&lt;br /&gt;
You will need to enter the path where you installed MinGW. It's a good idea to install MinGW and MSYS next to each other, i.e. C:\SOMEDIR\MinGW and C:\SOMEDIR\MSYS.&lt;br /&gt;
: {{Note|For example if MinGW is installed in C:\MinGW enter 'C:/MinGW.' including the period.}}&lt;br /&gt;
&lt;br /&gt;
3. Download msysDTK-1.0.1.exe from http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=67879&amp;amp;release_id=131044, which contains the autotools. Install into the same directory into which you installed MSYS itself. The installer might not automatically suggest the right directory.&lt;br /&gt;
&lt;br /&gt;
That should give you an Icon in your Start menu in MinGW-&amp;gt;MSYS with the name of msys. Open that one, and you will find yourself in a bourne compatible shell on your native Windows system.&lt;br /&gt;
&lt;br /&gt;
You can try to execute some commends such as gcc, make, etc. to make sure you installed everything correctly.&lt;br /&gt;
&lt;br /&gt;
4. Download autoconf 2.59 from http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=67879&amp;amp;release_id=131044.  All you need to do to install it is to use a utility like [http://www.7-zip.org/ 7-Zip] to extract the files into your msys installation directory.&lt;br /&gt;
&lt;br /&gt;
5. You will also need pkg-config.  According to [http://www.mingw.org/MinGWiki/index.php/pkg-config http://www.mingw.org/MinGWiki/index.php/pkg-config], you need the following packages:&lt;br /&gt;
&lt;br /&gt;
  glib&lt;br /&gt;
  glib-dev&lt;br /&gt;
  libiconv&lt;br /&gt;
  gettext&lt;br /&gt;
  pkg-config&lt;br /&gt;
&lt;br /&gt;
You can get all of these from the GTK+ for Windows page at: [http://www.gtk.org/download-windows.html http://www.gtk.org/download-windows.html].  Unzip them to your msys\1.0 directory.&lt;br /&gt;
&lt;br /&gt;
6. Open the file /etc/profile (C:\msys\1.0\etc\profile) with your favorite editor (make sure it uses LF line endings) and add:&lt;br /&gt;
&lt;br /&gt;
  PKG_CONFIG_PATH=&amp;quot; /c/msys/1.0/lib/pkgconfig&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ensuring that the path is accessible from the MSYS shell and points to the pkgconfig files.&lt;br /&gt;
&lt;br /&gt;
7. Download libusb-win32-device-bin-0.1.12.1.tar.gz from http://sourceforge.net/project/showfiles.php?group_id=78138&amp;amp;package_id=79216&amp;amp;release_id=495011. Then, copy the libusb.a file from the LibUSB-Win32\lib\gcc directory into the MinGW\lib directory and the usb.h file from LibUSB-Win32\include into MinGW\include (or you can copy it into your dfu-util\src directory).&lt;br /&gt;
&lt;br /&gt;
8. Then you will need to create a libusb.pc file in the msys\1.0\lib\pkgconfig directory.  I created the following:&lt;br /&gt;
&lt;br /&gt;
  prefix=c:/msys/1.0&lt;br /&gt;
  exec_prefix=${prefix}&lt;br /&gt;
  libdir=${exec_prefix}/lib&lt;br /&gt;
  includedir=${prefix}/include&lt;br /&gt;
  Name: LibUSB&lt;br /&gt;
  Description: USB for Win32&lt;br /&gt;
  Requires: &lt;br /&gt;
  Version: 0.1.12.1&lt;br /&gt;
  Libs: -L${libdir} -lusb&lt;br /&gt;
  Cflags: -I${includedir}&lt;br /&gt;
&lt;br /&gt;
=== Getting dfu-util sources ===&lt;br /&gt;
&lt;br /&gt;
Use your favorite Subversion client to check out the dfu-util sources.  The dfu-util sources can be checked out from [https://svn.openmoko.org/trunk/src/host/dfu-util/ https://svn.openmoko.org/trunk/src/host/dfu-util/].&lt;br /&gt;
&lt;br /&gt;
=== Apply patch to compile with MinGW ===&lt;br /&gt;
&lt;br /&gt;
Apply the following patch to the source code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Index: main.c&lt;br /&gt;
===================================================================&lt;br /&gt;
--- main.c	(revision 4759)&lt;br /&gt;
+++ main.c	(working copy)&lt;br /&gt;
@@ -35,6 +35,10 @@&lt;br /&gt;
#include &amp;quot;config.h&amp;quot;&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+#define sleep(seconds) Sleep((seconds)*1000)&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
#ifdef HAVE_USBPATH_H&lt;br /&gt;
#include &amp;lt;usbpath.h&amp;gt;&lt;br /&gt;
#endif&lt;br /&gt;
@@ -579,6 +583,20 @@&lt;br /&gt;
&lt;br /&gt;
/* FIXME: check if the selected device really has only one */&lt;br /&gt;
&lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+		int configuration = dif-&amp;gt;configuration;&lt;br /&gt;
+&lt;br /&gt;
+		if (configuration == 0) {&lt;br /&gt;
+			dif-&amp;gt;configuration = 1;&lt;br /&gt;
+		}&lt;br /&gt;
+		printf(&amp;quot;Setting Configuration %u...\n&amp;quot;, dif-&amp;gt;configuration);&lt;br /&gt;
+		if (usb_set_configuration(dif-&amp;gt;dev_handle, dif-&amp;gt;configuration) &amp;lt; 0) {&lt;br /&gt;
+			fprintf(stderr, &amp;quot;Cannot set configuration: %s\n&amp;quot;, usb_strerror());&lt;br /&gt;
+			exit(1);&lt;br /&gt;
+		}&lt;br /&gt;
+		dif-&amp;gt;configuration = configuration;&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
printf(&amp;quot;Claiming USB DFU Runtime Interface...\n&amp;quot;);&lt;br /&gt;
if (usb_claim_interface(_rt_dif.dev_handle, _rt_dif.interface) &amp;lt; 0) {&lt;br /&gt;
fprintf(stderr, &amp;quot;Cannot claim interface: %s\n&amp;quot;,&lt;br /&gt;
@@ -712,13 +730,19 @@&lt;br /&gt;
exit(1);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
-#if 0&lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+	int configuration = dif-&amp;gt;configuration;&lt;br /&gt;
+&lt;br /&gt;
+	if (configuration == 0) {&lt;br /&gt;
+		dif-&amp;gt;configuration = 1;&lt;br /&gt;
+	}&lt;br /&gt;
printf(&amp;quot;Setting Configuration %u...\n&amp;quot;, dif-&amp;gt;configuration);&lt;br /&gt;
if (usb_set_configuration(dif-&amp;gt;dev_handle, dif-&amp;gt;configuration) &amp;lt; 0) {&lt;br /&gt;
fprintf(stderr, &amp;quot;Cannot set configuration: %s\n&amp;quot;,&lt;br /&gt;
usb_strerror());&lt;br /&gt;
exit(1);&lt;br /&gt;
}&lt;br /&gt;
+	dif-&amp;gt;configuration = configuration;&lt;br /&gt;
#endif&lt;br /&gt;
printf(&amp;quot;Claiming USB DFU Interface...\n&amp;quot;);&lt;br /&gt;
if (usb_claim_interface(dif-&amp;gt;dev_handle, dif-&amp;gt;interface) &amp;lt; 0) {&lt;br /&gt;
Index: sam7dfu.c&lt;br /&gt;
===================================================================&lt;br /&gt;
--- sam7dfu.c	(revision 4759)&lt;br /&gt;
+++ sam7dfu.c	(working copy)&lt;br /&gt;
@@ -22,6 +22,11 @@&lt;br /&gt;
#define O_BINARY 0&lt;br /&gt;
#endif&lt;br /&gt;
&lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+#define sleep(seconds) Sleep((seconds)*1000)&lt;br /&gt;
+#define usleep(microseconds) Sleep((microseconds)/1000)&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
int sam7dfu_do_upload(struct usb_dev_handle *usb_handle, int interface,&lt;br /&gt;
int xfer_size, const char *fname)&lt;br /&gt;
{&lt;br /&gt;
Index: usb_dfu.h&lt;br /&gt;
===================================================================&lt;br /&gt;
--- usb_dfu.h	(revision 4759)&lt;br /&gt;
+++ usb_dfu.h	(working copy)&lt;br /&gt;
@@ -12,6 +12,13 @@&lt;br /&gt;
&lt;br /&gt;
#include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
+#define u_int8_t uint8_t&lt;br /&gt;
+#define u_int16_t uint16_t&lt;br /&gt;
+#define u_int32_t uint32_t&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
#define USB_DT_DFU			0x21&lt;br /&gt;
&lt;br /&gt;
struct usb_dfu_func_descriptor {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Build dfu-util ===&lt;br /&gt;
&lt;br /&gt;
In the Msys shell inside the dfu-util directory, run the following command:&lt;br /&gt;
&lt;br /&gt;
  ./autogen.sh&lt;br /&gt;
  ./configure&lt;br /&gt;
  make&lt;br /&gt;
&lt;br /&gt;
dfu-util should successfully compile and you should have the .exe files in the src directory. In case you get the following error&lt;br /&gt;
&lt;br /&gt;
  checking for USB... configure: error: *** Required libusb &amp;gt;= 0.1.4 not installed ***&lt;br /&gt;
&lt;br /&gt;
check your PKG_CONFIG_PATH (see above) to make sure it is correct, otherwise, you can try running the following command (if you are sure that libusb is correctly installed):&lt;br /&gt;
&lt;br /&gt;
  ./configure USB_CFLAGS=-Iinclude USB_LIBS=-lusb&lt;br /&gt;
&lt;br /&gt;
=== Preparing to use dfu-util ===&lt;br /&gt;
&lt;br /&gt;
A Windows driver needs to be installed when the device is in U-Boot and connected through the USB.  Windows does not come with a DFU class driver and Jungo seems to be the only one that has created a DFU class driver, but it is non-free.  You can use LibUSB-Win32 as the driver for the device by creating an INF file for it for this device.  Use inf-wizard.exe, which is a part of the LibUSB-Win32 binaries distribution.  Run the wizard, select the following device:&lt;br /&gt;
&lt;br /&gt;
  Vendor ID  Product ID  Description&lt;br /&gt;
  0x1D50      0x5119      USB Device&lt;br /&gt;
&lt;br /&gt;
Insert the Manufacturer name: Openmoko, or FIC?&lt;br /&gt;
&lt;br /&gt;
Insert device description: Device Firmware Upgrade&lt;br /&gt;
&lt;br /&gt;
Then save the INF file along with the auto generated CAT files.&lt;br /&gt;
&lt;br /&gt;
When you get the New Device Wizard when plugging in the device in U-Boot mode into Windows, select this newly generated INF file.&lt;br /&gt;
&lt;br /&gt;
=== Running dfu-util ===&lt;br /&gt;
&lt;br /&gt;
Once the Windows driver is successfully installed, you can try some commands:&lt;br /&gt;
&lt;br /&gt;
  dfu-util --list&lt;br /&gt;
&lt;br /&gt;
and you should be able to list the device.  Example:&lt;br /&gt;
&lt;br /&gt;
  Found Runtime: [0x1d50:0x5119] devnum=7, cfg=0, intf=2, alt=0, name=&amp;quot;USB Device Firmware Upgrade&amp;quot;  &lt;br /&gt;
&lt;br /&gt;
=== Binary ===&lt;br /&gt;
&lt;br /&gt;
[http://projects.openmoko.org/projects/dfu-util-win32/ http://projects.openmoko.org/projects/dfu-util-win32/]&lt;br /&gt;
&lt;br /&gt;
=== Outstanding issues ===&lt;br /&gt;
&lt;br /&gt;
Had to call usb_set_configuration() with configuration set to 1 before attempting to claim the device instead of using configuration 0 that the device returns.  It sounds like DFU implementation in U-Boot might not be compliant with USB spec.  A similar issue and discussion can be found here: [http://thread.gmane.org/gmane.comp.lib.libusb.devel.windows/1546/focus=1554 http://thread.gmane.org/gmane.comp.lib.libusb.devel.windows/1546/focus=1554]&lt;br /&gt;
&lt;br /&gt;
[[Category:Flashing Openmoko]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Android</id>
		<title>Android</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Android"/>
				<updated>2008-11-09T18:54:58Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: /* Current State */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|Android}}&lt;br /&gt;
{{Distributions|Android}}&lt;br /&gt;
&lt;br /&gt;
= Updates =&lt;br /&gt;
&lt;br /&gt;
* 20081104 The first Android-image has been successfully created by Sean McNeil! You can try on your own: [http://people.openmoko.org/sean_mcneil/ android image and kernel] - sms and calling works, wifi and bluetooth doesn't. [http://onlinedev.blogspot.com/2008/11/porting-android-phase-3-done.html ''news-source'']&lt;br /&gt;
* 20081029 [[User:Cfriedt]] [http://benno.id.au Benno] has modified Android's build system so that it will output a JFFS2 image instead of YAFFS . Unlike JFFS2, which [http://64.233.169.104/search?q=cache:e8czlAdKTn0J:gentoo-wiki.com/JFFS2/Mounting+gentoo+jffs2&amp;amp;hl=en&amp;amp;ct=clnk&amp;amp;cd=1&amp;amp;gl=ca&amp;amp;client=firefox-a can be mounted read-only from an image], mounting a YAFFS image is not possible unless it's already been written to flash (it complains about the block device being of type '1' and not 'NAND'). JFFS2 also has the benefit that it's a standard OpenMoko image format (See [[Flashing the Neo FreeRunner]] or [[Flashing the Neo 1973]])&lt;br /&gt;
* 20081023 [[User:Bricode]] To track the status of which parts of the Android source tree contain ARMv5 specific code, I've created a table of where it is contained, and the status of patches. It can be found at: http://spreadsheets.google.com/pub?key=pzDEXnU19gkeTjpD28t-7fw&lt;br /&gt;
* 20081022 [[User:Cfriedt]] I was able to 'trivially' compile all of the Android source code without error for the ARMv4T architecture by removing v5TE instructions. Although it will definitely not run anything predictably, at least now that I know the build system will work with a few simple substitutions in build/core/combo/arm-linux.mk. At this point I am able to go ahead and re-implement v5TE instructions as v4T instruction sequences instead (or re-implement entire sections of assembly with hand-optimized v4T instructions).&lt;br /&gt;
* 20081021 [[User:Cfriedt]] Android -&amp;gt; FreeRunner updates on my [http://perpetual-notion.blogspot.com/search/label/android blog]&lt;br /&gt;
* 20081021 Google released the majority [http://source.android.com/download source code] for the phone under Apache free and open-source [http://source.android.com/license license], with portions covered by other existing licenses, such as the Linux kernel under GPLv2.&lt;br /&gt;
* 200810?? [http://www.koolu.com Koolu.com] has announced that they will be '''selling the OpenMoko Freerunner with Android pre-installed''' beginning in November 2008, as well as offering '''free downloads of the Freerunner port of Android''' to existing Freerunner owners. Well-known open-source advocate [http://koolu.com/The-Koolu-Team/maddog.html Jon &amp;quot;maddog&amp;quot; Hall] is CTO and Ambassador for Koolu.&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
This page is dedicated to porting the [http://www.android.com Android OS] to the [[Neo 1973]] and [[Neo FreeRunner]] handsets. Since the Android OS was [http://source.android.com/posts/opensource  publically released] on 20081021, [http://benno.id.au/blog/2007/11/21/android-neo1973 work] [http://perpetual-notion.blogspot.com/search/label/android is] [http://groups.google.com/group/android-porting currently underway] to port Android to the [[Neo1973 Hardware|Neo 1973]] and [[Neo_FreeRunner_GTA02_Hardware|FreeRunner]] handsets.&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
# Systematically introduce patches for ARMv4T in the Android codebase&lt;br /&gt;
# Provide Neo1973 and Neo FreeRunner hardware-dependent patches in the Android codebase, leveraging the work already done by the Openmoko developers, without forcing Android-specific changes upstream&lt;br /&gt;
# Provide a useable Android filesystem and kernel on the [[Distributions]] page that conform to current Openmoko installation routines&lt;br /&gt;
&lt;br /&gt;
== Early Attempts ==&lt;br /&gt;
As [http://benno.id.au Ben Leslie] had pointed out on his [http://benno.id.au/blog/2007/11/21/android-neo1973 blog] far before the source code was released, [http://www.android.com Android] was originally designed to work with the ARMv5TE [http://en.wikipedia.org/wiki/Instruction_set_architecture instruction set architecture] (ISA), which allows for [http://en.wikipedia.org/wiki/ARM_architecture#DSP_Enhancement_Instructions DSP enhanced instructions]. Contrary to the ARMv5TE ISA, the Neo1973 and FreeRunner handsets both feature an arm920t core, which comply to the ARMv4T ISA.&lt;br /&gt;
&lt;br /&gt;
Before the source code was released, kernel trap handlers were implemented to 'emulate' the ARMv5TE ISA. Although the results worked in many cases, trapping is costly and performance suffered as a result. Moreover, without explicitly knowing which conditions were set by various instructions, such as Thumb Mode execution, the result became nondeterministic.&lt;br /&gt;
&lt;br /&gt;
== Current State ==&lt;br /&gt;
&lt;br /&gt;
With the release of the Android [http://source.android.com source code], the Open Source community is no longer limited to dealing with a binary-only product. The Open Handset Alliance (OHA) has let their source code become their product for everyone enrich and benefit from.&lt;br /&gt;
&lt;br /&gt;
Currently, porting efforts are underway in many circles. Patches should be submitted via the [http://source.android.com/submit-patches official Android channels].&lt;br /&gt;
&lt;br /&gt;
To track the status of which parts of the Android source tree contain ARMv5 specific code, I've created a table of where it is contained, and the status of patches. It can be found at: http://spreadsheets.google.com/pub?key=pzDEXnU19gkeTjpD28t-7fw [[User:Bricode]]&lt;br /&gt;
&lt;br /&gt;
[[User:Seanmcneil3|Sean McNeil]] said that he was able to get Androind running (including telephony) in his Freerunner [http://3v1n0.tuxfamily.org/tumblelog/post/368 source].&lt;br /&gt;
&lt;br /&gt;
Ben Leslie mentioned on the android-porting list that he was able to get the 'Android' logo to appear on his Neo 1973.&lt;br /&gt;
&lt;br /&gt;
=== Windows Connectivity ===&lt;br /&gt;
&lt;br /&gt;
It is possible to get Windows to at least recognize the Android &amp;quot;Ethernet Gadget&amp;quot; and charge the FreeRunner using the Android USB Windows driver (http://dl.google.com/android/android_usb_windows.zip) by modifying the android_usb.inf file in that package before attempting to install the driver.  The following modifications are required:&lt;br /&gt;
&lt;br /&gt;
Add the following to the [Google.NTx86] section of the android_usb.inf file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; Neo FreeRunner&lt;br /&gt;
%USB\VID_1457&amp;amp;PID_5117.DeviceDescRelease%=androidusb.Dev, USB\VID_1457&amp;amp;PID_5117&lt;br /&gt;
%USB\VID_1457&amp;amp;PID_5117&amp;amp;MI_01.DeviceDescRelease%=androidusb.Dev, USB\VID_1457&amp;amp;PID_5117&amp;amp;MI_01&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and add the following to the to the [Strings] section of the android_usb.inf file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
USB\VID_1457&amp;amp;PID_5117.DeviceDescRelease=&amp;quot;Neo FreeRunner&amp;quot;&lt;br /&gt;
USB\VID_1457&amp;amp;PID_5117&amp;amp;MI_01.DeviceDescRelease=&amp;quot;Neo FreeRunner Composite ADB Interface&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Windows version of adb does not appear to recognize the connected device yet but at least the FreeRunner charges and the device driver indicates that &amp;quot;This device is working properly.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= How to Help =&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
You can start by following the instructions to download and build the Android source from scratch. Please see [http://source.android.com/download http://source.android.com/download] and follow the instructions for your architecture.&lt;br /&gt;
&lt;br /&gt;
== Publicize Your Efforts ==&lt;br /&gt;
&lt;br /&gt;
It's generally a good idea to make your efforts known via wiki systems, public mailing lists, forums, and publically open version control systems.&lt;br /&gt;
&lt;br /&gt;
Always take credit for your work but please don't do it in the form of comments. Some code is already hard enough to read without comments polluting the text. The best thing to do is to create a patch and put a header with your information at the top. Collaboration systems such as git might already do this for you (??).&lt;br /&gt;
&lt;br /&gt;
If you create something new and have the ability to designate the license for it, please consider license compatibility issues.&lt;br /&gt;
&lt;br /&gt;
== Porting Strategy ==&lt;br /&gt;
&lt;br /&gt;
* Analysis and leverage of the existing build system&lt;br /&gt;
** buid/core/combo/arm-linux.mk&lt;br /&gt;
*** -D__ARCH_ARM_4__ -D__ARCH_ARM_4T__&lt;br /&gt;
*** -march=armv4t -mcpu=arm920t&lt;br /&gt;
** fix various static references to 'armv5'&lt;br /&gt;
* Isolating ARMv5TE ISA dependent code&lt;br /&gt;
** e.g. grep -n -R -i &amp;quot;${armv5te_isa_pattern}&amp;quot; ~/android&lt;br /&gt;
* Abstracting&lt;br /&gt;
** ( C/C++ )&lt;br /&gt;
*** Use inlined functions / #ifdef statments to implement functions in a portable manner&lt;br /&gt;
*** For inlined assembler calls, it's acceptable for now to use generic C code instead, so long as later on we optimize it by hand.&lt;br /&gt;
** ( ASM )&lt;br /&gt;
*** Proprocessor statements based on ISA / architecture, e.g. #ifdef __ARCH_ARM_5__ ... #endif #ifdef __ARCH_ARM_4__ ... #endif&lt;br /&gt;
*** It's highly suggested that preprocessor statements should not be nested (i.e. make them mutually exclusive)&lt;br /&gt;
*** Some people have suggested that we should not do #ifdef's based on ARCH or ISA, but rather based on an AndroidConfig.h which would define macros like PLD(...) #ifdef HAVE_ARM_PLD pld #else ... #endif .&lt;br /&gt;
&lt;br /&gt;
For each ARMv5TE instruction, one could potentially&lt;br /&gt;
* Implement the instruction using general registers instead of DSP calls (i.e. eabi / softfloat)&lt;br /&gt;
* If that is a) nondeterministic, or b) slow, then sections of code need to be analyzed and hand-optimized for the ARMv4T isa&lt;br /&gt;
&lt;br /&gt;
== List of Unsupported Instructions ==&lt;br /&gt;
&lt;br /&gt;
This is a list of opcodes, extracted from the Android source, that are unsupported for ARMv4T compliant processors (specifically the arm920t). The opcodes represent instructions available for ARMv5, ARMv5T, and ARMv5TE architectures, which are not present in the ARMv4T ISA. The list was obtained by exhaustively editing the recompiling the Android source code until it compiled without error.&lt;br /&gt;
&lt;br /&gt;
Please keep in mind, that in some cases, translating these instructions into a sequence of ARMv4T instructions will be impossible and / or result in nondeterministic execution because of&lt;br /&gt;
* the requirement of additional context&lt;br /&gt;
* the tendencies of certain opcodes to change condition registers that may or may not be present in the arm920t core&lt;br /&gt;
&lt;br /&gt;
=== Opcodes ===&lt;br /&gt;
&lt;br /&gt;
{{scroll box|height=480px|text=&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Opcode&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Desription&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;[[http://www.arm.com/miscPDFs/14128.pdf PDF]] Page Number&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;C&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;ASM&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;BLX(1)&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Branch, Link, and Exchange&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;166&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;N/A (Unused in Android)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;N/A (Unused in Android)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;BLX(2)&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Branch, Link, and Exchange&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;168&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Remove from inline assembly with something like&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_BLX&lt;br /&gt;
... (inline asm) ...&lt;br /&gt;
#else&lt;br /&gt;
... (inline asm with equivalent blx code, as shown to the right) ...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Substitute with a macro reference such as&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_BLX&lt;br /&gt;
#define BLX(a) \&lt;br /&gt;
blx a&lt;br /&gt;
#else&lt;br /&gt;
#define BLX(a) \&lt;br /&gt;
mov pc,lr \&lt;br /&gt;
bx a&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;CLZ&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Count Leading Zeros&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;175&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Remove from inline assembly with something like&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_CLZ&lt;br /&gt;
... (inline asm) ...&lt;br /&gt;
#else&lt;br /&gt;
... (inline asm with equivalent clz code, as shown to the right) ...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081029&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_CLZ&lt;br /&gt;
#define CLZ(Rd,Rm) \&lt;br /&gt;
clz Rd,Rm&lt;br /&gt;
#else&lt;br /&gt;
#define CLZ(Rd,Rm) \&lt;br /&gt;
...&lt;br /&gt;
#endif&lt;br /&gt;
...&lt;br /&gt;
CLZ(Rd,Rm)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;LDRD&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Load Registers Doubleword&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;200&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Substitute different inline assembly code with something like&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_LDRD&lt;br /&gt;
... (inline asm) ...&lt;br /&gt;
#else&lt;br /&gt;
... (inline asm with ldrd substituted) ...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Substitute with a macro reference such as&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_LDRD&lt;br /&gt;
#define LDRD(a,b) \&lt;br /&gt;
ldrd a,b&lt;br /&gt;
#else&lt;br /&gt;
#define LDRD(a,b) \&lt;br /&gt;
...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;PLD&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Preload Data&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;240&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Remove from inline assembly with something like&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_PLD&lt;br /&gt;
... (inline asm) ...&lt;br /&gt;
#else&lt;br /&gt;
... (inline asm with pld removed) ...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Remove or substitute with a macro reference such as&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_PLD&lt;br /&gt;
#define PLD(a,b) \&lt;br /&gt;
pld a,b&lt;br /&gt;
#else&lt;br /&gt;
#define PLD(a,b)&lt;br /&gt;
#endif&lt;br /&gt;
...&lt;br /&gt;
PLD(r0,#0)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;SMLA&amp;amp;lt;x&amp;amp;gt;&amp;amp;lt;y&amp;amp;gt;&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Signed Multiply-Accumulate&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;291&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;SMLAL&amp;amp;lt;x&amp;amp;gt;&amp;amp;lt;y&amp;amp;gt;&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Signed Multiply Accumulate Long&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;298&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;SMLAW&amp;amp;lt;y&amp;amp;gt;&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Signed Multiply-Accumulate Word&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;302&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;SMUL&amp;amp;lt;x&amp;amp;gt;&amp;amp;lt;y&amp;amp;gt;&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Signed Multiply&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;316&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;SMULW&amp;amp;lt;y&amp;amp;gt;&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Signed Multiply Word&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;320&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;QADD&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Saturating Add&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;242&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;QDADD&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Saturating Double and Add&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;249&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;QDSUB&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Saturating Double and Subtract&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;251&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;QSUB&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Saturating Subtract&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;253&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;STRD&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Store Registers Doubleword&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;349&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Substitute different inline assembly code with something like&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_STRD&lt;br /&gt;
... (inline asm) ...&lt;br /&gt;
#else&lt;br /&gt;
... (inline asm without strd) ...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Substitute with a macro reference such as&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_STRD&lt;br /&gt;
#define STRD(a,b) \&lt;br /&gt;
strd a,b&lt;br /&gt;
#else&lt;br /&gt;
#define STRD(a,b) \&lt;br /&gt;
...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Scanning for Files That Use the ARMv5TE ISA ===&lt;br /&gt;
&lt;br /&gt;
Using the above list of opcodes, one can scan the Android source code for ARMv4T-incompatible instruction sequences.&lt;br /&gt;
&lt;br /&gt;
'''Code:'''&lt;br /&gt;
{{scroll box|height=240px|text=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
# $1 is the android directory&lt;br /&gt;
&lt;br /&gt;
if [ $# -ne 1 ]; then&lt;br /&gt;
exit -1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
cd &amp;quot;${1}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
opcodes=&amp;quot;blx clz ldrd pld smlabb smlabt smlatt&lt;br /&gt;
smlal smlawb smlawt smulbb smulbt smultt smulwb&lt;br /&gt;
smulwt qadd qdadd qdsub qsub strd&amp;quot;&lt;br /&gt;
&lt;br /&gt;
for op in ${opcodes}; do&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;* ${op} =====================================&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ ! -e .files.${op} ]; then&lt;br /&gt;
&lt;br /&gt;
files=&amp;quot;$(grep -R -i &amp;quot;${op} &amp;quot; * 2&amp;gt;/dev/null)&amp;quot;&lt;br /&gt;
files=&amp;quot;$(echo $files | grep -v &amp;quot;^Binary file&amp;quot; | sed -e 's/:.*//')&amp;quot;&lt;br /&gt;
files=&amp;quot;$(echo $files| grep -v &amp;quot;CREDIT\|README\|^\(kernel/\|.git/\)\|\(\.txt\)$&amp;quot; | sort -u)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;${files}&amp;quot; &amp;gt; .files.${op}&lt;br /&gt;
&lt;br /&gt;
else&lt;br /&gt;
files=&amp;quot;$(cat .files.${op})&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
for fil in ${files}; do&lt;br /&gt;
lines=&amp;quot;$(grep -n -i &amp;quot;${op} &amp;quot; ${fil} | sed -e 's/:.*//g' )&amp;quot;&lt;br /&gt;
lines=&amp;quot;$(echo $lines | sed -e 's/ /,/g')&amp;quot;&lt;br /&gt;
echo &amp;quot;** ${fil}: lines {${lines}}&amp;quot;&lt;br /&gt;
done&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Source Files in Android that Use the ARMv5TE ISA ===&lt;br /&gt;
&lt;br /&gt;
The list of files below may or may not be complete. There might also be some assembly code that is generated with a python script (verification?).&lt;br /&gt;
&lt;br /&gt;
{{scroll box|height=150px|text=&lt;br /&gt;
* blx =====================================&lt;br /&gt;
** bionic/libc/tools/gensyscalls.py: lines {168,186}&lt;br /&gt;
** bootloader/legacy/nandwrite/init.S: lines {77}&lt;br /&gt;
** bootloader/legacy/usbloader/init.S: lines {95}&lt;br /&gt;
** dalvik/vm/arch/arm/CallEABI.S: lines {239}&lt;br /&gt;
** dalvik/vm/arch/arm/CallOldABI.S: lines {145}&lt;br /&gt;
** development/emulator/qtools/thumbdis.cpp: lines {187,265}&lt;br /&gt;
** external/qemu/target-arm/translate.c: lines {1151,1971,2444}&lt;br /&gt;
** external/qemu/trace.c: lines {774,1353,1358}&lt;br /&gt;
** system/core/libpixelflinger/codeflinger/disassem.c: lines {416}&lt;br /&gt;
* clz =====================================&lt;br /&gt;
** development/emulator/qtools/armdis.cpp: lines {654}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/pv_normalize.h: lines {67,84}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/norm_l.h: lines {137}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/normalize_amr_wb.h: lines {78,95}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/pvmp3_normalize.h: lines {67,84}&lt;br /&gt;
** external/opencore/codecs_v2/video/avc_h264/dec/src/vlc.cpp: lines {23}&lt;br /&gt;
** external/opencore/codecs_v2/video/m4v_h263/enc/src/vlc_encode_inline.h: lines {125,162,168,204,218}&lt;br /&gt;
** external/qemu/target-arm/translate.c: lines {1247}&lt;br /&gt;
** external/skia/libcorecg/Sk64.cpp: lines {340,341,343}&lt;br /&gt;
** external/skia/libcorecg/SkMatrix.cpp: lines {500,501}&lt;br /&gt;
** external/skia/libsgl/effects/SkColorMatrixFilter.cpp: lines {135}&lt;br /&gt;
** external/skia/libsgl/sgl/SkBitmap.cpp: lines {945,946,947}&lt;br /&gt;
** external/skia/libsgl/sgl/SkBitmapShader.cpp: lines {32,33,34}&lt;br /&gt;
** external/skia/libsgl/sgl/SkGraphics.cpp: lines {429,437}&lt;br /&gt;
* ldrd =====================================&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_AGET_WIDE.S: lines {28}&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_IGET_WIDE.S: lines {37}&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_IGET_WIDE_QUICK.S: lines {10}&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_SGET_WIDE.S: lines {17}&lt;br /&gt;
** dalvik/vm/mterp/out/InterpAsm-armv5.S: lines {2653,7464,8318,8390}&lt;br /&gt;
** system/core/libpixelflinger/rotate90CW_4x4_16v6.S: lines {40,41,42,43}&lt;br /&gt;
* pld =====================================&lt;br /&gt;
** bionic/libc/arch-arm/bionic/memcmp.S: lines {37,44,45,56,57,107,108,195,196}&lt;br /&gt;
** bionic/libc/arch-arm/bionic/memcmp16.S: lines {37,44,45,67,68,116,117,198,199}&lt;br /&gt;
** bionic/libc/arch-arm/bionic/memcpy.S: lines {55,56,57,145,266,293,320}&lt;br /&gt;
** bionic/libc/arch-arm/bionic/strlen.c: lines {59,65}&lt;br /&gt;
** bionic/libc/kernel/arch-arm/asm/arch/irqs.h: lines {162}&lt;br /&gt;
** external/elfutils/src/Makefile: lines {243}&lt;br /&gt;
** external/elfutils/src/Makefile.am: lines {32}&lt;br /&gt;
** external/elfutils/src/Makefile.in: lines {243}&lt;br /&gt;
** external/jpeg/jidctfst.S: lines {69,235,247}&lt;br /&gt;
** external/qemu/target-arm/translate.c: lines {1149}&lt;br /&gt;
** system/core/libpixelflinger/codeflinger/ARMAssembler.cpp: lines {368}&lt;br /&gt;
** system/core/libpixelflinger/codeflinger/ARMAssemblerInterface.cpp: lines {104,108,117}&lt;br /&gt;
** system/core/libpixelflinger/t32cb16blend.S: lines {111,112,134,143}&lt;br /&gt;
* smlabb =====================================&lt;br /&gt;
** external/jpeg/jidctfst.S: lines {110,115,155,156}&lt;br /&gt;
** external/neven/Embedded/common/src/b_BasicEm/Math.c: lines {584,589}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {147,166}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {120,129}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {514,533}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {418,429}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {202}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {250}&lt;br /&gt;
** external/opencore/codecs_v2/video/m4v_h263/enc/src/dct_inline.h: lines {119,155,167,278,326,341}&lt;br /&gt;
** external/opencore/codecs_v2/video/m4v_h263/enc/src/fastquant_inline.h: lines {178,225,437,517}&lt;br /&gt;
** frameworks/base/libs/audioflinger/AudioMixer.cpp: lines {405,436}&lt;br /&gt;
* smlabt =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {184}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {138}&lt;br /&gt;
** external/opencore/codecs_v2/video/m4v_h263/enc/src/dct_inline.h: lines {131,143,294,310}&lt;br /&gt;
* smlatt =====================================&lt;br /&gt;
** external/neven/Embedded/common/src/b_BasicEm/Math.c: lines {585,590}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {157}&lt;br /&gt;
** frameworks/base/libs/audioflinger/AudioMixer.cpp: lines {441}&lt;br /&gt;
* smlal =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v4.h: lines {179,223,236,257,267}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v4_gcc.h: lines {264,341}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {178,188,198}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_dct_9.s: lines {84,90,96,101,109,114,116,118,121,132,138,150,163,165,167,174,176,178}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_dct_9_gcc.s: lines {73,79,86,90,98,103,105,107,110,121,127,139,152,154,156,163,165,167}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_mdct_18.asm: lines {143,162,178,188,192,199,207,217,225,231,237,241,244}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_mdct_18.s: lines {145,164,180,190,194,201,209,219,227,233,239,243,246}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_mdct_18_gcc.s: lines {143,162,178,188,192,199,207,217,225,231,237,241,244}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_polyphase_filter_window.asm: lines {62,63,66,72,76,77,81,82,85,90,94,97,99,100,103,108,113,114,118,119,122,129,136,137,176,179,183,187,190,193}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_polyphase_filter_window.s: lines {67,68,71,77,81,82,86,87,90,95,99,102,104,105,108,113,118,119,123,124,127,134,141,142,181,184,188,192,195,198}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_polyphase_filter_window_gcc.s: lines {65,66,69,75,79,80,84,85,88,93,97,100,102,103,106,111,116,117,121,122,125,132,139,140,179,182,186,190,193,196}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/pv_mp3dec_fxd_op_arm.h: lines {148}&lt;br /&gt;
** external/qemu/trace.c: lines {813}&lt;br /&gt;
** frameworks/base/opengl/libagl/iterators.S: lines {66,67}&lt;br /&gt;
** frameworks/base/opengl/libagl/matrix.h: lines {67,68,96,126,127,282,283,314,315,316}&lt;br /&gt;
* smlawb =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {203,259}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {166,416}&lt;br /&gt;
** frameworks/base/libs/audioflinger/AudioResamplerSinc.cpp: lines {93,109}&lt;br /&gt;
** frameworks/base/opengl/libagl/matrix.h: lines {163,203}&lt;br /&gt;
* smlawt =====================================&lt;br /&gt;
** frameworks/base/libs/audioflinger/AudioResamplerSinc.cpp: lines {114}&lt;br /&gt;
** frameworks/base/opengl/libagl/matrix.h: lines {162,202,243,244}&lt;br /&gt;
* smulbb =====================================&lt;br /&gt;
** external/jpeg/jidctfst.S: lines {109,114,151,153}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {79}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {71,81}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {207,251,297,348,361,375,427,440,487}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {199,234,274,314,316,326,367,369,404}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_mac.h: lines {121,137}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_msu.h: lines {123,142}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_mult.h: lines {122,140}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mpy_32.h: lines {132,134,138,164,177,191}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mpy_32_16.h: lines {127,129,150,163}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mult.h: lines {121,141}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {115,139,151,163,189,190,212}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {112,113,164,183,201,218,265}&lt;br /&gt;
** external/opencore/codecs_v2/video/m4v_h263/enc/src/fastquant_inline.h: lines {250,457,531}&lt;br /&gt;
** external/skia/include/corecg/SkMath.h: lines {170}&lt;br /&gt;
** frameworks/base/libs/audioflinger/AudioMixer.cpp: lines {420,462}&lt;br /&gt;
** system/core/libpixelflinger/t32cb16blend.S: lines {39,66,74,82}&lt;br /&gt;
* smulbt =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {115}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {109}&lt;br /&gt;
** system/core/libpixelflinger/codeflinger/texturing.cpp: lines {1091}&lt;br /&gt;
** system/core/libpixelflinger/t32cb16blend.S: lines {47,55}&lt;br /&gt;
* smultt =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {131}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {100}&lt;br /&gt;
** frameworks/base/libs/audioflinger/AudioMixer.cpp: lines {467}&lt;br /&gt;
** frameworks/base/libs/audioflinger/AudioResamplerSinc.cpp: lines {73}&lt;br /&gt;
* smulwb =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {221}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {373}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {222}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {283}&lt;br /&gt;
** external/opencore/codecs_v2/audio/sbc/enc/src/sbcenc_filter.h: lines {33}&lt;br /&gt;
** frameworks/base/opengl/libagl/matrix.h: lines {161,201,242}&lt;br /&gt;
* smulwt =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {202,240}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {385,415}&lt;br /&gt;
* qadd =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {64}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {60}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {130,256}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {128,235}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_add.h: lines {122,137}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_mult.h: lines {123,145}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {71,102,152,176,192}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {91,115,148,202,234}&lt;br /&gt;
** external/openssl/crypto/bn/bn_prime.c: lines {454,455}&lt;br /&gt;
* qdadd =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/calc_sbr_synfilterbank.cpp: lines {116,162}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/trans4m_freq_2_time_fxp.cpp: lines {472,494}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {212,356,370,385,435,449}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {200,315,321,331,368,371}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_mac.h: lines {122,142}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mpy_32.h: lines {133,136,140,172,186,201}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mpy_32_16.h: lines {128,131,158,172}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {116}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {184}&lt;br /&gt;
* qdsub =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {302}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {275}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_msu.h: lines {124,147}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {140}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {165}&lt;br /&gt;
* qsub =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {167}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {162}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_sub.h: lines {121,138}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {88,127}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {70,133}&lt;br /&gt;
* strd =====================================&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_APUT_WIDE.S: lines {31}&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_IPUT_WIDE.S: lines {39}&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_IPUT_WIDE_QUICK.S: lines {14}&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_SPUT_WIDE.S: lines {21}&lt;br /&gt;
** dalvik/vm/mterp/out/InterpAsm-armv5.S: lines {2834,7530,8331,8542}&lt;br /&gt;
** dalvik/vm/oo/Object.h: lines {589}&lt;br /&gt;
** external/opencore/fileformats/avi/parser/include/pv_avifile_streamlist.h: lines {179}&lt;br /&gt;
** external/opencore/fileformats/avi/parser/src/pv_avifile_streamlist.cpp: lines {153}&lt;br /&gt;
** system/core/libpixelflinger/rotate90CW_4x4_16v6.S: lines {47,52,56,60}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Discussion ===&lt;br /&gt;
=== Notes ===&lt;br /&gt;
The file&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
system/core/libpixelflinger/codeflinger/ARMAssembler.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will need special attention. It's responsible for dynamic generation of DSP code.&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
* [[User:Cfriedt]] 20081024 I'm not sure how feasible this is, given that the [http://wiki.openmoko.org/wiki/Neo_FreeRunner_Hardware_Issues#SMedia_3362_Documentation_.26_OpenGL_ES_Drivers SMedia 3362 is heavily NDA'd]. However, since the arm920t lacks a floating-point unit / DSP core, is it possible to use the SMedia chip for general-purpose math? This would help in the Android platform, at least, for things like audio and video codecs. Aside from an OpenGL ES driver, OpenMoko documentation for the SMedia would be highly appreciated.&lt;br /&gt;
&lt;br /&gt;
= Important Links =&lt;br /&gt;
(Please Update Me)&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
* [http://source.android.com/documentation Android Documentation]&lt;br /&gt;
* [http://www.arm.com/documentation/ ARM Documentation], (keywords: armv4t, armv5t, armv5te, arm920t, arm926ej-s)&lt;br /&gt;
* [http://www.arm.com/miscPDFs/9658.pdf ARM Assembly Language Programming]&lt;br /&gt;
* [http://www.cse.unsw.edu.au/~cs3221/labs/assembler-intro.pdf An Introduction to the GNU Assembler]&lt;br /&gt;
* [http://www.heyrick.co.uk/assembler/apcsintro.html ARM Procedure Call Standard], [http://en.wikipedia.org/wiki/Calling_convention#ARM ARM Calling Conventions]&lt;br /&gt;
&lt;br /&gt;
== Instruction Set References ==&lt;br /&gt;
* [http://www.arm.com/miscPDFs/14128.pdf ARM Architecture Reference Manual], The definitive ISA documentation&lt;br /&gt;
* [http://www.simplemachines.it/doc/QRC0001H_rvct_v2.1_arm.pdf ARM Instruction Set Quick Reference Card]&lt;br /&gt;
* [http://infocenter.arm.com/help/topic/com.arm.doc.qrc0001l/QRC0001_UAL.pdf ARM and Thumb -2 Instruction Set Quick Reference Card]&lt;br /&gt;
* [http://infocenter.arm.com/help/topic/com.arm.doc.dvi0025b/DVI0025.pdf ARMv4T] (See section 1.4.13)&lt;br /&gt;
* [http://infocenter.arm.com/help/topic/com.arm.doc.dvi0014a/DVI0014A_ARM10T_PO.pdf ARMv5T] (See section 4.16)&lt;br /&gt;
* [http://www.arm.com/pdfs/ARM-DSP.pdf ARM DSP Enhanced Instruction Set]&lt;br /&gt;
* [http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042c/IHI0042C_aapcs.pdf Procedure Call Standard for the ARM Architecture]&lt;br /&gt;
&lt;br /&gt;
== Hardware Reference ==&lt;br /&gt;
&lt;br /&gt;
* [[Neo1973 Hardware]]&lt;br /&gt;
* [[Neo FreeRunner GTA02 Hardware]]&lt;br /&gt;
&lt;br /&gt;
== Communities ==&lt;br /&gt;
* [http://source.android.com/discuss Android Public Mailing Lists]&lt;br /&gt;
** Specifically, [http://groups.google.com/group/android-porting android-porting]&lt;br /&gt;
* [http://lists.openmoko.org/mailman/listinfo OpenMoko Mailing Lists]&lt;br /&gt;
** Specifically, [http://lists.openmoko.org/mailman/listinfo/openmoko-kernel openmoko-kernel]&lt;br /&gt;
* [http://forum.koolu.org/viewforum.php?f=10 Android on FreeRunner] at KoolU.com&lt;br /&gt;
* [[Openmoko Local Groups]]&lt;br /&gt;
* [[Openmoko:Community_Portal]]&lt;br /&gt;
&lt;br /&gt;
= See also =&lt;br /&gt;
&lt;br /&gt;
* [[Debug_Board]]&lt;br /&gt;
&lt;br /&gt;
= External Links =&lt;br /&gt;
== Youtube video /Andorid on FreeRunner ==&lt;br /&gt;
&lt;br /&gt;
[http://tw.youtube.com/watch?v=m4NbsLmF9j0 Video 1]&lt;br /&gt;
&lt;br /&gt;
[http://tw.youtube.com/watch?v=r6Op-7tNTiw Video 2]&lt;br /&gt;
&lt;br /&gt;
== Headline text ==&lt;br /&gt;
&lt;br /&gt;
[[Category:Distributions]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Manually_using_GPRS</id>
		<title>Manually using GPRS</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Manually_using_GPRS"/>
				<updated>2008-10-01T18:21:56Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: /* gsm0710muxd from Angstrom Repositories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The GPRS connection is made using the PPP protocol to a server identified by an &amp;quot;APN&amp;quot; at the network operator.   Once a GPRS connection is made, it is possible to [[#Sharing_the_GPRS_connection_with_a_computer|share that connection with a connected computer]], allowing that computer to access the internet through the phone!&lt;br /&gt;
&lt;br /&gt;
= Option 1: With GSM multiplexing and with a GUI =&lt;br /&gt;
&lt;br /&gt;
{{note|The following does not appear to work if you have a SIM PIN.  The dialog to enter your SIM PIN never pops up and the GSM multiplexing daemon continuous loops and runs into a SIM PIN error.}}&lt;br /&gt;
&lt;br /&gt;
GSM multiplexing allows both a GPRS connection and a phone call to be handled at the same time.  By default, [[Om 2008.8]] does not multiplex the GSM device.  The [[FSO]] distribution, however, introduces GSM multiplexing with a new service and a DBus API to that service.  The instructions to modify the OM2008.8 distribution to make use of GSM multiplexing and allow you to start GPRS from a GUI can be found here: http://freeyourphone.de/portal_v1/viewtopic.php?f=21&amp;amp;t=295 ('''Note:''' Script package seems to be no longer be available, but a later post in the thread links to a version at [http://fyp-archiv.relei.de/ http://fyp-archiv.relei.de/].)&lt;br /&gt;
&lt;br /&gt;
== gsm0710muxd from Angstrom Repositories ==&lt;br /&gt;
&lt;br /&gt;
However, using those instructions, you will encounter a few hurdles.  Do not use the gsm0710muxd that is found in the OM2008.8 repository.  It will not work, instead, use the one from the Angstrom Repositories (see [[Repositories]]).&lt;br /&gt;
&lt;br /&gt;
Alternatively, if you simply want to download all the packages, you can get them from here:&lt;br /&gt;
&lt;br /&gt;
http://www.angstrom-distribution.org/feeds/2008/ipk/glibc/armv4t/base/gsm0710muxd_0.9.1+r0-gitr3ff86b129640b647ccba3d86eb243d864671b039-r0_armv4t.ipk &lt;br /&gt;
&lt;br /&gt;
and the dependencies from here:&lt;br /&gt;
&lt;br /&gt;
http://www.angstrom-distribution.org/repo/?pkgname=gsm0710muxd&lt;br /&gt;
&lt;br /&gt;
Make sure that you install the armv4t versions of all packages.&lt;br /&gt;
&lt;br /&gt;
The most important step after installing gsm0710muxd is to tell QPE to use the MUX instead of the device directly.  If you follow the instructions in the link above, there is a step that replaces the 89qtopia init script with one from their script package.  The key difference is the addition of the following lines that tells QPE to use the MUX:&lt;br /&gt;
&lt;br /&gt;
in /etc/X11/Xsession.d/89qtopia&lt;br /&gt;
&lt;br /&gt;
  identvar=$(date +%s)&lt;br /&gt;
  ptsvar=$(dbus-send --system --print-reply --type=method_call --dest=org.pyneo.muxer /org/pyneo/Muxer &lt;br /&gt;
  org.freesmartphone.GSM.MUX.AllocChannel string:$identvar | grep &lt;br /&gt;
  string | awk -F '&amp;quot;' '{ print $2 }')&lt;br /&gt;
  export QTOPIA_PHONE_DEVICE=$ptsvar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The [[#Some APN names for reference|APN Reference]] table may come in handy when you are looking for the required network specific information for the other scripts.&lt;br /&gt;
&lt;br /&gt;
Once you follow through with all the instructions, you will notice that the &amp;quot;Services&amp;quot; GUI will crash.  This has to do with this bug: http://docs.openmoko.org/trac/ticket/1718&lt;br /&gt;
&lt;br /&gt;
The fix is to change the &amp;quot;init()&amp;quot; call on line 82 of /usr/lib/python2.5/site-packages/gtk-2.0/gtk/_init_.py  to &amp;quot;_init()&amp;quot; (add an underscore).&lt;br /&gt;
&lt;br /&gt;
You may also have to modify your /etc/resolv.conf file and add the nameserver (DNS Server) of your service provider if you have DNS resolution problems.&lt;br /&gt;
&lt;br /&gt;
Then, hopefully, you should be up in running with GPRS and a GUI to turn it on and off.  Note that you can use the command line scripts &amp;quot;gprson&amp;quot; and &amp;quot;gprsoff&amp;quot; in place of the GUI if you need to do some debugging.&lt;br /&gt;
&lt;br /&gt;
= Option 2: With GSM multiplexing and without a GUI =&lt;br /&gt;
&lt;br /&gt;
You will have to get gsm0710muxd the same way as detailed in Option 1.&lt;br /&gt;
&lt;br /&gt;
'''1) In /etc/rc5.d start gsm0710muxd before gsmd:'''&lt;br /&gt;
* S34gsm0710muxd -&amp;gt; ../init.d/gsm0710muxd&lt;br /&gt;
* S35gsmd -&amp;gt; ../init.d/gsmd&lt;br /&gt;
&lt;br /&gt;
'''2) Modify S35gsmd so it can start either with or without gsm0710muxd:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
    start)&lt;br /&gt;
        if [ &amp;quot;$(pidof gsm0710muxd)&amp;quot; ] ; then&lt;br /&gt;
                id=$(date +%s)&lt;br /&gt;
                GSM_DEV=$(dbus-send --system --print-reply --type=method_call --dest=org.pyneo.muxer /org/pyneo/Muxer org.freesmartphone.GSM.MUX.AllocChannel string:$id | grep string | cut -d \&amp;quot; -f 2)&lt;br /&gt;
        else&lt;br /&gt;
                [ -n &amp;quot;$GSM_POW&amp;quot; ] &amp;amp;&amp;amp; ( echo &amp;quot;0&amp;quot; &amp;gt;$GSM_POW; sleep 1 )&lt;br /&gt;
                [ -n &amp;quot;$GSM_POW&amp;quot; ] &amp;amp;&amp;amp; ( echo &amp;quot;1&amp;quot; &amp;gt;$GSM_POW; sleep 1 )&lt;br /&gt;
                [ -n &amp;quot;$GSM_RES&amp;quot; ] &amp;amp;&amp;amp; ( echo &amp;quot;1&amp;quot; &amp;gt;$GSM_RES; sleep 1 )&lt;br /&gt;
                [ -n &amp;quot;$GSM_RES&amp;quot; ] &amp;amp;&amp;amp; ( echo &amp;quot;0&amp;quot; &amp;gt;$GSM_RES; sleep 2 )&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        if [ ! &amp;quot;$GSM_DEV&amp;quot; ] ; then&lt;br /&gt;
                echo &amp;quot;GSM_DEV was not set&amp;quot;&lt;br /&gt;
                exit 1&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        echo -n &amp;quot;Starting GSM daemon: &amp;quot;&lt;br /&gt;
        start-stop-daemon -S -x /usr/sbin/gsmd -- gsmd -p $GSM_DEV $GSMD_OPTS -d -l /var/log/gsmd&lt;br /&gt;
&lt;br /&gt;
        if [ $? = 0 ]; then&lt;br /&gt;
            echo &amp;quot;gsmd.&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
            echo &amp;quot;(failed.)&amp;quot;&lt;br /&gt;
        fi&lt;br /&gt;
        ;;&lt;br /&gt;
    stop)&lt;br /&gt;
        if [ ! &amp;quot;$(pidof gsm0710muxd)&amp;quot; ] ; then&lt;br /&gt;
                [ -n &amp;quot;$GSM_POW&amp;quot; ] &amp;amp;&amp;amp; echo &amp;quot;0&amp;quot; &amp;gt;$GSM_POW&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        echo -n &amp;quot;Stopping GSM daemon: &amp;quot;&lt;br /&gt;
        ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''3) Remove the tty from /etc/ppp/peers/simyo''' (replace simyo with your provider).&lt;br /&gt;
&lt;br /&gt;
'''4) Use a ppp start script like this:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat /usr/local/bin/ppp-start&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
id=$(date +%s)&lt;br /&gt;
TTY=$(dbus-send --system --print-reply --type=method_call --dest=org.pyneo.muxer /org/pyneo/Muxer org.freesmartphone.GSM.MUX.AllocChannel string:$id | grep string | cut -d \&amp;quot; -f 2)&lt;br /&gt;
logger -t ppp-start &amp;quot;using tty $TTY&amp;quot;&lt;br /&gt;
pppd $TTY call simyo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5) Use &amp;quot;killall pppd&amp;quot; to terminate the PPP connection.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[:Image:Gsmmuxd.trace.txt|Here]] is some strace information from gsm0710muxd, showing how the daemon responds when receiving a call when GPRS is up.&lt;br /&gt;
&lt;br /&gt;
= Option 3: Without GSM multiplexing and without a GUI =&lt;br /&gt;
&lt;br /&gt;
[Important Note: It has been pointed out that this is only for 2007.2 and not for the 2008.8 images.  If someone can confirm this and update this comment with more detail it would help out this page.  Thanks]&lt;br /&gt;
&lt;br /&gt;
The program that implements PPP on Linux is [[pppd]], which we need to configure and run to get a connection. When that is working, we can configure pppd to wait until it's needed before it connects, and to disconnect if the connection becomes idle. Further, we can start pppd in the background during the boot process.&lt;br /&gt;
&lt;br /&gt;
== Configuring pppd for manual connections ==&lt;br /&gt;
&lt;br /&gt;
You'll need /etc/ppp/peers/gprs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Uncomment the following if you want some debug.&lt;br /&gt;
#debug&lt;br /&gt;
#logfile /var/volatile/log/pppd.log&lt;br /&gt;
lock&lt;br /&gt;
/dev/ttySAC0 115200&lt;br /&gt;
crtscts &lt;br /&gt;
connect /etc/ppp/gprs-connect-chat&lt;br /&gt;
disconnect /etc/ppp/gprs-disconnect-chat&lt;br /&gt;
hide-password&lt;br /&gt;
usepeerdns&lt;br /&gt;
ipcp-accept-local&lt;br /&gt;
noauth&lt;br /&gt;
noipdefault&lt;br /&gt;
novj&lt;br /&gt;
novjccomp&lt;br /&gt;
defaultroute&lt;br /&gt;
replacedefaultroute&lt;br /&gt;
# Reopen the connection if it fails, pausing for a while.&lt;br /&gt;
persist&lt;br /&gt;
holdoff 15&lt;br /&gt;
# Check the line every 20 seconds and presume&lt;br /&gt;
# the peer is gone if no replay for 4 times.&lt;br /&gt;
lcp-echo-interval 20&lt;br /&gt;
lcp-echo-failure 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depending on the APN, you may need password authentication using CHAP or PAP. In /etc/ppp/pap-secrets you can add the following default line for &amp;quot;password-less&amp;quot; connections:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# client        server  secret                  IP addresses&lt;br /&gt;
*               *       &amp;quot;&amp;quot;                      *&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For CHAP, lines in /etc/ppp/chap-secrets are used. For PAP, the lines are in /etc/ppp/pap-secrets. The client should match the &amp;quot;user&amp;quot; option in pppd the config file (below). You can use * to mean any here, but the option user &amp;quot;&amp;quot; doesn't mean empty!&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Secrets for authentication using CHAP&lt;br /&gt;
# client        server  secret                  IP addresses&lt;br /&gt;
&amp;quot;user&amp;quot;         *       &amp;quot;password&amp;quot;                  *  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this you need the following options in /etc/ppp/peers/gprs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# username to use for authentication, should match &amp;quot;client&amp;quot; in /etc/ppp/{chap,pap}-secrets&lt;br /&gt;
user &amp;quot;user&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== gprs-connect-chat, version 1 ==&lt;br /&gt;
&lt;br /&gt;
You'll also need /etc/ppp/gprs-connect-chat (needs &amp;quot;chmod +x&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
exec chat -v -S -s\&lt;br /&gt;
        TIMEOUT 15\&lt;br /&gt;
        &amp;quot;&amp;quot; &amp;quot;\K\K\K\d+++ATH&amp;quot;\&lt;br /&gt;
        OK-AT-OK ATZ\&lt;br /&gt;
        OK ATE1\&lt;br /&gt;
        ABORT BUSY\&lt;br /&gt;
        ABORT DELAYED\&lt;br /&gt;
        ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
        ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
        ABORT VOICE\&lt;br /&gt;
        ABORT ERROR\&lt;br /&gt;
        ABORT RINGING\&lt;br /&gt;
        TIMEOUT 60\&lt;br /&gt;
        OK AT+CFUN=1\&lt;br /&gt;
        OK AT+COPS\&lt;br /&gt;
        OK AT+CGDCONT=1,\&amp;quot;IP\&amp;quot;,\&amp;quot;internet\&amp;quot;\&lt;br /&gt;
        OK ATD*99#\&lt;br /&gt;
        CONNECT /n/d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; In the 3rd last line, replace the word &amp;lt;i&amp;gt;internet&amp;lt;/i&amp;gt; by your provider's APN (listed below).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;(08/18/08) Note:&amp;lt;/b&amp;gt; I needed to add the command &amp;quot;AT+CMOD=2&amp;quot; (formatted as &amp;quot;OK AT+CMOD=2\&amp;quot; without the quotes) in order to get GPRS working with the above script (otherwise it would ERROR on the CFUN, COPS, or the ATD if the other two were removed).  I have T-Mobile (US) with the $5.99 &amp;quot;tzones&amp;quot; addon, which works with Minimo as it supports HTTP proxy setups.&lt;br /&gt;
&lt;br /&gt;
== gprs-connect-chat, version 2 ==&lt;br /&gt;
&lt;br /&gt;
Update: On my freerunner the first AT+CFUN=1 always generated ERROR. I managed to get gprs work by using the following script from http://lists.openmoko.org/pipermail/community/2008-July/023246.html:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
exec /usr/sbin/chat -v \&lt;br /&gt;
        TIMEOUT 10 \&lt;br /&gt;
        OK-AT-'' ''\&lt;br /&gt;
        ABORT BUSY\&lt;br /&gt;
        ABORT DELAYED\&lt;br /&gt;
        ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
        ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
        ABORT VOICE\&lt;br /&gt;
        ABORT ERROR\&lt;br /&gt;
        ABORT RINGING\&lt;br /&gt;
        TIMEOUT 30 \&lt;br /&gt;
        '' ATZ\&lt;br /&gt;
        OK ATE1\&lt;br /&gt;
        OK AT+CFUN=1\&lt;br /&gt;
        ERROR AT+CPIN=\&amp;quot;XXXX\&amp;quot;\         &amp;lt;&amp;lt; USE YOUR OWN&lt;br /&gt;
        OK AT+COPS\&lt;br /&gt;
        OK AT+CGDCONT=1,\&amp;quot;IP\&amp;quot;,\&amp;quot;internet\&amp;quot;\&lt;br /&gt;
        OK 'ATDT*99***1#'\&lt;br /&gt;
        CONNECT ''&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The error seems to vary a bit, sometimes it's before AT+COPS, sometimes as above. I have two versions of the gprs-connect-chat, which I vary between depending on which is needed. Or is there a way to specify two acceptable answers like {OK,ERROR}?&lt;br /&gt;
&lt;br /&gt;
You will need to adjust the APN name &amp;quot;internet&amp;quot; in at+cgdcont line and possibly the phone number in the ATD line to match what your network operator provides. See below in the table &amp;quot;Some APN names for reference&amp;quot; for the right settings for your operator.&lt;br /&gt;
&lt;br /&gt;
== gprs-disconnect-chat ==&lt;br /&gt;
&lt;br /&gt;
Also good to have is /etc/ppp/gprs-disconnect-chat (needs &amp;quot;chmod +x&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
/usr/sbin/chat -v\&lt;br /&gt;
	ABORT OK\&lt;br /&gt;
	ABORT BUSY\&lt;br /&gt;
	ABORT DELAYED\&lt;br /&gt;
	ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
	ABORT &amp;quot;NO CARRIER&amp;quot;\&lt;br /&gt;
	ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
	ABORT VOICE\&lt;br /&gt;
	ABORT ERROR\&lt;br /&gt;
	ABORT RINGING\&lt;br /&gt;
	TIMEOUT 12\&lt;br /&gt;
	&amp;quot;&amp;quot; &amp;quot;\K\K\K\d+++ATH&amp;quot;\&lt;br /&gt;
	&amp;quot;NO CARRIER-AT-OK&amp;quot; &amp;quot;\c&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Starting PPP connection ==&lt;br /&gt;
&lt;br /&gt;
The following script can be used to start the ppp connection. First it stops gsmd because gsmd may put the phone in a unknown state. It then turns on the power to the phone, modifies the ownership, and then creates a tty connection. Finally it starts [[pppd]] with the gprs settings.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/init.d/gsmd stop&lt;br /&gt;
echo &amp;quot;1&amp;quot; &amp;gt; /sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
chown uucp.uucp /dev/ttySAC0&lt;br /&gt;
stty -F /dev/ttySAC0 crtscts&lt;br /&gt;
pppd call gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are having problems connecting ensure you have a good GSM signal and replace the last line with the below line. This will allow you to see the details of the connection on the console. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pppd debug nodetach call gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The config above will establish a persistant link over gprs. The battery will run low in less than an hour. See an example for an on-demand config below.&lt;br /&gt;
&lt;br /&gt;
=== Resolve.conf issues ===&lt;br /&gt;
&lt;br /&gt;
The latest build seems to have solved the following issue, it should be automatically updated by pppd.&lt;br /&gt;
&lt;br /&gt;
If you expeience DNS issues after connecting to DNS you may need a proper /etc/resolv.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln -sf /var/run/resolv.conf /etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If needed put your nameserver for usb-net into /var/run/resolv.conf, not in /etc.&lt;br /&gt;
&lt;br /&gt;
The image does not set a correct resolv.conf. i do so with an &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo  nameserver 192.168.0.201 &amp;gt; /var/run/resolv.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in the right place. because a post-up in /etc/network/interfaces is not supported i do that in /etc/network/if-up.d/08setupdns&lt;br /&gt;
&lt;br /&gt;
another problem is pppd's /etc/ppp/ip-down.d/92removedns which does not properly remove the link when shuting down ppp. my fix is this script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
ACTUALCONF=/var/run/resolv.conf&lt;br /&gt;
PPPCONF=/var/run/ppp/resolv.conf&lt;br /&gt;
if [ -f $PPPCONF ] ; then&lt;br /&gt;
        if [ -f $ACTUALCONF ] ; then&lt;br /&gt;
                if [ ! -h $ACTUALCONF -o ! &amp;quot;`readlink $ACTUALCONF 2&amp;gt;&amp;amp;1`&amp;quot; = &amp;quot;$PPPCONF&amp;quot; ] ; then&lt;br /&gt;
                        mv $ACTUALCONF $ACTUALCONF.ppporig&lt;br /&gt;
                fi&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        ln -sf $PPPCONF $ACTUALCONF&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Some APN names for reference ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Country&lt;br /&gt;
! Carrier&lt;br /&gt;
! Plan&lt;br /&gt;
! APN/Phone&lt;br /&gt;
! user/password if required&lt;br /&gt;
! Working pppd scripts&lt;br /&gt;
|-&lt;br /&gt;
| Australia || Virgin || Any || VirginInternet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Australia || Vodafone || Any || vfinternet.au || ||&lt;br /&gt;
|-&lt;br /&gt;
| Canada || Fido || Any, behind NAT || internet.fido.ca || fido/fido || use pap authetication&lt;br /&gt;
proxy address 205.151.011.011:8080&lt;br /&gt;
&lt;br /&gt;
mdbus -s org.freesmartphone.frameworkd /org/freesmartphone/GSM/Device&lt;br /&gt;
org.freesmartphone.GSM.PDP.ActivateContext internet.fido.ca fido&lt;br /&gt;
fido&lt;br /&gt;
|-&lt;br /&gt;
| Canada || Rogers || Any, behind NAT || internet.com || wapuser1/wap || nameserver 207.181.101.4&lt;br /&gt;
|-&lt;br /&gt;
| Canada || Rogers || $7 unlimited browsing || goam.com || wapuser1/wap || Must use a proxy server 10.128.1.69:80 (or 172.25.0.107:80 or 208.200.67.150:8080)&lt;br /&gt;
|-&lt;br /&gt;
| Czech Republic || Vodafone || any postpaid || internet || must be empty || [[GPRS_FSO|Works with FSO]] Behind NAT.&lt;br /&gt;
|-&lt;br /&gt;
| Czech Republic || Vodafone || prepaid || ointernet || must be empty || [[GPRS_FSO|Works with FSO]] Behind NAT.&lt;br /&gt;
|-&lt;br /&gt;
| Denmark || Telmore || || wap || must be empty ||&lt;br /&gt;
|-&lt;br /&gt;
| Denmark || Unotel || || internet || must be empty || Note: APN not tested&lt;br /&gt;
|-&lt;br /&gt;
| Estonia || Elisa || Any, behind NAT || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Estonia || EMT || Any, behind NAT || internet.emt.ee || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Saunalahti || Any || internet.saunalahti || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Sonera   || Any, behind NAT || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Sonera   || Any, public IP  || prointernet || ||&lt;br /&gt;
|-&lt;br /&gt;
| France || SFR || 10.x.x.x? || websfr || || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || SFR || 10.x.x.x? || wapsfr&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;|| || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || Orange || ??? || orange.fr || || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || Bouyges Telecom || Web &amp;amp; Mail || mmsbouygtel.com || || Work great under FSO. Just follow instructions at http://wiki.openmoko.org/wiki/GPRS_FSO. Proxy:  62.201.129.225:8080. For emails, only ports 25 (smtp) and 110 (pop) are allowed. (They use a transparent proxy ...)&lt;br /&gt;
|-&lt;br /&gt;
| Germany || E-Plus || BASE (and others?) || internet.eplus.de || eplus gprs || [[Base pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| Germany || E-Plus || Simyo || internet.eplus.de || simyo simyo || [[simyo pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| Germany || T-Mobile ||  || internet.t-mobile || ||&lt;br /&gt;
|-&lt;br /&gt;
| Germany || Vodafone || Any, behind NAT || web.vodafone.de || ||&lt;br /&gt;
|-&lt;br /&gt;
| Hungary || T-Mobile || Any || internet / *99***1# || must be empty || must disable chap auth: refuse-chap, refuse-mschap, refuse-mschap-v2&lt;br /&gt;
|-&lt;br /&gt;
| India || AirTel || MobileOffice || airtelgprs.com || ||&lt;br /&gt;
|- &lt;br /&gt;
| Italy   || Wind     || Superinternet, public IP  || internet.wind / *99# || wind/wind (any string) || [[Wind pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| Netherlands || Vodafone || Any || live.vodafone.com / *99***1#||  || [[Vodafone pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| New Zealand || Vodafone || Any || live.vodafone.com / *99***2#||  ||&lt;br /&gt;
|-&lt;br /&gt;
| Norway || Netcom || Any || internet.netcom.no || ||&lt;br /&gt;
|-&lt;br /&gt;
| Norway || OneCall || Any || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Norway || Telenor || Any || telenor || ||&lt;br /&gt;
|-&lt;br /&gt;
| Spain   || Simyo     || Any  || gprs-service.com / *99# ||  ||&lt;br /&gt;
|-&lt;br /&gt;
| Sweden || Parlino ||  || internet.parlino.se || || [[GPRS_FSO|Works with FSO]]&lt;br /&gt;
|-&lt;br /&gt;
| Sweden || Telia ||  || online.telia.se || || [[GPRS_FSO|Works with FSO]]&lt;br /&gt;
|-&lt;br /&gt;
| Switzerland || Swisscom || e.g. Natel Basic Liberty, behind NAT || gprs.swisscom.ch || ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || T-Mobile|| || general.t-mobile.uk || ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || Virgin || || goto.virginmobile.uk || user ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || [http://www.filesaveas.com/gprs.html other providers] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || AT&amp;amp;T || Unlimited data plan (attached to pay-as-you-go voice plan) || wap.cingular / *99***1# || WAP@CINGULARGPRS.COM/CINGULAR1 ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || Cincinnati Bell Wireless || || wap.gocbw.com ||  cbw  ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || Cingular (AT&amp;amp;T) || Less than full internet || wap.cingular / may require *99***1# || ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || T-mobile || Anything less than full internet || wap.voicestream.com ||  || Need to set proxy to 216.155.165.50  T-Mobile docs say &amp;quot;216.155.165.050&amp;quot;.  050 octal = 40 decimal and will *not* work.  I think port is 8080 or 9100.  No luck w/ pppd scripts.  GPRS_FSO directions work under FSO though.&lt;br /&gt;
|- &lt;br /&gt;
| USA || T-mobile || Regular internet plan || internet2.voicestream.com || || [[T-Mobile pppd scripts]]&lt;br /&gt;
|- &lt;br /&gt;
| USA || T-mobile || &amp;quot;VPN&amp;quot; internet plan || internet3.voicestream.com || ||&lt;br /&gt;
|- &lt;br /&gt;
| Venezuela || Digitel || Pre- y post-pago || gprsweb.digitel.ve || ||&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[1] connected through a WAP proxy (slower, but the only way to access Vodafone live! and SFR portal)&lt;br /&gt;
&lt;br /&gt;
[2] Unless stated otherwise the phone number to call is &amp;quot;*99#&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Also see Ross Barkman's page for a detailed list of more [http://www.taniwha.org.uk/gprs.html global GPRS providers APN details]&lt;br /&gt;
&lt;br /&gt;
== Starting pppd automatically ==&lt;br /&gt;
&lt;br /&gt;
Once you have finished debugging your gprs-connect-chat and gprs options files, you may wish to automatically connect whenever needed and hang up when finished.  Make sure you understand the impact of this change to your carrier plan billing.  This is not recommended unless you have a large-use or unlimited data plan.  These scripts do NOT prompt you before connecting.&lt;br /&gt;
&lt;br /&gt;
=== On-demand connection settings ===&lt;br /&gt;
&lt;br /&gt;
Additional settings are needed if you want the actual connection to be up only while there is traffic. In the 'gprs' file above, insert the following, making sure 'nodetach' is commented out.  If 'nodetach' is on, the boot process will stop when it starts pppd. Also remove the option 'persist' mentioned above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Wait until needed before connecting&lt;br /&gt;
demand&lt;br /&gt;
&lt;br /&gt;
# Disconnect if idle for given amount of seconds&lt;br /&gt;
idle 20&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Start on boot (method 1) ===&lt;br /&gt;
&lt;br /&gt;
Add the following definition to /etc/network/interfaces:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auto ppp0&lt;br /&gt;
iface ppp0 inet ppp&lt;br /&gt;
        provider gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That should be it. Now you can use 'ifup ppp0' and 'ifdown ppp0' manually too.&lt;br /&gt;
&lt;br /&gt;
=== Start on boot (method 2) ===&lt;br /&gt;
&lt;br /&gt;
Create the following file as /etc/ppp/ppp_on_boot (needs chmod +x).  The /etc/init.d/ppp script will call it to set up the daemon.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
#&lt;br /&gt;
#   Rename this file to ppp_on_boot and pppd will be fired up as&lt;br /&gt;
#   soon as the system comes up, connecting to `provider'.&lt;br /&gt;
#&lt;br /&gt;
#   If you also make this file executable, and replace the first line&lt;br /&gt;
#   with just &amp;quot;#!/bin/sh&amp;quot;, the commands below will be executed instead.&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# The location of the ppp daemon itself (shouldn't need to be changed)&lt;br /&gt;
PPPD=/usr/sbin/pppd&lt;br /&gt;
&lt;br /&gt;
# The default provider to connect to&lt;br /&gt;
$PPPD call gprs&lt;br /&gt;
&lt;br /&gt;
# Additional connections, which would just use settings from&lt;br /&gt;
# /etc/ppp/options.&amp;lt;tty&amp;gt;&lt;br /&gt;
#$PPPD ttyS0&lt;br /&gt;
#$PPPD ttyS1&lt;br /&gt;
#$PPPD ttyS2&lt;br /&gt;
#$PPPD ttyS3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, you need to add the /etc/init.d/ppp script to the init process by creating symbolic links from the appropriate directories.  I chose the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/rc0.d/K25ppp&lt;br /&gt;
/etc/rc1.d/K45ppp&lt;br /&gt;
/etc/rc2.d/S45ppp&lt;br /&gt;
/etc/rc3.d/S45ppp&lt;br /&gt;
/etc/rc4.d/S45ppp&lt;br /&gt;
/etc/rc5.d/S45ppp&lt;br /&gt;
/etc/rc6.d/K25ppp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Sharing the GPRS connection with a computer =&lt;br /&gt;
&lt;br /&gt;
See [[Tethering]]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[pppd]]&lt;br /&gt;
* [[Manually using GSM]]&lt;br /&gt;
* [[Manually using Bluetooth]]&lt;br /&gt;
* [[GPRS FSO]]&lt;br /&gt;
{{Languages|Manually_using_GPRS}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Developer]]&lt;br /&gt;
[[Category:Networking]]&lt;br /&gt;
[[Category:GSM]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Manually_using_GPRS</id>
		<title>Manually using GPRS</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Manually_using_GPRS"/>
				<updated>2008-10-01T18:15:40Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: /* gsm0710muxd from Angstrom Repositories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The GPRS connection is made using the PPP protocol to a server identified by an &amp;quot;APN&amp;quot; at the network operator.   Once a GPRS connection is made, it is possible to [[#Sharing_the_GPRS_connection_with_a_computer|share that connection with a connected computer]], allowing that computer to access the internet through the phone!&lt;br /&gt;
&lt;br /&gt;
= Option 1: With GSM multiplexing and with a GUI =&lt;br /&gt;
&lt;br /&gt;
{{note|The following does not appear to work if you have a SIM PIN.  The dialog to enter your SIM PIN never pops up and the GSM multiplexing daemon continuous loops and runs into a SIM PIN error.}}&lt;br /&gt;
&lt;br /&gt;
GSM multiplexing allows both a GPRS connection and a phone call to be handled at the same time.  By default, [[Om 2008.8]] does not multiplex the GSM device.  The [[FSO]] distribution, however, introduces GSM multiplexing with a new service and a DBus API to that service.  The instructions to modify the OM2008.8 distribution to make use of GSM multiplexing and allow you to start GPRS from a GUI can be found here: http://freeyourphone.de/portal_v1/viewtopic.php?f=21&amp;amp;t=295 ('''Note:''' Script package seems to be no longer be available, but a later post in the thread links to a version at [http://fyp-archiv.relei.de/ http://fyp-archiv.relei.de/].)&lt;br /&gt;
&lt;br /&gt;
== gsm0710muxd from Angstrom Repositories ==&lt;br /&gt;
&lt;br /&gt;
However, using those instructions, you will encounter a few hurdles.  Do not use the gsm0710muxd that is found in the OM2008.8 repository.  It will not work, instead, use the one from the Angstrom Repositories (see [[Repositories]]).&lt;br /&gt;
&lt;br /&gt;
Alternatively, if you simply want to download all the packages, you can get them from here:&lt;br /&gt;
&lt;br /&gt;
http://www.angstrom-distribution.org/feeds/2008/ipk/glibc/armv4t/base/gsm0710muxd_0.9.1+r0-gitr3ff86b129640b647ccba3d86eb243d864671b039-r0_armv4t.ipk &lt;br /&gt;
&lt;br /&gt;
and the dependencies from here:&lt;br /&gt;
&lt;br /&gt;
http://www.angstrom-distribution.org/repo/?pkgname=gsm0710muxd&lt;br /&gt;
&lt;br /&gt;
Make sure that you install the armv4t versions of all packages.&lt;br /&gt;
&lt;br /&gt;
The most important step after installing gsm0710muxd is to tell QPE to use the MUX instead of the device directly.  If you follow the instructions in the link above, there is a step that replaces the 89qtopia init script with one from their script package.  The key difference is the addition of the following lines that tells QPE to use the MUX:&lt;br /&gt;
&lt;br /&gt;
in /etc/X11/Xsession.d/89qtopia&lt;br /&gt;
&lt;br /&gt;
  identvar=$(date +%s)&lt;br /&gt;
  ptsvar=$(dbus-send --system --print-reply --type=method_call --dest=org.pyneo.muxer /org/pyneo/Muxer &lt;br /&gt;
  org.freesmartphone.GSM.MUX.AllocChannel string:$identvar | grep &lt;br /&gt;
  string | awk -F '&amp;quot;' '{ print $2 }')&lt;br /&gt;
  export QTOPIA_PHONE_DEVICE=$ptsvar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The [[#Some APN names for reference|APN Reference]] table may come in handy when you are looking for the required network specific information for the other scripts.&lt;br /&gt;
&lt;br /&gt;
Once you follow through with all the instructions, you will notice that the &amp;quot;Services&amp;quot; GUI will crash.  This has to do with this bug: http://docs.openmoko.org/trac/ticket/1718&lt;br /&gt;
&lt;br /&gt;
The fix is to change the &amp;quot;init()&amp;quot; call on line 82 of /usr/lib/python2.5/site-packages/gtk-2.0/gtk/_init_.py  to &amp;quot;_init()&amp;quot; (add an underscore).&lt;br /&gt;
&lt;br /&gt;
You may also have to modify your /etc/resolv.conf file and add the nameserver (DNS Server) of your service provider if you have DNS resolution problems.&lt;br /&gt;
&lt;br /&gt;
Then, hopefully, you should be up in running with GPRS and a GUI to turn it on and off.&lt;br /&gt;
&lt;br /&gt;
= Option 2: With GSM multiplexing and without a GUI =&lt;br /&gt;
&lt;br /&gt;
You will have to get gsm0710muxd the same way as detailed in Option 1.&lt;br /&gt;
&lt;br /&gt;
'''1) In /etc/rc5.d start gsm0710muxd before gsmd:'''&lt;br /&gt;
* S34gsm0710muxd -&amp;gt; ../init.d/gsm0710muxd&lt;br /&gt;
* S35gsmd -&amp;gt; ../init.d/gsmd&lt;br /&gt;
&lt;br /&gt;
'''2) Modify S35gsmd so it can start either with or without gsm0710muxd:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
    start)&lt;br /&gt;
        if [ &amp;quot;$(pidof gsm0710muxd)&amp;quot; ] ; then&lt;br /&gt;
                id=$(date +%s)&lt;br /&gt;
                GSM_DEV=$(dbus-send --system --print-reply --type=method_call --dest=org.pyneo.muxer /org/pyneo/Muxer org.freesmartphone.GSM.MUX.AllocChannel string:$id | grep string | cut -d \&amp;quot; -f 2)&lt;br /&gt;
        else&lt;br /&gt;
                [ -n &amp;quot;$GSM_POW&amp;quot; ] &amp;amp;&amp;amp; ( echo &amp;quot;0&amp;quot; &amp;gt;$GSM_POW; sleep 1 )&lt;br /&gt;
                [ -n &amp;quot;$GSM_POW&amp;quot; ] &amp;amp;&amp;amp; ( echo &amp;quot;1&amp;quot; &amp;gt;$GSM_POW; sleep 1 )&lt;br /&gt;
                [ -n &amp;quot;$GSM_RES&amp;quot; ] &amp;amp;&amp;amp; ( echo &amp;quot;1&amp;quot; &amp;gt;$GSM_RES; sleep 1 )&lt;br /&gt;
                [ -n &amp;quot;$GSM_RES&amp;quot; ] &amp;amp;&amp;amp; ( echo &amp;quot;0&amp;quot; &amp;gt;$GSM_RES; sleep 2 )&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        if [ ! &amp;quot;$GSM_DEV&amp;quot; ] ; then&lt;br /&gt;
                echo &amp;quot;GSM_DEV was not set&amp;quot;&lt;br /&gt;
                exit 1&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        echo -n &amp;quot;Starting GSM daemon: &amp;quot;&lt;br /&gt;
        start-stop-daemon -S -x /usr/sbin/gsmd -- gsmd -p $GSM_DEV $GSMD_OPTS -d -l /var/log/gsmd&lt;br /&gt;
&lt;br /&gt;
        if [ $? = 0 ]; then&lt;br /&gt;
            echo &amp;quot;gsmd.&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
            echo &amp;quot;(failed.)&amp;quot;&lt;br /&gt;
        fi&lt;br /&gt;
        ;;&lt;br /&gt;
    stop)&lt;br /&gt;
        if [ ! &amp;quot;$(pidof gsm0710muxd)&amp;quot; ] ; then&lt;br /&gt;
                [ -n &amp;quot;$GSM_POW&amp;quot; ] &amp;amp;&amp;amp; echo &amp;quot;0&amp;quot; &amp;gt;$GSM_POW&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        echo -n &amp;quot;Stopping GSM daemon: &amp;quot;&lt;br /&gt;
        ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''3) Remove the tty from /etc/ppp/peers/simyo''' (replace simyo with your provider).&lt;br /&gt;
&lt;br /&gt;
'''4) Use a ppp start script like this:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat /usr/local/bin/ppp-start&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
id=$(date +%s)&lt;br /&gt;
TTY=$(dbus-send --system --print-reply --type=method_call --dest=org.pyneo.muxer /org/pyneo/Muxer org.freesmartphone.GSM.MUX.AllocChannel string:$id | grep string | cut -d \&amp;quot; -f 2)&lt;br /&gt;
logger -t ppp-start &amp;quot;using tty $TTY&amp;quot;&lt;br /&gt;
pppd $TTY call simyo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5) Use &amp;quot;killall pppd&amp;quot; to terminate the PPP connection.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[:Image:Gsmmuxd.trace.txt|Here]] is some strace information from gsm0710muxd, showing how the daemon responds when receiving a call when GPRS is up.&lt;br /&gt;
&lt;br /&gt;
= Option 3: Without GSM multiplexing and without a GUI =&lt;br /&gt;
&lt;br /&gt;
[Important Note: It has been pointed out that this is only for 2007.2 and not for the 2008.8 images.  If someone can confirm this and update this comment with more detail it would help out this page.  Thanks]&lt;br /&gt;
&lt;br /&gt;
The program that implements PPP on Linux is [[pppd]], which we need to configure and run to get a connection. When that is working, we can configure pppd to wait until it's needed before it connects, and to disconnect if the connection becomes idle. Further, we can start pppd in the background during the boot process.&lt;br /&gt;
&lt;br /&gt;
== Configuring pppd for manual connections ==&lt;br /&gt;
&lt;br /&gt;
You'll need /etc/ppp/peers/gprs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Uncomment the following if you want some debug.&lt;br /&gt;
#debug&lt;br /&gt;
#logfile /var/volatile/log/pppd.log&lt;br /&gt;
lock&lt;br /&gt;
/dev/ttySAC0 115200&lt;br /&gt;
crtscts &lt;br /&gt;
connect /etc/ppp/gprs-connect-chat&lt;br /&gt;
disconnect /etc/ppp/gprs-disconnect-chat&lt;br /&gt;
hide-password&lt;br /&gt;
usepeerdns&lt;br /&gt;
ipcp-accept-local&lt;br /&gt;
noauth&lt;br /&gt;
noipdefault&lt;br /&gt;
novj&lt;br /&gt;
novjccomp&lt;br /&gt;
defaultroute&lt;br /&gt;
replacedefaultroute&lt;br /&gt;
# Reopen the connection if it fails, pausing for a while.&lt;br /&gt;
persist&lt;br /&gt;
holdoff 15&lt;br /&gt;
# Check the line every 20 seconds and presume&lt;br /&gt;
# the peer is gone if no replay for 4 times.&lt;br /&gt;
lcp-echo-interval 20&lt;br /&gt;
lcp-echo-failure 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depending on the APN, you may need password authentication using CHAP or PAP. In /etc/ppp/pap-secrets you can add the following default line for &amp;quot;password-less&amp;quot; connections:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# client        server  secret                  IP addresses&lt;br /&gt;
*               *       &amp;quot;&amp;quot;                      *&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For CHAP, lines in /etc/ppp/chap-secrets are used. For PAP, the lines are in /etc/ppp/pap-secrets. The client should match the &amp;quot;user&amp;quot; option in pppd the config file (below). You can use * to mean any here, but the option user &amp;quot;&amp;quot; doesn't mean empty!&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Secrets for authentication using CHAP&lt;br /&gt;
# client        server  secret                  IP addresses&lt;br /&gt;
&amp;quot;user&amp;quot;         *       &amp;quot;password&amp;quot;                  *  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this you need the following options in /etc/ppp/peers/gprs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# username to use for authentication, should match &amp;quot;client&amp;quot; in /etc/ppp/{chap,pap}-secrets&lt;br /&gt;
user &amp;quot;user&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== gprs-connect-chat, version 1 ==&lt;br /&gt;
&lt;br /&gt;
You'll also need /etc/ppp/gprs-connect-chat (needs &amp;quot;chmod +x&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
exec chat -v -S -s\&lt;br /&gt;
        TIMEOUT 15\&lt;br /&gt;
        &amp;quot;&amp;quot; &amp;quot;\K\K\K\d+++ATH&amp;quot;\&lt;br /&gt;
        OK-AT-OK ATZ\&lt;br /&gt;
        OK ATE1\&lt;br /&gt;
        ABORT BUSY\&lt;br /&gt;
        ABORT DELAYED\&lt;br /&gt;
        ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
        ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
        ABORT VOICE\&lt;br /&gt;
        ABORT ERROR\&lt;br /&gt;
        ABORT RINGING\&lt;br /&gt;
        TIMEOUT 60\&lt;br /&gt;
        OK AT+CFUN=1\&lt;br /&gt;
        OK AT+COPS\&lt;br /&gt;
        OK AT+CGDCONT=1,\&amp;quot;IP\&amp;quot;,\&amp;quot;internet\&amp;quot;\&lt;br /&gt;
        OK ATD*99#\&lt;br /&gt;
        CONNECT /n/d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; In the 3rd last line, replace the word &amp;lt;i&amp;gt;internet&amp;lt;/i&amp;gt; by your provider's APN (listed below).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;(08/18/08) Note:&amp;lt;/b&amp;gt; I needed to add the command &amp;quot;AT+CMOD=2&amp;quot; (formatted as &amp;quot;OK AT+CMOD=2\&amp;quot; without the quotes) in order to get GPRS working with the above script (otherwise it would ERROR on the CFUN, COPS, or the ATD if the other two were removed).  I have T-Mobile (US) with the $5.99 &amp;quot;tzones&amp;quot; addon, which works with Minimo as it supports HTTP proxy setups.&lt;br /&gt;
&lt;br /&gt;
== gprs-connect-chat, version 2 ==&lt;br /&gt;
&lt;br /&gt;
Update: On my freerunner the first AT+CFUN=1 always generated ERROR. I managed to get gprs work by using the following script from http://lists.openmoko.org/pipermail/community/2008-July/023246.html:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
exec /usr/sbin/chat -v \&lt;br /&gt;
        TIMEOUT 10 \&lt;br /&gt;
        OK-AT-'' ''\&lt;br /&gt;
        ABORT BUSY\&lt;br /&gt;
        ABORT DELAYED\&lt;br /&gt;
        ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
        ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
        ABORT VOICE\&lt;br /&gt;
        ABORT ERROR\&lt;br /&gt;
        ABORT RINGING\&lt;br /&gt;
        TIMEOUT 30 \&lt;br /&gt;
        '' ATZ\&lt;br /&gt;
        OK ATE1\&lt;br /&gt;
        OK AT+CFUN=1\&lt;br /&gt;
        ERROR AT+CPIN=\&amp;quot;XXXX\&amp;quot;\         &amp;lt;&amp;lt; USE YOUR OWN&lt;br /&gt;
        OK AT+COPS\&lt;br /&gt;
        OK AT+CGDCONT=1,\&amp;quot;IP\&amp;quot;,\&amp;quot;internet\&amp;quot;\&lt;br /&gt;
        OK 'ATDT*99***1#'\&lt;br /&gt;
        CONNECT ''&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The error seems to vary a bit, sometimes it's before AT+COPS, sometimes as above. I have two versions of the gprs-connect-chat, which I vary between depending on which is needed. Or is there a way to specify two acceptable answers like {OK,ERROR}?&lt;br /&gt;
&lt;br /&gt;
You will need to adjust the APN name &amp;quot;internet&amp;quot; in at+cgdcont line and possibly the phone number in the ATD line to match what your network operator provides. See below in the table &amp;quot;Some APN names for reference&amp;quot; for the right settings for your operator.&lt;br /&gt;
&lt;br /&gt;
== gprs-disconnect-chat ==&lt;br /&gt;
&lt;br /&gt;
Also good to have is /etc/ppp/gprs-disconnect-chat (needs &amp;quot;chmod +x&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
/usr/sbin/chat -v\&lt;br /&gt;
	ABORT OK\&lt;br /&gt;
	ABORT BUSY\&lt;br /&gt;
	ABORT DELAYED\&lt;br /&gt;
	ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
	ABORT &amp;quot;NO CARRIER&amp;quot;\&lt;br /&gt;
	ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
	ABORT VOICE\&lt;br /&gt;
	ABORT ERROR\&lt;br /&gt;
	ABORT RINGING\&lt;br /&gt;
	TIMEOUT 12\&lt;br /&gt;
	&amp;quot;&amp;quot; &amp;quot;\K\K\K\d+++ATH&amp;quot;\&lt;br /&gt;
	&amp;quot;NO CARRIER-AT-OK&amp;quot; &amp;quot;\c&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Starting PPP connection ==&lt;br /&gt;
&lt;br /&gt;
The following script can be used to start the ppp connection. First it stops gsmd because gsmd may put the phone in a unknown state. It then turns on the power to the phone, modifies the ownership, and then creates a tty connection. Finally it starts [[pppd]] with the gprs settings.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/init.d/gsmd stop&lt;br /&gt;
echo &amp;quot;1&amp;quot; &amp;gt; /sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
chown uucp.uucp /dev/ttySAC0&lt;br /&gt;
stty -F /dev/ttySAC0 crtscts&lt;br /&gt;
pppd call gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are having problems connecting ensure you have a good GSM signal and replace the last line with the below line. This will allow you to see the details of the connection on the console. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pppd debug nodetach call gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The config above will establish a persistant link over gprs. The battery will run low in less than an hour. See an example for an on-demand config below.&lt;br /&gt;
&lt;br /&gt;
=== Resolve.conf issues ===&lt;br /&gt;
&lt;br /&gt;
The latest build seems to have solved the following issue, it should be automatically updated by pppd.&lt;br /&gt;
&lt;br /&gt;
If you expeience DNS issues after connecting to DNS you may need a proper /etc/resolv.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln -sf /var/run/resolv.conf /etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If needed put your nameserver for usb-net into /var/run/resolv.conf, not in /etc.&lt;br /&gt;
&lt;br /&gt;
The image does not set a correct resolv.conf. i do so with an &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo  nameserver 192.168.0.201 &amp;gt; /var/run/resolv.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in the right place. because a post-up in /etc/network/interfaces is not supported i do that in /etc/network/if-up.d/08setupdns&lt;br /&gt;
&lt;br /&gt;
another problem is pppd's /etc/ppp/ip-down.d/92removedns which does not properly remove the link when shuting down ppp. my fix is this script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
ACTUALCONF=/var/run/resolv.conf&lt;br /&gt;
PPPCONF=/var/run/ppp/resolv.conf&lt;br /&gt;
if [ -f $PPPCONF ] ; then&lt;br /&gt;
        if [ -f $ACTUALCONF ] ; then&lt;br /&gt;
                if [ ! -h $ACTUALCONF -o ! &amp;quot;`readlink $ACTUALCONF 2&amp;gt;&amp;amp;1`&amp;quot; = &amp;quot;$PPPCONF&amp;quot; ] ; then&lt;br /&gt;
                        mv $ACTUALCONF $ACTUALCONF.ppporig&lt;br /&gt;
                fi&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        ln -sf $PPPCONF $ACTUALCONF&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Some APN names for reference ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Country&lt;br /&gt;
! Carrier&lt;br /&gt;
! Plan&lt;br /&gt;
! APN/Phone&lt;br /&gt;
! user/password if required&lt;br /&gt;
! Working pppd scripts&lt;br /&gt;
|-&lt;br /&gt;
| Australia || Virgin || Any || VirginInternet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Australia || Vodafone || Any || vfinternet.au || ||&lt;br /&gt;
|-&lt;br /&gt;
| Canada || Fido || Any, behind NAT || internet.fido.ca || fido/fido || use pap authetication&lt;br /&gt;
proxy address 205.151.011.011:8080&lt;br /&gt;
&lt;br /&gt;
mdbus -s org.freesmartphone.frameworkd /org/freesmartphone/GSM/Device&lt;br /&gt;
org.freesmartphone.GSM.PDP.ActivateContext internet.fido.ca fido&lt;br /&gt;
fido&lt;br /&gt;
|-&lt;br /&gt;
| Canada || Rogers || Any, behind NAT || internet.com || wapuser1/wap || nameserver 207.181.101.4&lt;br /&gt;
|-&lt;br /&gt;
| Canada || Rogers || $7 unlimited browsing || goam.com || wapuser1/wap || Must use a proxy server 10.128.1.69:80 (or 172.25.0.107:80 or 208.200.67.150:8080)&lt;br /&gt;
|-&lt;br /&gt;
| Czech Republic || Vodafone || any postpaid || internet || must be empty || [[GPRS_FSO|Works with FSO]] Behind NAT.&lt;br /&gt;
|-&lt;br /&gt;
| Czech Republic || Vodafone || prepaid || ointernet || must be empty || [[GPRS_FSO|Works with FSO]] Behind NAT.&lt;br /&gt;
|-&lt;br /&gt;
| Denmark || Telmore || || wap || must be empty ||&lt;br /&gt;
|-&lt;br /&gt;
| Denmark || Unotel || || internet || must be empty || Note: APN not tested&lt;br /&gt;
|-&lt;br /&gt;
| Estonia || Elisa || Any, behind NAT || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Estonia || EMT || Any, behind NAT || internet.emt.ee || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Saunalahti || Any || internet.saunalahti || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Sonera   || Any, behind NAT || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Sonera   || Any, public IP  || prointernet || ||&lt;br /&gt;
|-&lt;br /&gt;
| France || SFR || 10.x.x.x? || websfr || || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || SFR || 10.x.x.x? || wapsfr&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;|| || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || Orange || ??? || orange.fr || || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || Bouyges Telecom || Web &amp;amp; Mail || mmsbouygtel.com || || Work great under FSO. Just follow instructions at http://wiki.openmoko.org/wiki/GPRS_FSO. Proxy:  62.201.129.225:8080. For emails, only ports 25 (smtp) and 110 (pop) are allowed. (They use a transparent proxy ...)&lt;br /&gt;
|-&lt;br /&gt;
| Germany || E-Plus || BASE (and others?) || internet.eplus.de || eplus gprs || [[Base pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| Germany || E-Plus || Simyo || internet.eplus.de || simyo simyo || [[simyo pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| Germany || T-Mobile ||  || internet.t-mobile || ||&lt;br /&gt;
|-&lt;br /&gt;
| Germany || Vodafone || Any, behind NAT || web.vodafone.de || ||&lt;br /&gt;
|-&lt;br /&gt;
| Hungary || T-Mobile || Any || internet / *99***1# || must be empty || must disable chap auth: refuse-chap, refuse-mschap, refuse-mschap-v2&lt;br /&gt;
|-&lt;br /&gt;
| India || AirTel || MobileOffice || airtelgprs.com || ||&lt;br /&gt;
|- &lt;br /&gt;
| Italy   || Wind     || Superinternet, public IP  || internet.wind / *99# || wind/wind (any string) || [[Wind pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| Netherlands || Vodafone || Any || live.vodafone.com / *99***1#||  || [[Vodafone pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| New Zealand || Vodafone || Any || live.vodafone.com / *99***2#||  ||&lt;br /&gt;
|-&lt;br /&gt;
| Norway || Netcom || Any || internet.netcom.no || ||&lt;br /&gt;
|-&lt;br /&gt;
| Norway || OneCall || Any || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Norway || Telenor || Any || telenor || ||&lt;br /&gt;
|-&lt;br /&gt;
| Spain   || Simyo     || Any  || gprs-service.com / *99# ||  ||&lt;br /&gt;
|-&lt;br /&gt;
| Sweden || Parlino ||  || internet.parlino.se || || [[GPRS_FSO|Works with FSO]]&lt;br /&gt;
|-&lt;br /&gt;
| Sweden || Telia ||  || online.telia.se || || [[GPRS_FSO|Works with FSO]]&lt;br /&gt;
|-&lt;br /&gt;
| Switzerland || Swisscom || e.g. Natel Basic Liberty, behind NAT || gprs.swisscom.ch || ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || T-Mobile|| || general.t-mobile.uk || ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || Virgin || || goto.virginmobile.uk || user ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || [http://www.filesaveas.com/gprs.html other providers] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || AT&amp;amp;T || Unlimited data plan (attached to pay-as-you-go voice plan) || wap.cingular / *99***1# || WAP@CINGULARGPRS.COM/CINGULAR1 ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || Cincinnati Bell Wireless || || wap.gocbw.com ||  cbw  ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || Cingular (AT&amp;amp;T) || Less than full internet || wap.cingular / may require *99***1# || ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || T-mobile || Anything less than full internet || wap.voicestream.com ||  || Need to set proxy to 216.155.165.50  T-Mobile docs say &amp;quot;216.155.165.050&amp;quot;.  050 octal = 40 decimal and will *not* work.  I think port is 8080 or 9100.  No luck w/ pppd scripts.  GPRS_FSO directions work under FSO though.&lt;br /&gt;
|- &lt;br /&gt;
| USA || T-mobile || Regular internet plan || internet2.voicestream.com || || [[T-Mobile pppd scripts]]&lt;br /&gt;
|- &lt;br /&gt;
| USA || T-mobile || &amp;quot;VPN&amp;quot; internet plan || internet3.voicestream.com || ||&lt;br /&gt;
|- &lt;br /&gt;
| Venezuela || Digitel || Pre- y post-pago || gprsweb.digitel.ve || ||&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[1] connected through a WAP proxy (slower, but the only way to access Vodafone live! and SFR portal)&lt;br /&gt;
&lt;br /&gt;
[2] Unless stated otherwise the phone number to call is &amp;quot;*99#&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Also see Ross Barkman's page for a detailed list of more [http://www.taniwha.org.uk/gprs.html global GPRS providers APN details]&lt;br /&gt;
&lt;br /&gt;
== Starting pppd automatically ==&lt;br /&gt;
&lt;br /&gt;
Once you have finished debugging your gprs-connect-chat and gprs options files, you may wish to automatically connect whenever needed and hang up when finished.  Make sure you understand the impact of this change to your carrier plan billing.  This is not recommended unless you have a large-use or unlimited data plan.  These scripts do NOT prompt you before connecting.&lt;br /&gt;
&lt;br /&gt;
=== On-demand connection settings ===&lt;br /&gt;
&lt;br /&gt;
Additional settings are needed if you want the actual connection to be up only while there is traffic. In the 'gprs' file above, insert the following, making sure 'nodetach' is commented out.  If 'nodetach' is on, the boot process will stop when it starts pppd. Also remove the option 'persist' mentioned above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Wait until needed before connecting&lt;br /&gt;
demand&lt;br /&gt;
&lt;br /&gt;
# Disconnect if idle for given amount of seconds&lt;br /&gt;
idle 20&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Start on boot (method 1) ===&lt;br /&gt;
&lt;br /&gt;
Add the following definition to /etc/network/interfaces:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auto ppp0&lt;br /&gt;
iface ppp0 inet ppp&lt;br /&gt;
        provider gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That should be it. Now you can use 'ifup ppp0' and 'ifdown ppp0' manually too.&lt;br /&gt;
&lt;br /&gt;
=== Start on boot (method 2) ===&lt;br /&gt;
&lt;br /&gt;
Create the following file as /etc/ppp/ppp_on_boot (needs chmod +x).  The /etc/init.d/ppp script will call it to set up the daemon.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
#&lt;br /&gt;
#   Rename this file to ppp_on_boot and pppd will be fired up as&lt;br /&gt;
#   soon as the system comes up, connecting to `provider'.&lt;br /&gt;
#&lt;br /&gt;
#   If you also make this file executable, and replace the first line&lt;br /&gt;
#   with just &amp;quot;#!/bin/sh&amp;quot;, the commands below will be executed instead.&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# The location of the ppp daemon itself (shouldn't need to be changed)&lt;br /&gt;
PPPD=/usr/sbin/pppd&lt;br /&gt;
&lt;br /&gt;
# The default provider to connect to&lt;br /&gt;
$PPPD call gprs&lt;br /&gt;
&lt;br /&gt;
# Additional connections, which would just use settings from&lt;br /&gt;
# /etc/ppp/options.&amp;lt;tty&amp;gt;&lt;br /&gt;
#$PPPD ttyS0&lt;br /&gt;
#$PPPD ttyS1&lt;br /&gt;
#$PPPD ttyS2&lt;br /&gt;
#$PPPD ttyS3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, you need to add the /etc/init.d/ppp script to the init process by creating symbolic links from the appropriate directories.  I chose the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/rc0.d/K25ppp&lt;br /&gt;
/etc/rc1.d/K45ppp&lt;br /&gt;
/etc/rc2.d/S45ppp&lt;br /&gt;
/etc/rc3.d/S45ppp&lt;br /&gt;
/etc/rc4.d/S45ppp&lt;br /&gt;
/etc/rc5.d/S45ppp&lt;br /&gt;
/etc/rc6.d/K25ppp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Sharing the GPRS connection with a computer =&lt;br /&gt;
&lt;br /&gt;
See [[Tethering]]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[pppd]]&lt;br /&gt;
* [[Manually using GSM]]&lt;br /&gt;
* [[Manually using Bluetooth]]&lt;br /&gt;
* [[GPRS FSO]]&lt;br /&gt;
{{Languages|Manually_using_GPRS}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Developer]]&lt;br /&gt;
[[Category:Networking]]&lt;br /&gt;
[[Category:GSM]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Manually_using_GPRS</id>
		<title>Manually using GPRS</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Manually_using_GPRS"/>
				<updated>2008-10-01T16:39:37Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: /* gsm0710muxd from Angstrom Repositories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The GPRS connection is made using the PPP protocol to a server identified by an &amp;quot;APN&amp;quot; at the network operator.   Once a GPRS connection is made, it is possible to [[#Sharing_the_GPRS_connection_with_a_computer|share that connection with a connected computer]], allowing that computer to access the internet through the phone!&lt;br /&gt;
&lt;br /&gt;
= Option 1: With GSM multiplexing and with a GUI =&lt;br /&gt;
&lt;br /&gt;
{{note|The following does not appear to work if you have a SIM PIN.  The dialog to enter your SIM PIN never pops up and the GSM multiplexing daemon continuous loops and runs into a SIM PIN error.}}&lt;br /&gt;
&lt;br /&gt;
GSM multiplexing allows both a GPRS connection and a phone call to be handled at the same time.  By default, [[Om 2008.8]] does not multiplex the GSM device.  The [[FSO]] distribution, however, introduces GSM multiplexing with a new service and a DBus API to that service.  The instructions to modify the OM2008.8 distribution to make use of GSM multiplexing and allow you to start GPRS from a GUI can be found here: http://freeyourphone.de/portal_v1/viewtopic.php?f=21&amp;amp;t=295 ('''Note:''' Script package seems to be no longer be available, but a later post in the thread links to a version at [http://fyp-archiv.relei.de/ http://fyp-archiv.relei.de/].)&lt;br /&gt;
&lt;br /&gt;
== gsm0710muxd from Angstrom Repositories ==&lt;br /&gt;
&lt;br /&gt;
However, using those instructions, you will encounter a few hurdles.  Do not use the gsm0710muxd that is found in the OM2008.8 repository.  It will not work, instead, use the one from the Angstrom Repositories (see [[Repositories]]).&lt;br /&gt;
&lt;br /&gt;
Alternatively, if you simply want to download all the packages, you can get them from here:&lt;br /&gt;
&lt;br /&gt;
http://www.angstrom-distribution.org/feeds/2008/ipk/glibc/armv4t/base/gsm0710muxd_0.9.1+r0-gitr3ff86b129640b647ccba3d86eb243d864671b039-r0_armv4t.ipk &lt;br /&gt;
&lt;br /&gt;
and the dependencies from here:&lt;br /&gt;
&lt;br /&gt;
http://www.angstrom-distribution.org/repo/?pkgname=gsm0710muxd&lt;br /&gt;
&lt;br /&gt;
Make sure that you install the armv4t versions of all packages.&lt;br /&gt;
&lt;br /&gt;
The [[#Some APN names for reference|APN Reference]] table may come in handy when you are looking for the required network specific information.&lt;br /&gt;
&lt;br /&gt;
Once you follow through with all the instructions, you will notice that the &amp;quot;Services&amp;quot; GUI will crash.  This has to do with this bug: http://docs.openmoko.org/trac/ticket/1718&lt;br /&gt;
&lt;br /&gt;
The fix is to change the &amp;quot;init()&amp;quot; call on line 82 of /usr/lib/python2.5/site-packages/gtk-2.0/gtk/_init_.py  to &amp;quot;_init()&amp;quot; (add an underscore).&lt;br /&gt;
&lt;br /&gt;
You may also have to modify your /etc/resolv.conf file and add the nameserver (DNS Server) of your service provider if you have DNS resolution problems.&lt;br /&gt;
&lt;br /&gt;
Then, hopefully, you should be up in running with GPRS and a GUI to turn it on and off.&lt;br /&gt;
&lt;br /&gt;
= Option 2: With GSM multiplexing and without a GUI =&lt;br /&gt;
&lt;br /&gt;
You will have to get gsm0710muxd the same way as detailed in Option 1.&lt;br /&gt;
&lt;br /&gt;
'''1) In /etc/rc5.d start gsm0710muxd before gsmd:'''&lt;br /&gt;
* S34gsm0710muxd -&amp;gt; ../init.d/gsm0710muxd&lt;br /&gt;
* S35gsmd -&amp;gt; ../init.d/gsmd&lt;br /&gt;
&lt;br /&gt;
'''2) Modify S35gsmd so it can start either with or without gsm0710muxd:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
    start)&lt;br /&gt;
        if [ &amp;quot;$(pidof gsm0710muxd)&amp;quot; ] ; then&lt;br /&gt;
                id=$(date +%s)&lt;br /&gt;
                GSM_DEV=$(dbus-send --system --print-reply --type=method_call --dest=org.pyneo.muxer /org/pyneo/Muxer org.freesmartphone.GSM.MUX.AllocChannel string:$id | grep string | cut -d \&amp;quot; -f 2)&lt;br /&gt;
        else&lt;br /&gt;
                [ -n &amp;quot;$GSM_POW&amp;quot; ] &amp;amp;&amp;amp; ( echo &amp;quot;0&amp;quot; &amp;gt;$GSM_POW; sleep 1 )&lt;br /&gt;
                [ -n &amp;quot;$GSM_POW&amp;quot; ] &amp;amp;&amp;amp; ( echo &amp;quot;1&amp;quot; &amp;gt;$GSM_POW; sleep 1 )&lt;br /&gt;
                [ -n &amp;quot;$GSM_RES&amp;quot; ] &amp;amp;&amp;amp; ( echo &amp;quot;1&amp;quot; &amp;gt;$GSM_RES; sleep 1 )&lt;br /&gt;
                [ -n &amp;quot;$GSM_RES&amp;quot; ] &amp;amp;&amp;amp; ( echo &amp;quot;0&amp;quot; &amp;gt;$GSM_RES; sleep 2 )&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        if [ ! &amp;quot;$GSM_DEV&amp;quot; ] ; then&lt;br /&gt;
                echo &amp;quot;GSM_DEV was not set&amp;quot;&lt;br /&gt;
                exit 1&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        echo -n &amp;quot;Starting GSM daemon: &amp;quot;&lt;br /&gt;
        start-stop-daemon -S -x /usr/sbin/gsmd -- gsmd -p $GSM_DEV $GSMD_OPTS -d -l /var/log/gsmd&lt;br /&gt;
&lt;br /&gt;
        if [ $? = 0 ]; then&lt;br /&gt;
            echo &amp;quot;gsmd.&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
            echo &amp;quot;(failed.)&amp;quot;&lt;br /&gt;
        fi&lt;br /&gt;
        ;;&lt;br /&gt;
    stop)&lt;br /&gt;
        if [ ! &amp;quot;$(pidof gsm0710muxd)&amp;quot; ] ; then&lt;br /&gt;
                [ -n &amp;quot;$GSM_POW&amp;quot; ] &amp;amp;&amp;amp; echo &amp;quot;0&amp;quot; &amp;gt;$GSM_POW&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        echo -n &amp;quot;Stopping GSM daemon: &amp;quot;&lt;br /&gt;
        ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''3) Remove the tty from /etc/ppp/peers/simyo''' (replace simyo with your provider).&lt;br /&gt;
&lt;br /&gt;
'''4) Use a ppp start script like this:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat /usr/local/bin/ppp-start&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
id=$(date +%s)&lt;br /&gt;
TTY=$(dbus-send --system --print-reply --type=method_call --dest=org.pyneo.muxer /org/pyneo/Muxer org.freesmartphone.GSM.MUX.AllocChannel string:$id | grep string | cut -d \&amp;quot; -f 2)&lt;br /&gt;
logger -t ppp-start &amp;quot;using tty $TTY&amp;quot;&lt;br /&gt;
pppd $TTY call simyo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5) Use &amp;quot;killall pppd&amp;quot; to terminate the PPP connection.'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[:Image:Gsmmuxd.trace.txt|Here]] is some strace information from gsm0710muxd, showing how the daemon responds when receiving a call when GPRS is up.&lt;br /&gt;
&lt;br /&gt;
= Option 3: Without GSM multiplexing and without a GUI =&lt;br /&gt;
&lt;br /&gt;
[Important Note: It has been pointed out that this is only for 2007.2 and not for the 2008.8 images.  If someone can confirm this and update this comment with more detail it would help out this page.  Thanks]&lt;br /&gt;
&lt;br /&gt;
The program that implements PPP on Linux is [[pppd]], which we need to configure and run to get a connection. When that is working, we can configure pppd to wait until it's needed before it connects, and to disconnect if the connection becomes idle. Further, we can start pppd in the background during the boot process.&lt;br /&gt;
&lt;br /&gt;
== Configuring pppd for manual connections ==&lt;br /&gt;
&lt;br /&gt;
You'll need /etc/ppp/peers/gprs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Uncomment the following if you want some debug.&lt;br /&gt;
#debug&lt;br /&gt;
#logfile /var/volatile/log/pppd.log&lt;br /&gt;
lock&lt;br /&gt;
/dev/ttySAC0 115200&lt;br /&gt;
crtscts &lt;br /&gt;
connect /etc/ppp/gprs-connect-chat&lt;br /&gt;
disconnect /etc/ppp/gprs-disconnect-chat&lt;br /&gt;
hide-password&lt;br /&gt;
usepeerdns&lt;br /&gt;
ipcp-accept-local&lt;br /&gt;
noauth&lt;br /&gt;
noipdefault&lt;br /&gt;
novj&lt;br /&gt;
novjccomp&lt;br /&gt;
defaultroute&lt;br /&gt;
replacedefaultroute&lt;br /&gt;
# Reopen the connection if it fails, pausing for a while.&lt;br /&gt;
persist&lt;br /&gt;
holdoff 15&lt;br /&gt;
# Check the line every 20 seconds and presume&lt;br /&gt;
# the peer is gone if no replay for 4 times.&lt;br /&gt;
lcp-echo-interval 20&lt;br /&gt;
lcp-echo-failure 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depending on the APN, you may need password authentication using CHAP or PAP. In /etc/ppp/pap-secrets you can add the following default line for &amp;quot;password-less&amp;quot; connections:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# client        server  secret                  IP addresses&lt;br /&gt;
*               *       &amp;quot;&amp;quot;                      *&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For CHAP, lines in /etc/ppp/chap-secrets are used. For PAP, the lines are in /etc/ppp/pap-secrets. The client should match the &amp;quot;user&amp;quot; option in pppd the config file (below). You can use * to mean any here, but the option user &amp;quot;&amp;quot; doesn't mean empty!&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Secrets for authentication using CHAP&lt;br /&gt;
# client        server  secret                  IP addresses&lt;br /&gt;
&amp;quot;user&amp;quot;         *       &amp;quot;password&amp;quot;                  *  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this you need the following options in /etc/ppp/peers/gprs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# username to use for authentication, should match &amp;quot;client&amp;quot; in /etc/ppp/{chap,pap}-secrets&lt;br /&gt;
user &amp;quot;user&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== gprs-connect-chat, version 1 ==&lt;br /&gt;
&lt;br /&gt;
You'll also need /etc/ppp/gprs-connect-chat (needs &amp;quot;chmod +x&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
exec chat -v -S -s\&lt;br /&gt;
        TIMEOUT 15\&lt;br /&gt;
        &amp;quot;&amp;quot; &amp;quot;\K\K\K\d+++ATH&amp;quot;\&lt;br /&gt;
        OK-AT-OK ATZ\&lt;br /&gt;
        OK ATE1\&lt;br /&gt;
        ABORT BUSY\&lt;br /&gt;
        ABORT DELAYED\&lt;br /&gt;
        ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
        ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
        ABORT VOICE\&lt;br /&gt;
        ABORT ERROR\&lt;br /&gt;
        ABORT RINGING\&lt;br /&gt;
        TIMEOUT 60\&lt;br /&gt;
        OK AT+CFUN=1\&lt;br /&gt;
        OK AT+COPS\&lt;br /&gt;
        OK AT+CGDCONT=1,\&amp;quot;IP\&amp;quot;,\&amp;quot;internet\&amp;quot;\&lt;br /&gt;
        OK ATD*99#\&lt;br /&gt;
        CONNECT /n/d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;Note:&amp;lt;/b&amp;gt; In the 3rd last line, replace the word &amp;lt;i&amp;gt;internet&amp;lt;/i&amp;gt; by your provider's APN (listed below).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;(08/18/08) Note:&amp;lt;/b&amp;gt; I needed to add the command &amp;quot;AT+CMOD=2&amp;quot; (formatted as &amp;quot;OK AT+CMOD=2\&amp;quot; without the quotes) in order to get GPRS working with the above script (otherwise it would ERROR on the CFUN, COPS, or the ATD if the other two were removed).  I have T-Mobile (US) with the $5.99 &amp;quot;tzones&amp;quot; addon, which works with Minimo as it supports HTTP proxy setups.&lt;br /&gt;
&lt;br /&gt;
== gprs-connect-chat, version 2 ==&lt;br /&gt;
&lt;br /&gt;
Update: On my freerunner the first AT+CFUN=1 always generated ERROR. I managed to get gprs work by using the following script from http://lists.openmoko.org/pipermail/community/2008-July/023246.html:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
exec /usr/sbin/chat -v \&lt;br /&gt;
        TIMEOUT 10 \&lt;br /&gt;
        OK-AT-'' ''\&lt;br /&gt;
        ABORT BUSY\&lt;br /&gt;
        ABORT DELAYED\&lt;br /&gt;
        ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
        ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
        ABORT VOICE\&lt;br /&gt;
        ABORT ERROR\&lt;br /&gt;
        ABORT RINGING\&lt;br /&gt;
        TIMEOUT 30 \&lt;br /&gt;
        '' ATZ\&lt;br /&gt;
        OK ATE1\&lt;br /&gt;
        OK AT+CFUN=1\&lt;br /&gt;
        ERROR AT+CPIN=\&amp;quot;XXXX\&amp;quot;\         &amp;lt;&amp;lt; USE YOUR OWN&lt;br /&gt;
        OK AT+COPS\&lt;br /&gt;
        OK AT+CGDCONT=1,\&amp;quot;IP\&amp;quot;,\&amp;quot;internet\&amp;quot;\&lt;br /&gt;
        OK 'ATDT*99***1#'\&lt;br /&gt;
        CONNECT ''&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The error seems to vary a bit, sometimes it's before AT+COPS, sometimes as above. I have two versions of the gprs-connect-chat, which I vary between depending on which is needed. Or is there a way to specify two acceptable answers like {OK,ERROR}?&lt;br /&gt;
&lt;br /&gt;
You will need to adjust the APN name &amp;quot;internet&amp;quot; in at+cgdcont line and possibly the phone number in the ATD line to match what your network operator provides. See below in the table &amp;quot;Some APN names for reference&amp;quot; for the right settings for your operator.&lt;br /&gt;
&lt;br /&gt;
== gprs-disconnect-chat ==&lt;br /&gt;
&lt;br /&gt;
Also good to have is /etc/ppp/gprs-disconnect-chat (needs &amp;quot;chmod +x&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
/usr/sbin/chat -v\&lt;br /&gt;
	ABORT OK\&lt;br /&gt;
	ABORT BUSY\&lt;br /&gt;
	ABORT DELAYED\&lt;br /&gt;
	ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
	ABORT &amp;quot;NO CARRIER&amp;quot;\&lt;br /&gt;
	ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
	ABORT VOICE\&lt;br /&gt;
	ABORT ERROR\&lt;br /&gt;
	ABORT RINGING\&lt;br /&gt;
	TIMEOUT 12\&lt;br /&gt;
	&amp;quot;&amp;quot; &amp;quot;\K\K\K\d+++ATH&amp;quot;\&lt;br /&gt;
	&amp;quot;NO CARRIER-AT-OK&amp;quot; &amp;quot;\c&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Starting PPP connection ==&lt;br /&gt;
&lt;br /&gt;
The following script can be used to start the ppp connection. First it stops gsmd because gsmd may put the phone in a unknown state. It then turns on the power to the phone, modifies the ownership, and then creates a tty connection. Finally it starts [[pppd]] with the gprs settings.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/init.d/gsmd stop&lt;br /&gt;
echo &amp;quot;1&amp;quot; &amp;gt; /sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
chown uucp.uucp /dev/ttySAC0&lt;br /&gt;
stty -F /dev/ttySAC0 crtscts&lt;br /&gt;
pppd call gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are having problems connecting ensure you have a good GSM signal and replace the last line with the below line. This will allow you to see the details of the connection on the console. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pppd debug nodetach call gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The config above will establish a persistant link over gprs. The battery will run low in less than an hour. See an example for an on-demand config below.&lt;br /&gt;
&lt;br /&gt;
=== Resolve.conf issues ===&lt;br /&gt;
&lt;br /&gt;
The latest build seems to have solved the following issue, it should be automatically updated by pppd.&lt;br /&gt;
&lt;br /&gt;
If you expeience DNS issues after connecting to DNS you may need a proper /etc/resolv.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln -sf /var/run/resolv.conf /etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If needed put your nameserver for usb-net into /var/run/resolv.conf, not in /etc.&lt;br /&gt;
&lt;br /&gt;
The image does not set a correct resolv.conf. i do so with an &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo  nameserver 192.168.0.201 &amp;gt; /var/run/resolv.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in the right place. because a post-up in /etc/network/interfaces is not supported i do that in /etc/network/if-up.d/08setupdns&lt;br /&gt;
&lt;br /&gt;
another problem is pppd's /etc/ppp/ip-down.d/92removedns which does not properly remove the link when shuting down ppp. my fix is this script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
ACTUALCONF=/var/run/resolv.conf&lt;br /&gt;
PPPCONF=/var/run/ppp/resolv.conf&lt;br /&gt;
if [ -f $PPPCONF ] ; then&lt;br /&gt;
        if [ -f $ACTUALCONF ] ; then&lt;br /&gt;
                if [ ! -h $ACTUALCONF -o ! &amp;quot;`readlink $ACTUALCONF 2&amp;gt;&amp;amp;1`&amp;quot; = &amp;quot;$PPPCONF&amp;quot; ] ; then&lt;br /&gt;
                        mv $ACTUALCONF $ACTUALCONF.ppporig&lt;br /&gt;
                fi&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        ln -sf $PPPCONF $ACTUALCONF&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Some APN names for reference ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Country&lt;br /&gt;
! Carrier&lt;br /&gt;
! Plan&lt;br /&gt;
! APN/Phone&lt;br /&gt;
! user/password if required&lt;br /&gt;
! Working pppd scripts&lt;br /&gt;
|-&lt;br /&gt;
| Australia || Virgin || Any || VirginInternet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Australia || Vodafone || Any || vfinternet.au || ||&lt;br /&gt;
|-&lt;br /&gt;
| Canada || Fido || Any, behind NAT || internet.fido.ca || fido/fido || use pap authetication&lt;br /&gt;
proxy address 205.151.011.011:8080&lt;br /&gt;
&lt;br /&gt;
mdbus -s org.freesmartphone.frameworkd /org/freesmartphone/GSM/Device&lt;br /&gt;
org.freesmartphone.GSM.PDP.ActivateContext internet.fido.ca fido&lt;br /&gt;
fido&lt;br /&gt;
|-&lt;br /&gt;
| Canada || Rogers || Any, behind NAT || internet.com || wapuser1/wap || nameserver 207.181.101.4&lt;br /&gt;
|-&lt;br /&gt;
| Canada || Rogers || $7 unlimited browsing || goam.com || wapuser1/wap || Must use a proxy server 10.128.1.69:80 (or 172.25.0.107:80 or 208.200.67.150:8080)&lt;br /&gt;
|-&lt;br /&gt;
| Czech Republic || Vodafone || any postpaid || internet || must be empty || [[GPRS_FSO|Works with FSO]] Behind NAT.&lt;br /&gt;
|-&lt;br /&gt;
| Czech Republic || Vodafone || prepaid || ointernet || must be empty || [[GPRS_FSO|Works with FSO]] Behind NAT.&lt;br /&gt;
|-&lt;br /&gt;
| Denmark || Telmore || || wap || must be empty ||&lt;br /&gt;
|-&lt;br /&gt;
| Denmark || Unotel || || internet || must be empty || Note: APN not tested&lt;br /&gt;
|-&lt;br /&gt;
| Estonia || Elisa || Any, behind NAT || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Estonia || EMT || Any, behind NAT || internet.emt.ee || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Saunalahti || Any || internet.saunalahti || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Sonera   || Any, behind NAT || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Sonera   || Any, public IP  || prointernet || ||&lt;br /&gt;
|-&lt;br /&gt;
| France || SFR || 10.x.x.x? || websfr || || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || SFR || 10.x.x.x? || wapsfr&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;|| || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || Orange || ??? || orange.fr || || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || Bouyges Telecom || Web &amp;amp; Mail || mmsbouygtel.com || || Work great under FSO. Just follow instructions at http://wiki.openmoko.org/wiki/GPRS_FSO. Proxy:  62.201.129.225:8080. For emails, only ports 25 (smtp) and 110 (pop) are allowed. (They use a transparent proxy ...)&lt;br /&gt;
|-&lt;br /&gt;
| Germany || E-Plus || BASE (and others?) || internet.eplus.de || eplus gprs || [[Base pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| Germany || E-Plus || Simyo || internet.eplus.de || simyo simyo || [[simyo pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| Germany || T-Mobile ||  || internet.t-mobile || ||&lt;br /&gt;
|-&lt;br /&gt;
| Germany || Vodafone || Any, behind NAT || web.vodafone.de || ||&lt;br /&gt;
|-&lt;br /&gt;
| Hungary || T-Mobile || Any || internet / *99***1# || must be empty || must disable chap auth: refuse-chap, refuse-mschap, refuse-mschap-v2&lt;br /&gt;
|-&lt;br /&gt;
| India || AirTel || MobileOffice || airtelgprs.com || ||&lt;br /&gt;
|- &lt;br /&gt;
| Italy   || Wind     || Superinternet, public IP  || internet.wind / *99# || wind/wind (any string) || [[Wind pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| Netherlands || Vodafone || Any || live.vodafone.com / *99***1#||  || [[Vodafone pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| New Zealand || Vodafone || Any || live.vodafone.com / *99***2#||  ||&lt;br /&gt;
|-&lt;br /&gt;
| Norway || Netcom || Any || internet.netcom.no || ||&lt;br /&gt;
|-&lt;br /&gt;
| Norway || OneCall || Any || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Norway || Telenor || Any || telenor || ||&lt;br /&gt;
|-&lt;br /&gt;
| Spain   || Simyo     || Any  || gprs-service.com / *99# ||  ||&lt;br /&gt;
|-&lt;br /&gt;
| Sweden || Parlino ||  || internet.parlino.se || || [[GPRS_FSO|Works with FSO]]&lt;br /&gt;
|-&lt;br /&gt;
| Sweden || Telia ||  || online.telia.se || || [[GPRS_FSO|Works with FSO]]&lt;br /&gt;
|-&lt;br /&gt;
| Switzerland || Swisscom || e.g. Natel Basic Liberty, behind NAT || gprs.swisscom.ch || ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || T-Mobile|| || general.t-mobile.uk || ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || Virgin || || goto.virginmobile.uk || user ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || [http://www.filesaveas.com/gprs.html other providers] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || AT&amp;amp;T || Unlimited data plan (attached to pay-as-you-go voice plan) || wap.cingular / *99***1# || WAP@CINGULARGPRS.COM/CINGULAR1 ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || Cincinnati Bell Wireless || || wap.gocbw.com ||  cbw  ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || Cingular (AT&amp;amp;T) || Less than full internet || wap.cingular / may require *99***1# || ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || T-mobile || Anything less than full internet || wap.voicestream.com ||  || Need to set proxy to 216.155.165.50  T-Mobile docs say &amp;quot;216.155.165.050&amp;quot;.  050 octal = 40 decimal and will *not* work.  I think port is 8080 or 9100.  No luck w/ pppd scripts.  GPRS_FSO directions work under FSO though.&lt;br /&gt;
|- &lt;br /&gt;
| USA || T-mobile || Regular internet plan || internet2.voicestream.com || || [[T-Mobile pppd scripts]]&lt;br /&gt;
|- &lt;br /&gt;
| USA || T-mobile || &amp;quot;VPN&amp;quot; internet plan || internet3.voicestream.com || ||&lt;br /&gt;
|- &lt;br /&gt;
| Venezuela || Digitel || Pre- y post-pago || gprsweb.digitel.ve || ||&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[1] connected through a WAP proxy (slower, but the only way to access Vodafone live! and SFR portal)&lt;br /&gt;
&lt;br /&gt;
[2] Unless stated otherwise the phone number to call is &amp;quot;*99#&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Also see Ross Barkman's page for a detailed list of more [http://www.taniwha.org.uk/gprs.html global GPRS providers APN details]&lt;br /&gt;
&lt;br /&gt;
== Starting pppd automatically ==&lt;br /&gt;
&lt;br /&gt;
Once you have finished debugging your gprs-connect-chat and gprs options files, you may wish to automatically connect whenever needed and hang up when finished.  Make sure you understand the impact of this change to your carrier plan billing.  This is not recommended unless you have a large-use or unlimited data plan.  These scripts do NOT prompt you before connecting.&lt;br /&gt;
&lt;br /&gt;
=== On-demand connection settings ===&lt;br /&gt;
&lt;br /&gt;
Additional settings are needed if you want the actual connection to be up only while there is traffic. In the 'gprs' file above, insert the following, making sure 'nodetach' is commented out.  If 'nodetach' is on, the boot process will stop when it starts pppd. Also remove the option 'persist' mentioned above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Wait until needed before connecting&lt;br /&gt;
demand&lt;br /&gt;
&lt;br /&gt;
# Disconnect if idle for given amount of seconds&lt;br /&gt;
idle 20&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Start on boot (method 1) ===&lt;br /&gt;
&lt;br /&gt;
Add the following definition to /etc/network/interfaces:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auto ppp0&lt;br /&gt;
iface ppp0 inet ppp&lt;br /&gt;
        provider gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That should be it. Now you can use 'ifup ppp0' and 'ifdown ppp0' manually too.&lt;br /&gt;
&lt;br /&gt;
=== Start on boot (method 2) ===&lt;br /&gt;
&lt;br /&gt;
Create the following file as /etc/ppp/ppp_on_boot (needs chmod +x).  The /etc/init.d/ppp script will call it to set up the daemon.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
#&lt;br /&gt;
#   Rename this file to ppp_on_boot and pppd will be fired up as&lt;br /&gt;
#   soon as the system comes up, connecting to `provider'.&lt;br /&gt;
#&lt;br /&gt;
#   If you also make this file executable, and replace the first line&lt;br /&gt;
#   with just &amp;quot;#!/bin/sh&amp;quot;, the commands below will be executed instead.&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# The location of the ppp daemon itself (shouldn't need to be changed)&lt;br /&gt;
PPPD=/usr/sbin/pppd&lt;br /&gt;
&lt;br /&gt;
# The default provider to connect to&lt;br /&gt;
$PPPD call gprs&lt;br /&gt;
&lt;br /&gt;
# Additional connections, which would just use settings from&lt;br /&gt;
# /etc/ppp/options.&amp;lt;tty&amp;gt;&lt;br /&gt;
#$PPPD ttyS0&lt;br /&gt;
#$PPPD ttyS1&lt;br /&gt;
#$PPPD ttyS2&lt;br /&gt;
#$PPPD ttyS3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, you need to add the /etc/init.d/ppp script to the init process by creating symbolic links from the appropriate directories.  I chose the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/rc0.d/K25ppp&lt;br /&gt;
/etc/rc1.d/K45ppp&lt;br /&gt;
/etc/rc2.d/S45ppp&lt;br /&gt;
/etc/rc3.d/S45ppp&lt;br /&gt;
/etc/rc4.d/S45ppp&lt;br /&gt;
/etc/rc5.d/S45ppp&lt;br /&gt;
/etc/rc6.d/K25ppp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Sharing the GPRS connection with a computer =&lt;br /&gt;
&lt;br /&gt;
See [[Tethering]]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[pppd]]&lt;br /&gt;
* [[Manually using GSM]]&lt;br /&gt;
* [[Manually using Bluetooth]]&lt;br /&gt;
* [[GPRS FSO]]&lt;br /&gt;
{{Languages|Manually_using_GPRS}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Developer]]&lt;br /&gt;
[[Category:Networking]]&lt;br /&gt;
[[Category:GSM]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/VoIP</id>
		<title>VoIP</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/VoIP"/>
				<updated>2008-09-27T06:28:57Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: Redirect to Linphone page for now until other options are available&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Linphone]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Qtopia_/_Qt_Extended_on_FreeRunner</id>
		<title>Qtopia / Qt Extended on FreeRunner</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Qtopia_/_Qt_Extended_on_FreeRunner"/>
				<updated>2008-09-26T17:24:12Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: /* Installing Qtopia */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|Qtopia_on_FreeRunner}}&lt;br /&gt;
&lt;br /&gt;
This page provides instructions on how to install Qtopia (proper, not the [[ASU]] or [[QtopiaOnX11]] efforts) on the GTA02 (FreeRunner) phone.  It is similar to the [[Qtopia on Neo1973]] page.&lt;br /&gt;
&lt;br /&gt;
{|align=right&lt;br /&gt;
|__TOC__&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Current status ==&lt;br /&gt;
On 29 August 2008, Trolltech released the [http://www.qtopia.net/modules/mydownloads/singlefile.php?lid=79 Qtopia flash image for the FIC Neo FreeRunner (gta02)] containing the Qtopia 4.3.2 release (Version: 4.3.2-290808) (GPL version). &lt;br /&gt;
See [http://doc.trolltech.com/qtopia4.3/release-4-3-2.html Release-Notes]&lt;br /&gt;
&lt;br /&gt;
This image can successfully make and receive calls and text messages.  It can read all contacts from the SIM card (which the updated 2007.2 does not appear to be able to do).  It contains apps that appear to be more stable than the ones found in the 2007.2 image.  It has multiple input methods that appear to be more mature.  It does not, however, have a web browser or a GPS application. There are however at least two third-party GPS applications available:&lt;br /&gt;
* [http://blog.wolfman.com/articles/2008/08/27/porting-xgps-to-qtopia-for-the-freerunner xgps here]&lt;br /&gt;
* [http://www.linux4.be/fr/roadmap.html RoadMap(experimental) here]&lt;br /&gt;
&lt;br /&gt;
On 2nd of September 2008 Trolltech also released a 4.3.3-snapshot which fixes a number issues (sms messages not retrieved after resume; Qtopia getting confused between two calls; Make default call volume down and mic up; Added echo fix.)&lt;br /&gt;
&lt;br /&gt;
You can find all the Qtopia images [http://www.qtopia.net/modules/mydownloads/viewcat.php?cid=6 here]&lt;br /&gt;
&lt;br /&gt;
=== What to expect in the next release (Qtopia 4.4)? ===&lt;br /&gt;
There is no schedule about the release, but it will be [http://n2.nabble.com/qtopia-update-tp832851p832862.html soon] (a few weeks, it's said to be [http://lists.openmoko.org/nabble.html#nabble-tt1120455|a1120476 around the corner]).&lt;br /&gt;
* a [http://n2.nabble.com/qtopia-update-tp832851p832888.html browser] based on webkit&lt;br /&gt;
* [http://n2.nabble.com/-qtopia--rotate-screen--tp841805p841841.html screen rotation in the settings application] (so no automatic rotation)&lt;br /&gt;
* [http://n2.nabble.com/Echo-issue-on-OM2008.08-potentially-solved-tp791642.html noise reduction]&lt;br /&gt;
* GPS api&lt;br /&gt;
* usb net/storage switching&lt;br /&gt;
* Gtalk support&lt;br /&gt;
&lt;br /&gt;
== Option 1: Flashing Qtopia to FreeRunner ==&lt;br /&gt;
&lt;br /&gt;
Download the image mentioned above and follow the instructions here: [[Flashing the Neo FreeRunner]]&lt;br /&gt;
&lt;br /&gt;
== Option 2: Dual-Booting between Qtopia and 2007.2 (Qtopia boots from MicroSD card) ==&lt;br /&gt;
&lt;br /&gt;
Installation Requirements: &lt;br /&gt;
&lt;br /&gt;
# SSH shell access to 2007.2 based image of the FreeRunner through USB interface or WLAN.&lt;br /&gt;
# A Desktop Linux distro (to unpack the .jffs2 image, I ran Ubuntu under VMWare)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Preparing the SD card ===&lt;br /&gt;
&lt;br /&gt;
See the [[Booting from SD#Prepare the SD card| Preparing the SD Card]] section of the [[Booting from SD]] page for partitioning and formatting instructions.  After you complete the &amp;quot;Formatting the SD Card&amp;quot; steps, return here and execute the following:&lt;br /&gt;
&lt;br /&gt;
  mount /dev/mmcblk0p1 /media/card&lt;br /&gt;
  mkdir /media/card/boot&lt;br /&gt;
&lt;br /&gt;
  mkdir /media/mmcblk0p2&lt;br /&gt;
  mount /dev/mmcblk0p2 /media/mmcblk0p2&lt;br /&gt;
&lt;br /&gt;
This will set you up properly for the installation of the root filesystem and the kernel in the steps below.&lt;br /&gt;
&lt;br /&gt;
=== Installing Qtopia ===&lt;br /&gt;
&lt;br /&gt;
==== Unpacking the Qtopia Root Filesystem Image ====&lt;br /&gt;
&lt;br /&gt;
Download the Qtopia FLASH image from [[Latest Images#Qtopia image from qtopia.net]] to your Linux box and extract its contents:&lt;br /&gt;
&lt;br /&gt;
  tar xzf qtopia-4.3.2-gta02-flash-*.tgz&lt;br /&gt;
&lt;br /&gt;
You should now have two files: &lt;br /&gt;
#uImage-2.6.24+git18+9c058ff0d2641df3c36fc3300acb72078d2c41d4-r0-om-gta02.bin&lt;br /&gt;
#qtopia-4.3.2-gta02-rootfs-07172049.jffs2  &lt;br /&gt;
Now, mount the root file system from the jffs2 using the commands found [[Userspace root image#Mounting the JFFS2 image on a loop back device (Block Memory MTD Emulation) |here]].  However, in the mount command, substitute the image filename for &amp;quot;/dev/mtdblock0&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
==== Creating a compressed tarball ====&lt;br /&gt;
&lt;br /&gt;
Next, tar up the root filesystem:&lt;br /&gt;
&lt;br /&gt;
  # tar czf qtopia-4.3.2-gta02-rootfs-07172049.tar.gz -C &amp;lt;mountpoint&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Where ''&amp;lt;mountpoint&amp;gt;'' is the location where the jff2 filesystem was mounted.  Note the space and the period after the mountpoint.&lt;br /&gt;
&lt;br /&gt;
==== Installing Root Filesystem ====&lt;br /&gt;
&lt;br /&gt;
Transfer this compressed tarball to the second partition of the MicroSD that is mounted on the FreeRunner:&lt;br /&gt;
&lt;br /&gt;
  scp qtopia-4.3.2-gta02-rootfs-07172049.tar.gz root@192.168.0.202:/media/mmcblk0p2/&lt;br /&gt;
&lt;br /&gt;
Log in to your FreeRunner and unpack the root filesystem:&lt;br /&gt;
&lt;br /&gt;
  cd /media/mmcblk0p2&lt;br /&gt;
  tar xzf qtopia-4.3.2-gta02-rootfs-07172049.tar.gz&lt;br /&gt;
  rm qtopia-4.3.2-gta02-rootfs-07172049.tar.gz&lt;br /&gt;
  rm -f /media/mmcblk0p2/boot/*&lt;br /&gt;
&lt;br /&gt;
'''''Note:''''' the last step removes the kernel image from the second partition.  For some reason, U-Boot cannot find the uImage.bin file in the first partition if a kernel image exists in the second partition boot/ directory.&lt;br /&gt;
&lt;br /&gt;
==== Installing Kernel ====&lt;br /&gt;
&lt;br /&gt;
From your Linux box, rename &amp;lt;tt&amp;gt;uImage-2.6.24+git18+9c058ff0d2641df3c36fc3300acb72078d2c41d4-r0-om-gta02.bin&amp;lt;/tt&amp;gt; to &amp;lt;tt&amp;gt;uImage.bin&amp;lt;/tt&amp;gt; and copy it to the boot directory on the first partition of the MicroSD card.  Depending on the version of U-Boot you have installed, this may not work.  To prevent any possible issues, copy it to the &amp;lt;tt&amp;gt;/media/card&amp;lt;/tt&amp;gt; directory as well. There is plenty of room on the first partition to have &amp;lt;tt&amp;gt;uImage.bin&amp;lt;/tt&amp;gt; in both locations.&lt;br /&gt;
&lt;br /&gt;
  mv uImage-2.6.24+git18+9c058ff0d2641df3c36fc3300acb72078d2c41d4-r0-om-gta02.bin uImage.bin&lt;br /&gt;
  scp uImage.bin root@192.168.0.202:/media/card/boot/&lt;br /&gt;
  scp uImage.bin root@192.168.0.202:/media/card/&lt;br /&gt;
&lt;br /&gt;
==== Pointing Qtopia to the SD Card ====&lt;br /&gt;
&lt;br /&gt;
Lorn Potter on the mailing lists pointed this out:&lt;br /&gt;
&lt;br /&gt;
  Qtopia was designed to be run from the root partition on a flash chip, not from a removable sd card.&lt;br /&gt;
  &lt;br /&gt;
  You would have to edit the etc/default/Trolltech/Storage.conf file to make it forget about the sd &lt;br /&gt;
  /dev node, to be able to run it this way&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Another user's solution to this is the following:&lt;br /&gt;
&lt;br /&gt;
  Edit this file:     &amp;quot; /opt/Qtopia/etc/default/Trolltech/Storage.conf&lt;br /&gt;
  And change the [MountPoint0] section so it resembles this:&lt;br /&gt;
  -[  &lt;br /&gt;
  [MountPoint0]&lt;br /&gt;
  Name[] = SD Card&lt;br /&gt;
  Path=/dev/mmcblk0p1&lt;br /&gt;
  Removable = 0&lt;br /&gt;
  Applications = 0&lt;br /&gt;
  Documents = 0&lt;br /&gt;
  ContentDatabase = 0&lt;br /&gt;
&lt;br /&gt;
== Option 3: updating from source ==&lt;br /&gt;
&lt;br /&gt;
{{note|This will upgrade only opt/Qtopia directory, you should use opkg update/upgrade for the rest}}&lt;br /&gt;
Original Qtopia images (the distribution released by Trolltech, not ASU) are rarely released as a rootfs image, but the source code is often updated. If you want to reflash your OM with the latest version of Qtopia you might build it from sources. This has been explained in [http://lists.openmoko.org/pipermail/community/2008-August/024785.html this thread] of the community mailing list. Summing up:&lt;br /&gt;
&lt;br /&gt;
* get the latest toolchain released by trolltech: http://www.qtopia.net/modules/mydownloads/singlefile.php?lid=38 and unzip it on your PC (as root)&lt;br /&gt;
  cd /&lt;br /&gt;
  wget http://qtopia.net/downloads/neo/arm920t-eabi-ficgta01-toolchain.tgz&lt;br /&gt;
  tar xvzf arm920t-eabi-ficgta01-toolchain.tgz&lt;br /&gt;
* get the latest snapshot from trolltech: ftp://ftp.trolltech.com/qtopia/snapshots/&lt;br /&gt;
*  once dowloaded untar it&lt;br /&gt;
   tar xvzf qtopia-opensource-src-4.3.2-snapshot-20080806.tar.gz&lt;br /&gt;
* make a &amp;quot;build&amp;quot; dir &lt;br /&gt;
   mkdir build&lt;br /&gt;
   cd build&lt;br /&gt;
* configure and make:&lt;br /&gt;
   ../qtopia-opensource-src-4.3.2-snapshot-20080806/configure -device ficgta01&lt;br /&gt;
   make &lt;br /&gt;
This will take some time (couple hours). Note that the option &amp;quot;-device ficgta01&amp;quot; should work for both neo and freerunner. Then:&lt;br /&gt;
&lt;br /&gt;
  make install&lt;br /&gt;
&lt;br /&gt;
will make a root directory into the ''build'' directory. There you can find an ''image'' that directory should be copied to /opt/Qtopia of your phone with scp. once done restart qpe or whole phone.&lt;br /&gt;
&lt;br /&gt;
== Booting into Qtopia ==&lt;br /&gt;
&lt;br /&gt;
Now shutdown the FreeRunner&lt;br /&gt;
&lt;br /&gt;
  shutdown -h now&lt;br /&gt;
&lt;br /&gt;
Log into U-Boot in the NAND Flash to boot from the MicroSD card: (instructions from [[Booting the Neo FreeRunner]])&lt;br /&gt;
&lt;br /&gt;
* Press and hold Power button&lt;br /&gt;
* Then while still pressing the Power button, press and hold AUX button for 5 to 8 seconds. &lt;br /&gt;
* A boot menu will appear. &lt;br /&gt;
* Press the AUX button to select &amp;quot;[[Boot from sd card|Boot from MicroSD]]&amp;quot; and then press the Power button to execute.&lt;br /&gt;
&lt;br /&gt;
Qtopia should now boot.&lt;br /&gt;
&lt;br /&gt;
'''''Note:''''' you may get a kernel panic which says that &amp;quot;optional features not supported&amp;quot;.  If this is the case, boot back into 2007.2 and run&lt;br /&gt;
&lt;br /&gt;
  umount /dev/mmcblk0p2&lt;br /&gt;
  fsck.ext3.e2fsprogs /dev/mmcblk0p2&lt;br /&gt;
&lt;br /&gt;
This will clean up the file system and clear recovery flags in ext3 that ext2 does not support, then try booting from the MicroSD again.&lt;br /&gt;
&lt;br /&gt;
== Internationalization ==&lt;br /&gt;
&lt;br /&gt;
Qtopia comes with support for German and American English, and users from other countries will find that Qtopia's predictive keyboard makes writing in another language near impossible. One way to disable the predictive keyboard is to simply replace /opt/Qtopia/etc/dict/en_US/common.dawg and words.dawg with empty files (after backing them up). Qtopia normally looks in these files for words to suggest, and if it doesn't find any words that fit, it simply shows what you actually wrote.&lt;br /&gt;
&lt;br /&gt;
Adding characters to the keyboard requires modifications to the source code, as described [http://www.qtopia.net/modules/newbb_plus/viewtopic.php?topic_id=512&amp;amp;forum=16 here].&lt;br /&gt;
&lt;br /&gt;
[[Category:Qtopia]]&lt;br /&gt;
&lt;br /&gt;
== Suspend /Resume ==&lt;br /&gt;
It seems that suspend/resume only works when the FreeRunner has been connected to a powersource (only a few seconds if sufficient). If you boot from battery, it will never suspend until you have plugged it in at least for a couple of seconds.&lt;br /&gt;
&lt;br /&gt;
== Bugs ==&lt;br /&gt;
&lt;br /&gt;
See [http://trolltech.org/developer/task-tracker/index_html?method=front Trolltech's tracker] ([http://trolltech.org/developer/task-tracker/index_html?method=advsearch&amp;amp;searchstr=&amp;amp;bugs=on&amp;amp;sugs=on&amp;amp;product=2&amp;amp;functionalarea=&amp;amp;versionfound=&amp;amp;versionfixed=&amp;amp;priority=-1&amp;amp;status=0&amp;amp;resolution=-1 Qtopia Tracker]).&lt;br /&gt;
&lt;br /&gt;
Bug reports should be sent to qt-bugs@trolltech.com.&lt;br /&gt;
&lt;br /&gt;
=== in 4.3.2 release ===&lt;br /&gt;
&lt;br /&gt;
* Voice notes seem not to work, only record a 44 bytes file, containing no voice&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Distributions</id>
		<title>Distributions</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Distributions"/>
				<updated>2008-09-09T22:34:59Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: /* Applications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|Distributions}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;float:right;width:200px;background-color:#FF6600;text-align:center;border-collapse:collapse;font-weight:bold&amp;quot; &lt;br /&gt;
|&amp;lt;font color=white&amp;gt;Distributions&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style='background-color:#333333;color:#FFFFFF'|&lt;br /&gt;
&amp;lt;div align=left&amp;gt;&lt;br /&gt;
* &amp;lt;font color='#BBBBBB'&amp;gt;Openmoko (official)&amp;lt;/font&amp;gt;&lt;br /&gt;
** [[Om 2008.8]]&lt;br /&gt;
** [[Om 2007.2]]&lt;br /&gt;
** [[OpenmokoFramework|FSO]]&lt;br /&gt;
* &amp;lt;font color='#BBBBBB'&amp;gt;Community&amp;lt;/font&amp;gt;&lt;br /&gt;
** [[SHR]]&lt;br /&gt;
* &amp;lt;font color='#BBBBBB'&amp;gt;Other&amp;lt;/font&amp;gt;&lt;br /&gt;
** [[Qtopia]]&lt;br /&gt;
** [[Debian]]&lt;br /&gt;
** [[Gentoo]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
Openmoko distributions are designed to run on various mobile devices, with the primary aim of Openmoko Inc.'s [[Neo 1973]] and [[Neo FreeRunner]] phones. They are similar to Linux distributions; complete operating systems with user applications. You can install any of them on your phone or even have a multiboot system with two distributions installed. &lt;br /&gt;
&lt;br /&gt;
While the Openmoko distributions will run on [[Supported devices|other mobile devices]] too, some other software distributions will also run on the Openmoko Inc. phones (see below). &lt;br /&gt;
&lt;br /&gt;
For downloads see [[Download]], for installation instructions see [[Flashing the Neo FreeRunner]].&lt;br /&gt;
&lt;br /&gt;
== About distributions ==&lt;br /&gt;
&lt;br /&gt;
To be technically precise, 2007.2, 2008.8, FSO and SHR of these are not directly independent distributions, but different 'release targets'. They are built out of different branches of the [[OpenEmbedded]] metadistribution source tree, e.g. 2007.2 and 2008.8 are to each other like Ubuntu Gutsy is to Kubuntu Hardy. A [http://docs.openmoko.org/trac/roadmap roadmap] showing the number of remaining active tickets (in other words, bugs) is available on the bug [http://docs.openmoko.org/trac/ trac]king system (also accessible with the DOCS link at the top of every page).&lt;br /&gt;
&lt;br /&gt;
One should only use feeds from packages of the same source-branch, else 'stuff will break', similar to like using .debs from Hardy on a Gutsy base system. Also note that there is NO supported upgrade path between these at the moment, thus updating by changing the feeds will most likely end in broken packages or even a unbootable system. Thus please always use [[dfu-util]] to switch between the different 'distributions' for now or install them in a dual-boot setup (e.g. via sdcard or NFS).&lt;br /&gt;
&lt;br /&gt;
== Openmoko Inc. driven release targets ==&lt;br /&gt;
&lt;br /&gt;
=== Om 2008.8 (ASU, April/August Software Update) ===&lt;br /&gt;
&lt;br /&gt;
Om 2008.8 has been started to integrate the [http://trolltech.com/products/qtopia Qtopia] stack - on X11 - with a new set of graphically pleasing applications based on the Enlightenment Foundation Libraries. ASU is the internal name and is known as Om 2008.8 upon its release on August 8, 2008.  Qtopia is a more mature product than the GNOME Mobile stack and you can expect all the standard feature phone applications to work in a solid way. It uses the Qtopia phone server. Since - contrary to standard Qtopia - it does not directly use the framebuffer, non-Qt applications can safely share the screen with Qt applications.&lt;br /&gt;
&lt;br /&gt;
Om 2008.8 is maintained as &amp;quot;'''ASU-stable'''&amp;quot; with continuous updates. &lt;br /&gt;
&lt;br /&gt;
* [[Om2008.8|Om 2008.8]]&lt;br /&gt;
* [[Downloads#Om_2008.8_images_.28ASU.29|Download &amp;gt; Om 2008.8 images (ASU)]]&lt;br /&gt;
&lt;br /&gt;
=== Om 2007.2 (GTK) ===&lt;br /&gt;
&lt;br /&gt;
[[Om 2007.2]] is for people who are familiar with the [http://www.gnome.org/mobile/ GNOME Mobile] initiative and who want to write applications that run on multiple devices running (parts of) GNOME Mobile. This includes Maemo, which runs on the Nokia Internet Tablets. The strength of the GTK+ stack is a UI and programming environment similar to what you run on your Linux desktop, if you’re into GNOME. The GTK+ has PIM applications based on the Evolution Data Server and runs the gsmd phone server. Although you can use them, the applications are still pretty rough und unfinished. Some people have problems with the stability of the phone server.&lt;br /&gt;
&lt;br /&gt;
* [[Om 2007.2]]&lt;br /&gt;
* Availabilty: [http://buildhost.openmoko.org/daily/ Official Buildhost] and [[MokoMakefile]] support for development builds&lt;br /&gt;
* [[Downloads#Openmoko_2007.2_images_.28GTK.29|Download]]&lt;br /&gt;
* Several videos of this stack by [http://uk.youtube.com/user/freeyourphone Youtube user freeyourphone] and [http://uk.youtube.com/watch?v=U05kZfURPig&amp;amp;NR=1 video review by BVB Tech]&lt;br /&gt;
This is the base-system which is installed on FreeRunner when it leaves the factory.&lt;br /&gt;
&lt;br /&gt;
2007.2 development driven by openmoko inc. has basically stopped and resources are allocated in favor of 2008.8, while the community currently does the effort to 'rescue' the 2007.2 telephony apps and pull them to the future middleware from FSO (see SHR).&lt;br /&gt;
thus patches are still welcome, especially if they help development of SHR.&lt;br /&gt;
&lt;br /&gt;
=== FSO - freesmartphone.org ===&lt;br /&gt;
&lt;br /&gt;
FSO has been started to overcome the deficiencies both of the 2007.2 and the 2008.8 stack, namely to come up with an extensible framework that gives developers the infrastructure they need to create solid and exciting software products based on the Openmoko platform. An infrastructure that supports competing UIs while we can collaborate on developing services, making the framework strong . Here, the focus is on stable highlevel services that you can access from whatever language or UI that supports [http://dbus.freesmartphone.org/ dbus]. People report that despite its infancy, e.g. the phone server part in FSO is already more solid than anywhere else.&lt;br /&gt;
&lt;br /&gt;
It is not really intended as future release-target, but used as a 'vessel' or 'container' for the development and testing of the new, future middleware.&lt;br /&gt;
&lt;br /&gt;
The applications installed are intended as test-tools for the new middleware and not as fully featured, end user oriented applications. (even if it looks that way sometimes)&lt;br /&gt;
&lt;br /&gt;
In the words of Mickey, project manager:&lt;br /&gt;
&lt;br /&gt;
:&amp;quot;FSO is only a distro because &amp;quot;we can&amp;quot; (thanks to OpenEmbedded). Zhone is an independent UI application based on the FSO framework to facilitate testing. If you want to build own UIs or custom applications on the forthcoming Openmoko dbus service framework, then the FSO-image is a good starting point.&lt;br /&gt;
&lt;br /&gt;
* [[FSO]]&lt;br /&gt;
* [http://trac.freesmartphone.org:8000/trac-example  Development tracker]&lt;br /&gt;
* [http://downloads.openmoko.org/framework/milestone2/ Download milestone 2]&lt;br /&gt;
* [http://freesmartphone.org freesmartphone.org]&lt;br /&gt;
* [http://shr.bearstech.com/ fso-testing and fso-unstable images and feeds] (maintained by Rod Whitby, MokoMakefile author)&lt;br /&gt;
&lt;br /&gt;
== Openmoko Community driven release targets ==&lt;br /&gt;
&lt;br /&gt;
=== SHR - Stable Hybrid Release ===&lt;br /&gt;
&lt;br /&gt;
Stable Hybrid Release is a combination of the middleware from FSO, some of the 2007.2 GTK software (telephony-ui, pim), and Om2008.8 that provides all of the functionality of the 2007.2 software, but with the stability of the FSO.&lt;br /&gt;
&lt;br /&gt;
* [[Stable Hybrid Release]]&lt;br /&gt;
&lt;br /&gt;
== Non-Openmoko distributions ==&lt;br /&gt;
&lt;br /&gt;
These are not Openmoko (and OE) based distributions. These are an alternatives you can run on your Openmoko phones.&lt;br /&gt;
&lt;br /&gt;
=== Qtopia ===&lt;br /&gt;
&lt;br /&gt;
The Qtopia distribution from [http://www.trolltech.com Trolltech], it aims to provide a ready-to use image for Openmoko devices. &lt;br /&gt;
&lt;br /&gt;
* [[Qtopia]]&lt;br /&gt;
* Download: [http://www.qtopia.net/modules/mydownloads/viewcat.php?cid=6 Qtopia.net]&lt;br /&gt;
&lt;br /&gt;
=== Debian ===&lt;br /&gt;
&lt;br /&gt;
In the words of Joachim &amp;quot;nomeata&amp;quot; Breitner from the [http://wiki.debian.org/Teams/DebianFSO pkg-fso] team:&lt;br /&gt;
&lt;br /&gt;
:It’s not really a distribution in the Openmoko sense of the word, but rather a different underlying system for Openmoko distributions. At the moment, we ship the software from the FSO stack, but hopefully we’ll also have, for example, the Stable Hybrid Release software in our archive.&lt;br /&gt;
&lt;br /&gt;
:So for now, Debian is a different way of installing FSO, which takes more space and provides more programs :-)&lt;br /&gt;
&lt;br /&gt;
* [[Debian]]&lt;br /&gt;
&lt;br /&gt;
=== Gentoo ===&lt;br /&gt;
&lt;br /&gt;
* [[Gentoo]]&lt;br /&gt;
== Features by distribution/release target ==&lt;br /&gt;
&lt;br /&gt;
=== Connectivity ===&lt;br /&gt;
&lt;br /&gt;
{| border=1 width=100% |&lt;br /&gt;
| width=14%| || width=14%|2007.2 || width=14%|FSO || width=14%|Om2008.8 || width=14%|SHR || width=14%|Qtopia || Debian&lt;br /&gt;
|-&lt;br /&gt;
| Telephony || {{Yes}} || {{Yes}} || {{Yes}} || N/A || {{Yes}} || {{Yes}} (1)&lt;br /&gt;
|-&lt;br /&gt;
| SMS || {{Yes}} || {{Yes}} || {{Yes}} || N/A || {{Yes}} || {{Yes}} (1)&lt;br /&gt;
|-&lt;br /&gt;
| [[GPRS]] || Not through UI || Not through UI || Not through UI || N/A || {{No}} (3) || {{Yes}} (1)&lt;br /&gt;
|-&lt;br /&gt;
| WiFi || {{Yes}} || Not through UI || {{Yes}} (*) || N/A || {{Yes}} || {{Yes}}&lt;br /&gt;
|-&lt;br /&gt;
| VoIP || ?? || ?? || ?? || ?? || ?? || {{Yes}}&lt;br /&gt;
|-&lt;br /&gt;
| Bluetooth || {{Yes}} || {{No}} || {{Yes}} || N/A || {{Yes}} || {{Yes}}&lt;br /&gt;
|-&lt;br /&gt;
| GPS || {{Yes}} (1) || {{Yes}} || {{Yes}} (1) || N/A || {{No}} || {{Yes}} (1)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===  User Interaction ===&lt;br /&gt;
&lt;br /&gt;
{| border=1 width=100% |&lt;br /&gt;
| width=14%| || width=14%|2007.2 || width=14%|FSO || width=14%|Om2008.8 || width=14%|SHR || width=14%|Qtopia || Debian&lt;br /&gt;
|-&lt;br /&gt;
| Stylus friendly || {{Yes}} || {{Yes}} || {{Yes}} || N/A || {{Yes}} || {{Yes}}&lt;br /&gt;
|-&lt;br /&gt;
| Finger friendly || Partially || Partially || Partially || N/A || {{Yes}} || {{No}}&lt;br /&gt;
|-&lt;br /&gt;
| Accelerometer || {{No}}|| {{No}} || {{Yes}} [[Gestures|(1)]]  || N/A || {{No}} || {{No}}&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
{| border=1 width=100% |&lt;br /&gt;
| width=14%| || width=14%|2007.2 || width=14%|FSO || width=14%|Om2008.8 || width=14%|SHR || width=14%|Qtopia || Debian&lt;br /&gt;
|-&lt;br /&gt;
| Terminal || Basic (2) || {{Yes}} || {{Yes}} (1) || N/A || {{Yes}} || {{Yes}}&lt;br /&gt;
|-&lt;br /&gt;
| PIM || {{Yes}} || {{No}} || {{Yes}} || N/A || {{Yes}} || {{Yes}} (1)&lt;br /&gt;
|-&lt;br /&gt;
| Phonebook || {{Yes}} || {{Yes}} || {{Yes}} || N/A || {{Yes}} || {{Yes}} (1)&lt;br /&gt;
|-&lt;br /&gt;
| Dialer || {{Yes}} || {{Yes}} || {{Yes}} || N/A || {{Yes}} || {{Yes}} (1)&lt;br /&gt;
|-&lt;br /&gt;
| Web Browser || {{Yes}} (1) || ? || {{Yes}} (1) || ? || {{No}} || {{Yes}} (midori)&lt;br /&gt;
|-&lt;br /&gt;
| Mail Client || ? || ? || {{Yes}} || ? || {{Yes}} || {{Yes}} (1)&lt;br /&gt;
|-&lt;br /&gt;
| XMPP Client || {{Yes}} (1) || ? || {{Yes}} [[Instant Messaging|(1)]] || ? || {{No}} || {{Yes}} (1)&lt;br /&gt;
|-&lt;br /&gt;
| Media Player || {{Yes}} || ? || {{Yes}} (1) || ? || {{Yes}} || {{Yes}} (1) &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Toolkits / Runtimes ===&lt;br /&gt;
{| border=1 width=100% |&lt;br /&gt;
| width=14%| || width=14%|2007.2 || width=14%|FSO || width=14%|Om2008.8 || width=14%|SHR || width=14%|Qtopia || Debian&lt;br /&gt;
|-&lt;br /&gt;
| GTK+ || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}}&lt;br /&gt;
|-&lt;br /&gt;
| QT/Qtopia || No || {{Yes}}? || {{Yes}} || {{Yes}}? || {{Yes}} || {{Yes}}&lt;br /&gt;
|-&lt;br /&gt;
| Middleware || gsmd/neod || freesmartphone.org || qtopia-x11 || freesmartphone.org || qtopia || freesmartphone.org&lt;br /&gt;
|-&lt;br /&gt;
| [[Java]] || Jalimo || Jalimo || Jalimo || ? || ? || {{Yes}} (CacaoVM, JamVM)&lt;br /&gt;
|-&lt;br /&gt;
| [[Python]] || {{Yes}} || {{Yes}} || {{Yes}} || ? || {{Yes}} || {{Yes}}&lt;br /&gt;
|-&lt;br /&gt;
| [[Mono]] || {{Yes}} (1) || ? || {{Yes}} (1) || ? || ? || {{Yes}} (1) &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Footnotes:&lt;br /&gt;
&lt;br /&gt;
(1) works, but need additional software to be installed&lt;br /&gt;
&lt;br /&gt;
(2) unusable due to lack of certain keyboard characters. [[Switching_Keyboards#Matchbox_keyboard|Various fixes available.]]&lt;br /&gt;
&lt;br /&gt;
(3) there is a UI but it crashes the device when used.&lt;br /&gt;
&lt;br /&gt;
(*) unstable&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
Original distribution descriptions are from Mickey Lauer's [http://www.vanille-media.de/site/index.php/2008/06/28/gtk-asu-fso-tmtla/ GTK, ASU, FSO, TMTLA!].&lt;br /&gt;
&lt;br /&gt;
[[Category:Distributions| ]]&lt;br /&gt;
[[Category:Documentation]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Talk:Rotate</id>
		<title>Talk:Rotate</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Talk:Rotate"/>
				<updated>2008-09-08T02:43:47Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a pretty neat little application.&lt;br /&gt;
&lt;br /&gt;
Too bad the screen doesn't recalibrate properly yet.  :(&lt;br /&gt;
&lt;br /&gt;
-- Techiem2&lt;br /&gt;
&lt;br /&gt;
It stops working for me after a while.  Also, for the freerunner-rotate init script, it might make more sense to put it under the X init scripts (/etc/X11/Xsession.d) instead.&lt;br /&gt;
&lt;br /&gt;
-- Dewey&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Dfu-util-windows</id>
		<title>Dfu-util-windows</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Dfu-util-windows"/>
				<updated>2008-09-06T05:58:15Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: /* dfu-util for Win32 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== dfu-util for Win32 ==&lt;br /&gt;
&lt;br /&gt;
{{Note|This has been reported to work on Windows 2000, Windows XP and Windows Vista with the Neo FreeRunner.  No reports have been received on whether it works with other versions of Windows or with the Neo 1973.  There are some reports that image downloads and uploads are extremely slow for some people.  The exact cause of this has not yet been pinpointed.}}&lt;br /&gt;
&lt;br /&gt;
In order to use dfu-util for Win32, you need to install a Windows driver when the device is in U-Boot.  Theoretically, a USB standard-compliant DFU class driver should work, unfortunately, Windows does not come bundled with one.  If you do not have a DFU class driver (ie. Windows does not recognize the device in U-Boot mode and pops up the New Device Wizard), the LibUSB-Win32 driver and accompanying INF file for the Neo FreeRunner can be used, this driver can be found in OpenmokoDFU.zip at the link below.  When the Windows New Device Wizard pops up, use this driver.&lt;br /&gt;
&lt;br /&gt;
Once the driver is installed, then you can proceed and use the instructions found at the main [[dfu-util]] page.  &lt;br /&gt;
&lt;br /&gt;
The above mentioned files can be downloaded at: [http://projects.openmoko.org/projects/dfu-util-win32/ http://projects.openmoko.org/projects/dfu-util-win32/]&lt;br /&gt;
&lt;br /&gt;
The information below is for developers who would like to know how to compile dfu-util for Win32.&lt;br /&gt;
&lt;br /&gt;
== Porting dfu-util to Windows ==&lt;br /&gt;
&lt;br /&gt;
{{Note|This is entirely work in progress. Nevertheless hopefully the information on this page will serve as a starting point for anyone who find the time to take this further. After all, as many people still use Windows PCs as their every day computers, having a convenient way to re-flash a Neo from Windows would probably open up the user base.}}&lt;br /&gt;
&lt;br /&gt;
=== Potential Approaches ===&lt;br /&gt;
&lt;br /&gt;
* Cygwin&lt;br /&gt;
: Not very attactive as Cygwin binaries require Cygwin in order to run. You will not get a simple, native dfu-util.exe which can be downloaded and used on any Windows machine that way.&lt;br /&gt;
&lt;br /&gt;
* MinGW/MSYS&lt;br /&gt;
: MinGW (Minimalist GNU for Windows) seems to be the platform of choice.&lt;br /&gt;
&lt;br /&gt;
* LibUSB-Win32&lt;br /&gt;
: Will only be able to be built on a Windows box&lt;br /&gt;
&lt;br /&gt;
=== MinGW/MSYS port ===&lt;br /&gt;
&lt;br /&gt;
The preferred order of installation is:&lt;br /&gt;
&lt;br /&gt;
# Install MinGW (the core installation should be sufficient)&lt;br /&gt;
# Install MSYS (Note: make comes with MSYS while GCC comes with MinGW)&lt;br /&gt;
&lt;br /&gt;
Here is step-by-step howto:&lt;br /&gt;
&lt;br /&gt;
1. Download MinGW-5.1.4.exe from http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=240780&amp;amp;release_id=529741 and execute the installer. It will download additional files required and install MinGW.&lt;br /&gt;
: {{Note|It has often been a good idea to install into a directory that has no spaces in the filename.}}&lt;br /&gt;
2. Download MSYS-1.0.10.exe from http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=24963 and install.&lt;br /&gt;
: {{Note|Make sure to open the &amp;quot;Current Version: 1.0.10&amp;quot; folder as the newer version 1.0.11 does not have an installer yet.}}&lt;br /&gt;
You will need to enter the path where you installed MinGW. It's a good idea to install MinGW and MSYS next to each other, i.e. C:\SOMEDIR\MinGW and C:\SOMEDIR\MSYS.&lt;br /&gt;
: {{Note|For example if MinGW is installed in C:\MinGW enter 'C:/MinGW.' including the period.}}&lt;br /&gt;
&lt;br /&gt;
3. Download msysDTK-1.0.1.exe from http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=67879&amp;amp;release_id=131044, which contains the autotools. Install into the same directory into which you installed MSYS itself. The installer might not automatically suggest the right directory.&lt;br /&gt;
&lt;br /&gt;
That should give you an Icon in your Start menu in MinGW-&amp;gt;MSYS with the name of msys. Open that one, and you will find yourself in a bourne compatible shell on your native Windows system.&lt;br /&gt;
&lt;br /&gt;
You can try to execute some commends such as gcc, make, etc. to make sure you installed everything correctly.&lt;br /&gt;
&lt;br /&gt;
4. Download autoconf 2.59 from http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=67879&amp;amp;release_id=131044.  All you need to do to install it is to use a utility like [http://www.7-zip.org/ 7-Zip] to extract the files into your msys installation directory.&lt;br /&gt;
&lt;br /&gt;
5. You will also need pkg-config.  According to [http://www.mingw.org/MinGWiki/index.php/pkg-config http://www.mingw.org/MinGWiki/index.php/pkg-config], you need the following packages:&lt;br /&gt;
&lt;br /&gt;
  glib&lt;br /&gt;
  glib-dev&lt;br /&gt;
  libiconv&lt;br /&gt;
  gettext&lt;br /&gt;
  pkg-config&lt;br /&gt;
&lt;br /&gt;
You can get all of these from the GTK+ for Windows page at: [http://www.gtk.org/download-windows.html http://www.gtk.org/download-windows.html].  Unzip them to your msys\1.0 directory.&lt;br /&gt;
&lt;br /&gt;
6. Open the file /etc/profile (C:\msys\1.0\etc\profile) with your favorite editor (make sure it uses LF line endings) and add:&lt;br /&gt;
&lt;br /&gt;
  PKG_CONFIG_PATH=&amp;quot; /c/msys/1.0/lib/pkgconfig&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ensuring that the path is accessible from the MSYS shell and points to the pkgconfig files.&lt;br /&gt;
&lt;br /&gt;
7. Download libusb-win32-device-bin-0.1.12.1.tar.gz from http://sourceforge.net/project/showfiles.php?group_id=78138&amp;amp;package_id=79216&amp;amp;release_id=495011. Then, copy the libusb.a file from the LibUSB-Win32\lib\gcc directory into the MinGW\lib directory and the usb.h file from LibUSB-Win32\include into MinGW\include (or you can copy it into your dfu-util\src directory).&lt;br /&gt;
&lt;br /&gt;
8. Then you will need to create a libusb.pc file in the msys\1.0\lib\pkgconfig directory.  I created the following:&lt;br /&gt;
&lt;br /&gt;
  prefix=c:/msys/1.0&lt;br /&gt;
  exec_prefix=${prefix}&lt;br /&gt;
  libdir=${exec_prefix}/lib&lt;br /&gt;
  includedir=${prefix}/include&lt;br /&gt;
  Name: LibUSB&lt;br /&gt;
  Description: USB for Win32&lt;br /&gt;
  Requires: &lt;br /&gt;
  Version: 0.1.12.1&lt;br /&gt;
  Libs: -L${libdir} -lusb&lt;br /&gt;
  Cflags: -I${includedir}&lt;br /&gt;
&lt;br /&gt;
=== Getting dfu-util sources ===&lt;br /&gt;
&lt;br /&gt;
Use your favorite Subversion client to check out the dfu-util sources.  The dfu-util sources can be checked out from [https://svn.openmoko.org/trunk/src/host/dfu-util/ https://svn.openmoko.org/trunk/src/host/dfu-util/].&lt;br /&gt;
&lt;br /&gt;
=== Apply patch to compile with MinGW ===&lt;br /&gt;
&lt;br /&gt;
Apply the following patch to the source code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Index: main.c&lt;br /&gt;
===================================================================&lt;br /&gt;
--- main.c	(revision 4553)&lt;br /&gt;
+++ main.c	(working copy)&lt;br /&gt;
@@ -26,8 +26,10 @@&lt;br /&gt;
 #include &amp;lt;getopt.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;usb.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;errno.h&amp;gt;&lt;br /&gt;
+#ifndef __MINGW32__&lt;br /&gt;
 #include &amp;lt;byteswap.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;endian.h&amp;gt;&lt;br /&gt;
+#endif&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;dfu.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;usb_dfu.h&amp;quot;&lt;br /&gt;
@@ -37,6 +39,10 @@&lt;br /&gt;
 #include &amp;quot;config.h&amp;quot;&lt;br /&gt;
 #endif&lt;br /&gt;
 &lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+#define sleep(seconds) Sleep((seconds)*1000)&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
 #ifdef HAVE_USBPATH_H&lt;br /&gt;
 #include &amp;lt;usbpath.h&amp;gt;&lt;br /&gt;
 #endif&lt;br /&gt;
@@ -579,6 +585,20 @@&lt;br /&gt;
 &lt;br /&gt;
 		/* FIXME: check if the selected device really has only one */&lt;br /&gt;
 &lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+		int configuration = dif-&amp;gt;configuration;&lt;br /&gt;
+    &lt;br /&gt;
+		if (configuration == 0) {&lt;br /&gt;
+			dif-&amp;gt;configuration = 1;&lt;br /&gt;
+		}&lt;br /&gt;
+		printf(&amp;quot;Setting Configuration %u...\n&amp;quot;, dif-&amp;gt;configuration);&lt;br /&gt;
+		if (usb_set_configuration(dif-&amp;gt;dev_handle, dif-&amp;gt;configuration) &amp;lt; 0) {&lt;br /&gt;
+			fprintf(stderr, &amp;quot;Cannot set configuration: %s\n&amp;quot;, usb_strerror());&lt;br /&gt;
+			exit(1);&lt;br /&gt;
+		}&lt;br /&gt;
+		dif-&amp;gt;configuration = configuration;&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
 		printf(&amp;quot;Claiming USB DFU Runtime Interface...\n&amp;quot;);&lt;br /&gt;
 		if (usb_claim_interface(_rt_dif.dev_handle, _rt_dif.interface) &amp;lt; 0) {&lt;br /&gt;
 			fprintf(stderr, &amp;quot;Cannot claim interface: %s\n&amp;quot;, usb_strerror());&lt;br /&gt;
@@ -700,12 +720,18 @@&lt;br /&gt;
 		exit(1);&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
-#if 0&lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+	int configuration = dif-&amp;gt;configuration;&lt;br /&gt;
+  &lt;br /&gt;
+	if (configuration == 0) {&lt;br /&gt;
+		dif-&amp;gt;configuration = 1;&lt;br /&gt;
+	}&lt;br /&gt;
 	printf(&amp;quot;Setting Configuration %u...\n&amp;quot;, dif-&amp;gt;configuration);&lt;br /&gt;
 	if (usb_set_configuration(dif-&amp;gt;dev_handle, dif-&amp;gt;configuration) &amp;lt; 0) {&lt;br /&gt;
 		fprintf(stderr, &amp;quot;Cannot set configuration: %s\n&amp;quot;, usb_strerror());&lt;br /&gt;
 		exit(1);&lt;br /&gt;
 	}&lt;br /&gt;
+	dif-&amp;gt;configuration = configuration;&lt;br /&gt;
 #endif&lt;br /&gt;
 	printf(&amp;quot;Claiming USB DFU Interface...\n&amp;quot;);&lt;br /&gt;
 	if (usb_claim_interface(dif-&amp;gt;dev_handle, dif-&amp;gt;interface) &amp;lt; 0) {&lt;br /&gt;
Index: sam7dfu.c&lt;br /&gt;
===================================================================&lt;br /&gt;
--- sam7dfu.c	(revision 4553)&lt;br /&gt;
+++ sam7dfu.c	(working copy)&lt;br /&gt;
@@ -20,6 +20,11 @@&lt;br /&gt;
 #define O_BINARY 0&lt;br /&gt;
 #endif&lt;br /&gt;
 &lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+#define sleep(seconds) Sleep((seconds)*1000)&lt;br /&gt;
+#define usleep(microseconds) Sleep((microseconds)/1000)&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
 int sam7dfu_do_upload(struct usb_dev_handle *usb_handle, int interface, &lt;br /&gt;
 		      int xfer_size, const char *fname)&lt;br /&gt;
 {&lt;br /&gt;
Index: usb_dfu.h&lt;br /&gt;
===================================================================&lt;br /&gt;
--- usb_dfu.h	(revision 4553)&lt;br /&gt;
+++ usb_dfu.h	(working copy)&lt;br /&gt;
@@ -12,6 +12,13 @@&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
+#define u_int8_t uint8_t&lt;br /&gt;
+#define u_int16_t uint16_t&lt;br /&gt;
+#define u_int32_t uint32_t&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
 #define USB_DT_DFU			0x21&lt;br /&gt;
 &lt;br /&gt;
 struct usb_dfu_func_descriptor {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Build dfu-util ===&lt;br /&gt;
&lt;br /&gt;
In the Msys shell inside the dfu-util directory, run the following command:&lt;br /&gt;
&lt;br /&gt;
  ./autogen.sh&lt;br /&gt;
  ./configure&lt;br /&gt;
  make&lt;br /&gt;
&lt;br /&gt;
dfu-util should successfully compile and you should have the .exe files in the src directory. In case you get the following error&lt;br /&gt;
&lt;br /&gt;
  checking for USB... configure: error: *** Required libusb &amp;gt;= 0.1.4 not installed ***&lt;br /&gt;
&lt;br /&gt;
check your PKG_CONFIG_PATH (see above) to make sure it is correct, otherwise, you can try running the following command (if you are sure that libusb is correctly installed):&lt;br /&gt;
&lt;br /&gt;
  ./configure USB_CFLAGS=-Iinclude USB_LIBS=-lusb&lt;br /&gt;
&lt;br /&gt;
=== Preparing to use dfu-util ===&lt;br /&gt;
&lt;br /&gt;
A Windows driver needs to be installed when the device is in U-Boot and connected through the USB.  Windows does not come with a DFU class driver and Jungo seems to be the only one that has created a DFU class driver, but it is non-free.  You can use LibUSB-Win32 as the driver for the device by creating an INF file for it for this device.  Use inf-wizard.exe, which is a part of the LibUSB-Win32 binaries distribution.  Run the wizard, select the following device:&lt;br /&gt;
&lt;br /&gt;
  Vendor ID  Product ID  Description&lt;br /&gt;
  0x1D50      0x5119      USB Device&lt;br /&gt;
&lt;br /&gt;
Insert the Manufacturer name: Openmoko, or FIC?&lt;br /&gt;
&lt;br /&gt;
Insert device description: Device Firmware Upgrade&lt;br /&gt;
&lt;br /&gt;
Then save the INF file along with the auto generated CAT files.&lt;br /&gt;
&lt;br /&gt;
When you get the New Device Wizard when plugging in the device in U-Boot mode into Windows, select this newly generated INF file.&lt;br /&gt;
&lt;br /&gt;
=== Running dfu-util ===&lt;br /&gt;
&lt;br /&gt;
Once the Windows driver is successfully installed, you can try some commands:&lt;br /&gt;
&lt;br /&gt;
  dfu-util --list&lt;br /&gt;
&lt;br /&gt;
and you should be able to list the device.  Example:&lt;br /&gt;
&lt;br /&gt;
  Found Runtime: [0x1d50:0x5119] devnum=7, cfg=0, intf=2, alt=0, name=&amp;quot;USB Device Firmware Upgrade&amp;quot;  &lt;br /&gt;
&lt;br /&gt;
=== Binary ===&lt;br /&gt;
&lt;br /&gt;
[http://projects.openmoko.org/projects/dfu-util-win32/ http://projects.openmoko.org/projects/dfu-util-win32/]&lt;br /&gt;
&lt;br /&gt;
=== Outstanding issues ===&lt;br /&gt;
&lt;br /&gt;
Had to call usb_set_configuration() with configuration set to 1 before attempting to claim the device instead of using configuration 0 that the device returns.  It sounds like DFU implementation in U-Boot might not be compliant with USB spec.  A similar issue and discussion can be found here: [http://thread.gmane.org/gmane.comp.lib.libusb.devel.windows/1546/focus=1554 http://thread.gmane.org/gmane.comp.lib.libusb.devel.windows/1546/focus=1554]&lt;br /&gt;
&lt;br /&gt;
[[Category:Flashing Openmoko]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Manually_using_GPRS</id>
		<title>Manually using GPRS</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Manually_using_GPRS"/>
				<updated>2008-08-31T09:12:23Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: /* Option 2: With GSM multiplexing and without a GUI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The GPRS connection is made using the PPP protocol to a server identified by an &amp;quot;APN&amp;quot; at the network operator.   Once a GPRS connection is made, it is possible to [[#Sharing_the_GPRS_connection_with_a_computer|share that connection with a connected computer]], allowing that computer to access the internet through the phone!&lt;br /&gt;
&lt;br /&gt;
= Option 1: With GSM multiplexing and with a GUI =&lt;br /&gt;
&lt;br /&gt;
{{note|The following does not appear to work if you have a SIM PIN.  The dialog to enter your SIM PIN never pops up and the GSM multiplexing daemon continuous loops and runs into a SIM PIN error.}}&lt;br /&gt;
&lt;br /&gt;
GSM multiplexing allows both a GPRS connection and a phone call to be handled at the same time.  By default, [[Om 2008.8]] does not multiplex the GSM device.  The [[FSO]] distribution, however, introduces GSM multiplexing with a new service and a DBus API to that service.  The instructions to modify the OM2008.8 distribution to make use of GSM multiplexing and allow you to start GPRS from a GUI can be found here: http://freeyourphone.de/portal_v1/viewtopic.php?f=21&amp;amp;t=295&lt;br /&gt;
&lt;br /&gt;
== gsm0710muxd from Angstrom Repositories ==&lt;br /&gt;
&lt;br /&gt;
However, using those instructions, you will encounter a few hurdles.  Do not use the gsm0710muxd that is found in the OM2008.8 repository.  It will not work, instead, use the one from the Angstrom Repositories (see [[Repositories]]).&lt;br /&gt;
&lt;br /&gt;
Alternatively, if you simply want to download all the packages, you can get them from here:&lt;br /&gt;
&lt;br /&gt;
http://www.angstrom-distribution.org/feeds/2008/ipk/glibc/armv4t/base/gsm0710muxd_0.9.1+gitr6fecc78198dd821bbe29efd096bd8fecd855179d-r0_armv4t.ipk&lt;br /&gt;
&lt;br /&gt;
and the dependencies from here:&lt;br /&gt;
&lt;br /&gt;
http://www.angstrom-distribution.org/repo/?action=details&amp;amp;pnm=gsm0710muxd&lt;br /&gt;
&lt;br /&gt;
Make sure that you install the armv4t versions of all packages.&lt;br /&gt;
&lt;br /&gt;
The [[#Some APN names for reference|APN Reference]] table may come in handy when you are looking for the required network specific information.&lt;br /&gt;
&lt;br /&gt;
Once you follow through with all the instructions, you will notice that the &amp;quot;Services&amp;quot; GUI will crash.  This has to do with this bug: http://docs.openmoko.org/trac/ticket/1718&lt;br /&gt;
&lt;br /&gt;
The fix is to change the &amp;quot;init()&amp;quot; call on line 82 of /usr/lib/python2.5/site-packages/gtk-2.0/gtk/_init_.py  to &amp;quot;_init()&amp;quot; (add an underscore).&lt;br /&gt;
&lt;br /&gt;
You may also have to modify your /etc/resolv.conf file and add the nameserver (DNS Server) of your service provider if you have DNS resolution problems.&lt;br /&gt;
&lt;br /&gt;
Then, hopefully, you should be up in running with GPRS and a GUI to turn it on and off.&lt;br /&gt;
&lt;br /&gt;
= Option 2: With GSM multiplexing and without a GUI =&lt;br /&gt;
&lt;br /&gt;
You will have to get gsm0710muxd the same way as detailed in Option 1.&lt;br /&gt;
&lt;br /&gt;
'''1) In /etc/rc5.d start gsm0710muxd before gsmd:'''&lt;br /&gt;
* S34gsm0710muxd -&amp;gt; ../init.d/gsm0710muxd&lt;br /&gt;
* S35gsmd -&amp;gt; ../init.d/gsmd&lt;br /&gt;
&lt;br /&gt;
'''2) Modify S35gsmd so it can start either with or without gsm0710muxd:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
    start)&lt;br /&gt;
        if [ &amp;quot;$(pidof gsm0710muxd)&amp;quot; ] ; then&lt;br /&gt;
                id=$(date +%s)&lt;br /&gt;
                GSM_DEV=$(dbus-send --system --print-reply --type=method_call --dest=org.pyneo.muxer /org/pyneo/Muxer org.freesmartphone.GSM.MUX.AllocChannel string:$id | grep string | cut -d \&amp;quot; -f 2)&lt;br /&gt;
        else&lt;br /&gt;
                [ -n &amp;quot;$GSM_POW&amp;quot; ] &amp;amp;&amp;amp; ( echo &amp;quot;0&amp;quot; &amp;gt;$GSM_POW; sleep 1 )&lt;br /&gt;
                [ -n &amp;quot;$GSM_POW&amp;quot; ] &amp;amp;&amp;amp; ( echo &amp;quot;1&amp;quot; &amp;gt;$GSM_POW; sleep 1 )&lt;br /&gt;
                [ -n &amp;quot;$GSM_RES&amp;quot; ] &amp;amp;&amp;amp; ( echo &amp;quot;1&amp;quot; &amp;gt;$GSM_RES; sleep 1 )&lt;br /&gt;
                [ -n &amp;quot;$GSM_RES&amp;quot; ] &amp;amp;&amp;amp; ( echo &amp;quot;0&amp;quot; &amp;gt;$GSM_RES; sleep 2 )&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        if [ ! &amp;quot;$GSM_DEV&amp;quot; ] ; then&lt;br /&gt;
                echo &amp;quot;GSM_DEV was not set&amp;quot;&lt;br /&gt;
                exit 1&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        echo -n &amp;quot;Starting GSM daemon: &amp;quot;&lt;br /&gt;
        start-stop-daemon -S -x /usr/sbin/gsmd -- gsmd -p $GSM_DEV $GSMD_OPTS -d -l /var/log/gsmd&lt;br /&gt;
&lt;br /&gt;
        if [ $? = 0 ]; then&lt;br /&gt;
            echo &amp;quot;gsmd.&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
            echo &amp;quot;(failed.)&amp;quot;&lt;br /&gt;
        fi&lt;br /&gt;
        ;;&lt;br /&gt;
    stop)&lt;br /&gt;
        if [ ! &amp;quot;$(pidof gsm0710muxd)&amp;quot; ] ; then&lt;br /&gt;
                [ -n &amp;quot;$GSM_POW&amp;quot; ] &amp;amp;&amp;amp; echo &amp;quot;0&amp;quot; &amp;gt;$GSM_POW&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        echo -n &amp;quot;Stopping GSM daemon: &amp;quot;&lt;br /&gt;
        ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''3) Remove the tty from /etc/ppp/peers/simyo''' (replace simyo with your provider).&lt;br /&gt;
&lt;br /&gt;
'''4) Use a ppp start script like this:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat /usr/local/bin/ppp-start&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
id=$(date +%s)&lt;br /&gt;
TTY=$(dbus-send --system --print-reply --type=method_call --dest=org.pyneo.muxer /org/pyneo/Muxer org.freesmartphone.GSM.MUX.AllocChannel string:$id | grep string | cut -d \&amp;quot; -f 2)&lt;br /&gt;
logger -t ppp-start &amp;quot;using tty $TTY&amp;quot;&lt;br /&gt;
pppd $TTY call simyo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5) Use &amp;quot;killall pppd&amp;quot; to terminate the PPP connection.'''&lt;br /&gt;
&lt;br /&gt;
= Option 3: Without GSM multiplexing and without a GUI =&lt;br /&gt;
&lt;br /&gt;
The program that implements PPP on Linux is [[pppd]], which we need to configure and run to get a connection. When that is working, we can configure pppd to wait until it's needed before it connects, and to disconnect if the connection becomes idle. Further, we can start pppd in the background during the boot process.&lt;br /&gt;
&lt;br /&gt;
== Configuring pppd for manual connections ==&lt;br /&gt;
&lt;br /&gt;
You'll need /etc/ppp/peers/gprs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Uncomment the following if you want some debug.&lt;br /&gt;
#debug&lt;br /&gt;
#logfile /var/volatile/log/pppd.log&lt;br /&gt;
lock&lt;br /&gt;
/dev/ttySAC0 115200&lt;br /&gt;
crtscts &lt;br /&gt;
connect /etc/ppp/gprs-connect-chat&lt;br /&gt;
disconnect /etc/ppp/gprs-disconnect-chat&lt;br /&gt;
hide-password&lt;br /&gt;
usepeerdns&lt;br /&gt;
ipcp-accept-local&lt;br /&gt;
noauth&lt;br /&gt;
noipdefault&lt;br /&gt;
novj&lt;br /&gt;
novjccomp&lt;br /&gt;
defaultroute&lt;br /&gt;
replacedefaultroute&lt;br /&gt;
# Reopen the connection if it fails, pausing for a while.&lt;br /&gt;
persist&lt;br /&gt;
holdoff 15&lt;br /&gt;
# Check the line every 20 seconds and presume&lt;br /&gt;
# the peer is gone if no replay for 4 times.&lt;br /&gt;
lcp-echo-interval 20&lt;br /&gt;
lcp-echo-failure 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depending on the APN, you may need password authentication using CHAP or PAP. In /etc/ppp/pap-secrets you can add the following default line for &amp;quot;password-less&amp;quot; connections:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# client        server  secret                  IP addresses&lt;br /&gt;
*               *       &amp;quot;&amp;quot;                      *&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For CHAP, lines in /etc/ppp/chap-secrets are used. For PAP, the lines are in /etc/ppp/pap-secrets. The client should match the &amp;quot;user&amp;quot; option in pppd the config file (below). You can use * to mean any here, but the option user &amp;quot;&amp;quot; doesn't mean empty!&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Secrets for authentication using CHAP&lt;br /&gt;
# client        server  secret                  IP addresses&lt;br /&gt;
&amp;quot;user&amp;quot;         *       &amp;quot;password&amp;quot;                  *  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this you need the following options in /etc/ppp/peers/gprs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# username to use for authentication, should match &amp;quot;client&amp;quot; in /etc/ppp/{chap,pap}-secrets&lt;br /&gt;
user &amp;quot;user&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== gprs-connect-chat, version 1 ==&lt;br /&gt;
&lt;br /&gt;
You'll also need /etc/ppp/gprs-connect-chat (needs &amp;quot;chmod +x&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
exec chat -v -S -s\&lt;br /&gt;
        TIMEOUT 15\&lt;br /&gt;
        &amp;quot;&amp;quot; &amp;quot;\K\K\K\d+++ATH&amp;quot;\&lt;br /&gt;
        OK-AT-OK ATZ\&lt;br /&gt;
        OK ATE1\&lt;br /&gt;
        ABORT BUSY\&lt;br /&gt;
        ABORT DELAYED\&lt;br /&gt;
        ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
        ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
        ABORT VOICE\&lt;br /&gt;
        ABORT ERROR\&lt;br /&gt;
        ABORT RINGING\&lt;br /&gt;
        TIMEOUT 60\&lt;br /&gt;
        OK AT+CFUN=1\&lt;br /&gt;
        OK AT+COPS\&lt;br /&gt;
        OK AT+CGDCONT=1,\&amp;quot;IP\&amp;quot;,\&amp;quot;internet\&amp;quot;\&lt;br /&gt;
        OK ATD*99#\&lt;br /&gt;
        CONNECT /n/d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;(08/18/08) Note:&amp;lt;/b&amp;gt; I needed to add the command &amp;quot;AT+CMOD=2&amp;quot; (formatted as &amp;quot;OK AT+CMOD=2\&amp;quot; without the quotes) in order to get GPRS working with the above script (otherwise it would ERROR on the CFUN, COPS, or the ATD if the other two were removed).  I have T-Mobile (US) with the $5.99 &amp;quot;tzones&amp;quot; addon, which works with Minimo as it supports HTTP proxy setups.&lt;br /&gt;
&lt;br /&gt;
== gprs-connect-chat, version 2 ==&lt;br /&gt;
&lt;br /&gt;
Update: On my freerunner the first AT+CFUN=1 always generated ERROR. I managed to get gprs work by using the following script from http://lists.openmoko.org/pipermail/community/2008-July/023246.html:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
exec /usr/sbin/chat -v \&lt;br /&gt;
        TIMEOUT 10 \&lt;br /&gt;
        OK-AT-'' ''\&lt;br /&gt;
        ABORT BUSY\&lt;br /&gt;
        ABORT DELAYED\&lt;br /&gt;
        ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
        ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
        ABORT VOICE\&lt;br /&gt;
        ABORT ERROR\&lt;br /&gt;
        ABORT RINGING\&lt;br /&gt;
        TIMEOUT 30 \&lt;br /&gt;
        '' ATZ\&lt;br /&gt;
        OK ATE1\&lt;br /&gt;
        OK AT+CFUN=1\&lt;br /&gt;
        ERROR AT+CPIN=\&amp;quot;XXXX\&amp;quot;\         &amp;lt;&amp;lt; USE YOUR OWN&lt;br /&gt;
        OK AT+COPS\&lt;br /&gt;
        OK AT+CGDCONT=1,\&amp;quot;IP\&amp;quot;,\&amp;quot;internet\&amp;quot;\&lt;br /&gt;
        OK 'ATDT*99***1#'\&lt;br /&gt;
        CONNECT ''&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The error seems to vary a bit, sometimes it's before AT+COPS, sometimes as above. I have two versions of the gprs-connect-chat, which I vary between depending on which is needed. Or is there a way to specify two acceptable answers like {OK,ERROR}?&lt;br /&gt;
&lt;br /&gt;
You will need to adjust the APN name &amp;quot;internet&amp;quot; in at+cgdcont line and possibly the phone number in the ATD line to match what your network operator provides. See below in the table &amp;quot;Some APN names for reference&amp;quot; for the right settings for your operator.&lt;br /&gt;
&lt;br /&gt;
== gprs-disconnect-chat ==&lt;br /&gt;
&lt;br /&gt;
Also good to have is /etc/ppp/gprs-disconnect-chat (needs &amp;quot;chmod +x&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
/usr/sbin/chat -v\&lt;br /&gt;
	ABORT OK\&lt;br /&gt;
	ABORT BUSY\&lt;br /&gt;
	ABORT DELAYED\&lt;br /&gt;
	ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
	ABORT &amp;quot;NO CARRIER&amp;quot;\&lt;br /&gt;
	ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
	ABORT VOICE\&lt;br /&gt;
	ABORT ERROR\&lt;br /&gt;
	ABORT RINGING\&lt;br /&gt;
	TIMEOUT 12\&lt;br /&gt;
	&amp;quot;&amp;quot; &amp;quot;\K\K\K\d+++ATH&amp;quot;\&lt;br /&gt;
	&amp;quot;NO CARRIER-AT-OK&amp;quot; &amp;quot;\c&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Starting PPP connection ==&lt;br /&gt;
&lt;br /&gt;
The following script can be used to start the ppp connection. First it stops gsmd because gsmd may put the phone in a unknown state. It then turns on the power to the phone, modifies the ownership, and then creates a tty connection. Finally it starts [[pppd]] with the gprs settings.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/init.d/gsmd stop&lt;br /&gt;
echo &amp;quot;1&amp;quot; &amp;gt; /sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
chown uucp.uucp /dev/ttySAC0&lt;br /&gt;
stty -F /dev/ttySAC0 crtscts&lt;br /&gt;
pppd call gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are having problems connecting ensure you have a good GSM signal and replace the last line with the below line. This will allow you to see the details of the connection on the console. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pppd debug nodetach call gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The config above will establish a persistant link over gprs. The battery will run low in less than an hour. See an example for an on-demand config below.&lt;br /&gt;
&lt;br /&gt;
=== Resolve.conf issues ===&lt;br /&gt;
&lt;br /&gt;
The latest build seems to have solved the following issue, it should be automatically updated by pppd.&lt;br /&gt;
&lt;br /&gt;
If you expeience DNS issues after connecting to DNS you may need a proper /etc/resolv.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln -sf /var/run/resolv.conf /etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If needed put your nameserver for usb-net into /var/run/resolv.conf, not in /etc.&lt;br /&gt;
&lt;br /&gt;
The image does not set a correct resolv.conf. i do so with an &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo  nameserver 192.168.0.201 &amp;gt; /var/run/resolv.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in the right place. because a post-up in /etc/network/interfaces is not supported i do that in /etc/network/if-up.d/08setupdns&lt;br /&gt;
&lt;br /&gt;
another problem is pppd's /etc/ppp/ip-down.d/92removedns which does not properly remove the link when shuting down ppp. my fix is this script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
ACTUALCONF=/var/run/resolv.conf&lt;br /&gt;
PPPCONF=/var/run/ppp/resolv.conf&lt;br /&gt;
if [ -f $PPPCONF ] ; then&lt;br /&gt;
        if [ -f $ACTUALCONF ] ; then&lt;br /&gt;
                if [ ! -h $ACTUALCONF -o ! &amp;quot;`readlink $ACTUALCONF 2&amp;gt;&amp;amp;1`&amp;quot; = &amp;quot;$PPPCONF&amp;quot; ] ; then&lt;br /&gt;
                        mv $ACTUALCONF $ACTUALCONF.ppporig&lt;br /&gt;
                fi&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        ln -sf $PPPCONF $ACTUALCONF&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Some APN names for reference ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Country&lt;br /&gt;
! Carrier&lt;br /&gt;
! Plan&lt;br /&gt;
! APN/Phone&lt;br /&gt;
! user/password if required&lt;br /&gt;
! Working pppd scripts&lt;br /&gt;
|-&lt;br /&gt;
| Australia || Virgin || Any || VirginInternet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Australia || Vodafone || Any || vfinternet.au || ||&lt;br /&gt;
|-&lt;br /&gt;
| Canada || Fido || Any, behind NAT || internet.fido.ca || fido/fido || mdbus -s org.freesmartphone.frameworkd /org/freesmartphone/GSM/Device&lt;br /&gt;
org.freesmartphone.GSM.PDP.ActivateContext internet.fido.ca fido&lt;br /&gt;
fido&lt;br /&gt;
|-&lt;br /&gt;
| Canada || Rogers || Any, behind NAT || internet.com || wapuser1/wap || nameserver 207.181.101.4&lt;br /&gt;
|-&lt;br /&gt;
| Denmark || Telmore || || wap || must be empty ||&lt;br /&gt;
|-&lt;br /&gt;
| Estonia || Elisa || Any, behind NAT || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Estonia || EMT || Any, behind NAT || internet.emt.ee || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Saunalahti || Any || internet.saunalahti || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Sonera   || Any, behind NAT || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Sonera   || Any, public IP  || prointernet || ||&lt;br /&gt;
|-&lt;br /&gt;
| France || SFR || 10.x.x.x? || websfr || || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || SFR || 10.x.x.x? || wapsfr&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;|| || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || Orange || ??? || orange.fr || || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || Bouyges Telecom || Web &amp;amp; Mail || mmsbouygtel.com || || Work great under FSO. Just follow instructions at http://wiki.openmoko.org/wiki/GPRS_FSO. Proxy:  62.201.129.225:8080. For emails, only ports 25 (smtp) and 110 (pop) are allowed. (They use a transparent proxy ...)&lt;br /&gt;
|-&lt;br /&gt;
| Germany || E-Plus || BASE (and others?) || internet.eplus.de || eplus gprs || [[Base pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| Germany || E-Plus || Simyo || internet.eplus.de || simyo simyo || [[simyo pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| Germany || T-Mobile ||  || internet.t-mobile || ||&lt;br /&gt;
|-&lt;br /&gt;
| Germany || Vodafone || Any, behind NAT || web.vodafone.de || ||&lt;br /&gt;
|-&lt;br /&gt;
| India || AirTel || MobileOffice || airtelgprs.com || ||&lt;br /&gt;
|- &lt;br /&gt;
| Italy   || Wind     || Superinternet, public IP  || internet.wind / *99# || wind/wind (any string) || [[Wind pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| Netherlands || Vodafone || Any || live.vodafone.com / *99***1#||  || [[Vodafone pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| New Zealand || Vodafone || Any || live.vodafone.com / *99***2#||  ||&lt;br /&gt;
|-&lt;br /&gt;
| Norway || Netcom || Any || internet.netcom.no || ||&lt;br /&gt;
|-&lt;br /&gt;
| Norway || OneCall || Any || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Norway || Telenor || Any || telenor || ||&lt;br /&gt;
|-&lt;br /&gt;
| Spain   || Simyo     || Any  || gprs-service.com / *99# ||  ||&lt;br /&gt;
|-&lt;br /&gt;
| Sweden || Parlino ||  || internet.parlino.se || || [[GPRS_FSO|Works with FSO]]&lt;br /&gt;
|-&lt;br /&gt;
| Switzerland || Swisscom || e.g. Natel Basic Liberty, behind NAT || gprs.swisscom.ch || ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || T-Mobile|| || general.t-mobile.uk || ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || Virgin || || goto.virginmobile.uk || user ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || [http://www.filesaveas.com/gprs.html other providers] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || AT&amp;amp;T || Unlimited data plan (attached to pay-as-you-go voice plan) || wap.cingular / *99***1# || WAP@CINGULARGPRS.COM/CINGULAR1 ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || Cincinnati Bell Wireless || || wap.gocbw.com ||  cbw  ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || Cingular (AT&amp;amp;T) || Less than full internet || wap.cingular / may require *99***1# || ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || T-mobile || Anything less than full internet || wap.voicestream.com ||  || Need to set proxy to 216.155.165.50  T-Mobile docs say &amp;quot;216.155.165.050&amp;quot;.  050 octal = 40 decimal and will *not* work.  I think port is 8080 or 9100.  No luck w/ pppd scripts.  GPRS_FSO directions work under FSO though.&lt;br /&gt;
|- &lt;br /&gt;
| USA || T-mobile || Regular internet plan || internet2.voicestream.com || || [[T-Mobile pppd scripts]]&lt;br /&gt;
|- &lt;br /&gt;
| USA || T-mobile || &amp;quot;VPN&amp;quot; internet plan || internet3.voicestream.com || ||&lt;br /&gt;
|- &lt;br /&gt;
| Venezuela || Digitel || Pre- y post-pago || gprsweb.digitel.ve || ||&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[1] connected through a WAP proxy (slower, but the only way to access Vodafone live! and SFR portal)&lt;br /&gt;
&lt;br /&gt;
[2] Unless stated otherwise the phone number to call is &amp;quot;*99#&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Also see Ross Barkman's page for a detailed list of more [http://www.taniwha.org.uk/gprs.html global GPRS providers APN details]&lt;br /&gt;
&lt;br /&gt;
== Starting pppd automatically ==&lt;br /&gt;
&lt;br /&gt;
Once you have finished debugging your gprs-connect-chat and gprs options files, you may wish to automatically connect whenever needed and hang up when finished.  Make sure you understand the impact of this change to your carrier plan billing.  This is not recommended unless you have a large-use or unlimited data plan.  These scripts do NOT prompt you before connecting.&lt;br /&gt;
&lt;br /&gt;
=== On-demand connection settings ===&lt;br /&gt;
&lt;br /&gt;
Additional settings are needed if you want the actual connection to be up only while there is traffic. In the 'gprs' file above, insert the following, making sure 'nodetach' is commented out.  If 'nodetach' is on, the boot process will stop when it starts pppd. Also remove the option 'persist' mentioned above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Wait until needed before connecting&lt;br /&gt;
demand&lt;br /&gt;
&lt;br /&gt;
# Disconnect if idle for given amount of seconds&lt;br /&gt;
idle 20&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Start on boot (method 1) ===&lt;br /&gt;
&lt;br /&gt;
Add the following definition to /etc/network/interfaces:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auto ppp0&lt;br /&gt;
iface ppp0 inet ppp&lt;br /&gt;
        provider gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That should be it. Now you can use 'ifup ppp0' and 'ifdown ppp0' manually too.&lt;br /&gt;
&lt;br /&gt;
=== Start on boot (method 2) ===&lt;br /&gt;
&lt;br /&gt;
Create the following file as /etc/ppp/ppp_on_boot (needs chmod +x).  The /etc/init.d/ppp script will call it to set up the daemon.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
#&lt;br /&gt;
#   Rename this file to ppp_on_boot and pppd will be fired up as&lt;br /&gt;
#   soon as the system comes up, connecting to `provider'.&lt;br /&gt;
#&lt;br /&gt;
#   If you also make this file executable, and replace the first line&lt;br /&gt;
#   with just &amp;quot;#!/bin/sh&amp;quot;, the commands below will be executed instead.&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# The location of the ppp daemon itself (shouldn't need to be changed)&lt;br /&gt;
PPPD=/usr/sbin/pppd&lt;br /&gt;
&lt;br /&gt;
# The default provider to connect to&lt;br /&gt;
$PPPD call gprs&lt;br /&gt;
&lt;br /&gt;
# Additional connections, which would just use settings from&lt;br /&gt;
# /etc/ppp/options.&amp;lt;tty&amp;gt;&lt;br /&gt;
#$PPPD ttyS0&lt;br /&gt;
#$PPPD ttyS1&lt;br /&gt;
#$PPPD ttyS2&lt;br /&gt;
#$PPPD ttyS3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, you need to add the /etc/init.d/ppp script to the init process by creating symbolic links from the appropriate directories.  I chose the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/rc0.d/K25ppp&lt;br /&gt;
/etc/rc1.d/K45ppp&lt;br /&gt;
/etc/rc2.d/S45ppp&lt;br /&gt;
/etc/rc3.d/S45ppp&lt;br /&gt;
/etc/rc4.d/S45ppp&lt;br /&gt;
/etc/rc5.d/S45ppp&lt;br /&gt;
/etc/rc6.d/K25ppp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Sharing the GPRS connection with a computer =&lt;br /&gt;
&lt;br /&gt;
See [[Tethering]]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[pppd]]&lt;br /&gt;
* [[Manually using GSM]]&lt;br /&gt;
* [[Manually using Bluetooth]]&lt;br /&gt;
* [[GPRS FSO]]&lt;br /&gt;
{{Languages|Manually_using_GPRS}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Documentation]]&lt;br /&gt;
[[Category:Application Developer]]&lt;br /&gt;
[[Category:Guides]]&lt;br /&gt;
[[Category:Networking]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Manually_using_GPRS</id>
		<title>Manually using GPRS</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Manually_using_GPRS"/>
				<updated>2008-08-29T23:03:24Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: /* Option 1: With GSM multiplexing and with a GUI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The GPRS connection is made using the PPP protocol to a server identified by an &amp;quot;APN&amp;quot; at the network operator.   Once a GPRS connection is made, it is possible to [[#Sharing_the_GPRS_connection_with_a_computer|share that connection with a connected computer]], allowing that computer to access the internet through the phone!&lt;br /&gt;
&lt;br /&gt;
= Option 1: With GSM multiplexing and with a GUI =&lt;br /&gt;
&lt;br /&gt;
{{note|The following does not appear to work if you have a SIM PIN.  The dialog to enter your SIM PIN never pops up and the GSM multiplexing daemon continuous loops and runs into a SIM PIN error.}}&lt;br /&gt;
&lt;br /&gt;
GSM multiplexing allows both a GPRS connection and a phone call to be handled at the same time.  By default, [[Om 2008.8]] does not multiplex the GSM device.  The [[FSO]] distribution, however, introduces GSM multiplexing with a new service and a DBus API to that service.  The instructions to modify the OM2008.8 distribution to make use of GSM multiplexing and allow you to start GPRS from a GUI can be found here: http://freeyourphone.de/portal_v1/viewtopic.php?f=21&amp;amp;t=295&lt;br /&gt;
&lt;br /&gt;
== gsm0710muxd from Angstrom Repositories ==&lt;br /&gt;
&lt;br /&gt;
However, using those instructions, you will encounter a few hurdles.  Do not use the gsm0710muxd that is found in the OM2008.8 repository.  It will not work, instead, use the one from the Angstrom Repositories (see [[Repositories]]).&lt;br /&gt;
&lt;br /&gt;
Alternatively, if you simply want to download all the packages, you can get them from here:&lt;br /&gt;
&lt;br /&gt;
http://www.angstrom-distribution.org/feeds/2008/ipk/glibc/armv4t/base/gsm0710muxd_0.9.1+gitr6fecc78198dd821bbe29efd096bd8fecd855179d-r0_armv4t.ipk&lt;br /&gt;
&lt;br /&gt;
and the dependencies from here:&lt;br /&gt;
&lt;br /&gt;
http://www.angstrom-distribution.org/repo/?action=details&amp;amp;pnm=gsm0710muxd&lt;br /&gt;
&lt;br /&gt;
Make sure that you install the armv4t versions of all packages.&lt;br /&gt;
&lt;br /&gt;
The [[#Some APN names for reference|APN Reference]] table may come in handy when you are looking for the required network specific information.&lt;br /&gt;
&lt;br /&gt;
Once you follow through with all the instructions, you will notice that the &amp;quot;Services&amp;quot; GUI will crash.  This has to do with this bug: http://docs.openmoko.org/trac/ticket/1718&lt;br /&gt;
&lt;br /&gt;
The fix is to change the &amp;quot;init()&amp;quot; call on line 82 of /usr/lib/python2.5/site-packages/gtk-2.0/gtk/_init_.py  to &amp;quot;_init()&amp;quot; (add an underscore).&lt;br /&gt;
&lt;br /&gt;
You may also have to modify your /etc/resolv.conf file and add the nameserver (DNS Server) of your service provider if you have DNS resolution problems.&lt;br /&gt;
&lt;br /&gt;
Then, hopefully, you should be up in running with GPRS and a GUI to turn it on and off.&lt;br /&gt;
&lt;br /&gt;
= Option 2: With GSM multiplexing and without a GUI =&lt;br /&gt;
&lt;br /&gt;
'''1) In /etc/rc5.d start gsm0710muxd before gsmd:'''&lt;br /&gt;
* S34gsm0710muxd -&amp;gt; ../init.d/gsm0710muxd&lt;br /&gt;
* S35gsmd -&amp;gt; ../init.d/gsmd&lt;br /&gt;
&lt;br /&gt;
'''2) Modify S35gsmd so it can start either with or without gsm0710muxd:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
    start)&lt;br /&gt;
        if [ &amp;quot;$(pidof gsm0710muxd)&amp;quot; ] ; then&lt;br /&gt;
                id=$(date +%s)&lt;br /&gt;
                GSM_DEV=$(dbus-send --system --print-reply --type=method_call --dest=org.pyneo.muxer /org/pyneo/Muxer org.freesmartphone.GSM.MUX.AllocChannel string:$id | grep string | cut -d \&amp;quot; -f 2)&lt;br /&gt;
        else&lt;br /&gt;
                [ -n &amp;quot;$GSM_POW&amp;quot; ] &amp;amp;&amp;amp; ( echo &amp;quot;0&amp;quot; &amp;gt;$GSM_POW; sleep 1 )&lt;br /&gt;
                [ -n &amp;quot;$GSM_POW&amp;quot; ] &amp;amp;&amp;amp; ( echo &amp;quot;1&amp;quot; &amp;gt;$GSM_POW; sleep 1 )&lt;br /&gt;
                [ -n &amp;quot;$GSM_RES&amp;quot; ] &amp;amp;&amp;amp; ( echo &amp;quot;1&amp;quot; &amp;gt;$GSM_RES; sleep 1 )&lt;br /&gt;
                [ -n &amp;quot;$GSM_RES&amp;quot; ] &amp;amp;&amp;amp; ( echo &amp;quot;0&amp;quot; &amp;gt;$GSM_RES; sleep 2 )&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        if [ ! &amp;quot;$GSM_DEV&amp;quot; ] ; then&lt;br /&gt;
                echo &amp;quot;GSM_DEV was not set&amp;quot;&lt;br /&gt;
                exit 1&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        echo -n &amp;quot;Starting GSM daemon: &amp;quot;&lt;br /&gt;
        start-stop-daemon -S -x /usr/sbin/gsmd -- gsmd -p $GSM_DEV $GSMD_OPTS -d -l /var/log/gsmd&lt;br /&gt;
&lt;br /&gt;
        if [ $? = 0 ]; then&lt;br /&gt;
            echo &amp;quot;gsmd.&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
            echo &amp;quot;(failed.)&amp;quot;&lt;br /&gt;
        fi&lt;br /&gt;
        ;;&lt;br /&gt;
    stop)&lt;br /&gt;
        if [ ! &amp;quot;$(pidof gsm0710muxd)&amp;quot; ] ; then&lt;br /&gt;
                [ -n &amp;quot;$GSM_POW&amp;quot; ] &amp;amp;&amp;amp; echo &amp;quot;0&amp;quot; &amp;gt;$GSM_POW&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        echo -n &amp;quot;Stopping GSM daemon: &amp;quot;&lt;br /&gt;
        ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''3) Remove the tty from /etc/ppp/peers/simyo''' (replace simyo with your provider).&lt;br /&gt;
&lt;br /&gt;
'''4) Use a ppp start script like this:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat /usr/local/bin/ppp-start&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
id=$(date +%s)&lt;br /&gt;
TTY=$(dbus-send --system --print-reply --type=method_call --dest=org.pyneo.muxer /org/pyneo/Muxer org.freesmartphone.GSM.MUX.AllocChannel string:$id | grep string | cut -d \&amp;quot; -f 2)&lt;br /&gt;
logger -t ppp-start &amp;quot;using tty $TTY&amp;quot;&lt;br /&gt;
pppd $TTY call simyo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5) Use &amp;quot;killall pppd&amp;quot; to terminate the PPP connection.'''&lt;br /&gt;
&lt;br /&gt;
= Option 3: Without GSM multiplexing and without a GUI =&lt;br /&gt;
&lt;br /&gt;
The program that implements PPP on Linux is [[pppd]], which we need to configure and run to get a connection. When that is working, we can configure pppd to wait until it's needed before it connects, and to disconnect if the connection becomes idle. Further, we can start pppd in the background during the boot process.&lt;br /&gt;
&lt;br /&gt;
== Configuring pppd for manual connections ==&lt;br /&gt;
&lt;br /&gt;
You'll need /etc/ppp/peers/gprs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Uncomment the following if you want some debug.&lt;br /&gt;
#debug&lt;br /&gt;
#logfile /var/volatile/log/pppd.log&lt;br /&gt;
lock&lt;br /&gt;
/dev/ttySAC0 115200&lt;br /&gt;
crtscts &lt;br /&gt;
connect /etc/ppp/gprs-connect-chat&lt;br /&gt;
disconnect /etc/ppp/gprs-disconnect-chat&lt;br /&gt;
hide-password&lt;br /&gt;
usepeerdns&lt;br /&gt;
ipcp-accept-local&lt;br /&gt;
noauth&lt;br /&gt;
noipdefault&lt;br /&gt;
novj&lt;br /&gt;
novjccomp&lt;br /&gt;
defaultroute&lt;br /&gt;
replacedefaultroute&lt;br /&gt;
# Reopen the connection if it fails, pausing for a while.&lt;br /&gt;
persist&lt;br /&gt;
holdoff 15&lt;br /&gt;
# Check the line every 20 seconds and presume&lt;br /&gt;
# the peer is gone if no replay for 4 times.&lt;br /&gt;
lcp-echo-interval 20&lt;br /&gt;
lcp-echo-failure 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depending on the APN, you may need password authentication using CHAP or PAP. In /etc/ppp/pap-secrets you can add the following default line for &amp;quot;password-less&amp;quot; connections:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# client        server  secret                  IP addresses&lt;br /&gt;
*               *       &amp;quot;&amp;quot;                      *&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For CHAP, lines in /etc/ppp/chap-secrets are used. For PAP, the lines are in /etc/ppp/pap-secrets. The client should match the &amp;quot;user&amp;quot; option in pppd the config file (below). You can use * to mean any here, but the option user &amp;quot;&amp;quot; doesn't mean empty!&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Secrets for authentication using CHAP&lt;br /&gt;
# client        server  secret                  IP addresses&lt;br /&gt;
&amp;quot;user&amp;quot;         *       &amp;quot;password&amp;quot;                  *  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this you need the following options in /etc/ppp/peers/gprs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# username to use for authentication, should match &amp;quot;client&amp;quot; in /etc/ppp/{chap,pap}-secrets&lt;br /&gt;
user &amp;quot;user&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== gprs-connect-chat, version 1 ==&lt;br /&gt;
&lt;br /&gt;
You'll also need /etc/ppp/gprs-connect-chat (needs &amp;quot;chmod +x&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
exec chat -v -S -s\&lt;br /&gt;
        TIMEOUT 15\&lt;br /&gt;
        &amp;quot;&amp;quot; &amp;quot;\K\K\K\d+++ATH&amp;quot;\&lt;br /&gt;
        OK-AT-OK ATZ\&lt;br /&gt;
        OK ATE1\&lt;br /&gt;
        ABORT BUSY\&lt;br /&gt;
        ABORT DELAYED\&lt;br /&gt;
        ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
        ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
        ABORT VOICE\&lt;br /&gt;
        ABORT ERROR\&lt;br /&gt;
        ABORT RINGING\&lt;br /&gt;
        TIMEOUT 60\&lt;br /&gt;
        OK AT+CFUN=1\&lt;br /&gt;
        OK AT+COPS\&lt;br /&gt;
        OK AT+CGDCONT=1,\&amp;quot;IP\&amp;quot;,\&amp;quot;internet\&amp;quot;\&lt;br /&gt;
        OK ATD*99#\&lt;br /&gt;
        CONNECT /n/d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;(08/18/08) Note:&amp;lt;/b&amp;gt; I needed to add the command &amp;quot;AT+CMOD=2&amp;quot; (formatted as &amp;quot;OK AT+CMOD=2\&amp;quot; without the quotes) in order to get GPRS working with the above script (otherwise it would ERROR on the CFUN, COPS, or the ATD if the other two were removed).  I have T-Mobile (US) with the $5.99 &amp;quot;tzones&amp;quot; addon, which works with Minimo as it supports HTTP proxy setups.&lt;br /&gt;
&lt;br /&gt;
== gprs-connect-chat, version 2 ==&lt;br /&gt;
&lt;br /&gt;
Update: On my freerunner the first AT+CFUN=1 always generated ERROR. I managed to get gprs work by using the following script from http://lists.openmoko.org/pipermail/community/2008-July/023246.html:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
exec /usr/sbin/chat -v \&lt;br /&gt;
        TIMEOUT 10 \&lt;br /&gt;
        OK-AT-'' ''\&lt;br /&gt;
        ABORT BUSY\&lt;br /&gt;
        ABORT DELAYED\&lt;br /&gt;
        ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
        ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
        ABORT VOICE\&lt;br /&gt;
        ABORT ERROR\&lt;br /&gt;
        ABORT RINGING\&lt;br /&gt;
        TIMEOUT 30 \&lt;br /&gt;
        '' ATZ\&lt;br /&gt;
        OK ATE1\&lt;br /&gt;
        OK AT+CFUN=1\&lt;br /&gt;
        ERROR AT+CPIN=\&amp;quot;XXXX\&amp;quot;\         &amp;lt;&amp;lt; USE YOUR OWN&lt;br /&gt;
        OK AT+COPS\&lt;br /&gt;
        OK AT+CGDCONT=1,\&amp;quot;IP\&amp;quot;,\&amp;quot;internet\&amp;quot;\&lt;br /&gt;
        OK 'ATDT*99***1#'\&lt;br /&gt;
        CONNECT ''&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The error seems to vary a bit, sometimes it's before AT+COPS, sometimes as above. I have two versions of the gprs-connect-chat, which I vary between depending on which is needed. Or is there a way to specify two acceptable answers like {OK,ERROR}?&lt;br /&gt;
&lt;br /&gt;
You will need to adjust the APN name &amp;quot;internet&amp;quot; in at+cgdcont line and possibly the phone number in the ATD line to match what your network operator provides. See below in the table &amp;quot;Some APN names for reference&amp;quot; for the right settings for your operator.&lt;br /&gt;
&lt;br /&gt;
== gprs-disconnect-chat ==&lt;br /&gt;
&lt;br /&gt;
Also good to have is /etc/ppp/gprs-disconnect-chat (needs &amp;quot;chmod +x&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
/usr/sbin/chat -v\&lt;br /&gt;
	ABORT OK\&lt;br /&gt;
	ABORT BUSY\&lt;br /&gt;
	ABORT DELAYED\&lt;br /&gt;
	ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
	ABORT &amp;quot;NO CARRIER&amp;quot;\&lt;br /&gt;
	ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
	ABORT VOICE\&lt;br /&gt;
	ABORT ERROR\&lt;br /&gt;
	ABORT RINGING\&lt;br /&gt;
	TIMEOUT 12\&lt;br /&gt;
	&amp;quot;&amp;quot; &amp;quot;\K\K\K\d+++ATH&amp;quot;\&lt;br /&gt;
	&amp;quot;NO CARRIER-AT-OK&amp;quot; &amp;quot;\c&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Starting PPP connection ==&lt;br /&gt;
&lt;br /&gt;
The following script can be used to start the ppp connection. First it stops gsmd because gsmd may put the phone in a unknown state. It then turns on the power to the phone, modifies the ownership, and then creates a tty connection. Finally it starts [[pppd]] with the gprs settings.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/init.d/gsmd stop&lt;br /&gt;
echo &amp;quot;1&amp;quot; &amp;gt; /sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
chown uucp.uucp /dev/ttySAC0&lt;br /&gt;
stty -F /dev/ttySAC0 crtscts&lt;br /&gt;
pppd call gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are having problems connecting ensure you have a good GSM signal and replace the last line with the below line. This will allow you to see the details of the connection on the console. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pppd debug nodetach call gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The config above will establish a persistant link over gprs. The battery will run low in less than an hour. See an example for an on-demand config below.&lt;br /&gt;
&lt;br /&gt;
=== Resolve.conf issues ===&lt;br /&gt;
&lt;br /&gt;
The latest build seems to have solved the following issue, it should be automatically updated by pppd.&lt;br /&gt;
&lt;br /&gt;
If you expeience DNS issues after connecting to DNS you may need a proper /etc/resolv.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln -sf /var/run/resolv.conf /etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If needed put your nameserver for usb-net into /var/run/resolv.conf, not in /etc.&lt;br /&gt;
&lt;br /&gt;
The image does not set a correct resolv.conf. i do so with an &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo  nameserver 192.168.0.201 &amp;gt; /var/run/resolv.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in the right place. because a post-up in /etc/network/interfaces is not supported i do that in /etc/network/if-up.d/08setupdns&lt;br /&gt;
&lt;br /&gt;
another problem is pppd's /etc/ppp/ip-down.d/92removedns which does not properly remove the link when shuting down ppp. my fix is this script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
ACTUALCONF=/var/run/resolv.conf&lt;br /&gt;
PPPCONF=/var/run/ppp/resolv.conf&lt;br /&gt;
if [ -f $PPPCONF ] ; then&lt;br /&gt;
        if [ -f $ACTUALCONF ] ; then&lt;br /&gt;
                if [ ! -h $ACTUALCONF -o ! &amp;quot;`readlink $ACTUALCONF 2&amp;gt;&amp;amp;1`&amp;quot; = &amp;quot;$PPPCONF&amp;quot; ] ; then&lt;br /&gt;
                        mv $ACTUALCONF $ACTUALCONF.ppporig&lt;br /&gt;
                fi&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        ln -sf $PPPCONF $ACTUALCONF&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Some APN names for reference ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Country&lt;br /&gt;
! Carrier&lt;br /&gt;
! Plan&lt;br /&gt;
! APN/Phone&lt;br /&gt;
! user/password if required&lt;br /&gt;
! Working pppd scripts&lt;br /&gt;
|-&lt;br /&gt;
| Australia || Virgin || Any || VirginInternet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Australia || Vodafone || Any || vfinternet.au || ||&lt;br /&gt;
|-&lt;br /&gt;
| Canada || Fido || Any, behind NAT || internet.fido.ca || fido/fido || mdbus -s org.freesmartphone.frameworkd /org/freesmartphone/GSM/Device&lt;br /&gt;
org.freesmartphone.GSM.PDP.ActivateContext internet.fido.ca fido&lt;br /&gt;
fido&lt;br /&gt;
|-&lt;br /&gt;
| Canada || Rogers || Any, behind NAT || internet.com || wapuser1/wap || nameserver 207.181.101.4&lt;br /&gt;
|-&lt;br /&gt;
| Denmark || Telmore || || wap || must be empty ||&lt;br /&gt;
|-&lt;br /&gt;
| Estonia || Elisa || Any, behind NAT || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Estonia || EMT || Any, behind NAT || internet.emt.ee || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Saunalahti || Any || internet.saunalahti || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Sonera   || Any, behind NAT || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Sonera   || Any, public IP  || prointernet || ||&lt;br /&gt;
|-&lt;br /&gt;
| France || SFR || 10.x.x.x? || websfr || || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || SFR || 10.x.x.x? || wapsfr&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;|| || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || Orange || ??? || orange.fr || || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || Bouyges Telecom || Web &amp;amp; Mail || mmsbouygtel.com || || Work great under FSO. Just follow instructions at http://wiki.openmoko.org/wiki/GPRS_FSO. Proxy:  62.201.129.225:8080. For emails, only ports 25 (smtp) and 110 (pop) are allowed. (They use a transparent proxy ...)&lt;br /&gt;
|-&lt;br /&gt;
| Germany || E-Plus || BASE (and others?) || internet.eplus.de || eplus gprs || [[Base pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| Germany || E-Plus || Simyo || internet.eplus.de || simyo simyo || [[simyo pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| Germany || T-Mobile ||  || internet.t-mobile || ||&lt;br /&gt;
|-&lt;br /&gt;
| Germany || Vodafone || Any, behind NAT || web.vodafone.de || ||&lt;br /&gt;
|-&lt;br /&gt;
| India || AirTel || MobileOffice || airtelgprs.com || ||&lt;br /&gt;
|- &lt;br /&gt;
| Italy   || Wind     || Superinternet, public IP  || internet.wind / *99# || wind/wind (any string) || [[Wind pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| Netherlands || Vodafone || Any || live.vodafone.com / *99***1#||  || [[Vodafone pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| New Zealand || Vodafone || Any || live.vodafone.com / *99***2#||  ||&lt;br /&gt;
|-&lt;br /&gt;
| Norway || Netcom || Any || internet.netcom.no || ||&lt;br /&gt;
|-&lt;br /&gt;
| Norway || OneCall || Any || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Norway || Telenor || Any || telenor || ||&lt;br /&gt;
|-&lt;br /&gt;
| Spain   || Simyo     || Any  || gprs-service.com / *99# ||  ||&lt;br /&gt;
|-&lt;br /&gt;
| Sweden || Parlino ||  || internet.parlino.se || || [[GPRS_FSO|Works with FSO]]&lt;br /&gt;
|-&lt;br /&gt;
| Switzerland || Swisscom || e.g. Natel Basic Liberty, behind NAT || gprs.swisscom.ch || ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || T-Mobile|| || general.t-mobile.uk || ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || Virgin || || goto.virginmobile.uk || user ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || [http://www.filesaveas.com/gprs.html other providers] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || AT&amp;amp;T || Unlimited data plan (attached to pay-as-you-go voice plan) || wap.cingular / *99***1# || WAP@CINGULARGPRS.COM/CINGULAR1 ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || Cincinnati Bell Wireless || || wap.gocbw.com ||  cbw  ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || Cingular (AT&amp;amp;T) || Less than full internet || wap.cingular / may require *99***1# || ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || T-mobile || Anything less than full internet || wap.voicestream.com ||  || Need to set proxy to 216.155.165.50  T-Mobile docs say &amp;quot;216.155.165.050&amp;quot;.  050 octal = 40 decimal and will *not* work.  I think port is 8080 or 9100.  No luck w/ pppd scripts.  GPRS_FSO directions work under FSO though.&lt;br /&gt;
|- &lt;br /&gt;
| USA || T-mobile || Regular internet plan || internet2.voicestream.com || || [[T-Mobile pppd scripts]]&lt;br /&gt;
|- &lt;br /&gt;
| USA || T-mobile || &amp;quot;VPN&amp;quot; internet plan || internet3.voicestream.com || ||&lt;br /&gt;
|- &lt;br /&gt;
| Venezuela || Digitel || Pre- y post-pago || gprsweb.digitel.ve || ||&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[1] connected through a WAP proxy (slower, but the only way to access Vodafone live! and SFR portal)&lt;br /&gt;
&lt;br /&gt;
[2] Unless stated otherwise the phone number to call is &amp;quot;*99#&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Also see Ross Barkman's page for a detailed list of more [http://www.taniwha.org.uk/gprs.html global GPRS providers APN details]&lt;br /&gt;
&lt;br /&gt;
== Starting pppd automatically ==&lt;br /&gt;
&lt;br /&gt;
Once you have finished debugging your gprs-connect-chat and gprs options files, you may wish to automatically connect whenever needed and hang up when finished.  Make sure you understand the impact of this change to your carrier plan billing.  This is not recommended unless you have a large-use or unlimited data plan.  These scripts do NOT prompt you before connecting.&lt;br /&gt;
&lt;br /&gt;
=== On-demand connection settings ===&lt;br /&gt;
&lt;br /&gt;
Additional settings are needed if you want the actual connection to be up only while there is traffic. In the 'gprs' file above, insert the following, making sure 'nodetach' is commented out.  If 'nodetach' is on, the boot process will stop when it starts pppd. Also remove the option 'persist' mentioned above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Wait until needed before connecting&lt;br /&gt;
demand&lt;br /&gt;
&lt;br /&gt;
# Disconnect if idle for given amount of seconds&lt;br /&gt;
idle 20&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Start on boot (method 1) ===&lt;br /&gt;
&lt;br /&gt;
Add the following definition to /etc/network/interfaces:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auto ppp0&lt;br /&gt;
iface ppp0 inet ppp&lt;br /&gt;
        provider gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That should be it. Now you can use 'ifup ppp0' and 'ifdown ppp0' manually too.&lt;br /&gt;
&lt;br /&gt;
=== Start on boot (method 2) ===&lt;br /&gt;
&lt;br /&gt;
Create the following file as /etc/ppp/ppp_on_boot (needs chmod +x).  The /etc/init.d/ppp script will call it to set up the daemon.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
#&lt;br /&gt;
#   Rename this file to ppp_on_boot and pppd will be fired up as&lt;br /&gt;
#   soon as the system comes up, connecting to `provider'.&lt;br /&gt;
#&lt;br /&gt;
#   If you also make this file executable, and replace the first line&lt;br /&gt;
#   with just &amp;quot;#!/bin/sh&amp;quot;, the commands below will be executed instead.&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# The location of the ppp daemon itself (shouldn't need to be changed)&lt;br /&gt;
PPPD=/usr/sbin/pppd&lt;br /&gt;
&lt;br /&gt;
# The default provider to connect to&lt;br /&gt;
$PPPD call gprs&lt;br /&gt;
&lt;br /&gt;
# Additional connections, which would just use settings from&lt;br /&gt;
# /etc/ppp/options.&amp;lt;tty&amp;gt;&lt;br /&gt;
#$PPPD ttyS0&lt;br /&gt;
#$PPPD ttyS1&lt;br /&gt;
#$PPPD ttyS2&lt;br /&gt;
#$PPPD ttyS3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, you need to add the /etc/init.d/ppp script to the init process by creating symbolic links from the appropriate directories.  I chose the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/rc0.d/K25ppp&lt;br /&gt;
/etc/rc1.d/K45ppp&lt;br /&gt;
/etc/rc2.d/S45ppp&lt;br /&gt;
/etc/rc3.d/S45ppp&lt;br /&gt;
/etc/rc4.d/S45ppp&lt;br /&gt;
/etc/rc5.d/S45ppp&lt;br /&gt;
/etc/rc6.d/K25ppp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Sharing the GPRS connection with a computer =&lt;br /&gt;
&lt;br /&gt;
See [[Tethering]]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[pppd]]&lt;br /&gt;
* [[Manually using GSM]]&lt;br /&gt;
* [[Manually using Bluetooth]]&lt;br /&gt;
* [[GPRS FSO]]&lt;br /&gt;
{{Languages|Manually_using_GPRS}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Documentation]]&lt;br /&gt;
[[Category:Application Developer]]&lt;br /&gt;
[[Category:Guides]]&lt;br /&gt;
[[Category:Networking]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Pidgin</id>
		<title>Pidgin</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Pidgin"/>
				<updated>2008-08-29T22:31:48Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://pidgin.im/ Pidgin] can be installed from the Angstrom Repositories (see [[Repositories]]).&lt;br /&gt;
&lt;br /&gt;
  opkg install pidgin&lt;br /&gt;
&lt;br /&gt;
There are various plugins for pidgin provided by libpurple that can be installed to connect to MSN (libpurple-protocol-msn), Yahoo (libpurple-protocol-yahoo), etc.&lt;br /&gt;
&lt;br /&gt;
Do a&lt;br /&gt;
&lt;br /&gt;
  opkg list | grep libpurple-protocol&lt;br /&gt;
&lt;br /&gt;
to see a full list.&lt;br /&gt;
&lt;br /&gt;
You can have instant messaging on the go through [[GPRS]].&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Pidgin</id>
		<title>Pidgin</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Pidgin"/>
				<updated>2008-08-29T22:18:45Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: New page: [http://pidgin.im/ Pidgin] can be installed from the Angstrom Repositories (see Repositories).    opkg install pidgin  There are various plugins for pidgin provided by libpurple that c...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[http://pidgin.im/ Pidgin] can be installed from the Angstrom Repositories (see [[Repositories]]).&lt;br /&gt;
&lt;br /&gt;
  opkg install pidgin&lt;br /&gt;
&lt;br /&gt;
There are various plugins for pidgin provided by libpurple that can be installed to connect to MSN (libpurple-protocol-msn), Yahoo (libpurple-protocol-yahoo), etc.&lt;br /&gt;
&lt;br /&gt;
Do a&lt;br /&gt;
&lt;br /&gt;
  opkg list | grep libpurple-protocol&lt;br /&gt;
&lt;br /&gt;
to see a full list.&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Tethering</id>
		<title>Tethering</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Tethering"/>
				<updated>2008-08-29T18:54:50Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Once you successfully connect to your network operator (see [[Manually_using_GPRS]]), you can start sharing your data plan with your computer through USB or Bluetooth networking.  The following describes how you can do so through USB networking.&lt;br /&gt;
&lt;br /&gt;
== Setting up your computer's network settings ==&lt;br /&gt;
&lt;br /&gt;
I find it useful to have my computer automatically acquire it's network address, mask, gateway, and DNS servers from the FreeRunner instead of manually setting these up.  In order to this, I installed busybox-udhcpd from the Angstrom repositories onto my FreeRunner (see [[Repositories]])&lt;br /&gt;
&lt;br /&gt;
  opkg install busybox-udhcpd&lt;br /&gt;
&lt;br /&gt;
Once it is installed, it needs to be configured.  Edit the /etc/udhcpd.conf file.  Mine looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Sample udhcpd configuration file (/etc/udhcpd.conf)&lt;br /&gt;
&lt;br /&gt;
# The start and end of the IP lease block&lt;br /&gt;
&lt;br /&gt;
start           192.168.0.200   #default: 192.168.0.20&lt;br /&gt;
end             192.168.0.200   #default: 192.168.0.254&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# The interface that udhcpd will use&lt;br /&gt;
&lt;br /&gt;
interface       usb0            #default: eth0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# The maximim number of leases (includes addressesd reserved&lt;br /&gt;
# by OFFER's, DECLINE's, and ARP conficts&lt;br /&gt;
&lt;br /&gt;
#max_leases     254             #default: 254&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# If remaining is true (default), udhcpd will store the time&lt;br /&gt;
# remaining for each lease in the udhcpd leases file. This is&lt;br /&gt;
# for embedded systems that cannot keep time between reboots.&lt;br /&gt;
# If you set remaining to no, the absolute time that the lease&lt;br /&gt;
# expires at will be stored in the dhcpd.leases file.&lt;br /&gt;
&lt;br /&gt;
#remaining      yes             #default: yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# The time period at which udhcpd will write out a dhcpd.leases&lt;br /&gt;
# file. If this is 0, udhcpd will never automatically write a&lt;br /&gt;
# lease file. (specified in seconds)&lt;br /&gt;
&lt;br /&gt;
#auto_time      7200            #default: 7200 (2 hours)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# The amount of time that an IP will be reserved (leased) for if a&lt;br /&gt;
# DHCP decline message is received (seconds).&lt;br /&gt;
&lt;br /&gt;
#decline_time   3600            #default: 3600 (1 hour)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# The amount of time that an IP will be reserved (leased) for if an&lt;br /&gt;
# ARP conflct occurs. (seconds&lt;br /&gt;
&lt;br /&gt;
#conflict_time  3600            #default: 3600 (1 hour)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# How long an offered address is reserved (leased) in seconds&lt;br /&gt;
&lt;br /&gt;
#offer_time     60              #default: 60 (1 minute)&lt;br /&gt;
&lt;br /&gt;
# If a lease to be given is below this value, the full lease time is&lt;br /&gt;
# instead used (seconds).&lt;br /&gt;
&lt;br /&gt;
#min_lease      60              #defult: 60&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# The location of the leases file&lt;br /&gt;
&lt;br /&gt;
#lease_file     /var/lib/misc/udhcpd.leases     #defualt: /var/lib/misc/udhcpd.&lt;br /&gt;
leases&lt;br /&gt;
&lt;br /&gt;
# The location of the pid file&lt;br /&gt;
#pidfile        /var/run/udhcpd.pid     #default: /var/run/udhcpd.pid&lt;br /&gt;
&lt;br /&gt;
# Everytime udhcpd writes a leases file, the below script will be called.&lt;br /&gt;
# Useful for writing the lease file to flash every few hours.&lt;br /&gt;
&lt;br /&gt;
#notify_file                            #default: (no script)&lt;br /&gt;
&lt;br /&gt;
#notify_file    dumpleases      # &amp;lt;--- usefull for debugging&lt;br /&gt;
&lt;br /&gt;
# The following are bootp specific options, setable by udhcpd.&lt;br /&gt;
&lt;br /&gt;
#siaddr         192.168.0.22            #default: 0.0.0.0&lt;br /&gt;
&lt;br /&gt;
#sname          zorak                   #default: (none)&lt;br /&gt;
&lt;br /&gt;
#boot_file      /var/nfs_root           #default: (none)&lt;br /&gt;
&lt;br /&gt;
# The remainer of options are DHCP options and can be specifed with the&lt;br /&gt;
# keyword 'opt' or 'option'. If an option can take multiple items, such&lt;br /&gt;
# as the dns option, they can be listed on the same line, or multiple&lt;br /&gt;
# lines. The only option with a default is 'lease'.&lt;br /&gt;
&lt;br /&gt;
#Examles&lt;br /&gt;
opt     dns     192.168.0.202 &amp;lt;your APN's DNS server&amp;gt;&lt;br /&gt;
option  subnet  255.255.255.0&lt;br /&gt;
opt     router  192.168.0.202&lt;br /&gt;
opt     wins    192.168.0.202&lt;br /&gt;
#option dns     129.219.13.81   # appened to above DNS servers for a total of 3&lt;br /&gt;
option  domain  local&lt;br /&gt;
option  lease   864000          # 10 days of seconds&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Currently supported options, for more info, see options.c&lt;br /&gt;
#subnet&lt;br /&gt;
#timezone&lt;br /&gt;
#router&lt;br /&gt;
#timesvr&lt;br /&gt;
#namesvr&lt;br /&gt;
#dns&lt;br /&gt;
#logsvr&lt;br /&gt;
#cookiesvr&lt;br /&gt;
#lprsvr&lt;br /&gt;
#bootsize&lt;br /&gt;
#domain&lt;br /&gt;
#swapsvr&lt;br /&gt;
#rootpath&lt;br /&gt;
#ipttl&lt;br /&gt;
#mtu&lt;br /&gt;
#broadcast&lt;br /&gt;
#wins&lt;br /&gt;
#lease&lt;br /&gt;
#ntpsrv&lt;br /&gt;
#tftp&lt;br /&gt;
#bootfile&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice that I set the start and end of the IP lease block to 192.168.0.200.  If you follow the instructions at [[USB Networking]], this is the address that it assumes the host to be and the /etc/resolv.conf file points to this address to allow name resolution from your phone.&lt;br /&gt;
&lt;br /&gt;
The interface in this case is usb0.  This will have to be set differently if you are using Bluetooth.&lt;br /&gt;
&lt;br /&gt;
The dns is set to the FreeRunner's address, as well as my network operator's DNS server address.  You don't have to use your network operator's DNS address if you can find a caching nameserver for the FreeRunner.&lt;br /&gt;
&lt;br /&gt;
The router is set to the FreeRunner.&lt;br /&gt;
&lt;br /&gt;
== Turning your FreeRunner into a Network Address Translation (NAT) gateway ==&lt;br /&gt;
&lt;br /&gt;
I set up my FreeRunner so that it acts as a NAT gateway so that all traffic that goes to my network operator appears to originate from the phone.   I installed iptables to accomplish this:&lt;br /&gt;
&lt;br /&gt;
  opkg install iptables iptables-utils kernel-module-ipt-masquerade kernel-module-iptable-nat&lt;br /&gt;
&lt;br /&gt;
Once that is installed, I have the following script named firewall.sh that I use to set up the NAT once connected to the GPRS network:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
IPTABLES='/usr/sbin/iptables'&lt;br /&gt;
&lt;br /&gt;
# Set interface values&lt;br /&gt;
EXTIF='ppp0'&lt;br /&gt;
INTIF='usb0'&lt;br /&gt;
&lt;br /&gt;
# enable ip forwarding in the kernel&lt;br /&gt;
/bin/echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
&lt;br /&gt;
# flush rules and delete chains&lt;br /&gt;
$IPTABLES -F&lt;br /&gt;
$IPTABLES -X&lt;br /&gt;
&lt;br /&gt;
#Enable masquerading to allow LAN internet access&lt;br /&gt;
$IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
#Forward LAN traffic from LAN $INTIF to Internet $EXTIF&lt;br /&gt;
$IPTABLES -A FORWARD -i $INTIF -o $EXTIF -m state --state NEW,ESTABLISHED -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
#Allowing access to the SSH server&amp;quot;&lt;br /&gt;
#$IPTABLES -A INPUT --protocol tcp --dport 22 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
#Allowing access to the HTTP server&amp;quot;&lt;br /&gt;
#$IPTABLES -A INPUT --protocol tcp --dport 80 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# block out all other Internet access on $EXTIF&lt;br /&gt;
$IPTABLES -A INPUT -i $EXTIF -m state --state NEW,INVALID -j DROP&lt;br /&gt;
$IPTABLES -A FORWARD -i $EXTIF -m state --state NEW,INVALID -j DROP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
so once connected through GPRS, I run:&lt;br /&gt;
&lt;br /&gt;
  ./firewall.sh&lt;br /&gt;
&lt;br /&gt;
and then you should be able to connect to the internet from your computer!&lt;br /&gt;
&lt;br /&gt;
Of course this also works when sharing your WLAN connection. Just set EXTIF to eth0.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Manually_using_GPRS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Documentation]]&lt;br /&gt;
[[Category:Application Developer]]&lt;br /&gt;
[[Category:Guides]]&lt;br /&gt;
[[Category:Networking]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Manually_using_GPRS</id>
		<title>Manually using GPRS</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Manually_using_GPRS"/>
				<updated>2008-08-29T18:50:45Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: /* Sharing the GPRS connection with a computer */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The GPRS connection is made using the PPP protocol to a server identified by an &amp;quot;APN&amp;quot; at the network operator.   Once a GPRS connection is made, it is possible to [[#Sharing_the_GPRS_connection_with_a_computer|share that connection with a connected computer]], allowing that computer to access the internet through the phone!&lt;br /&gt;
&lt;br /&gt;
= Option 1: With GSM multiplexing and with a GUI =&lt;br /&gt;
&lt;br /&gt;
{{note|The following does not appear to work if you have a SIM PIN.  The dialog to enter your SIM PIN never pops up and the GSM multiplexing daemon continuous loops and runs into a SIM PIN error.}}&lt;br /&gt;
&lt;br /&gt;
GSM multiplexing allows both a GPRS connection and a phone call to be handled at the same time.  By default, [[Om 2008.8]] does not multiplex the GSM device.  The [[FSO]] distribution, however, introduces GSM multiplexing with a new service and a DBus API to that service.  The instructions to modify the OM2008.8 distribution to make use of GSM multiplexing and allow you to start GPRS from a GUI can be found here: http://freeyourphone.de/portal_v1/viewtopic.php?f=21&amp;amp;t=295&lt;br /&gt;
&lt;br /&gt;
However, using those instructions, you will encounter a few hurdles.  Do not use the gsm0710muxd that is found in the OM2008.8 repository.  It will not work, instead, use the one found here:&lt;br /&gt;
&lt;br /&gt;
http://www.angstrom-distribution.org/feeds/2008/ipk/glibc/armv4t/base/gsm0710muxd_0.9.1+gitr6fecc78198dd821bbe29efd096bd8fecd855179d-r0_armv4t.ipk&lt;br /&gt;
&lt;br /&gt;
In order to install that version of gsm0710muxd, however, you will also have to install a bunch of missing dependencies.  Those can be found by clicking on the dependencies found here:&lt;br /&gt;
&lt;br /&gt;
http://www.angstrom-distribution.org/repo/?action=details&amp;amp;pnm=gsm0710muxd&lt;br /&gt;
&lt;br /&gt;
Make sure that you install the armv4t versions of all packages.&lt;br /&gt;
&lt;br /&gt;
The [[#Some APN names for reference|APN Reference]] table may come in handy when you are looking for the required network specific information.&lt;br /&gt;
&lt;br /&gt;
Once you follow through with all the instructions, you will notice that the &amp;quot;Services&amp;quot; GUI will crash.  This has to do with this bug: http://docs.openmoko.org/trac/ticket/1718&lt;br /&gt;
&lt;br /&gt;
The fix is to change the &amp;quot;init()&amp;quot; call on line 82 of /usr/lib/python2.5/site-packages/gtk-2.0/gtk/_init_.py  to &amp;quot;_init()&amp;quot; (add an underscore).&lt;br /&gt;
&lt;br /&gt;
You may also have to modify your /etc/resolv.conf file and add the nameserver (DNS Server) of your service provider if you have DNS resolution problems.&lt;br /&gt;
&lt;br /&gt;
Then, hopefully, you should be up in running with GPRS and a GUI to turn it on and off.&lt;br /&gt;
&lt;br /&gt;
= Option 2: With GSM multiplexing and without a GUI =&lt;br /&gt;
&lt;br /&gt;
'''1) In /etc/rc5.d start gsm0710muxd before gsmd:'''&lt;br /&gt;
* S34gsm0710muxd -&amp;gt; ../init.d/gsm0710muxd&lt;br /&gt;
* S35gsmd -&amp;gt; ../init.d/gsmd&lt;br /&gt;
&lt;br /&gt;
'''2) Modify S35gsmd so it can start either with or without gsm0710muxd:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
...&lt;br /&gt;
case &amp;quot;$1&amp;quot; in&lt;br /&gt;
    start)&lt;br /&gt;
        if [ &amp;quot;$(pidof gsm0710muxd)&amp;quot; ] ; then&lt;br /&gt;
                id=$(date +%s)&lt;br /&gt;
                GSM_DEV=$(dbus-send --system --print-reply --type=method_call --dest=org.pyneo.muxer /org/pyneo/Muxer org.freesmartphone.GSM.MUX.AllocChannel string:$id | grep string | cut -d \&amp;quot; -f 2)&lt;br /&gt;
        else&lt;br /&gt;
                [ -n &amp;quot;$GSM_POW&amp;quot; ] &amp;amp;&amp;amp; ( echo &amp;quot;0&amp;quot; &amp;gt;$GSM_POW; sleep 1 )&lt;br /&gt;
                [ -n &amp;quot;$GSM_POW&amp;quot; ] &amp;amp;&amp;amp; ( echo &amp;quot;1&amp;quot; &amp;gt;$GSM_POW; sleep 1 )&lt;br /&gt;
                [ -n &amp;quot;$GSM_RES&amp;quot; ] &amp;amp;&amp;amp; ( echo &amp;quot;1&amp;quot; &amp;gt;$GSM_RES; sleep 1 )&lt;br /&gt;
                [ -n &amp;quot;$GSM_RES&amp;quot; ] &amp;amp;&amp;amp; ( echo &amp;quot;0&amp;quot; &amp;gt;$GSM_RES; sleep 2 )&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        if [ ! &amp;quot;$GSM_DEV&amp;quot; ] ; then&lt;br /&gt;
                echo &amp;quot;GSM_DEV was not set&amp;quot;&lt;br /&gt;
                exit 1&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        echo -n &amp;quot;Starting GSM daemon: &amp;quot;&lt;br /&gt;
        start-stop-daemon -S -x /usr/sbin/gsmd -- gsmd -p $GSM_DEV $GSMD_OPTS -d -l /var/log/gsmd&lt;br /&gt;
&lt;br /&gt;
        if [ $? = 0 ]; then&lt;br /&gt;
            echo &amp;quot;gsmd.&amp;quot;&lt;br /&gt;
        else&lt;br /&gt;
            echo &amp;quot;(failed.)&amp;quot;&lt;br /&gt;
        fi&lt;br /&gt;
        ;;&lt;br /&gt;
    stop)&lt;br /&gt;
        if [ ! &amp;quot;$(pidof gsm0710muxd)&amp;quot; ] ; then&lt;br /&gt;
                [ -n &amp;quot;$GSM_POW&amp;quot; ] &amp;amp;&amp;amp; echo &amp;quot;0&amp;quot; &amp;gt;$GSM_POW&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        echo -n &amp;quot;Stopping GSM daemon: &amp;quot;&lt;br /&gt;
        ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''3) Remove the tty from /etc/ppp/peers/simyo''' (replace simyo with your provider).&lt;br /&gt;
&lt;br /&gt;
'''4) Use a ppp start script like this:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ cat /usr/local/bin/ppp-start&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
id=$(date +%s)&lt;br /&gt;
TTY=$(dbus-send --system --print-reply --type=method_call --dest=org.pyneo.muxer /org/pyneo/Muxer org.freesmartphone.GSM.MUX.AllocChannel string:$id | grep string | cut -d \&amp;quot; -f 2)&lt;br /&gt;
logger -t ppp-start &amp;quot;using tty $TTY&amp;quot;&lt;br /&gt;
pppd $TTY call simyo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''5) Use &amp;quot;killall pppd&amp;quot; to terminate the PPP connection.'''&lt;br /&gt;
&lt;br /&gt;
= Option 3: Without GSM multiplexing and without a GUI =&lt;br /&gt;
&lt;br /&gt;
The program that implements PPP on Linux is [[pppd]], which we need to configure and run to get a connection. When that is working, we can configure pppd to wait until it's needed before it connects, and to disconnect if the connection becomes idle. Further, we can start pppd in the background during the boot process.&lt;br /&gt;
&lt;br /&gt;
== Configuring pppd for manual connections ==&lt;br /&gt;
&lt;br /&gt;
You'll need /etc/ppp/peers/gprs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Uncomment the following if you want some debug.&lt;br /&gt;
#debug&lt;br /&gt;
#logfile /var/volatile/log/pppd.log&lt;br /&gt;
lock&lt;br /&gt;
/dev/ttySAC0 115200&lt;br /&gt;
crtscts &lt;br /&gt;
connect /etc/ppp/gprs-connect-chat&lt;br /&gt;
disconnect /etc/ppp/gprs-disconnect-chat&lt;br /&gt;
hide-password&lt;br /&gt;
usepeerdns&lt;br /&gt;
ipcp-accept-local&lt;br /&gt;
noauth&lt;br /&gt;
noipdefault&lt;br /&gt;
novj&lt;br /&gt;
novjccomp&lt;br /&gt;
defaultroute&lt;br /&gt;
replacedefaultroute&lt;br /&gt;
# Reopen the connection if it fails, pausing for a while.&lt;br /&gt;
persist&lt;br /&gt;
holdoff 15&lt;br /&gt;
# Check the line every 20 seconds and presume&lt;br /&gt;
# the peer is gone if no replay for 4 times.&lt;br /&gt;
lcp-echo-interval 20&lt;br /&gt;
lcp-echo-failure 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depending on the APN, you may need password authentication using CHAP or PAP. In /etc/ppp/pap-secrets you can add the following default line for &amp;quot;password-less&amp;quot; connections:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# client        server  secret                  IP addresses&lt;br /&gt;
*               *       &amp;quot;&amp;quot;                      *&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For CHAP, lines in /etc/ppp/chap-secrets are used. For PAP, the lines are in /etc/ppp/pap-secrets. The client should match the &amp;quot;user&amp;quot; option in pppd the config file (below). You can use * to mean any here, but the option user &amp;quot;&amp;quot; doesn't mean empty!&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Secrets for authentication using CHAP&lt;br /&gt;
# client        server  secret                  IP addresses&lt;br /&gt;
&amp;quot;user&amp;quot;         *       &amp;quot;password&amp;quot;                  *  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this you need the following options in /etc/ppp/peers/gprs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# username to use for authentication, should match &amp;quot;client&amp;quot; in /etc/ppp/{chap,pap}-secrets&lt;br /&gt;
user &amp;quot;user&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== gprs-connect-chat, version 1 ==&lt;br /&gt;
&lt;br /&gt;
You'll also need /etc/ppp/gprs-connect-chat (needs &amp;quot;chmod +x&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
exec chat -v -S -s\&lt;br /&gt;
        TIMEOUT 15\&lt;br /&gt;
        &amp;quot;&amp;quot; &amp;quot;\K\K\K\d+++ATH&amp;quot;\&lt;br /&gt;
        OK-AT-OK ATZ\&lt;br /&gt;
        OK ATE1\&lt;br /&gt;
        ABORT BUSY\&lt;br /&gt;
        ABORT DELAYED\&lt;br /&gt;
        ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
        ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
        ABORT VOICE\&lt;br /&gt;
        ABORT ERROR\&lt;br /&gt;
        ABORT RINGING\&lt;br /&gt;
        TIMEOUT 60\&lt;br /&gt;
        OK AT+CFUN=1\&lt;br /&gt;
        OK AT+COPS\&lt;br /&gt;
        OK AT+CGDCONT=1,\&amp;quot;IP\&amp;quot;,\&amp;quot;internet\&amp;quot;\&lt;br /&gt;
        OK ATD*99#\&lt;br /&gt;
        CONNECT /n/d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;(08/18/08) Note:&amp;lt;/b&amp;gt; I needed to add the command &amp;quot;AT+CMOD=2&amp;quot; (formatted as &amp;quot;OK AT+CMOD=2\&amp;quot; without the quotes) in order to get GPRS working with the above script (otherwise it would ERROR on the CFUN, COPS, or the ATD if the other two were removed).  I have T-Mobile (US) with the $5.99 &amp;quot;tzones&amp;quot; addon, which works with Minimo as it supports HTTP proxy setups.&lt;br /&gt;
&lt;br /&gt;
== gprs-connect-chat, version 2 ==&lt;br /&gt;
&lt;br /&gt;
Update: On my freerunner the first AT+CFUN=1 always generated ERROR. I managed to get gprs work by using the following script from http://lists.openmoko.org/pipermail/community/2008-July/023246.html:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
exec /usr/sbin/chat -v \&lt;br /&gt;
        TIMEOUT 10 \&lt;br /&gt;
        OK-AT-'' ''\&lt;br /&gt;
        ABORT BUSY\&lt;br /&gt;
        ABORT DELAYED\&lt;br /&gt;
        ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
        ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
        ABORT VOICE\&lt;br /&gt;
        ABORT ERROR\&lt;br /&gt;
        ABORT RINGING\&lt;br /&gt;
        TIMEOUT 30 \&lt;br /&gt;
        '' ATZ\&lt;br /&gt;
        OK ATE1\&lt;br /&gt;
        OK AT+CFUN=1\&lt;br /&gt;
        ERROR AT+CPIN=\&amp;quot;XXXX\&amp;quot;\         &amp;lt;&amp;lt; USE YOUR OWN&lt;br /&gt;
        OK AT+COPS\&lt;br /&gt;
        OK AT+CGDCONT=1,\&amp;quot;IP\&amp;quot;,\&amp;quot;internet\&amp;quot;\&lt;br /&gt;
        OK 'ATDT*99***1#'\&lt;br /&gt;
        CONNECT ''&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The error seems to vary a bit, sometimes it's before AT+COPS, sometimes as above. I have two versions of the gprs-connect-chat, which I vary between depending on which is needed. Or is there a way to specify two acceptable answers like {OK,ERROR}?&lt;br /&gt;
&lt;br /&gt;
You will need to adjust the APN name &amp;quot;internet&amp;quot; in at+cgdcont line and possibly the phone number in the ATD line to match what your network operator provides. See below in the table &amp;quot;Some APN names for reference&amp;quot; for the right settings for your operator.&lt;br /&gt;
&lt;br /&gt;
== gprs-disconnect-chat ==&lt;br /&gt;
&lt;br /&gt;
Also good to have is /etc/ppp/gprs-disconnect-chat (needs &amp;quot;chmod +x&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
/usr/sbin/chat -v\&lt;br /&gt;
	ABORT OK\&lt;br /&gt;
	ABORT BUSY\&lt;br /&gt;
	ABORT DELAYED\&lt;br /&gt;
	ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
	ABORT &amp;quot;NO CARRIER&amp;quot;\&lt;br /&gt;
	ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
	ABORT VOICE\&lt;br /&gt;
	ABORT ERROR\&lt;br /&gt;
	ABORT RINGING\&lt;br /&gt;
	TIMEOUT 12\&lt;br /&gt;
	&amp;quot;&amp;quot; &amp;quot;\K\K\K\d+++ATH&amp;quot;\&lt;br /&gt;
	&amp;quot;NO CARRIER-AT-OK&amp;quot; &amp;quot;\c&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Starting PPP connection ==&lt;br /&gt;
&lt;br /&gt;
The following script can be used to start the ppp connection. First it stops gsmd because gsmd may put the phone in a unknown state. It then turns on the power to the phone, modifies the ownership, and then creates a tty connection. Finally it starts [[pppd]] with the gprs settings.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/init.d/gsmd stop&lt;br /&gt;
echo &amp;quot;1&amp;quot; &amp;gt; /sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
chown uucp.uucp /dev/ttySAC0&lt;br /&gt;
stty -F /dev/ttySAC0 crtscts&lt;br /&gt;
pppd call gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are having problems connecting ensure you have a good GSM signal and replace the last line with the below line. This will allow you to see the details of the connection on the console. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pppd debug nodetach call gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The config above will establish a persistant link over gprs. The battery will run low in less than an hour. See an example for an on-demand config below.&lt;br /&gt;
&lt;br /&gt;
=== Resolve.conf issues ===&lt;br /&gt;
&lt;br /&gt;
The latest build seems to have solved the following issue, it should be automatically updated by pppd.&lt;br /&gt;
&lt;br /&gt;
If you expeience DNS issues after connecting to DNS you may need a proper /etc/resolv.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln -sf /var/run/resolv.conf /etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If needed put your nameserver for usb-net into /var/run/resolv.conf, not in /etc.&lt;br /&gt;
&lt;br /&gt;
The image does not set a correct resolv.conf. i do so with an &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo  nameserver 192.168.0.201 &amp;gt; /var/run/resolv.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in the right place. because a post-up in /etc/network/interfaces is not supported i do that in /etc/network/if-up.d/08setupdns&lt;br /&gt;
&lt;br /&gt;
another problem is pppd's /etc/ppp/ip-down.d/92removedns which does not properly remove the link when shuting down ppp. my fix is this script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
ACTUALCONF=/var/run/resolv.conf&lt;br /&gt;
PPPCONF=/var/run/ppp/resolv.conf&lt;br /&gt;
if [ -f $PPPCONF ] ; then&lt;br /&gt;
        if [ -f $ACTUALCONF ] ; then&lt;br /&gt;
                if [ ! -h $ACTUALCONF -o ! &amp;quot;`readlink $ACTUALCONF 2&amp;gt;&amp;amp;1`&amp;quot; = &amp;quot;$PPPCONF&amp;quot; ] ; then&lt;br /&gt;
                        mv $ACTUALCONF $ACTUALCONF.ppporig&lt;br /&gt;
                fi&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        ln -sf $PPPCONF $ACTUALCONF&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Some APN names for reference ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Country&lt;br /&gt;
! Carrier&lt;br /&gt;
! Plan&lt;br /&gt;
! APN/Phone&lt;br /&gt;
! user/password if required&lt;br /&gt;
! Working pppd scripts&lt;br /&gt;
|-&lt;br /&gt;
| Australia || Virgin || Any || VirginInternet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Australia || Vodafone || Any || vfinternet.au || ||&lt;br /&gt;
|-&lt;br /&gt;
| Canada || Fido || Any, behind NAT || internet.fido.ca || fido/fido || mdbus -s org.freesmartphone.frameworkd /org/freesmartphone/GSM/Device&lt;br /&gt;
org.freesmartphone.GSM.PDP.ActivateContext internet.fido.ca fido&lt;br /&gt;
fido&lt;br /&gt;
|-&lt;br /&gt;
| Canada || Rogers || Any, behind NAT || internet.com || wapuser1/wap || nameserver 207.181.101.4&lt;br /&gt;
|-&lt;br /&gt;
| Denmark || Telmore || || wap || must be empty ||&lt;br /&gt;
|-&lt;br /&gt;
| Estonia || Elisa || Any, behind NAT || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Estonia || EMT || Any, behind NAT || internet.emt.ee || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Saunalahti || Any || internet.saunalahti || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Sonera   || Any, behind NAT || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Sonera   || Any, public IP  || prointernet || ||&lt;br /&gt;
|-&lt;br /&gt;
| France || SFR || 10.x.x.x? || websfr || || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || SFR || 10.x.x.x? || wapsfr&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;|| || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || Orange || ??? || orange.fr || || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || Bouyges Telecom || Web &amp;amp; Mail || mmsbouygtel.com || || Work great under FSO. Just follow instructions at http://wiki.openmoko.org/wiki/GPRS_FSO. Proxy:  62.201.129.225:8080. For emails, only ports 25 (smtp) and 110 (pop) are allowed. (They use a transparent proxy ...)&lt;br /&gt;
|-&lt;br /&gt;
| Germany || E-Plus || BASE (and others?) || internet.eplus.de || eplus gprs || [[Base pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| Germany || E-Plus || Simyo || internet.eplus.de || simyo simyo || [[simyo pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| Germany || T-Mobile ||  || internet.t-mobile || ||&lt;br /&gt;
|-&lt;br /&gt;
| Germany || Vodafone || Any, behind NAT || web.vodafone.de || ||&lt;br /&gt;
|-&lt;br /&gt;
| India || AirTel || MobileOffice || airtelgprs.com || ||&lt;br /&gt;
|- &lt;br /&gt;
| Italy   || Wind     || Superinternet, public IP  || internet.wind / *99# || wind/wind (any string) || [[Wind pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| Netherlands || Vodafone || Any || live.vodafone.com / *99***1#||  || [[Vodafone pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| New Zealand || Vodafone || Any || live.vodafone.com / *99***2#||  ||&lt;br /&gt;
|-&lt;br /&gt;
| Norway || Netcom || Any || internet.netcom.no || ||&lt;br /&gt;
|-&lt;br /&gt;
| Norway || OneCall || Any || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Norway || Telenor || Any || telenor || ||&lt;br /&gt;
|-&lt;br /&gt;
| Spain   || Simyo     || Any  || gprs-service.com / *99# ||  ||&lt;br /&gt;
|-&lt;br /&gt;
| Sweden || Parlino ||  || internet.parlino.se || || [[GPRS_FSO|Works with FSO]]&lt;br /&gt;
|-&lt;br /&gt;
| Switzerland || Swisscom || e.g. Natel Basic Liberty, behind NAT || gprs.swisscom.ch || ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || T-Mobile|| || general.t-mobile.uk || ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || Virgin || || goto.virginmobile.uk || user ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || [http://www.filesaveas.com/gprs.html other providers] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || AT&amp;amp;T || Unlimited data plan (attached to pay-as-you-go voice plan) || wap.cingular / *99***1# || WAP@CINGULARGPRS.COM/CINGULAR1 ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || Cincinnati Bell Wireless || || wap.gocbw.com ||  cbw  ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || Cingular (AT&amp;amp;T) || Less than full internet || wap.cingular / may require *99***1# || ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || T-mobile || Anything less than full internet || wap.voicestream.com ||  || Need to set proxy to 216.155.165.50  T-Mobile docs say &amp;quot;216.155.165.050&amp;quot;.  050 octal = 40 decimal and will *not* work.  I think port is 8080 or 9100.  No luck w/ pppd scripts.  GPRS_FSO directions work under FSO though.&lt;br /&gt;
|- &lt;br /&gt;
| USA || T-mobile || Regular internet plan || internet2.voicestream.com || || [[T-Mobile pppd scripts]]&lt;br /&gt;
|- &lt;br /&gt;
| USA || T-mobile || &amp;quot;VPN&amp;quot; internet plan || internet3.voicestream.com || ||&lt;br /&gt;
|- &lt;br /&gt;
| Venezuela || Digitel || Pre- y post-pago || gprsweb.digitel.ve || ||&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[1] connected through a WAP proxy (slower, but the only way to access Vodafone live! and SFR portal)&lt;br /&gt;
&lt;br /&gt;
[2] Unless stated otherwise the phone number to call is &amp;quot;*99#&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Also see Ross Barkman's page for a detailed list of more [http://www.taniwha.org.uk/gprs.html global GPRS providers APN details]&lt;br /&gt;
&lt;br /&gt;
== Starting pppd automatically ==&lt;br /&gt;
&lt;br /&gt;
Once you have finished debugging your gprs-connect-chat and gprs options files, you may wish to automatically connect whenever needed and hang up when finished.  Make sure you understand the impact of this change to your carrier plan billing.  This is not recommended unless you have a large-use or unlimited data plan.  These scripts do NOT prompt you before connecting.&lt;br /&gt;
&lt;br /&gt;
=== On-demand connection settings ===&lt;br /&gt;
&lt;br /&gt;
Additional settings are needed if you want the actual connection to be up only while there is traffic. In the 'gprs' file above, insert the following, making sure 'nodetach' is commented out.  If 'nodetach' is on, the boot process will stop when it starts pppd. Also remove the option 'persist' mentioned above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Wait until needed before connecting&lt;br /&gt;
demand&lt;br /&gt;
&lt;br /&gt;
# Disconnect if idle for given amount of seconds&lt;br /&gt;
idle 20&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Start on boot (method 1) ===&lt;br /&gt;
&lt;br /&gt;
Add the following definition to /etc/network/interfaces:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auto ppp0&lt;br /&gt;
iface ppp0 inet ppp&lt;br /&gt;
        provider gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That should be it. Now you can use 'ifup ppp0' and 'ifdown ppp0' manually too.&lt;br /&gt;
&lt;br /&gt;
=== Start on boot (method 2) ===&lt;br /&gt;
&lt;br /&gt;
Create the following file as /etc/ppp/ppp_on_boot (needs chmod +x).  The /etc/init.d/ppp script will call it to set up the daemon.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
#&lt;br /&gt;
#   Rename this file to ppp_on_boot and pppd will be fired up as&lt;br /&gt;
#   soon as the system comes up, connecting to `provider'.&lt;br /&gt;
#&lt;br /&gt;
#   If you also make this file executable, and replace the first line&lt;br /&gt;
#   with just &amp;quot;#!/bin/sh&amp;quot;, the commands below will be executed instead.&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# The location of the ppp daemon itself (shouldn't need to be changed)&lt;br /&gt;
PPPD=/usr/sbin/pppd&lt;br /&gt;
&lt;br /&gt;
# The default provider to connect to&lt;br /&gt;
$PPPD call gprs&lt;br /&gt;
&lt;br /&gt;
# Additional connections, which would just use settings from&lt;br /&gt;
# /etc/ppp/options.&amp;lt;tty&amp;gt;&lt;br /&gt;
#$PPPD ttyS0&lt;br /&gt;
#$PPPD ttyS1&lt;br /&gt;
#$PPPD ttyS2&lt;br /&gt;
#$PPPD ttyS3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, you need to add the /etc/init.d/ppp script to the init process by creating symbolic links from the appropriate directories.  I chose the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/rc0.d/K25ppp&lt;br /&gt;
/etc/rc1.d/K45ppp&lt;br /&gt;
/etc/rc2.d/S45ppp&lt;br /&gt;
/etc/rc3.d/S45ppp&lt;br /&gt;
/etc/rc4.d/S45ppp&lt;br /&gt;
/etc/rc5.d/S45ppp&lt;br /&gt;
/etc/rc6.d/K25ppp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Sharing the GPRS connection with a computer =&lt;br /&gt;
&lt;br /&gt;
See [[Tethering]]&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[pppd]]&lt;br /&gt;
* [[Manually using GSM]]&lt;br /&gt;
* [[Manually using Bluetooth]]&lt;br /&gt;
* [[GPRS FSO]]&lt;br /&gt;
{{Languages|Manually_using_GPRS}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Documentation]]&lt;br /&gt;
[[Category:Application Developer]]&lt;br /&gt;
[[Category:Guides]]&lt;br /&gt;
[[Category:Networking]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Tethering</id>
		<title>Tethering</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Tethering"/>
				<updated>2008-08-29T18:50:37Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: New page: = Tethering =  Once you successfully connect to your network operator (see Manually_using_GPRS), you can start sharing your data plan with your computer through USB or Bluetooth networ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Tethering =&lt;br /&gt;
&lt;br /&gt;
Once you successfully connect to your network operator (see [[Manually_using_GPRS]]), you can start sharing your data plan with your computer through USB or Bluetooth networking.  The following describes how you can do so through USB networking.&lt;br /&gt;
&lt;br /&gt;
== Setting up your computer's network settings ==&lt;br /&gt;
&lt;br /&gt;
I find it useful to have my computer automatically acquire it's network address, mask, gateway, and DNS servers from the FreeRunner instead of manually setting these up.  In order to this, I installed busybox-udhcpd from the Angstrom repositories onto my FreeRunner (see [[Repositories]])&lt;br /&gt;
&lt;br /&gt;
  opkg install busybox-udhcpd&lt;br /&gt;
&lt;br /&gt;
Once it is installed, it needs to be configured.  Edit the /etc/udhcpd.conf file.  Mine looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Sample udhcpd configuration file (/etc/udhcpd.conf)&lt;br /&gt;
&lt;br /&gt;
# The start and end of the IP lease block&lt;br /&gt;
&lt;br /&gt;
start           192.168.0.200   #default: 192.168.0.20&lt;br /&gt;
end             192.168.0.200   #default: 192.168.0.254&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# The interface that udhcpd will use&lt;br /&gt;
&lt;br /&gt;
interface       usb0            #default: eth0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# The maximim number of leases (includes addressesd reserved&lt;br /&gt;
# by OFFER's, DECLINE's, and ARP conficts&lt;br /&gt;
&lt;br /&gt;
#max_leases     254             #default: 254&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# If remaining is true (default), udhcpd will store the time&lt;br /&gt;
# remaining for each lease in the udhcpd leases file. This is&lt;br /&gt;
# for embedded systems that cannot keep time between reboots.&lt;br /&gt;
# If you set remaining to no, the absolute time that the lease&lt;br /&gt;
# expires at will be stored in the dhcpd.leases file.&lt;br /&gt;
&lt;br /&gt;
#remaining      yes             #default: yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# The time period at which udhcpd will write out a dhcpd.leases&lt;br /&gt;
# file. If this is 0, udhcpd will never automatically write a&lt;br /&gt;
# lease file. (specified in seconds)&lt;br /&gt;
&lt;br /&gt;
#auto_time      7200            #default: 7200 (2 hours)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# The amount of time that an IP will be reserved (leased) for if a&lt;br /&gt;
# DHCP decline message is received (seconds).&lt;br /&gt;
&lt;br /&gt;
#decline_time   3600            #default: 3600 (1 hour)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# The amount of time that an IP will be reserved (leased) for if an&lt;br /&gt;
# ARP conflct occurs. (seconds&lt;br /&gt;
&lt;br /&gt;
#conflict_time  3600            #default: 3600 (1 hour)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# How long an offered address is reserved (leased) in seconds&lt;br /&gt;
&lt;br /&gt;
#offer_time     60              #default: 60 (1 minute)&lt;br /&gt;
&lt;br /&gt;
# If a lease to be given is below this value, the full lease time is&lt;br /&gt;
# instead used (seconds).&lt;br /&gt;
&lt;br /&gt;
#min_lease      60              #defult: 60&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# The location of the leases file&lt;br /&gt;
&lt;br /&gt;
#lease_file     /var/lib/misc/udhcpd.leases     #defualt: /var/lib/misc/udhcpd.&lt;br /&gt;
leases&lt;br /&gt;
&lt;br /&gt;
# The location of the pid file&lt;br /&gt;
#pidfile        /var/run/udhcpd.pid     #default: /var/run/udhcpd.pid&lt;br /&gt;
&lt;br /&gt;
# Everytime udhcpd writes a leases file, the below script will be called.&lt;br /&gt;
# Useful for writing the lease file to flash every few hours.&lt;br /&gt;
&lt;br /&gt;
#notify_file                            #default: (no script)&lt;br /&gt;
&lt;br /&gt;
#notify_file    dumpleases      # &amp;lt;--- usefull for debugging&lt;br /&gt;
&lt;br /&gt;
# The following are bootp specific options, setable by udhcpd.&lt;br /&gt;
&lt;br /&gt;
#siaddr         192.168.0.22            #default: 0.0.0.0&lt;br /&gt;
&lt;br /&gt;
#sname          zorak                   #default: (none)&lt;br /&gt;
&lt;br /&gt;
#boot_file      /var/nfs_root           #default: (none)&lt;br /&gt;
&lt;br /&gt;
# The remainer of options are DHCP options and can be specifed with the&lt;br /&gt;
# keyword 'opt' or 'option'. If an option can take multiple items, such&lt;br /&gt;
# as the dns option, they can be listed on the same line, or multiple&lt;br /&gt;
# lines. The only option with a default is 'lease'.&lt;br /&gt;
&lt;br /&gt;
#Examles&lt;br /&gt;
opt     dns     192.168.0.202 &amp;lt;your APN's DNS server&amp;gt;&lt;br /&gt;
option  subnet  255.255.255.0&lt;br /&gt;
opt     router  192.168.0.202&lt;br /&gt;
opt     wins    192.168.0.202&lt;br /&gt;
#option dns     129.219.13.81   # appened to above DNS servers for a total of 3&lt;br /&gt;
option  domain  local&lt;br /&gt;
option  lease   864000          # 10 days of seconds&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Currently supported options, for more info, see options.c&lt;br /&gt;
#subnet&lt;br /&gt;
#timezone&lt;br /&gt;
#router&lt;br /&gt;
#timesvr&lt;br /&gt;
#namesvr&lt;br /&gt;
#dns&lt;br /&gt;
#logsvr&lt;br /&gt;
#cookiesvr&lt;br /&gt;
#lprsvr&lt;br /&gt;
#bootsize&lt;br /&gt;
#domain&lt;br /&gt;
#swapsvr&lt;br /&gt;
#rootpath&lt;br /&gt;
#ipttl&lt;br /&gt;
#mtu&lt;br /&gt;
#broadcast&lt;br /&gt;
#wins&lt;br /&gt;
#lease&lt;br /&gt;
#ntpsrv&lt;br /&gt;
#tftp&lt;br /&gt;
#bootfile&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice that I set the start and end of the IP lease block to 192.168.0.200.  If you follow the instructions at [[USB Networking]], this is the address that it assumes the host to be and the /etc/resolv.conf file points to this address to allow name resolution from your phone.&lt;br /&gt;
&lt;br /&gt;
The interface in this case is usb0.  This will have to be set differently if you are using Bluetooth.&lt;br /&gt;
&lt;br /&gt;
The dns is set to the FreeRunner's address, as well as my network operator's DNS server address.  You don't have to use your network operator's DNS address if you can find a caching nameserver for the FreeRunner.&lt;br /&gt;
&lt;br /&gt;
The router is set to the FreeRunner.&lt;br /&gt;
&lt;br /&gt;
== Turning your FreeRunner into a Network Address Translation (NAT) gateway ==&lt;br /&gt;
&lt;br /&gt;
I set up my FreeRunner so that it acts as a NAT gateway so that all traffic that goes to my network operator appears to originate from the phone.   I installed iptables to accomplish this:&lt;br /&gt;
&lt;br /&gt;
  opkg install iptables iptables-utils kernel-module-ipt-masquerade kernel-module-iptable-nat&lt;br /&gt;
&lt;br /&gt;
Once that is installed, I have the following script named firewall.sh that I use to set up the NAT once connected to the GPRS network:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
IPTABLES='/usr/sbin/iptables'&lt;br /&gt;
&lt;br /&gt;
# Set interface values&lt;br /&gt;
EXTIF='ppp0'&lt;br /&gt;
INTIF='usb0'&lt;br /&gt;
&lt;br /&gt;
# enable ip forwarding in the kernel&lt;br /&gt;
/bin/echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
&lt;br /&gt;
# flush rules and delete chains&lt;br /&gt;
$IPTABLES -F&lt;br /&gt;
$IPTABLES -X&lt;br /&gt;
&lt;br /&gt;
#Enable masquerading to allow LAN internet access&lt;br /&gt;
$IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
#Forward LAN traffic from LAN $INTIF to Internet $EXTIF&lt;br /&gt;
$IPTABLES -A FORWARD -i $INTIF -o $EXTIF -m state --state NEW,ESTABLISHED -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
#Allowing access to the SSH server&amp;quot;&lt;br /&gt;
#$IPTABLES -A INPUT --protocol tcp --dport 22 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
#Allowing access to the HTTP server&amp;quot;&lt;br /&gt;
#$IPTABLES -A INPUT --protocol tcp --dport 80 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# block out all other Internet access on $EXTIF&lt;br /&gt;
$IPTABLES -A INPUT -i $EXTIF -m state --state NEW,INVALID -j DROP&lt;br /&gt;
$IPTABLES -A FORWARD -i $EXTIF -m state --state NEW,INVALID -j DROP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
so once connected through GPRS, I run:&lt;br /&gt;
&lt;br /&gt;
  ./firewall.sh&lt;br /&gt;
&lt;br /&gt;
and then you should be able to connect to the internet from your computer!&lt;br /&gt;
&lt;br /&gt;
Of course this also works when sharing your WLAN connection. Just set EXTIF to eth0.&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[Manually_using_GPRS]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Documentation]]&lt;br /&gt;
[[Category:Application Developer]]&lt;br /&gt;
[[Category:Guides]]&lt;br /&gt;
[[Category:Networking]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Distributions</id>
		<title>Distributions</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Distributions"/>
				<updated>2008-08-19T16:11:46Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: /* Applications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|Distributions}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;float:right;width:200px;background-color:#FF6600;text-align:center;border-collapse:collapse;font-weight:bold&amp;quot; &lt;br /&gt;
|&amp;lt;font color=white&amp;gt;Distributions&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style='background-color:#333333;color:#FFFFFF'|&lt;br /&gt;
&amp;lt;div align=left&amp;gt;&lt;br /&gt;
* &amp;lt;font color='#BBBBBB'&amp;gt;Openmoko (official)&amp;lt;/font&amp;gt;&lt;br /&gt;
** [[Om 2008.8]]&lt;br /&gt;
** [[Om 2007.2]]&lt;br /&gt;
** [[Om 2007.1]]&lt;br /&gt;
** [[OpenmokoFramework|FSO]]&lt;br /&gt;
* &amp;lt;font color='#BBBBBB'&amp;gt;Community&amp;lt;/font&amp;gt;&lt;br /&gt;
** [[SHR]]&lt;br /&gt;
* &amp;lt;font color='#BBBBBB'&amp;gt;Other&amp;lt;/font&amp;gt;&lt;br /&gt;
** [[Qtopia]]&lt;br /&gt;
** [[Debian]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&amp;lt;noinclude&amp;gt;[[Category:Templates]]&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Openmoko distributions are designed to run on various mobile devices, with the primary aim of Openmoko Inc.'s [[Neo 1973]] and [[Neo FreeRunner]] phones. They are similar to Linux distributions; complete operating systems with user applications. You can install any of them on your phone or even have a multiboot system with two distributions installed. &lt;br /&gt;
&lt;br /&gt;
While the Openmoko distributions will run on [[Supported devices|other mobile devices]] too, some other software distributions will also run on the Openmoko Inc. phones (see below). &lt;br /&gt;
&lt;br /&gt;
For downloads see [[Latest Images]], for installation instructions see [[Flashing the Neo FreeRunner]].&lt;br /&gt;
&lt;br /&gt;
== About distributions ==&lt;br /&gt;
&lt;br /&gt;
To be technically precise, 2007.2, 2008.8, FSO and SHR of these are not directly independent distributions, but different 'release targets'. They are built out of different branches of the [[OpenEmbedded]] metadistribution source tree, e.g. 2007.2 and 2008.8 are to each other like Ubuntu Gutsy is to Kubuntu Hardy. &lt;br /&gt;
&lt;br /&gt;
One should only use feeds from packages of the same source-branch, else 'stuff will break', similar to like using .debs from Hardy on a Gutsy base system. Also note that there is NO supported upgrade path between these at the moment, thus updating by changing the feeds will most likely end in broken packages or even a unbootable system. Thus please always use [[dfu-util]] to switch between the different 'distributions' for now or install them in a dual-boot setup (e.g. via sdcard or NFS).&lt;br /&gt;
&lt;br /&gt;
== Openmoko Inc. driven release targets ==&lt;br /&gt;
&lt;br /&gt;
=== Om 2007.2 (GTK) ===&lt;br /&gt;
&lt;br /&gt;
[[Om 2007.2]] is for people who are familiar with the [http://www.gnome.org/mobile/ GNOME Mobile] initiative and who want to write applications that run on multiple devices running (parts of) GNOME Mobile. This includes Maemo, which runs on the Nokia Internet Tablets. The strength of the GTK+ stack is a UI and programming environment similar to what you run on your Linux desktop, if you’re into GNOME. The GTK+ has PIM applications based on the Evolution Data Server and runs the gsmd phone server. Although you can use them, the applications are still pretty rough und unfinished. Some people have problems with the stability of the phone server.&lt;br /&gt;
&lt;br /&gt;
* [[Om 2007.2]]&lt;br /&gt;
* Availabilty: [http://buildhost.openmoko.org/daily/ Official Buildhost] and [[MokoMakefile]] support for development builds&lt;br /&gt;
* [[Downloads#Openmoko_2007.2_images_.28GTK.29|Download]]&lt;br /&gt;
* Several videos of this stack by [http://uk.youtube.com/user/freeyourphone Youtube user freeyourphone] and [http://uk.youtube.com/watch?v=U05kZfURPig&amp;amp;NR=1 video review by BVB Tech]&lt;br /&gt;
This is the base-system which is installed on Freerunner when it leaves the factory.&lt;br /&gt;
&lt;br /&gt;
2007.2 development driven by openmoko inc. has basically stopped and resources are allocated in favor of 2008.8, while the community currently does the effort to 'rescue' the 2007.2 telephony apps and pull them to the future middleware from FSO (see SHR).&lt;br /&gt;
thus patches are still welcome, especially if they help development of SHR.&lt;br /&gt;
&lt;br /&gt;
=== Om 2008.8 (ASU, April/August Software Update) ===&lt;br /&gt;
&lt;br /&gt;
Om 2008.8 has been started to integrate the [http://trolltech.com/products/qtopia Qtopia] stack - on X11 - with a new set of graphically pleasing applications based on the Enlightenment Foundation Libraries. ASU is the internal name and is known as Om 2008.8 upon its release on August 8, 2008.  Qtopia is a more mature product than the GNOME Mobile stack and you can expect all the standard feature phone applications to work in a solid way. It uses the Qtopia phone server. Since - contrary to standard Qtopia - it does not directly use the framebuffer, non-Qt applications can safely share the screen with Qt applications.&lt;br /&gt;
&lt;br /&gt;
* [[Om2008.8|Om 2008.8]]&lt;br /&gt;
* [[Downloads#Openmoko_2008.8_images_.28ASU.29|Download]]&lt;br /&gt;
&lt;br /&gt;
=== FSO - freesmartphone.org ===&lt;br /&gt;
&lt;br /&gt;
FSO has been started to overcome the deficiencies both of the 2007.2 and the 2008.8 stack, namely to come up with an extensible framework that gives developers the infrastructure they need to create solid and exciting software products based on the Openmoko platform. An infrastructure that supports competing UIs while we can collaborate on developing services, making the framework strong . Here, the focus is on stable highlevel services that you can access from whatever language or UI that supports [http://dbus.freesmartphone.org/ dbus]. People report that despite its infancy, e.g. the phone server part in FSO is already more solid than anywhere else.&lt;br /&gt;
&lt;br /&gt;
It is not really intended as future release-target, but used as a 'vessel' or 'container' for the development and testing of the new, future middleware.&amp;lt;br&amp;gt;&lt;br /&gt;
The applications installed are intended as test-tools for the new middleware and not as fully featured, end user oriented applications. (even if it looks that way sometimes)&lt;br /&gt;
&lt;br /&gt;
* [[FSO]]&lt;br /&gt;
* [http://trac.freesmartphone.org:8000/trac-example  Development tracker]&lt;br /&gt;
* [http://downloads.openmoko.org/framework/milestone2/ Download milestone 2]&lt;br /&gt;
* [http://freesmartphone.org freesmartphone.org]&lt;br /&gt;
* [http://shr.bearstech.com/ fso-testing and fso-unstable images and feeds] (maintained by Rod Whitby, MokoMakefile author)&lt;br /&gt;
&lt;br /&gt;
== Openmoko Community driven release targets ==&lt;br /&gt;
&lt;br /&gt;
=== SHR - Stable Hybrid Release ===&lt;br /&gt;
&lt;br /&gt;
Stable Hybrid Release is a combination of the middleware from FSO, some of the 2007.2 GTK software (telephony-ui, pim), and Om2008.8 that provides all of the functionality of the 2007.2 software, but with the stability of the FSO.&lt;br /&gt;
&lt;br /&gt;
* [[Stable Hybrid Release]]&lt;br /&gt;
&lt;br /&gt;
== Non-Openmoko distributions ==&lt;br /&gt;
&lt;br /&gt;
These are not Openmoko (and OE) based distributions. These are an alternatives you can run on your Openmoko phones.&lt;br /&gt;
&lt;br /&gt;
=== Qtopia ===&lt;br /&gt;
&lt;br /&gt;
The Qtopia distribution from [http://www.trolltech.com Trolltech], it aims to provide a ready-to use image for Openmoko devices. &lt;br /&gt;
&lt;br /&gt;
* [[Qtopia]]&lt;br /&gt;
* Download: [http://www.qtopia.net/modules/mydownloads/viewcat.php?cid=6 Qtopia.net]&lt;br /&gt;
&lt;br /&gt;
=== Debian ===&lt;br /&gt;
&lt;br /&gt;
Debian Linux, the whole distribution, on a mobile phone.&lt;br /&gt;
&lt;br /&gt;
* [[Debian]]&lt;br /&gt;
&lt;br /&gt;
== Features by distribution/release target ==&lt;br /&gt;
&lt;br /&gt;
=== Connectivity ===&lt;br /&gt;
&lt;br /&gt;
{| border=1 width=100% |&lt;br /&gt;
| width=14%| || width=14%|2007.2 || width=14%|FSO || width=14%|Om2008.8 || width=14%|SHR || width=14%|Qtopia || Debian&lt;br /&gt;
|-&lt;br /&gt;
| Telephony || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| SMS || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| [[GPRS]] || Not through UI || Not through UI || Not through UI || N/A || No (3) || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| WiFi || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || Not through UI || style=&amp;quot;background:lightgreen;&amp;quot; | Yes (*) || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes ||style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| VoIP || ?? || ?? || ?? || ?? || ?? || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| Bluetooth || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || No || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| GPS || style=&amp;quot;background:lightgreen;&amp;quot; | Yes (1) || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes (1) || N/A || No || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===  User Interaction ===&lt;br /&gt;
&lt;br /&gt;
{| border=1 width=100% |&lt;br /&gt;
| width=14%| || width=14%|2007.2 || width=14%|FSO || width=14%|Om2008.8 || width=14%|SHR || width=14%|Qtopia || Debian&lt;br /&gt;
|-&lt;br /&gt;
| Stylus friendly || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| Finger friendly || Partially || Partially || Partially || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || No&lt;br /&gt;
|-&lt;br /&gt;
| Accelerometer || No || No || style=&amp;quot;background:lightgreen;&amp;quot; | Yes[[Gestures|(1)]]  || N/A || No || No&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
{| border=1 width=100% |&lt;br /&gt;
| width=14%| || width=14%|2007.2 || width=14%|FSO || width=14%|Om2008.8 || width=14%|SHR || width=14%|Qtopia || Debian&lt;br /&gt;
|-&lt;br /&gt;
| Terminal || Basic (2) || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes (1) || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| PIM || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || No || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| Phonebook || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| Dialer || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| Web Browser || style=&amp;quot;background:lightgreen;&amp;quot; | Yes (1) || ? || style=&amp;quot;background:lightgreen;&amp;quot; | Yes (1) || ? || No || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| Mail Client || ? || ? || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || ? || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| XMPP Client || style=&amp;quot;background:lightgreen;&amp;quot; | Yes (1) || ? || style=&amp;quot;background:lightgreen;&amp;quot; | Yes [[IM#Implementation_Recommendations|(1)]] || ? || No || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| Media Player || ? || ? || ? || ? || ? || ? &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Toolkits / Runtimes ===&lt;br /&gt;
{| border=1 width=100% |&lt;br /&gt;
| width=14%| || width=14%|2007.2 || width=14%|FSO || width=14%|Om2008.8 || width=14%|SHR || width=14%|Qtopia || Debian&lt;br /&gt;
|-&lt;br /&gt;
| GTK+ || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || No || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| QT/Qtopia || No || style=&amp;quot;background:lightgreen;&amp;quot; | Yes? || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes? || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| Middleware || gsmd/neod || freesmartphone.org || qtopia-x11 || freesmartphone.org || qtopia || freesmartphone.org&lt;br /&gt;
|-&lt;br /&gt;
| [[Java]] || Jalimo || Jalimo || Jalimo || ? || ? || No&lt;br /&gt;
|-&lt;br /&gt;
| [[Python]] || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || ? || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| [[Mono]] || style=&amp;quot;background:lightgreen;&amp;quot; | Yes(1) || ? || style=&amp;quot;background:lightgreen;&amp;quot; | Yes(1) || ? || ? || ? &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Footnotes:&lt;br /&gt;
&lt;br /&gt;
(1) works, but need additional software to be installed&lt;br /&gt;
&lt;br /&gt;
(2) unusable due to lack of certain keyboard characters (unless you [[Switching_Keyboards#Matchbox_keyboard|install matchbox-keyboard]])&lt;br /&gt;
&lt;br /&gt;
(3) there is a UI but it crashes the device when used.&lt;br /&gt;
&lt;br /&gt;
(*) unstable&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
Original distribution descriptions are from Mickey Lauer's [http://www.vanille-media.de/site/index.php/2008/06/28/gtk-asu-fso-tmtla/ GTK, ASU, FSO, TMTLA!].&lt;br /&gt;
&lt;br /&gt;
[[Category:Distributions| ]]&lt;br /&gt;
[[Category:Documentation]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Distributions</id>
		<title>Distributions</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Distributions"/>
				<updated>2008-08-19T16:06:56Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: /* Connectivity */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|Distributions}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;float:right;width:200px;background-color:#FF6600;text-align:center;border-collapse:collapse;font-weight:bold&amp;quot; &lt;br /&gt;
|&amp;lt;font color=white&amp;gt;Distributions&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style='background-color:#333333;color:#FFFFFF'|&lt;br /&gt;
&amp;lt;div align=left&amp;gt;&lt;br /&gt;
* &amp;lt;font color='#BBBBBB'&amp;gt;Openmoko (official)&amp;lt;/font&amp;gt;&lt;br /&gt;
** [[Om 2008.8]]&lt;br /&gt;
** [[Om 2007.2]]&lt;br /&gt;
** [[Om 2007.1]]&lt;br /&gt;
** [[OpenmokoFramework|FSO]]&lt;br /&gt;
* &amp;lt;font color='#BBBBBB'&amp;gt;Community&amp;lt;/font&amp;gt;&lt;br /&gt;
** [[SHR]]&lt;br /&gt;
* &amp;lt;font color='#BBBBBB'&amp;gt;Other&amp;lt;/font&amp;gt;&lt;br /&gt;
** [[Qtopia]]&lt;br /&gt;
** [[Debian]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&amp;lt;noinclude&amp;gt;[[Category:Templates]]&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Openmoko distributions are designed to run on various mobile devices, with the primary aim of Openmoko Inc.'s [[Neo 1973]] and [[Neo FreeRunner]] phones. They are similar to Linux distributions; complete operating systems with user applications. You can install any of them on your phone or even have a multiboot system with two distributions installed. &lt;br /&gt;
&lt;br /&gt;
While the Openmoko distributions will run on [[Supported devices|other mobile devices]] too, some other software distributions will also run on the Openmoko Inc. phones (see below). &lt;br /&gt;
&lt;br /&gt;
For downloads see [[Latest Images]], for installation instructions see [[Flashing the Neo FreeRunner]].&lt;br /&gt;
&lt;br /&gt;
== About distributions ==&lt;br /&gt;
&lt;br /&gt;
To be technically precise, 2007.2, 2008.8, FSO and SHR of these are not directly independent distributions, but different 'release targets'. They are built out of different branches of the [[OpenEmbedded]] metadistribution source tree, e.g. 2007.2 and 2008.8 are to each other like Ubuntu Gutsy is to Kubuntu Hardy. &lt;br /&gt;
&lt;br /&gt;
One should only use feeds from packages of the same source-branch, else 'stuff will break', similar to like using .debs from Hardy on a Gutsy base system. Also note that there is NO supported upgrade path between these at the moment, thus updating by changing the feeds will most likely end in broken packages or even a unbootable system. Thus please always use [[dfu-util]] to switch between the different 'distributions' for now or install them in a dual-boot setup (e.g. via sdcard or NFS).&lt;br /&gt;
&lt;br /&gt;
== Openmoko Inc. driven release targets ==&lt;br /&gt;
&lt;br /&gt;
=== Om 2007.2 (GTK) ===&lt;br /&gt;
&lt;br /&gt;
[[Om 2007.2]] is for people who are familiar with the [http://www.gnome.org/mobile/ GNOME Mobile] initiative and who want to write applications that run on multiple devices running (parts of) GNOME Mobile. This includes Maemo, which runs on the Nokia Internet Tablets. The strength of the GTK+ stack is a UI and programming environment similar to what you run on your Linux desktop, if you’re into GNOME. The GTK+ has PIM applications based on the Evolution Data Server and runs the gsmd phone server. Although you can use them, the applications are still pretty rough und unfinished. Some people have problems with the stability of the phone server.&lt;br /&gt;
&lt;br /&gt;
* [[Om 2007.2]]&lt;br /&gt;
* Availabilty: [http://buildhost.openmoko.org/daily/ Official Buildhost] and [[MokoMakefile]] support for development builds&lt;br /&gt;
* [[Downloads#Openmoko_2007.2_images_.28GTK.29|Download]]&lt;br /&gt;
* Several videos of this stack by [http://uk.youtube.com/user/freeyourphone Youtube user freeyourphone] and [http://uk.youtube.com/watch?v=U05kZfURPig&amp;amp;NR=1 video review by BVB Tech]&lt;br /&gt;
This is the base-system which is installed on Freerunner when it leaves the factory.&lt;br /&gt;
&lt;br /&gt;
2007.2 development driven by openmoko inc. has basically stopped and resources are allocated in favor of 2008.8, while the community currently does the effort to 'rescue' the 2007.2 telephony apps and pull them to the future middleware from FSO (see SHR).&lt;br /&gt;
thus patches are still welcome, especially if they help development of SHR.&lt;br /&gt;
&lt;br /&gt;
=== Om 2008.8 (ASU, April/August Software Update) ===&lt;br /&gt;
&lt;br /&gt;
Om 2008.8 has been started to integrate the [http://trolltech.com/products/qtopia Qtopia] stack - on X11 - with a new set of graphically pleasing applications based on the Enlightenment Foundation Libraries. ASU is the internal name and is known as Om 2008.8 upon its release on August 8, 2008.  Qtopia is a more mature product than the GNOME Mobile stack and you can expect all the standard feature phone applications to work in a solid way. It uses the Qtopia phone server. Since - contrary to standard Qtopia - it does not directly use the framebuffer, non-Qt applications can safely share the screen with Qt applications.&lt;br /&gt;
&lt;br /&gt;
* [[Om2008.8|Om 2008.8]]&lt;br /&gt;
* [[Downloads#Openmoko_2008.8_images_.28ASU.29|Download]]&lt;br /&gt;
&lt;br /&gt;
=== FSO - freesmartphone.org ===&lt;br /&gt;
&lt;br /&gt;
FSO has been started to overcome the deficiencies both of the 2007.2 and the 2008.8 stack, namely to come up with an extensible framework that gives developers the infrastructure they need to create solid and exciting software products based on the Openmoko platform. An infrastructure that supports competing UIs while we can collaborate on developing services, making the framework strong . Here, the focus is on stable highlevel services that you can access from whatever language or UI that supports [http://dbus.freesmartphone.org/ dbus]. People report that despite its infancy, e.g. the phone server part in FSO is already more solid than anywhere else.&lt;br /&gt;
&lt;br /&gt;
It is not really intended as future release-target, but used as a 'vessel' or 'container' for the development and testing of the new, future middleware.&amp;lt;br&amp;gt;&lt;br /&gt;
The applications installed are intended as test-tools for the new middleware and not as fully featured, end user oriented applications. (even if it looks that way sometimes)&lt;br /&gt;
&lt;br /&gt;
* [[FSO]]&lt;br /&gt;
* [http://trac.freesmartphone.org:8000/trac-example  Development tracker]&lt;br /&gt;
* [http://downloads.openmoko.org/framework/milestone2/ Download milestone 2]&lt;br /&gt;
* [http://freesmartphone.org freesmartphone.org]&lt;br /&gt;
* [http://shr.bearstech.com/ fso-testing and fso-unstable images and feeds] (maintained by Rod Whitby, MokoMakefile author)&lt;br /&gt;
&lt;br /&gt;
== Openmoko Community driven release targets ==&lt;br /&gt;
&lt;br /&gt;
=== SHR - Stable Hybrid Release ===&lt;br /&gt;
&lt;br /&gt;
Stable Hybrid Release is a combination of the middleware from FSO, some of the 2007.2 GTK software (telephony-ui, pim), and Om2008.8 that provides all of the functionality of the 2007.2 software, but with the stability of the FSO.&lt;br /&gt;
&lt;br /&gt;
* [[Stable Hybrid Release]]&lt;br /&gt;
&lt;br /&gt;
== Non-Openmoko distributions ==&lt;br /&gt;
&lt;br /&gt;
These are not Openmoko (and OE) based distributions. These are an alternatives you can run on your Openmoko phones.&lt;br /&gt;
&lt;br /&gt;
=== Qtopia ===&lt;br /&gt;
&lt;br /&gt;
The Qtopia distribution from [http://www.trolltech.com Trolltech], it aims to provide a ready-to use image for Openmoko devices. &lt;br /&gt;
&lt;br /&gt;
* [[Qtopia]]&lt;br /&gt;
* Download: [http://www.qtopia.net/modules/mydownloads/viewcat.php?cid=6 Qtopia.net]&lt;br /&gt;
&lt;br /&gt;
=== Debian ===&lt;br /&gt;
&lt;br /&gt;
Debian Linux, the whole distribution, on a mobile phone.&lt;br /&gt;
&lt;br /&gt;
* [[Debian]]&lt;br /&gt;
&lt;br /&gt;
== Features by distribution/release target ==&lt;br /&gt;
&lt;br /&gt;
=== Connectivity ===&lt;br /&gt;
&lt;br /&gt;
{| border=1 width=100% |&lt;br /&gt;
| width=14%| || width=14%|2007.2 || width=14%|FSO || width=14%|Om2008.8 || width=14%|SHR || width=14%|Qtopia || Debian&lt;br /&gt;
|-&lt;br /&gt;
| Telephony || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| SMS || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| [[GPRS]] || Not through UI || Not through UI || Not through UI || N/A || No (3) || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| WiFi || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || Not through UI || style=&amp;quot;background:lightgreen;&amp;quot; | Yes (*) || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes ||style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| VoIP || ?? || ?? || ?? || ?? || ?? || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| Bluetooth || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || No || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| GPS || style=&amp;quot;background:lightgreen;&amp;quot; | Yes (1) || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes (1) || N/A || No || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===  User Interaction ===&lt;br /&gt;
&lt;br /&gt;
{| border=1 width=100% |&lt;br /&gt;
| width=14%| || width=14%|2007.2 || width=14%|FSO || width=14%|Om2008.8 || width=14%|SHR || width=14%|Qtopia || Debian&lt;br /&gt;
|-&lt;br /&gt;
| Stylus friendly || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| Finger friendly || Partially || Partially || Partially || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || No&lt;br /&gt;
|-&lt;br /&gt;
| Accelerometer || No || No || style=&amp;quot;background:lightgreen;&amp;quot; | Yes[[Gestures|(1)]]  || N/A || No || No&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
{| border=1 width=100% |&lt;br /&gt;
| width=14%| || width=14%|2007.2 || width=14%|FSO || width=14%|Om2008.8 || width=14%|SHR || width=14%|Qtopia || Debian&lt;br /&gt;
|-&lt;br /&gt;
| Terminal || Basic (2) || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes (1) || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| PIM || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || No || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| Phonebook || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| Dialer || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| Web Browser || style=&amp;quot;background:lightgreen;&amp;quot; | Yes (1) || ? || style=&amp;quot;background:lightgreen;&amp;quot; | Yes (1) || ? || No || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| Mail Client || ? || ? || ? || ? || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| XMPP Client || style=&amp;quot;background:lightgreen;&amp;quot; | Yes (1) || ? || ? || ? || No || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| Media Player || ? || ? || ? || ? || ? || ? &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Toolkits / Runtimes ===&lt;br /&gt;
{| border=1 width=100% |&lt;br /&gt;
| width=14%| || width=14%|2007.2 || width=14%|FSO || width=14%|Om2008.8 || width=14%|SHR || width=14%|Qtopia || Debian&lt;br /&gt;
|-&lt;br /&gt;
| GTK+ || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || No || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| QT/Qtopia || No || style=&amp;quot;background:lightgreen;&amp;quot; | Yes? || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes? || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| Middleware || gsmd/neod || freesmartphone.org || qtopia-x11 || freesmartphone.org || qtopia || freesmartphone.org&lt;br /&gt;
|-&lt;br /&gt;
| [[Java]] || Jalimo || Jalimo || Jalimo || ? || ? || No&lt;br /&gt;
|-&lt;br /&gt;
| [[Python]] || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || ? || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| [[Mono]] || style=&amp;quot;background:lightgreen;&amp;quot; | Yes(1) || ? || style=&amp;quot;background:lightgreen;&amp;quot; | Yes(1) || ? || ? || ? &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Footnotes:&lt;br /&gt;
&lt;br /&gt;
(1) works, but need additional software to be installed&lt;br /&gt;
&lt;br /&gt;
(2) unusable due to lack of certain keyboard characters (unless you [[Switching_Keyboards#Matchbox_keyboard|install matchbox-keyboard]])&lt;br /&gt;
&lt;br /&gt;
(3) there is a UI but it crashes the device when used.&lt;br /&gt;
&lt;br /&gt;
(*) unstable&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
Original distribution descriptions are from Mickey Lauer's [http://www.vanille-media.de/site/index.php/2008/06/28/gtk-asu-fso-tmtla/ GTK, ASU, FSO, TMTLA!].&lt;br /&gt;
&lt;br /&gt;
[[Category:Distributions| ]]&lt;br /&gt;
[[Category:Documentation]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Distributions</id>
		<title>Distributions</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Distributions"/>
				<updated>2008-08-19T16:05:55Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: /* User Interaction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|Distributions}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;float:right;width:200px;background-color:#FF6600;text-align:center;border-collapse:collapse;font-weight:bold&amp;quot; &lt;br /&gt;
|&amp;lt;font color=white&amp;gt;Distributions&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style='background-color:#333333;color:#FFFFFF'|&lt;br /&gt;
&amp;lt;div align=left&amp;gt;&lt;br /&gt;
* &amp;lt;font color='#BBBBBB'&amp;gt;Openmoko (official)&amp;lt;/font&amp;gt;&lt;br /&gt;
** [[Om 2008.8]]&lt;br /&gt;
** [[Om 2007.2]]&lt;br /&gt;
** [[Om 2007.1]]&lt;br /&gt;
** [[OpenmokoFramework|FSO]]&lt;br /&gt;
* &amp;lt;font color='#BBBBBB'&amp;gt;Community&amp;lt;/font&amp;gt;&lt;br /&gt;
** [[SHR]]&lt;br /&gt;
* &amp;lt;font color='#BBBBBB'&amp;gt;Other&amp;lt;/font&amp;gt;&lt;br /&gt;
** [[Qtopia]]&lt;br /&gt;
** [[Debian]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&amp;lt;noinclude&amp;gt;[[Category:Templates]]&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Openmoko distributions are designed to run on various mobile devices, with the primary aim of Openmoko Inc.'s [[Neo 1973]] and [[Neo FreeRunner]] phones. They are similar to Linux distributions; complete operating systems with user applications. You can install any of them on your phone or even have a multiboot system with two distributions installed. &lt;br /&gt;
&lt;br /&gt;
While the Openmoko distributions will run on [[Supported devices|other mobile devices]] too, some other software distributions will also run on the Openmoko Inc. phones (see below). &lt;br /&gt;
&lt;br /&gt;
For downloads see [[Latest Images]], for installation instructions see [[Flashing the Neo FreeRunner]].&lt;br /&gt;
&lt;br /&gt;
== About distributions ==&lt;br /&gt;
&lt;br /&gt;
To be technically precise, 2007.2, 2008.8, FSO and SHR of these are not directly independent distributions, but different 'release targets'. They are built out of different branches of the [[OpenEmbedded]] metadistribution source tree, e.g. 2007.2 and 2008.8 are to each other like Ubuntu Gutsy is to Kubuntu Hardy. &lt;br /&gt;
&lt;br /&gt;
One should only use feeds from packages of the same source-branch, else 'stuff will break', similar to like using .debs from Hardy on a Gutsy base system. Also note that there is NO supported upgrade path between these at the moment, thus updating by changing the feeds will most likely end in broken packages or even a unbootable system. Thus please always use [[dfu-util]] to switch between the different 'distributions' for now or install them in a dual-boot setup (e.g. via sdcard or NFS).&lt;br /&gt;
&lt;br /&gt;
== Openmoko Inc. driven release targets ==&lt;br /&gt;
&lt;br /&gt;
=== Om 2007.2 (GTK) ===&lt;br /&gt;
&lt;br /&gt;
[[Om 2007.2]] is for people who are familiar with the [http://www.gnome.org/mobile/ GNOME Mobile] initiative and who want to write applications that run on multiple devices running (parts of) GNOME Mobile. This includes Maemo, which runs on the Nokia Internet Tablets. The strength of the GTK+ stack is a UI and programming environment similar to what you run on your Linux desktop, if you’re into GNOME. The GTK+ has PIM applications based on the Evolution Data Server and runs the gsmd phone server. Although you can use them, the applications are still pretty rough und unfinished. Some people have problems with the stability of the phone server.&lt;br /&gt;
&lt;br /&gt;
* [[Om 2007.2]]&lt;br /&gt;
* Availabilty: [http://buildhost.openmoko.org/daily/ Official Buildhost] and [[MokoMakefile]] support for development builds&lt;br /&gt;
* [[Downloads#Openmoko_2007.2_images_.28GTK.29|Download]]&lt;br /&gt;
* Several videos of this stack by [http://uk.youtube.com/user/freeyourphone Youtube user freeyourphone] and [http://uk.youtube.com/watch?v=U05kZfURPig&amp;amp;NR=1 video review by BVB Tech]&lt;br /&gt;
This is the base-system which is installed on Freerunner when it leaves the factory.&lt;br /&gt;
&lt;br /&gt;
2007.2 development driven by openmoko inc. has basically stopped and resources are allocated in favor of 2008.8, while the community currently does the effort to 'rescue' the 2007.2 telephony apps and pull them to the future middleware from FSO (see SHR).&lt;br /&gt;
thus patches are still welcome, especially if they help development of SHR.&lt;br /&gt;
&lt;br /&gt;
=== Om 2008.8 (ASU, April/August Software Update) ===&lt;br /&gt;
&lt;br /&gt;
Om 2008.8 has been started to integrate the [http://trolltech.com/products/qtopia Qtopia] stack - on X11 - with a new set of graphically pleasing applications based on the Enlightenment Foundation Libraries. ASU is the internal name and is known as Om 2008.8 upon its release on August 8, 2008.  Qtopia is a more mature product than the GNOME Mobile stack and you can expect all the standard feature phone applications to work in a solid way. It uses the Qtopia phone server. Since - contrary to standard Qtopia - it does not directly use the framebuffer, non-Qt applications can safely share the screen with Qt applications.&lt;br /&gt;
&lt;br /&gt;
* [[Om2008.8|Om 2008.8]]&lt;br /&gt;
* [[Downloads#Openmoko_2008.8_images_.28ASU.29|Download]]&lt;br /&gt;
&lt;br /&gt;
=== FSO - freesmartphone.org ===&lt;br /&gt;
&lt;br /&gt;
FSO has been started to overcome the deficiencies both of the 2007.2 and the 2008.8 stack, namely to come up with an extensible framework that gives developers the infrastructure they need to create solid and exciting software products based on the Openmoko platform. An infrastructure that supports competing UIs while we can collaborate on developing services, making the framework strong . Here, the focus is on stable highlevel services that you can access from whatever language or UI that supports [http://dbus.freesmartphone.org/ dbus]. People report that despite its infancy, e.g. the phone server part in FSO is already more solid than anywhere else.&lt;br /&gt;
&lt;br /&gt;
It is not really intended as future release-target, but used as a 'vessel' or 'container' for the development and testing of the new, future middleware.&amp;lt;br&amp;gt;&lt;br /&gt;
The applications installed are intended as test-tools for the new middleware and not as fully featured, end user oriented applications. (even if it looks that way sometimes)&lt;br /&gt;
&lt;br /&gt;
* [[FSO]]&lt;br /&gt;
* [http://trac.freesmartphone.org:8000/trac-example  Development tracker]&lt;br /&gt;
* [http://downloads.openmoko.org/framework/milestone2/ Download milestone 2]&lt;br /&gt;
* [http://freesmartphone.org freesmartphone.org]&lt;br /&gt;
* [http://shr.bearstech.com/ fso-testing and fso-unstable images and feeds] (maintained by Rod Whitby, MokoMakefile author)&lt;br /&gt;
&lt;br /&gt;
== Openmoko Community driven release targets ==&lt;br /&gt;
&lt;br /&gt;
=== SHR - Stable Hybrid Release ===&lt;br /&gt;
&lt;br /&gt;
Stable Hybrid Release is a combination of the middleware from FSO, some of the 2007.2 GTK software (telephony-ui, pim), and Om2008.8 that provides all of the functionality of the 2007.2 software, but with the stability of the FSO.&lt;br /&gt;
&lt;br /&gt;
* [[Stable Hybrid Release]]&lt;br /&gt;
&lt;br /&gt;
== Non-Openmoko distributions ==&lt;br /&gt;
&lt;br /&gt;
These are not Openmoko (and OE) based distributions. These are an alternatives you can run on your Openmoko phones.&lt;br /&gt;
&lt;br /&gt;
=== Qtopia ===&lt;br /&gt;
&lt;br /&gt;
The Qtopia distribution from [http://www.trolltech.com Trolltech], it aims to provide a ready-to use image for Openmoko devices. &lt;br /&gt;
&lt;br /&gt;
* [[Qtopia]]&lt;br /&gt;
* Download: [http://www.qtopia.net/modules/mydownloads/viewcat.php?cid=6 Qtopia.net]&lt;br /&gt;
&lt;br /&gt;
=== Debian ===&lt;br /&gt;
&lt;br /&gt;
Debian Linux, the whole distribution, on a mobile phone.&lt;br /&gt;
&lt;br /&gt;
* [[Debian]]&lt;br /&gt;
&lt;br /&gt;
== Features by distribution/release target ==&lt;br /&gt;
&lt;br /&gt;
=== Connectivity ===&lt;br /&gt;
&lt;br /&gt;
{| border=1 width=100% |&lt;br /&gt;
| width=14%| || width=14%|2007.2 || width=14%|FSO || width=14%|Om2008.8 || width=14%|SHR || width=14%|Qtopia || Debian&lt;br /&gt;
|-&lt;br /&gt;
| Telephony || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| SMS || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| GPRS || Not through UI || Not through UI || Not through UI || N/A || No (3) || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| WiFi || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || Not through UI || style=&amp;quot;background:lightgreen;&amp;quot; | Yes (*) || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes ||style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| VoIP || ?? || ?? || ?? || ?? || ?? || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| Bluetooth || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || No || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| GPS || style=&amp;quot;background:lightgreen;&amp;quot; | Yes (1) || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes (1) || N/A || No || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===  User Interaction ===&lt;br /&gt;
&lt;br /&gt;
{| border=1 width=100% |&lt;br /&gt;
| width=14%| || width=14%|2007.2 || width=14%|FSO || width=14%|Om2008.8 || width=14%|SHR || width=14%|Qtopia || Debian&lt;br /&gt;
|-&lt;br /&gt;
| Stylus friendly || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| Finger friendly || Partially || Partially || Partially || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || No&lt;br /&gt;
|-&lt;br /&gt;
| Accelerometer || No || No || style=&amp;quot;background:lightgreen;&amp;quot; | Yes[[Gestures|(1)]]  || N/A || No || No&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
{| border=1 width=100% |&lt;br /&gt;
| width=14%| || width=14%|2007.2 || width=14%|FSO || width=14%|Om2008.8 || width=14%|SHR || width=14%|Qtopia || Debian&lt;br /&gt;
|-&lt;br /&gt;
| Terminal || Basic (2) || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes (1) || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| PIM || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || No || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| Phonebook || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| Dialer || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| Web Browser || style=&amp;quot;background:lightgreen;&amp;quot; | Yes (1) || ? || style=&amp;quot;background:lightgreen;&amp;quot; | Yes (1) || ? || No || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| Mail Client || ? || ? || ? || ? || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| XMPP Client || style=&amp;quot;background:lightgreen;&amp;quot; | Yes (1) || ? || ? || ? || No || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| Media Player || ? || ? || ? || ? || ? || ? &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Toolkits / Runtimes ===&lt;br /&gt;
{| border=1 width=100% |&lt;br /&gt;
| width=14%| || width=14%|2007.2 || width=14%|FSO || width=14%|Om2008.8 || width=14%|SHR || width=14%|Qtopia || Debian&lt;br /&gt;
|-&lt;br /&gt;
| GTK+ || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || No || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| QT/Qtopia || No || style=&amp;quot;background:lightgreen;&amp;quot; | Yes? || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes? || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| Middleware || gsmd/neod || freesmartphone.org || qtopia-x11 || freesmartphone.org || qtopia || freesmartphone.org&lt;br /&gt;
|-&lt;br /&gt;
| [[Java]] || Jalimo || Jalimo || Jalimo || ? || ? || No&lt;br /&gt;
|-&lt;br /&gt;
| [[Python]] || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || ? || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| [[Mono]] || style=&amp;quot;background:lightgreen;&amp;quot; | Yes(1) || ? || style=&amp;quot;background:lightgreen;&amp;quot; | Yes(1) || ? || ? || ? &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Footnotes:&lt;br /&gt;
&lt;br /&gt;
(1) works, but need additional software to be installed&lt;br /&gt;
&lt;br /&gt;
(2) unusable due to lack of certain keyboard characters (unless you [[Switching_Keyboards#Matchbox_keyboard|install matchbox-keyboard]])&lt;br /&gt;
&lt;br /&gt;
(3) there is a UI but it crashes the device when used.&lt;br /&gt;
&lt;br /&gt;
(*) unstable&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
Original distribution descriptions are from Mickey Lauer's [http://www.vanille-media.de/site/index.php/2008/06/28/gtk-asu-fso-tmtla/ GTK, ASU, FSO, TMTLA!].&lt;br /&gt;
&lt;br /&gt;
[[Category:Distributions| ]]&lt;br /&gt;
[[Category:Documentation]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Distributions</id>
		<title>Distributions</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Distributions"/>
				<updated>2008-08-19T16:04:22Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: /* Toolkits / Runtimes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|Distributions}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;float:right;width:200px;background-color:#FF6600;text-align:center;border-collapse:collapse;font-weight:bold&amp;quot; &lt;br /&gt;
|&amp;lt;font color=white&amp;gt;Distributions&amp;lt;/font&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
! style='background-color:#333333;color:#FFFFFF'|&lt;br /&gt;
&amp;lt;div align=left&amp;gt;&lt;br /&gt;
* &amp;lt;font color='#BBBBBB'&amp;gt;Openmoko (official)&amp;lt;/font&amp;gt;&lt;br /&gt;
** [[Om 2008.8]]&lt;br /&gt;
** [[Om 2007.2]]&lt;br /&gt;
** [[Om 2007.1]]&lt;br /&gt;
** [[OpenmokoFramework|FSO]]&lt;br /&gt;
* &amp;lt;font color='#BBBBBB'&amp;gt;Community&amp;lt;/font&amp;gt;&lt;br /&gt;
** [[SHR]]&lt;br /&gt;
* &amp;lt;font color='#BBBBBB'&amp;gt;Other&amp;lt;/font&amp;gt;&lt;br /&gt;
** [[Qtopia]]&lt;br /&gt;
** [[Debian]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|}&amp;lt;noinclude&amp;gt;[[Category:Templates]]&amp;lt;/noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Openmoko distributions are designed to run on various mobile devices, with the primary aim of Openmoko Inc.'s [[Neo 1973]] and [[Neo FreeRunner]] phones. They are similar to Linux distributions; complete operating systems with user applications. You can install any of them on your phone or even have a multiboot system with two distributions installed. &lt;br /&gt;
&lt;br /&gt;
While the Openmoko distributions will run on [[Supported devices|other mobile devices]] too, some other software distributions will also run on the Openmoko Inc. phones (see below). &lt;br /&gt;
&lt;br /&gt;
For downloads see [[Latest Images]], for installation instructions see [[Flashing the Neo FreeRunner]].&lt;br /&gt;
&lt;br /&gt;
== About distributions ==&lt;br /&gt;
&lt;br /&gt;
To be technically precise, 2007.2, 2008.8, FSO and SHR of these are not directly independent distributions, but different 'release targets'. They are built out of different branches of the [[OpenEmbedded]] metadistribution source tree, e.g. 2007.2 and 2008.8 are to each other like Ubuntu Gutsy is to Kubuntu Hardy. &lt;br /&gt;
&lt;br /&gt;
One should only use feeds from packages of the same source-branch, else 'stuff will break', similar to like using .debs from Hardy on a Gutsy base system. Also note that there is NO supported upgrade path between these at the moment, thus updating by changing the feeds will most likely end in broken packages or even a unbootable system. Thus please always use [[dfu-util]] to switch between the different 'distributions' for now or install them in a dual-boot setup (e.g. via sdcard or NFS).&lt;br /&gt;
&lt;br /&gt;
== Openmoko Inc. driven release targets ==&lt;br /&gt;
&lt;br /&gt;
=== Om 2007.2 (GTK) ===&lt;br /&gt;
&lt;br /&gt;
[[Om 2007.2]] is for people who are familiar with the [http://www.gnome.org/mobile/ GNOME Mobile] initiative and who want to write applications that run on multiple devices running (parts of) GNOME Mobile. This includes Maemo, which runs on the Nokia Internet Tablets. The strength of the GTK+ stack is a UI and programming environment similar to what you run on your Linux desktop, if you’re into GNOME. The GTK+ has PIM applications based on the Evolution Data Server and runs the gsmd phone server. Although you can use them, the applications are still pretty rough und unfinished. Some people have problems with the stability of the phone server.&lt;br /&gt;
&lt;br /&gt;
* [[Om 2007.2]]&lt;br /&gt;
* Availabilty: [http://buildhost.openmoko.org/daily/ Official Buildhost] and [[MokoMakefile]] support for development builds&lt;br /&gt;
* [[Downloads#Openmoko_2007.2_images_.28GTK.29|Download]]&lt;br /&gt;
* Several videos of this stack by [http://uk.youtube.com/user/freeyourphone Youtube user freeyourphone] and [http://uk.youtube.com/watch?v=U05kZfURPig&amp;amp;NR=1 video review by BVB Tech]&lt;br /&gt;
This is the base-system which is installed on Freerunner when it leaves the factory.&lt;br /&gt;
&lt;br /&gt;
2007.2 development driven by openmoko inc. has basically stopped and resources are allocated in favor of 2008.8, while the community currently does the effort to 'rescue' the 2007.2 telephony apps and pull them to the future middleware from FSO (see SHR).&lt;br /&gt;
thus patches are still welcome, especially if they help development of SHR.&lt;br /&gt;
&lt;br /&gt;
=== Om 2008.8 (ASU, April/August Software Update) ===&lt;br /&gt;
&lt;br /&gt;
Om 2008.8 has been started to integrate the [http://trolltech.com/products/qtopia Qtopia] stack - on X11 - with a new set of graphically pleasing applications based on the Enlightenment Foundation Libraries. ASU is the internal name and is known as Om 2008.8 upon its release on August 8, 2008.  Qtopia is a more mature product than the GNOME Mobile stack and you can expect all the standard feature phone applications to work in a solid way. It uses the Qtopia phone server. Since - contrary to standard Qtopia - it does not directly use the framebuffer, non-Qt applications can safely share the screen with Qt applications.&lt;br /&gt;
&lt;br /&gt;
* [[Om2008.8|Om 2008.8]]&lt;br /&gt;
* [[Downloads#Openmoko_2008.8_images_.28ASU.29|Download]]&lt;br /&gt;
&lt;br /&gt;
=== FSO - freesmartphone.org ===&lt;br /&gt;
&lt;br /&gt;
FSO has been started to overcome the deficiencies both of the 2007.2 and the 2008.8 stack, namely to come up with an extensible framework that gives developers the infrastructure they need to create solid and exciting software products based on the Openmoko platform. An infrastructure that supports competing UIs while we can collaborate on developing services, making the framework strong . Here, the focus is on stable highlevel services that you can access from whatever language or UI that supports [http://dbus.freesmartphone.org/ dbus]. People report that despite its infancy, e.g. the phone server part in FSO is already more solid than anywhere else.&lt;br /&gt;
&lt;br /&gt;
It is not really intended as future release-target, but used as a 'vessel' or 'container' for the development and testing of the new, future middleware.&amp;lt;br&amp;gt;&lt;br /&gt;
The applications installed are intended as test-tools for the new middleware and not as fully featured, end user oriented applications. (even if it looks that way sometimes)&lt;br /&gt;
&lt;br /&gt;
* [[FSO]]&lt;br /&gt;
* [http://trac.freesmartphone.org:8000/trac-example  Development tracker]&lt;br /&gt;
* [http://downloads.openmoko.org/framework/milestone2/ Download milestone 2]&lt;br /&gt;
* [http://freesmartphone.org freesmartphone.org]&lt;br /&gt;
* [http://shr.bearstech.com/ fso-testing and fso-unstable images and feeds] (maintained by Rod Whitby, MokoMakefile author)&lt;br /&gt;
&lt;br /&gt;
== Openmoko Community driven release targets ==&lt;br /&gt;
&lt;br /&gt;
=== SHR - Stable Hybrid Release ===&lt;br /&gt;
&lt;br /&gt;
Stable Hybrid Release is a combination of the middleware from FSO, some of the 2007.2 GTK software (telephony-ui, pim), and Om2008.8 that provides all of the functionality of the 2007.2 software, but with the stability of the FSO.&lt;br /&gt;
&lt;br /&gt;
* [[Stable Hybrid Release]]&lt;br /&gt;
&lt;br /&gt;
== Non-Openmoko distributions ==&lt;br /&gt;
&lt;br /&gt;
These are not Openmoko (and OE) based distributions. These are an alternatives you can run on your Openmoko phones.&lt;br /&gt;
&lt;br /&gt;
=== Qtopia ===&lt;br /&gt;
&lt;br /&gt;
The Qtopia distribution from [http://www.trolltech.com Trolltech], it aims to provide a ready-to use image for Openmoko devices. &lt;br /&gt;
&lt;br /&gt;
* [[Qtopia]]&lt;br /&gt;
* Download: [http://www.qtopia.net/modules/mydownloads/viewcat.php?cid=6 Qtopia.net]&lt;br /&gt;
&lt;br /&gt;
=== Debian ===&lt;br /&gt;
&lt;br /&gt;
Debian Linux, the whole distribution, on a mobile phone.&lt;br /&gt;
&lt;br /&gt;
* [[Debian]]&lt;br /&gt;
&lt;br /&gt;
== Features by distribution/release target ==&lt;br /&gt;
&lt;br /&gt;
=== Connectivity ===&lt;br /&gt;
&lt;br /&gt;
{| border=1 width=100% |&lt;br /&gt;
| width=14%| || width=14%|2007.2 || width=14%|FSO || width=14%|Om2008.8 || width=14%|SHR || width=14%|Qtopia || Debian&lt;br /&gt;
|-&lt;br /&gt;
| Telephony || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| SMS || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| GPRS || Not through UI || Not through UI || Not through UI || N/A || No (3) || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| WiFi || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || Not through UI || style=&amp;quot;background:lightgreen;&amp;quot; | Yes (*) || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes ||style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| VoIP || ?? || ?? || ?? || ?? || ?? || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| Bluetooth || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || No || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| GPS || style=&amp;quot;background:lightgreen;&amp;quot; | Yes (1) || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes (1) || N/A || No || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===  User Interaction ===&lt;br /&gt;
&lt;br /&gt;
{| border=1 width=100% |&lt;br /&gt;
| width=14%| || width=14%|2007.2 || width=14%|FSO || width=14%|Om2008.8 || width=14%|SHR || width=14%|Qtopia || Debian&lt;br /&gt;
|-&lt;br /&gt;
| Stylus friendly || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| Finger friendly || Partially || Partially || Partially || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || No&lt;br /&gt;
|-&lt;br /&gt;
| Accelerometer || No || No || No || N/A || No || No&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Applications ===&lt;br /&gt;
&lt;br /&gt;
{| border=1 width=100% |&lt;br /&gt;
| width=14%| || width=14%|2007.2 || width=14%|FSO || width=14%|Om2008.8 || width=14%|SHR || width=14%|Qtopia || Debian&lt;br /&gt;
|-&lt;br /&gt;
| Terminal || Basic (2) || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes (1) || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| PIM || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || No || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| Phonebook || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| Dialer || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || N/A || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| Web Browser || style=&amp;quot;background:lightgreen;&amp;quot; | Yes (1) || ? || style=&amp;quot;background:lightgreen;&amp;quot; | Yes (1) || ? || No || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| Mail Client || ? || ? || ? || ? || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| XMPP Client || style=&amp;quot;background:lightgreen;&amp;quot; | Yes (1) || ? || ? || ? || No || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| Media Player || ? || ? || ? || ? || ? || ? &lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Toolkits / Runtimes ===&lt;br /&gt;
{| border=1 width=100% |&lt;br /&gt;
| width=14%| || width=14%|2007.2 || width=14%|FSO || width=14%|Om2008.8 || width=14%|SHR || width=14%|Qtopia || Debian&lt;br /&gt;
|-&lt;br /&gt;
| GTK+ || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || No || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| QT/Qtopia || No || style=&amp;quot;background:lightgreen;&amp;quot; | Yes? || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes? || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| Middleware || gsmd/neod || freesmartphone.org || qtopia-x11 || freesmartphone.org || qtopia || freesmartphone.org&lt;br /&gt;
|-&lt;br /&gt;
| [[Java]] || Jalimo || Jalimo || Jalimo || ? || ? || No&lt;br /&gt;
|-&lt;br /&gt;
| [[Python]] || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || ? || style=&amp;quot;background:lightgreen;&amp;quot; | Yes || style=&amp;quot;background:lightgreen;&amp;quot; | Yes&lt;br /&gt;
|-&lt;br /&gt;
| [[Mono]] || style=&amp;quot;background:lightgreen;&amp;quot; | Yes(1) || ? || style=&amp;quot;background:lightgreen;&amp;quot; | Yes(1) || ? || ? || ? &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Footnotes:&lt;br /&gt;
&lt;br /&gt;
(1) works, but need additional software to be installed&lt;br /&gt;
&lt;br /&gt;
(2) unusable due to lack of certain keyboard characters (unless you [[Switching_Keyboards#Matchbox_keyboard|install matchbox-keyboard]])&lt;br /&gt;
&lt;br /&gt;
(3) there is a UI but it crashes the device when used.&lt;br /&gt;
&lt;br /&gt;
(*) unstable&lt;br /&gt;
&lt;br /&gt;
== External links ==&lt;br /&gt;
&lt;br /&gt;
Original distribution descriptions are from Mickey Lauer's [http://www.vanille-media.de/site/index.php/2008/06/28/gtk-asu-fso-tmtla/ GTK, ASU, FSO, TMTLA!].&lt;br /&gt;
&lt;br /&gt;
[[Category:Distributions| ]]&lt;br /&gt;
[[Category:Documentation]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Om_2008_Guide</id>
		<title>Om 2008 Guide</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Om_2008_Guide"/>
				<updated>2008-08-19T06:37:08Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: /* Things to know */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This documents quickly some key useability bits about [[Om 2008.8]] and initial setup.&lt;br /&gt;
&lt;br /&gt;
=== Interface ===&lt;br /&gt;
&lt;br /&gt;
'''New Keyboard'''&lt;br /&gt;
&lt;br /&gt;
Sliding your finger left is backspace.&lt;br /&gt;
&lt;br /&gt;
Sliding your finger right is space.&lt;br /&gt;
&lt;br /&gt;
Sliding your finger up/down changes between lowercase/uppercase/numbers/special characters.&lt;br /&gt;
&lt;br /&gt;
Hovering over a letter for more than 2 seconds activates [[Om2008.8_Keyboard#Keyboard_Zoom|zoom mode]], allowing you to type specific letters without prediction.&lt;br /&gt;
&lt;br /&gt;
More details at : [[Om2008.8 Keyboard]]&lt;br /&gt;
&lt;br /&gt;
'''Installer'''&lt;br /&gt;
&lt;br /&gt;
The button to run the Installer is now on the bottom of the homescreen.&lt;br /&gt;
The plus signs are placeholders for the graphical buttons to be added later.&lt;br /&gt;
&lt;br /&gt;
'''Top Menu'''&lt;br /&gt;
&lt;br /&gt;
The top menu is now your task switcher and is activated by touching the down arrow.&lt;br /&gt;
Press &amp;quot;remove&amp;quot; to close currently focused application.&lt;br /&gt;
&lt;br /&gt;
=== Things to know ===&lt;br /&gt;
&lt;br /&gt;
''' Commands '''&lt;br /&gt;
&lt;br /&gt;
*'''&amp;quot;ifconfig&amp;quot;''' - Displays network information.&lt;br /&gt;
&lt;br /&gt;
*'''&amp;quot;opkg update&amp;quot;''' - Updates list of available software.&lt;br /&gt;
&lt;br /&gt;
*'''&amp;quot;opkg install&amp;quot;''' - Install software.&lt;br /&gt;
&lt;br /&gt;
*'''&amp;quot;opkg upgrade&amp;quot;''' - Updates your software.&lt;br /&gt;
&lt;br /&gt;
*'''&amp;quot;killall packagekitd&amp;quot;''' - Quits any package manager which could be running. (Run this command if you get the &amp;quot;Could not obtain administrative lock&amp;quot; error message while running opkg commands)&lt;br /&gt;
&lt;br /&gt;
*'''&amp;quot;shutdown -r now&amp;quot;''' or  '''&amp;quot;reboot&amp;quot;'''- Reboots your phone.&lt;br /&gt;
&lt;br /&gt;
''' Configuring Om 2008.8 '''&lt;br /&gt;
&lt;br /&gt;
Follow this [[http://support.microsoft.com/kb/306126 guide (Windows Users)]]to share your internet with your phone.&lt;br /&gt;
&lt;br /&gt;
To share your internet connection on a Linux host follow this [[USB_Networking|Guide]]&lt;br /&gt;
&lt;br /&gt;
*If you are also behind a router you may have to change your LAN IP range in your router to avoid using 192.168.0.* as this is the same IP range as what your phone and ICS uses. (If you don't there will be an IP conflict)&lt;br /&gt;
&lt;br /&gt;
After you install and run [[http://wiki.openmoko.org/wiki/Om2008.8#Download Om 2008.8 ]] for the first time you have to restart to get the USB working. Once you have done that you have to ssh into your phone (192.168.0.202) to edit your /etc/network/interfaces so you can access the internet through USB to install software and updates. &lt;br /&gt;
&lt;br /&gt;
Edit the USB section to look like this:&lt;br /&gt;
&lt;br /&gt;
 # Ethernet/RNDIS gadget (g_ether)&lt;br /&gt;
 # ... or on host side, usbnet and random hwaddr&lt;br /&gt;
 auto usb0&lt;br /&gt;
 iface usb0 inet static&lt;br /&gt;
 	address 192.168.0.202&lt;br /&gt;
 	netmask 255.255.255.0&lt;br /&gt;
 	network 192.168.0.0&lt;br /&gt;
 	gateway 192.168.0.1&lt;br /&gt;
 	up echo nameserver 208.67.222.222 &amp;gt;/etc/resolv.conf &lt;br /&gt;
 	up echo nameserver 208.67.220.220 &amp;gt;/etc/resolv.conf &lt;br /&gt;
 	#up echo nameserver 192.168.0.200 &amp;gt;/etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
Now edit the Multiverse repository (/etc/opkg/Multiverse-feed.conf) to fix a typo: Remove the duplicate &amp;quot;/&amp;quot; before Multiverse. &lt;br /&gt;
&lt;br /&gt;
Create a file named zecke.conf and paste this into it to get the latest unofficial updates. (Temporary Repository)&lt;br /&gt;
&lt;br /&gt;
 src/gz zecke-all http://people.openmoko.org/~zecke/om2008.8-dev/all&lt;br /&gt;
 src/gz zecke-arm http://people.openmoko.org/~zecke/om2008.8-dev/armv4t&lt;br /&gt;
 src/gz zecke-i686 http://people.openmoko.org/~zecke/om2008.8-dev/i686&lt;br /&gt;
 src/gz zecke-neo http://people.openmoko.org/~zecke/om2008.8-dev/neo1973&lt;br /&gt;
 src/gz zecke-gta02 http://people.openmoko.org/~zecke/om2008.8-dev/om-gta02&lt;br /&gt;
&lt;br /&gt;
(Restart your phone)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now that you are able to install software, It is a good time to install &amp;quot;illume-config&amp;quot; to can gain access to more advanced power management features and to change the look of the GUI through the wrench that will now appear in the top bar. (Restart your phone)&lt;br /&gt;
&lt;br /&gt;
The Media Player is basically useless due to the default theme. To install with a better theme run:&lt;br /&gt;
&lt;br /&gt;
 opkg install openmoko-mediaplayer2&lt;br /&gt;
 wget http://abraxa.dyndns.org:81/random/openmoko-mediaplayer-theme.tar.bz2&lt;br /&gt;
 tar xjf openmoko-mediaplayer-theme.tar.bz2 -C /usr/share/themes/Moko/gtk-2.0&lt;br /&gt;
 rm openmoko-mediaplayer-theme.tar.bz2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''' Bugs/Fixes '''&lt;br /&gt;
&lt;br /&gt;
*The Media Player is basically unusable because of the skin. And is also very buggy.&lt;br /&gt;
*Battery meter always says its charging. Installing a terminal and running &amp;quot;apm&amp;quot; will display the proper battery status.&lt;br /&gt;
&lt;br /&gt;
*Your phone will go into standby after 30 seconds EVEN when connected to your computer or wall charger. (Disable this under the settings menu)&lt;br /&gt;
&lt;br /&gt;
*The wifi doesn't work too well right now.&lt;br /&gt;
&lt;br /&gt;
*Accelerometers have alpha support via [[Gestures]]&lt;br /&gt;
&lt;br /&gt;
*If you let the battery completely drain you will have problems booting it up. Plug it into the wall charger for a few hours and then plug it into your computer and press power.&lt;br /&gt;
&lt;br /&gt;
*Your have to install &amp;quot;illume-config&amp;quot; to have more control over power management, scrolling speeds, keyboard options, and to change how the interface looks.&lt;br /&gt;
&lt;br /&gt;
*Some software that you install by command-line may appear in in the settings menu (wrench) that you unlock after installing &amp;quot;illume-config&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Category:Om 2008.8]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Manually_using_GPRS</id>
		<title>Manually using GPRS</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Manually_using_GPRS"/>
				<updated>2008-08-19T04:14:52Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The GPRS connection is made using the PPP protocol to a server identified by an &amp;quot;APN&amp;quot; at the network operator.   Once a GPRS connection is made, it is possible to [[#Sharing_the_GPRS_connection_with_a_computer|share that connection with a connected computer]], allowing that computer to access the internet through the phone!&lt;br /&gt;
&lt;br /&gt;
= Option 1: With GSM multiplexing and with a GUI =&lt;br /&gt;
&lt;br /&gt;
{{note|The following does not appear to work if you have a SIM PIN.  The dialog to enter your SIM PIN never pops up and the GSM multiplexing daemon continuous loops and runs into a SIM PIN error.}}&lt;br /&gt;
&lt;br /&gt;
GSM multiplexing allows both a GPRS connection and a phone call to be handled at the same time.  By default, [[Om 2008.8]] does not multiplex the GSM device.  The [[FSO]] distribution, however, introduces GSM multiplexing with a new service and a DBus API to that service.  The instructions to modify the OM2008.8 distribution to make use of GSM multiplexing and allow you to start GPRS from a GUI can be found here: http://freeyourphone.de/portal_v1/viewtopic.php?f=21&amp;amp;t=295&lt;br /&gt;
&lt;br /&gt;
However, using those instructions, you will encounter a few hurdles.  Do not use the gsm0710muxd that is found in the OM2008.8 repository.  It will not work, instead, use the one found here:&lt;br /&gt;
&lt;br /&gt;
http://www.angstrom-distribution.org/feeds/2008/ipk/glibc/armv4t/base/gsm0710muxd_0.9.1+gitr6fecc78198dd821bbe29efd096bd8fecd855179d-r0_armv4t.ipk&lt;br /&gt;
&lt;br /&gt;
In order to install that version of gsm0710muxd, however, you will also have to install a bunch of missing dependencies.  Those can be found by clicking on the dependencies found here:&lt;br /&gt;
&lt;br /&gt;
http://www.angstrom-distribution.org/repo/?action=details&amp;amp;pnm=gsm0710muxd&lt;br /&gt;
&lt;br /&gt;
Make sure that you install the armv4t versions of all packages.&lt;br /&gt;
&lt;br /&gt;
The [[#Some APN names for reference|APN Reference]] table may come in handy when you are looking for the required network specific information.&lt;br /&gt;
&lt;br /&gt;
Once you follow through with all the instructions, you will notice that the &amp;quot;Services&amp;quot; GUI will crash.  This has to do with this bug: http://docs.openmoko.org/trac/ticket/1718&lt;br /&gt;
&lt;br /&gt;
The fix is to change the &amp;quot;init()&amp;quot; call on line 82 of /usr/lib/python2.5/site-packages/gtk-2.0/gtk/_init_.py  to &amp;quot;_init()&amp;quot; (add an underscore).&lt;br /&gt;
&lt;br /&gt;
You may also have to modify your /etc/resolv.conf file and add the nameserver (DNS Server) of your service provider if you have DNS resolution problems.&lt;br /&gt;
&lt;br /&gt;
Then, hopefully, you should be up in running with GPRS and a GUI to turn it on and off.&lt;br /&gt;
&lt;br /&gt;
= Option 2: Without GSM multiplexing and without a GUI =&lt;br /&gt;
&lt;br /&gt;
The program that implements PPP on Linux is [[pppd]], which we need to configure and run to get a connection. When that is working, we can configure pppd to wait until it's needed before it connects, and to disconnect if the connection becomes idle. Further, we can start pppd in the background during the boot process.&lt;br /&gt;
&lt;br /&gt;
== Configuring pppd for manual connections ==&lt;br /&gt;
&lt;br /&gt;
You'll need /etc/ppp/peers/gprs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Uncomment the following if you want some debug.&lt;br /&gt;
#debug&lt;br /&gt;
#logfile /var/volatile/log/pppd.log&lt;br /&gt;
lock&lt;br /&gt;
/dev/ttySAC0 115200&lt;br /&gt;
crtscts &lt;br /&gt;
connect /etc/ppp/gprs-connect-chat&lt;br /&gt;
disconnect /etc/ppp/gprs-disconnect-chat&lt;br /&gt;
hide-password&lt;br /&gt;
usepeerdns&lt;br /&gt;
ipcp-accept-local&lt;br /&gt;
noauth&lt;br /&gt;
noipdefault&lt;br /&gt;
novj&lt;br /&gt;
novjccomp&lt;br /&gt;
defaultroute&lt;br /&gt;
replacedefaultroute&lt;br /&gt;
# Reopen the connection if it fails, pausing for a while.&lt;br /&gt;
persist&lt;br /&gt;
holdoff 15&lt;br /&gt;
# Check the line every 20 seconds and presume&lt;br /&gt;
# the peer is gone if no replay for 4 times.&lt;br /&gt;
lcp-echo-interval 20&lt;br /&gt;
lcp-echo-failure 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depending on the APN, you may need password authentication using CHAP or PAP. In /etc/ppp/pap-secrets you can add the following default line for &amp;quot;password-less&amp;quot; connections:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# client        server  secret                  IP addresses&lt;br /&gt;
*               *       &amp;quot;&amp;quot;                      *&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For CHAP, lines in /etc/ppp/chap-secrets are used. For PAP, the lines are in /etc/ppp/pap-secrets. The client should match the &amp;quot;user&amp;quot; option in pppd the config file (below). You can use * to mean any here, but the option user &amp;quot;&amp;quot; doesn't mean empty!&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Secrets for authentication using CHAP&lt;br /&gt;
# client        server  secret                  IP addresses&lt;br /&gt;
&amp;quot;user&amp;quot;         *       &amp;quot;password&amp;quot;                  *  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this you need the following options in /etc/ppp/peers/gprs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# username to use for authentication, should match &amp;quot;client&amp;quot; in /etc/ppp/{chap,pap}-secrets&lt;br /&gt;
user &amp;quot;user&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== gprs-connect-chat, version 1 ==&lt;br /&gt;
&lt;br /&gt;
You'll also need /etc/ppp/gprs-connect-chat (needs &amp;quot;chmod +x&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
exec chat -v -S -s\&lt;br /&gt;
        TIMEOUT 15\&lt;br /&gt;
        &amp;quot;&amp;quot; &amp;quot;\K\K\K\d+++ATH&amp;quot;\&lt;br /&gt;
        OK-AT-OK ATZ\&lt;br /&gt;
        OK ATE1\&lt;br /&gt;
        ABORT BUSY\&lt;br /&gt;
        ABORT DELAYED\&lt;br /&gt;
        ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
        ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
        ABORT VOICE\&lt;br /&gt;
        ABORT ERROR\&lt;br /&gt;
        ABORT RINGING\&lt;br /&gt;
        TIMEOUT 60\&lt;br /&gt;
        OK AT+CFUN=1\&lt;br /&gt;
        OK AT+COPS\&lt;br /&gt;
        OK AT+CGDCONT=1,\&amp;quot;IP\&amp;quot;,\&amp;quot;internet\&amp;quot;\&lt;br /&gt;
        OK ATD*99#\&lt;br /&gt;
        CONNECT /n/d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;b&amp;gt;(08/18/08) Note:&amp;lt;/b&amp;gt; I needed to add the command &amp;quot;AT+CMOD=2&amp;quot; (formatted as &amp;quot;OK AT+CMOD=2\&amp;quot; without the quotes) in order to get GPRS working with the above script (otherwise it would ERROR on the CFUN, COPS, or the ATD if the other two were removed).  I have T-Mobile (US) with the $5.99 &amp;quot;tzones&amp;quot; addon, which works with Minimo as it supports HTTP proxy setups.&lt;br /&gt;
&lt;br /&gt;
== gprs-connect-chat, version 2 ==&lt;br /&gt;
&lt;br /&gt;
Update: On my freerunner the first AT+CFUN=1 always generated ERROR. I managed to get gprs work by using the following script from http://lists.openmoko.org/pipermail/community/2008-July/023246.html:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
exec /usr/sbin/chat -v \&lt;br /&gt;
        TIMEOUT 10 \&lt;br /&gt;
        OK-AT-'' ''\&lt;br /&gt;
        ABORT BUSY\&lt;br /&gt;
        ABORT DELAYED\&lt;br /&gt;
        ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
        ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
        ABORT VOICE\&lt;br /&gt;
        ABORT ERROR\&lt;br /&gt;
        ABORT RINGING\&lt;br /&gt;
        TIMEOUT 30 \&lt;br /&gt;
        '' ATZ\&lt;br /&gt;
        OK ATE1\&lt;br /&gt;
        OK AT+CFUN=1\&lt;br /&gt;
        ERROR AT+CPIN=\&amp;quot;XXXX\&amp;quot;\         &amp;lt;&amp;lt; USE YOUR OWN&lt;br /&gt;
        OK AT+COPS\&lt;br /&gt;
        OK AT+CGDCONT=1,\&amp;quot;IP\&amp;quot;,\&amp;quot;internet\&amp;quot;\&lt;br /&gt;
        OK 'ATDT*99***1#'\&lt;br /&gt;
        CONNECT ''&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The error seems to vary a bit, sometimes it's before AT+COPS, sometimes as above. I have two versions of the gprs-connect-chat, which I vary between depending on which is needed. Or is there a way to specify two acceptable answers like {OK,ERROR}?&lt;br /&gt;
&lt;br /&gt;
You will need to adjust the APN name &amp;quot;internet&amp;quot; in at+cgdcont line and possibly the phone number in the ATD line to match what your network operator provides. See below in the table &amp;quot;Some APN names for reference&amp;quot; for the right settings for your operator.&lt;br /&gt;
&lt;br /&gt;
== gprs-disconnect-chat ==&lt;br /&gt;
&lt;br /&gt;
Also good to have is /etc/ppp/gprs-disconnect-chat (needs &amp;quot;chmod +x&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
/usr/sbin/chat -v\&lt;br /&gt;
	ABORT OK\&lt;br /&gt;
	ABORT BUSY\&lt;br /&gt;
	ABORT DELAYED\&lt;br /&gt;
	ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
	ABORT &amp;quot;NO CARRIER&amp;quot;\&lt;br /&gt;
	ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
	ABORT VOICE\&lt;br /&gt;
	ABORT ERROR\&lt;br /&gt;
	ABORT RINGING\&lt;br /&gt;
	TIMEOUT 12\&lt;br /&gt;
	&amp;quot;&amp;quot; &amp;quot;\K\K\K\d+++ATH&amp;quot;\&lt;br /&gt;
	&amp;quot;NO CARRIER-AT-OK&amp;quot; &amp;quot;\c&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Starting PPP connection ==&lt;br /&gt;
&lt;br /&gt;
The following script can be used to start the ppp connection. First it stops gsmd because gsmd may put the phone in a unknown state. It then turns on the power to the phone, modifies the ownership, and then creates a tty connection. Finally it starts [[pppd]] with the gprs settings.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/init.d/gsmd stop&lt;br /&gt;
echo &amp;quot;1&amp;quot; &amp;gt; /sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
chown uucp.uucp /dev/ttySAC0&lt;br /&gt;
stty -F /dev/ttySAC0 crtscts&lt;br /&gt;
pppd call gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are having problems connecting ensure you have a good GSM signal and replace the last line with the below line. This will allow you to see the details of the connection on the console. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pppd debug nodetach call gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The config above will establish a persistant link over gprs. The battery will run low in less than an hour. See an example for an on-demand config below.&lt;br /&gt;
&lt;br /&gt;
=== Resolve.conf issues ===&lt;br /&gt;
&lt;br /&gt;
The latest build seems to have solved the following issue, it should be automatically updated by pppd.&lt;br /&gt;
&lt;br /&gt;
If you expeience DNS issues after connecting to DNS you may need a proper /etc/resolv.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln -sf /var/run/resolv.conf /etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If needed put your nameserver for usb-net into /var/run/resolv.conf, not in /etc.&lt;br /&gt;
&lt;br /&gt;
The image does not set a correct resolv.conf. i do so with an &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo  nameserver 192.168.0.201 &amp;gt; /var/run/resolv.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in the right place. because a post-up in /etc/network/interfaces is not supported i do that in /etc/network/if-up.d/08setupdns&lt;br /&gt;
&lt;br /&gt;
another problem is pppd's /etc/ppp/ip-down.d/92removedns which does not properly remove the link when shuting down ppp. my fix is this script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
ACTUALCONF=/var/run/resolv.conf&lt;br /&gt;
PPPCONF=/var/run/ppp/resolv.conf&lt;br /&gt;
if [ -f $PPPCONF ] ; then&lt;br /&gt;
        if [ -f $ACTUALCONF ] ; then&lt;br /&gt;
                if [ ! -h $ACTUALCONF -o ! &amp;quot;`readlink $ACTUALCONF 2&amp;gt;&amp;amp;1`&amp;quot; = &amp;quot;$PPPCONF&amp;quot; ] ; then&lt;br /&gt;
                        mv $ACTUALCONF $ACTUALCONF.ppporig&lt;br /&gt;
                fi&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        ln -sf $PPPCONF $ACTUALCONF&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Some APN names for reference ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Country&lt;br /&gt;
! Carrier&lt;br /&gt;
! Plan&lt;br /&gt;
! APN/Phone&lt;br /&gt;
! user/password if required&lt;br /&gt;
! Working pppd scripts&lt;br /&gt;
|-&lt;br /&gt;
| Australia || Vodafone || Any || vfinternet.au || ||&lt;br /&gt;
|-&lt;br /&gt;
| Canada || Fido || Any, behind NAT || internet.fido.ca || fido/fido || mdbus -s org.freesmartphone.frameworkd /org/freesmartphone/GSM/Device&lt;br /&gt;
org.freesmartphone.GSM.PDP.ActivateContext internet.fido.ca fido&lt;br /&gt;
fido&lt;br /&gt;
|-&lt;br /&gt;
| Canada || Rogers || Any, behind NAT || internet.com || wapuser1/wap || nameserver 207.181.101.4&lt;br /&gt;
|-&lt;br /&gt;
| Estonia || Elisa || Any, behind NAT || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Estonia || EMT || Any, behind NAT || internet.emt.ee || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Saunalahti || Any || internet.saunalahti || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Sonera   || Any, behind NAT || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Sonera   || Any, public IP  || prointernet || ||&lt;br /&gt;
|-&lt;br /&gt;
| France || SFR || 10.x.x.x? || websfr || || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || SFR || 10.x.x.x? || wapsfr&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;|| || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || Orange || ??? || orange.fr || || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || Bouyges Telecom || Web &amp;amp; Mail || mmsbouygtel.com || || Work great under FSO. Just follow instructions at http://wiki.openmoko.org/wiki/GPRS_FSO. Proxy:  62.201.129.225:8080. For emails, only ports 25 (smtp) and 110 (pop) are allowed. (They use a transparent proxy ...)&lt;br /&gt;
|-&lt;br /&gt;
| Germany || E-Plus || BASE (and others?) || internet.eplus.de || eplus gprs || [[Base pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| Germany || E-Plus || Simyo || internet.eplus.de || || [[simyo pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| Germany || T-Mobile ||  || internet.t-mobile || ||&lt;br /&gt;
|-&lt;br /&gt;
| Germany || Vodafone || Any, behind NAT || web.vodafone.de || ||&lt;br /&gt;
|-&lt;br /&gt;
| India || AirTel || MobileOffice || airtelgprs.com || ||&lt;br /&gt;
|- &lt;br /&gt;
| Italy   || Wind     || Superinternet, public IP  || internet.wind / *99# || wind/wind (any string) || [[Wind pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| Netherlands || Vodafone || Any || live.vodafone.com / *99***1#||  || [[Vodafone pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| New Zealand || Vodafone || Any || live.vodafone.com / *99***2#||  ||&lt;br /&gt;
|-&lt;br /&gt;
| Norway || Netcom || Any || internet.netcom.no || ||&lt;br /&gt;
|-&lt;br /&gt;
| Norway || OneCall || Any || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Norway || Telenor || Any || telenor || ||&lt;br /&gt;
|-&lt;br /&gt;
| Sweden || Parlino ||  || internet.parlino.se || || [[GPRS_FSO|Works with FSO]]&lt;br /&gt;
|-&lt;br /&gt;
| Switzerland || Swisscom || e.g. Natel Basic Liberty, behind NAT || gprs.swisscom.ch || ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || T-Mobile|| || general.t-mobile.uk || ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || Virgin || || goto.virginmobile.uk || user ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || [http://www.filesaveas.com/gprs.html other providers] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || AT&amp;amp;T || Unlimited data plan (attached to pay-as-you-go voice plan) || wap.cingular / *99***1# || WAP@CINGULARGPRS.COM/CINGULAR1 ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || Cincinnati Bell Wireless || || wap.gocbw.com ||  cbw  ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || Cingular (AT&amp;amp;T) || Less than full internet || wap.cingular / may require *99***1# || ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || T-mobile || Anything less than full internet || wap.voicestream.com ||  || Need to set proxy to 216.155.165.50  T-Mobile docs say &amp;quot;216.155.165.050&amp;quot;.  050 octal = 40 decimal and will *not* work.  I think port is 8080 or 9100.  No luck w/ pppd scripts.  GPRS_FSO directions work under FSO though.&lt;br /&gt;
|- &lt;br /&gt;
| USA || T-mobile || Regular internet plan || internet2.voicestream.com || || [[T-Mobile pppd scripts]]&lt;br /&gt;
|- &lt;br /&gt;
| USA || T-mobile || &amp;quot;VPN&amp;quot; internet plan || internet3.voicestream.com || ||&lt;br /&gt;
|- &lt;br /&gt;
| Venezuela || Digitel || Pre- y post-pago || gprsweb.digitel.ve || ||&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[1] connected through a WAP proxy (slower, but the only way to access Vodafone live! and SFR portal)&lt;br /&gt;
&lt;br /&gt;
[2] Unless stated otherwise the phone number to call is &amp;quot;*99#&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Also see Ross Barkman's page for a detailed list of more [http://www.taniwha.org.uk/gprs.html global GPRS providers APN details]&lt;br /&gt;
&lt;br /&gt;
== Starting pppd automatically ==&lt;br /&gt;
&lt;br /&gt;
Once you have finished debugging your gprs-connect-chat and gprs options files, you may wish to automatically connect whenever needed and hang up when finished.  Make sure you understand the impact of this change to your carrier plan billing.  This is not recommended unless you have a large-use or unlimited data plan.  These scripts do NOT prompt you before connecting.&lt;br /&gt;
&lt;br /&gt;
=== On-demand connection settings ===&lt;br /&gt;
&lt;br /&gt;
Additional settings are needed if you want the actual connection to be up only while there is traffic. In the 'gprs' file above, insert the following, making sure 'nodetach' is commented out.  If 'nodetach' is on, the boot process will stop when it starts pppd. Also remove the option 'persist' mentioned above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Wait until needed before connecting&lt;br /&gt;
demand&lt;br /&gt;
&lt;br /&gt;
# Disconnect if idle for given amount of seconds&lt;br /&gt;
idle 20&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Start on boot (method 1) ===&lt;br /&gt;
&lt;br /&gt;
Add the following definition to /etc/network/interfaces:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auto ppp0&lt;br /&gt;
iface ppp0 inet ppp&lt;br /&gt;
        provider gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That should be it. Now you can use 'ifup ppp0' and 'ifdown ppp0' manually too.&lt;br /&gt;
&lt;br /&gt;
=== Start on boot (method 2) ===&lt;br /&gt;
&lt;br /&gt;
Create the following file as /etc/ppp/ppp_on_boot (needs chmod +x).  The /etc/init.d/ppp script will call it to set up the daemon.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
#&lt;br /&gt;
#   Rename this file to ppp_on_boot and pppd will be fired up as&lt;br /&gt;
#   soon as the system comes up, connecting to `provider'.&lt;br /&gt;
#&lt;br /&gt;
#   If you also make this file executable, and replace the first line&lt;br /&gt;
#   with just &amp;quot;#!/bin/sh&amp;quot;, the commands below will be executed instead.&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# The location of the ppp daemon itself (shouldn't need to be changed)&lt;br /&gt;
PPPD=/usr/sbin/pppd&lt;br /&gt;
&lt;br /&gt;
# The default provider to connect to&lt;br /&gt;
$PPPD call gprs&lt;br /&gt;
&lt;br /&gt;
# Additional connections, which would just use settings from&lt;br /&gt;
# /etc/ppp/options.&amp;lt;tty&amp;gt;&lt;br /&gt;
#$PPPD ttyS0&lt;br /&gt;
#$PPPD ttyS1&lt;br /&gt;
#$PPPD ttyS2&lt;br /&gt;
#$PPPD ttyS3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, you need to add the /etc/init.d/ppp script to the init process by creating symbolic links from the appropriate directories.  I chose the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/rc0.d/K25ppp&lt;br /&gt;
/etc/rc1.d/K45ppp&lt;br /&gt;
/etc/rc2.d/S45ppp&lt;br /&gt;
/etc/rc3.d/S45ppp&lt;br /&gt;
/etc/rc4.d/S45ppp&lt;br /&gt;
/etc/rc5.d/S45ppp&lt;br /&gt;
/etc/rc6.d/K25ppp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Sharing the GPRS connection with a computer =&lt;br /&gt;
&lt;br /&gt;
Once you successfully connect to your network operator, you can start sharing your data plan with your computer through USB or Bluetooth networking.  The following describes how you can do so through USB networking.&lt;br /&gt;
&lt;br /&gt;
== Setting up your computer's network settings ==&lt;br /&gt;
&lt;br /&gt;
I find it useful to have my computer automatically acquire it's network address, mask, gateway, and DNS servers from the FreeRunner instead of manually setting these up.  In order to this, I installed busybox-udhcpd from the Angstrom repositories (see [[Repositories]])&lt;br /&gt;
&lt;br /&gt;
  opkg install busybox-udhcpd&lt;br /&gt;
&lt;br /&gt;
Once it is installed, it needs to be configured.  Edit the /etc/udhcpd.conf file.  Mine looks like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Sample udhcpd configuration file (/etc/udhcpd.conf)&lt;br /&gt;
&lt;br /&gt;
# The start and end of the IP lease block&lt;br /&gt;
&lt;br /&gt;
start           192.168.0.200   #default: 192.168.0.20&lt;br /&gt;
end             192.168.0.200   #default: 192.168.0.254&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# The interface that udhcpd will use&lt;br /&gt;
&lt;br /&gt;
interface       usb0            #default: eth0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# The maximim number of leases (includes addressesd reserved&lt;br /&gt;
# by OFFER's, DECLINE's, and ARP conficts&lt;br /&gt;
&lt;br /&gt;
#max_leases     254             #default: 254&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# If remaining is true (default), udhcpd will store the time&lt;br /&gt;
# remaining for each lease in the udhcpd leases file. This is&lt;br /&gt;
# for embedded systems that cannot keep time between reboots.&lt;br /&gt;
# If you set remaining to no, the absolute time that the lease&lt;br /&gt;
# expires at will be stored in the dhcpd.leases file.&lt;br /&gt;
&lt;br /&gt;
#remaining      yes             #default: yes&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# The time period at which udhcpd will write out a dhcpd.leases&lt;br /&gt;
# file. If this is 0, udhcpd will never automatically write a&lt;br /&gt;
# lease file. (specified in seconds)&lt;br /&gt;
&lt;br /&gt;
#auto_time      7200            #default: 7200 (2 hours)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# The amount of time that an IP will be reserved (leased) for if a&lt;br /&gt;
# DHCP decline message is received (seconds).&lt;br /&gt;
&lt;br /&gt;
#decline_time   3600            #default: 3600 (1 hour)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# The amount of time that an IP will be reserved (leased) for if an&lt;br /&gt;
# ARP conflct occurs. (seconds&lt;br /&gt;
&lt;br /&gt;
#conflict_time  3600            #default: 3600 (1 hour)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# How long an offered address is reserved (leased) in seconds&lt;br /&gt;
&lt;br /&gt;
#offer_time     60              #default: 60 (1 minute)&lt;br /&gt;
&lt;br /&gt;
# If a lease to be given is below this value, the full lease time is&lt;br /&gt;
# instead used (seconds).&lt;br /&gt;
&lt;br /&gt;
#min_lease      60              #defult: 60&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# The location of the leases file&lt;br /&gt;
&lt;br /&gt;
#lease_file     /var/lib/misc/udhcpd.leases     #defualt: /var/lib/misc/udhcpd.&lt;br /&gt;
leases&lt;br /&gt;
&lt;br /&gt;
# The location of the pid file&lt;br /&gt;
#pidfile        /var/run/udhcpd.pid     #default: /var/run/udhcpd.pid&lt;br /&gt;
&lt;br /&gt;
# Everytime udhcpd writes a leases file, the below script will be called.&lt;br /&gt;
# Useful for writing the lease file to flash every few hours.&lt;br /&gt;
&lt;br /&gt;
#notify_file                            #default: (no script)&lt;br /&gt;
&lt;br /&gt;
#notify_file    dumpleases      # &amp;lt;--- usefull for debugging&lt;br /&gt;
&lt;br /&gt;
# The following are bootp specific options, setable by udhcpd.&lt;br /&gt;
&lt;br /&gt;
#siaddr         192.168.0.22            #default: 0.0.0.0&lt;br /&gt;
&lt;br /&gt;
#sname          zorak                   #default: (none)&lt;br /&gt;
&lt;br /&gt;
#boot_file      /var/nfs_root           #default: (none)&lt;br /&gt;
&lt;br /&gt;
# The remainer of options are DHCP options and can be specifed with the&lt;br /&gt;
# keyword 'opt' or 'option'. If an option can take multiple items, such&lt;br /&gt;
# as the dns option, they can be listed on the same line, or multiple&lt;br /&gt;
# lines. The only option with a default is 'lease'.&lt;br /&gt;
&lt;br /&gt;
#Examles&lt;br /&gt;
opt     dns     192.168.0.202 &amp;lt;your APN's DNS server&amp;gt;&lt;br /&gt;
option  subnet  255.255.255.0&lt;br /&gt;
opt     router  192.168.0.202&lt;br /&gt;
opt     wins    192.168.0.202&lt;br /&gt;
#option dns     129.219.13.81   # appened to above DNS servers for a total of 3&lt;br /&gt;
option  domain  local&lt;br /&gt;
option  lease   864000          # 10 days of seconds&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Currently supported options, for more info, see options.c&lt;br /&gt;
#subnet&lt;br /&gt;
#timezone&lt;br /&gt;
#router&lt;br /&gt;
#timesvr&lt;br /&gt;
#namesvr&lt;br /&gt;
#dns&lt;br /&gt;
#logsvr&lt;br /&gt;
#cookiesvr&lt;br /&gt;
#lprsvr&lt;br /&gt;
#bootsize&lt;br /&gt;
#domain&lt;br /&gt;
#swapsvr&lt;br /&gt;
#rootpath&lt;br /&gt;
#ipttl&lt;br /&gt;
#mtu&lt;br /&gt;
#broadcast&lt;br /&gt;
#wins&lt;br /&gt;
#lease&lt;br /&gt;
#ntpsrv&lt;br /&gt;
#tftp&lt;br /&gt;
#bootfile&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Notice that I set the start and end of the IP lease block to 192.168.0.200.  If you follow the instructions at [[USB Networking]], this is the address that it assumes the host to be and the /etc/resolv.conf file points to this address to allow name resolution from your phone.&lt;br /&gt;
&lt;br /&gt;
The interface in this case is usb0.  This will have to be set differently if you are using Bluetooth.&lt;br /&gt;
&lt;br /&gt;
The dns is set to the FreeRunner's address, as well as my network operator's DNS server address.  You don't have to use your network operator's DNS address if you can find a caching nameserver for the FreeRunner.&lt;br /&gt;
&lt;br /&gt;
The router is set to the FreeRunner.&lt;br /&gt;
&lt;br /&gt;
== Turning your FreeRunner into a Network Address Translation (NAT) gateway ==&lt;br /&gt;
&lt;br /&gt;
I set up my FreeRunner so that it acts as a NAT gateway so that all traffic that goes to my network operator appears to originate from the phone.   I installed iptables to accomplish this:&lt;br /&gt;
&lt;br /&gt;
  opkg install iptables iptables-utils kernel-module-ipt-masquerade kernel-module-iptable-nat&lt;br /&gt;
&lt;br /&gt;
Once that is installed, I have the following script named firewall.sh that I use to set up the NAT once connected to the GPRS network:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
IPTABLES='/usr/sbin/iptables'&lt;br /&gt;
&lt;br /&gt;
# Set interface values&lt;br /&gt;
EXTIF='ppp0'&lt;br /&gt;
INTIF='usb0'&lt;br /&gt;
&lt;br /&gt;
# enable ip forwarding in the kernel&lt;br /&gt;
/bin/echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
&lt;br /&gt;
# flush rules and delete chains&lt;br /&gt;
$IPTABLES -F&lt;br /&gt;
$IPTABLES -X&lt;br /&gt;
&lt;br /&gt;
#Enable masquerading to allow LAN internet access&lt;br /&gt;
$IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE&lt;br /&gt;
&lt;br /&gt;
#Forward LAN traffic from LAN $INTIF to Internet $EXTIF&lt;br /&gt;
$IPTABLES -A FORWARD -i $INTIF -o $EXTIF -m state --state NEW,ESTABLISHED -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
#Allowing access to the SSH server&amp;quot;&lt;br /&gt;
#$IPTABLES -A INPUT --protocol tcp --dport 22 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
#Allowing access to the HTTP server&amp;quot;&lt;br /&gt;
#$IPTABLES -A INPUT --protocol tcp --dport 80 -j ACCEPT&lt;br /&gt;
&lt;br /&gt;
# block out all other Internet access on $EXTIF&lt;br /&gt;
$IPTABLES -A INPUT -i $EXTIF -m state --state NEW,INVALID -j DROP&lt;br /&gt;
$IPTABLES -A FORWARD -i $EXTIF -m state --state NEW,INVALID -j DROP&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
so once connected through GPRS, I run:&lt;br /&gt;
&lt;br /&gt;
  ./firewall.sh&lt;br /&gt;
&lt;br /&gt;
and then you should be able to connect to the internet from your computer! &lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[pppd]]&lt;br /&gt;
* [[Manually using GSM]]&lt;br /&gt;
* [[Manually using Bluetooth]]&lt;br /&gt;
&lt;br /&gt;
{{Languages|Manually_using_GPRS}}&lt;br /&gt;
[[Category:Documentation]]&lt;br /&gt;
[[Category:Application Developer]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Navit</id>
		<title>Navit</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Navit"/>
				<updated>2008-08-18T16:16:52Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: /* Route &amp;gt; Destination */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As described on the [http://navit.sourceforge.net/ Navit home page],&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Navit is a car navigation system with routing engine.&lt;br /&gt;
&lt;br /&gt;
It's modular design is capable of using vector maps of various formats for routing and rendering of the displayed map. It's even possible to use multiple maps at a time.&lt;br /&gt;
&lt;br /&gt;
The GTK+ or SDL user interfaces are designed to work well with touch screen displays. Points of Interest of various formats are displayed on the map.&lt;br /&gt;
&lt;br /&gt;
The current vehicle position is either read from gpsd or directly from NMEA GPS sensors.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Some people say Navit is also a good choice for pedestrian and bicycle navigation.&lt;br /&gt;
&lt;br /&gt;
[[Image:Screenshot-3.png|thumb|Navit-0.0.4+cvs]]&lt;br /&gt;
&lt;br /&gt;
== Acknowledgment ==&lt;br /&gt;
&lt;br /&gt;
Thanks to [[User:Alessandro | Alessandro]], stefan_schmidt, cp15 and all Navit developers I have done a small (&amp;quot;not really working&amp;quot;) preview of Navit on Neo1973 at [http://www.telemobilityforum.com/eng/ Telemobility Forum 2007]. Thanks to [http://gfoss.it GFoss] guys to invite me.&lt;br /&gt;
''[[User:Tyrael | Tyrael]]''&lt;br /&gt;
&lt;br /&gt;
==Setting up Navit==&lt;br /&gt;
&lt;br /&gt;
I got navit set up and configured to the point where it follows me on the map.  It doesn't have street names or any other information, just the map and the cursor showing the location and direction.  Here's what I did:&lt;br /&gt;
* Install navit ipkg on NEO&lt;br /&gt;
 opkg install http://www.mikeasoft.com/~mike/ipk/armv4t/navit_0.0.4-r0_armv4t.ipk&lt;br /&gt;
* Or roll your own from svn using the toolchain (having checked out trunk in the navit directory, and assuming you have written navit_control):&lt;br /&gt;
 . /usr/local/openmoko/arm/setup-env&lt;br /&gt;
 om-conf navit --disable-samplemap&lt;br /&gt;
 om-make-ipkg navit navit_control&lt;br /&gt;
* Set up your local maps&lt;br /&gt;
** Openstreetmap - follow directions at http://wiki.navit-project.org/index.php/OpenStreetMaps&lt;br /&gt;
** Here's an example of what I did to get the maps for the area around Seattle, Wa where I live:&lt;br /&gt;
*** figured out map coordinates using http://informationfreeway.org/?lat=47.520270037501454&amp;amp;lon=-122.20130713167327&amp;amp;zoom=9&amp;amp;layers=B000F000&lt;br /&gt;
*** Downloaded 4 regions from openstreetmaps ([[Navit#Script_to_download_OSM_maps|see below]] for a script to do this for you automatically for largish areas)&lt;br /&gt;
 wget -O map1.osm http://www.openstreetmap.org/api/0.5/map?bbox=-122.2,47.5,-122,47.7&lt;br /&gt;
 wget -O map2.osm http://www.openstreetmap.org/api/0.5/map?bbox=-122.4,47.5,-122.2,47.7&lt;br /&gt;
 wget -O map3.osm http://www.openstreetmap.org/api/0.5/map?bbox=-122.4,47.3,-122.2,47.5&lt;br /&gt;
 wget -O map4.osm http://www.openstreetmap.org/api/0.5/map?bbox=-122.2,47.3,-122,47.5&lt;br /&gt;
*** Made a navit binary map file using the osm2navit binary that comes with the navit package on my linux box (it is also installing to the target from the .ipk)&lt;br /&gt;
 cat *.osm | osm2navit --dedupe-ways mymap.bin&lt;br /&gt;
&lt;br /&gt;
http://downloads.cloudmade.com/ also has up-to-date maps from OpenStreetMap by country.&lt;br /&gt;
&lt;br /&gt;
*** Copied the map to the NEO&lt;br /&gt;
 scp mymap.bin root@neo:/home/root/card/map&lt;br /&gt;
*** Change the navit.xml file on the NEO to use the new map&lt;br /&gt;
 cp /usr/share/navit/navit.xml ~/.navit/navit.xml&lt;br /&gt;
 vi ~/.navit/navit.xml&lt;br /&gt;
 &amp;lt;map type=&amp;quot;binfile&amp;quot; enabled=&amp;quot;yes&amp;quot; data=&amp;quot;/home/root/card/map/mymap.bin&amp;quot; /&amp;gt;&lt;br /&gt;
* Run navit&lt;br /&gt;
** Start gllin (for GTA01)&lt;br /&gt;
** Start gpsd ( gpsd /tmp/nmeaNP )&lt;br /&gt;
** Start navit&lt;br /&gt;
&lt;br /&gt;
* The version of osm2navit with which you build the maps should match the version of navit you have. If in doubt, build the maps on the OpenMoko.&lt;br /&gt;
&lt;br /&gt;
== News ==&lt;br /&gt;
&lt;br /&gt;
=== Street names ===&lt;br /&gt;
They are now displayed on OpenMoko using the CVS version of Navit (20071217).&lt;br /&gt;
&lt;br /&gt;
=== Point selection by pen ===&lt;br /&gt;
Easier using the CVS version (20071217). &lt;br /&gt;
&lt;br /&gt;
=== Route &amp;gt; Destination ===&lt;br /&gt;
The Route &amp;gt; Destination menu item crashes the software (20071217 and 0.04). &lt;br /&gt;
&lt;br /&gt;
A current fix is to set the LANG variable before calling navit. For example:&lt;br /&gt;
&lt;br /&gt;
 LANG=fr_FR.UTF-8 navit&lt;br /&gt;
&lt;br /&gt;
Note that a short syntax (e.g. LANG=fr) would not work.&lt;br /&gt;
&lt;br /&gt;
If you put an &amp;quot;export LANG=fr_FR.UTF-8&amp;quot; into your /etc/.profile file, it will automatically set this environment variable every time you boot up.  This way, you can launch Navit from the Icon in Illume.&lt;br /&gt;
&lt;br /&gt;
http://trac.navit-project.org/ticket/51&lt;br /&gt;
&lt;br /&gt;
=== Speech ===&lt;br /&gt;
Navit can speak if you install eSpeak + speech-dispatcher and updates your navit.xml file.&lt;br /&gt;
&lt;br /&gt;
For adventurous people, one way to do this:&lt;br /&gt;
&lt;br /&gt;
 * mokoTTS aims to integrate these packages in OM:&lt;br /&gt;
 http://projects.openmoko.org/projects/mokotts/&lt;br /&gt;
 &lt;br /&gt;
 install espeak, dotconf, and then speech-dispatcher.&lt;br /&gt;
 note: running 2008.8 updating from zecke's &amp;quot;testing&amp;quot; repo does not require &amp;quot;dotconf&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 * change the speech tag in navit.xml:&lt;br /&gt;
 &amp;lt;speech type=&amp;quot;cmdline&amp;quot; data=&amp;quot;spd-say '%s'&amp;quot; /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 or &amp;quot;spd-say -l fr '%s'&amp;quot; for using the French voice for example.&lt;br /&gt;
&lt;br /&gt;
=== Script to download OSM maps ===&lt;br /&gt;
[[User:Wurp|Wurp]] wrote a little python script to download all OSM maps within a lat/long rectangle.  Just copy the script to a file called dlOSM.sh, chmod +x it, and run it like&lt;br /&gt;
 dlOSM.sh &amp;lt;minimum latitude&amp;gt; &amp;lt;maximum latitude&amp;gt; &amp;lt;minimum longitude&amp;gt; &amp;lt;maximum longitude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It takes a long time for large maps.  I could optimize it some by having it try to get a big section at once, then if it fails, break it into smaller pieces and recurse.  I'm not sure when/if I'll get around to that...&lt;br /&gt;
&lt;br /&gt;
dlOSM.sh:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 import os&lt;br /&gt;
 import sys&lt;br /&gt;
 #import math&lt;br /&gt;
 &lt;br /&gt;
 def doIt(cmd):&lt;br /&gt;
   os.system(cmd)&lt;br /&gt;
 &lt;br /&gt;
 def getOsms(basename, minLat, maxLat, minLon, maxLon):&lt;br /&gt;
   '''basename - base name of map, maps are named {basename}{count}.osm&lt;br /&gt;
      minLat - latitude of the west side of the map&lt;br /&gt;
      maxLat - latitude of the east side of the map&lt;br /&gt;
      minLon - longitude of the north side of the map&lt;br /&gt;
      maxLon - longitude of the south side of the map'''&lt;br /&gt;
 &lt;br /&gt;
   wgetCmdTemplate = 'wget -O %s%s.osm http://api.openstreetmap.org/api/0.5/map?bbox=%s,%s,%s,%s'&lt;br /&gt;
 &lt;br /&gt;
   currLat = minLat&lt;br /&gt;
   mapCount = 0&lt;br /&gt;
   while currLat &amp;lt; maxLat:&lt;br /&gt;
     nextLat = min(currLat + 0.1, maxLat)&lt;br /&gt;
 &lt;br /&gt;
     currLon = minLon&lt;br /&gt;
     while currLon &amp;lt; maxLon:&lt;br /&gt;
       nextLon = min(currLon + 0.1, maxLon)&lt;br /&gt;
 &lt;br /&gt;
       doIt(wgetCmdTemplate % (basename, mapCount, currLon, currLat, nextLon, nextLat))&lt;br /&gt;
 &lt;br /&gt;
       currLon = nextLon&lt;br /&gt;
       mapCount = mapCount + 1&lt;br /&gt;
 &lt;br /&gt;
     currLat = nextLat&lt;br /&gt;
 &lt;br /&gt;
 (minLat, maxLat, minLon, maxLon) = map(float, sys.argv[1:])&lt;br /&gt;
 getOsms('map', minLat, maxLat, minLon, maxLon)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Applications]]&lt;br /&gt;
[[Category:GPS]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Navit</id>
		<title>Navit</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Navit"/>
				<updated>2008-08-18T16:16:25Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: /* Route &amp;gt; Destination */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As described on the [http://navit.sourceforge.net/ Navit home page],&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Navit is a car navigation system with routing engine.&lt;br /&gt;
&lt;br /&gt;
It's modular design is capable of using vector maps of various formats for routing and rendering of the displayed map. It's even possible to use multiple maps at a time.&lt;br /&gt;
&lt;br /&gt;
The GTK+ or SDL user interfaces are designed to work well with touch screen displays. Points of Interest of various formats are displayed on the map.&lt;br /&gt;
&lt;br /&gt;
The current vehicle position is either read from gpsd or directly from NMEA GPS sensors.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Some people say Navit is also a good choice for pedestrian and bicycle navigation.&lt;br /&gt;
&lt;br /&gt;
[[Image:Screenshot-3.png|thumb|Navit-0.0.4+cvs]]&lt;br /&gt;
&lt;br /&gt;
== Acknowledgment ==&lt;br /&gt;
&lt;br /&gt;
Thanks to [[User:Alessandro | Alessandro]], stefan_schmidt, cp15 and all Navit developers I have done a small (&amp;quot;not really working&amp;quot;) preview of Navit on Neo1973 at [http://www.telemobilityforum.com/eng/ Telemobility Forum 2007]. Thanks to [http://gfoss.it GFoss] guys to invite me.&lt;br /&gt;
''[[User:Tyrael | Tyrael]]''&lt;br /&gt;
&lt;br /&gt;
==Setting up Navit==&lt;br /&gt;
&lt;br /&gt;
I got navit set up and configured to the point where it follows me on the map.  It doesn't have street names or any other information, just the map and the cursor showing the location and direction.  Here's what I did:&lt;br /&gt;
* Install navit ipkg on NEO&lt;br /&gt;
 opkg install http://www.mikeasoft.com/~mike/ipk/armv4t/navit_0.0.4-r0_armv4t.ipk&lt;br /&gt;
* Or roll your own from svn using the toolchain (having checked out trunk in the navit directory, and assuming you have written navit_control):&lt;br /&gt;
 . /usr/local/openmoko/arm/setup-env&lt;br /&gt;
 om-conf navit --disable-samplemap&lt;br /&gt;
 om-make-ipkg navit navit_control&lt;br /&gt;
* Set up your local maps&lt;br /&gt;
** Openstreetmap - follow directions at http://wiki.navit-project.org/index.php/OpenStreetMaps&lt;br /&gt;
** Here's an example of what I did to get the maps for the area around Seattle, Wa where I live:&lt;br /&gt;
*** figured out map coordinates using http://informationfreeway.org/?lat=47.520270037501454&amp;amp;lon=-122.20130713167327&amp;amp;zoom=9&amp;amp;layers=B000F000&lt;br /&gt;
*** Downloaded 4 regions from openstreetmaps ([[Navit#Script_to_download_OSM_maps|see below]] for a script to do this for you automatically for largish areas)&lt;br /&gt;
 wget -O map1.osm http://www.openstreetmap.org/api/0.5/map?bbox=-122.2,47.5,-122,47.7&lt;br /&gt;
 wget -O map2.osm http://www.openstreetmap.org/api/0.5/map?bbox=-122.4,47.5,-122.2,47.7&lt;br /&gt;
 wget -O map3.osm http://www.openstreetmap.org/api/0.5/map?bbox=-122.4,47.3,-122.2,47.5&lt;br /&gt;
 wget -O map4.osm http://www.openstreetmap.org/api/0.5/map?bbox=-122.2,47.3,-122,47.5&lt;br /&gt;
*** Made a navit binary map file using the osm2navit binary that comes with the navit package on my linux box (it is also installing to the target from the .ipk)&lt;br /&gt;
 cat *.osm | osm2navit --dedupe-ways mymap.bin&lt;br /&gt;
&lt;br /&gt;
http://downloads.cloudmade.com/ also has up-to-date maps from OpenStreetMap by country.&lt;br /&gt;
&lt;br /&gt;
*** Copied the map to the NEO&lt;br /&gt;
 scp mymap.bin root@neo:/home/root/card/map&lt;br /&gt;
*** Change the navit.xml file on the NEO to use the new map&lt;br /&gt;
 cp /usr/share/navit/navit.xml ~/.navit/navit.xml&lt;br /&gt;
 vi ~/.navit/navit.xml&lt;br /&gt;
 &amp;lt;map type=&amp;quot;binfile&amp;quot; enabled=&amp;quot;yes&amp;quot; data=&amp;quot;/home/root/card/map/mymap.bin&amp;quot; /&amp;gt;&lt;br /&gt;
* Run navit&lt;br /&gt;
** Start gllin (for GTA01)&lt;br /&gt;
** Start gpsd ( gpsd /tmp/nmeaNP )&lt;br /&gt;
** Start navit&lt;br /&gt;
&lt;br /&gt;
* The version of osm2navit with which you build the maps should match the version of navit you have. If in doubt, build the maps on the OpenMoko.&lt;br /&gt;
&lt;br /&gt;
== News ==&lt;br /&gt;
&lt;br /&gt;
=== Street names ===&lt;br /&gt;
They are now displayed on OpenMoko using the CVS version of Navit (20071217).&lt;br /&gt;
&lt;br /&gt;
=== Point selection by pen ===&lt;br /&gt;
Easier using the CVS version (20071217). &lt;br /&gt;
&lt;br /&gt;
=== Route &amp;gt; Destination ===&lt;br /&gt;
The Route &amp;gt; Destination menu item crashes the software (20071217 and 0.04). &lt;br /&gt;
&lt;br /&gt;
A current fix is to set the LANG variable before calling navit. For example:&lt;br /&gt;
&lt;br /&gt;
 LANG=fr_FR.UTF-8 navit&lt;br /&gt;
&lt;br /&gt;
Note that a short syntax (e.g. LANG=fr) would not work.&lt;br /&gt;
&lt;br /&gt;
If you put an &amp;quot;export LANG=fr_FR.UTF-8&amp;quot; into your /etc/.profile file, it will automatically be set this environment variable every time you boot up.  This way, you can launch Navit from the Icon in Illume.&lt;br /&gt;
&lt;br /&gt;
http://trac.navit-project.org/ticket/51&lt;br /&gt;
&lt;br /&gt;
=== Speech ===&lt;br /&gt;
Navit can speak if you install eSpeak + speech-dispatcher and updates your navit.xml file.&lt;br /&gt;
&lt;br /&gt;
For adventurous people, one way to do this:&lt;br /&gt;
&lt;br /&gt;
 * mokoTTS aims to integrate these packages in OM:&lt;br /&gt;
 http://projects.openmoko.org/projects/mokotts/&lt;br /&gt;
 &lt;br /&gt;
 install espeak, dotconf, and then speech-dispatcher.&lt;br /&gt;
 note: running 2008.8 updating from zecke's &amp;quot;testing&amp;quot; repo does not require &amp;quot;dotconf&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 * change the speech tag in navit.xml:&lt;br /&gt;
 &amp;lt;speech type=&amp;quot;cmdline&amp;quot; data=&amp;quot;spd-say '%s'&amp;quot; /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 or &amp;quot;spd-say -l fr '%s'&amp;quot; for using the French voice for example.&lt;br /&gt;
&lt;br /&gt;
=== Script to download OSM maps ===&lt;br /&gt;
[[User:Wurp|Wurp]] wrote a little python script to download all OSM maps within a lat/long rectangle.  Just copy the script to a file called dlOSM.sh, chmod +x it, and run it like&lt;br /&gt;
 dlOSM.sh &amp;lt;minimum latitude&amp;gt; &amp;lt;maximum latitude&amp;gt; &amp;lt;minimum longitude&amp;gt; &amp;lt;maximum longitude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It takes a long time for large maps.  I could optimize it some by having it try to get a big section at once, then if it fails, break it into smaller pieces and recurse.  I'm not sure when/if I'll get around to that...&lt;br /&gt;
&lt;br /&gt;
dlOSM.sh:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &lt;br /&gt;
 import os&lt;br /&gt;
 import sys&lt;br /&gt;
 #import math&lt;br /&gt;
 &lt;br /&gt;
 def doIt(cmd):&lt;br /&gt;
   os.system(cmd)&lt;br /&gt;
 &lt;br /&gt;
 def getOsms(basename, minLat, maxLat, minLon, maxLon):&lt;br /&gt;
   '''basename - base name of map, maps are named {basename}{count}.osm&lt;br /&gt;
      minLat - latitude of the west side of the map&lt;br /&gt;
      maxLat - latitude of the east side of the map&lt;br /&gt;
      minLon - longitude of the north side of the map&lt;br /&gt;
      maxLon - longitude of the south side of the map'''&lt;br /&gt;
 &lt;br /&gt;
   wgetCmdTemplate = 'wget -O %s%s.osm http://api.openstreetmap.org/api/0.5/map?bbox=%s,%s,%s,%s'&lt;br /&gt;
 &lt;br /&gt;
   currLat = minLat&lt;br /&gt;
   mapCount = 0&lt;br /&gt;
   while currLat &amp;lt; maxLat:&lt;br /&gt;
     nextLat = min(currLat + 0.1, maxLat)&lt;br /&gt;
 &lt;br /&gt;
     currLon = minLon&lt;br /&gt;
     while currLon &amp;lt; maxLon:&lt;br /&gt;
       nextLon = min(currLon + 0.1, maxLon)&lt;br /&gt;
 &lt;br /&gt;
       doIt(wgetCmdTemplate % (basename, mapCount, currLon, currLat, nextLon, nextLat))&lt;br /&gt;
 &lt;br /&gt;
       currLon = nextLon&lt;br /&gt;
       mapCount = mapCount + 1&lt;br /&gt;
 &lt;br /&gt;
     currLat = nextLat&lt;br /&gt;
 &lt;br /&gt;
 (minLat, maxLat, minLon, maxLon) = map(float, sys.argv[1:])&lt;br /&gt;
 getOsms('map', minLat, maxLat, minLon, maxLon)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Applications]]&lt;br /&gt;
[[Category:GPS]]&lt;/div&gt;</summary>
		<author><name>Dewey</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>2008-08-16T19:11:43Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: /* Angstrom Repository */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;For information about the official downloads and distributions, see [[Downloads]]&lt;br /&gt;
&lt;br /&gt;
=== Angstrom Repository ===&lt;br /&gt;
&lt;br /&gt;
Angstrong is the base distribution of OpenMoko Linux distribution. It contains the basic set of Linux applications and they should be compatible with OpenMoko. [http://www.angstrom-distribution.org/repo/ The repository package listing].&lt;br /&gt;
&lt;br /&gt;
To add the unstable Angstrom feed, update your ''/etc/opkg/base-feeds.conf'' to include a line:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
src/gz base http://www.angstrom-distribution.org/feeds/2007/ipk/glibc/armv4t/base/&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Om 2008.8 ====&lt;br /&gt;
&lt;br /&gt;
On Om 2008.8, run the following commands from the Neo:&lt;br /&gt;
&lt;br /&gt;
  echo &amp;quot;arch base 50&amp;quot; &amp;gt; /etc/opkg/angstrom-feed.conf&lt;br /&gt;
  echo &amp;quot;src/gz base http://www.angstrom-distribution.org/feeds/2008/ipk/glibc/armv4t/base/&amp;quot; &amp;gt;&amp;gt; /etc/opkg/angstrom-feed.conf&lt;br /&gt;
&lt;br /&gt;
This repository contains the following useful packages:&lt;br /&gt;
&lt;br /&gt;
* Pidgin - Instant Messaging.  Can connect to MSN, Google Talk, Yahoo, ICQ with additional plugins&lt;br /&gt;
* [[Minimo]] - Web Browsing.  AJAX capable, based on the Gecko rendering engine&lt;br /&gt;
* [[Navit]] - Car Navigation with Routing Engine&lt;br /&gt;
&lt;br /&gt;
===[[User:ChooseOpen|ChooseOpen]]===&lt;br /&gt;
:http://chooseopen.com/openmoko/build/2007.2/?M=D (2007.2)&lt;br /&gt;
:http://chooseopen.com/openmoko/build/qtopia/?M=D (Qtopia)&lt;br /&gt;
&lt;br /&gt;
===[[User:Kevin_Dean|Kevin_Dean]]===&lt;br /&gt;
:http://downloads.openmoko.org/recommended/ (only gta01)&lt;br /&gt;
:Latest recommended [[Snapshot review|snapshot review]]&lt;br /&gt;
&lt;br /&gt;
===[[User:ScaredyCat|ScaredyCat]]===&lt;br /&gt;
:http://buildhost.automated.it/OM2007.2/?M=D&lt;br /&gt;
&lt;br /&gt;
ScaredyCat also has a opkg 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/opkg&lt;br /&gt;
 wget http://buildhost.automated.it/scaredycat.conf &lt;br /&gt;
 opkg update&lt;br /&gt;
 opkg install gpe-filemanager&lt;br /&gt;
 opkg install gpe-timesheet&lt;br /&gt;
 opkg install gpe-todo&lt;br /&gt;
 opkg install mysql&lt;br /&gt;
 opkg install mtpaint&lt;br /&gt;
 opkg install sqlite&lt;br /&gt;
 opkg 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;
==='''mwester''' unofficial builds===&lt;br /&gt;
:http://moko.mwester.net/&lt;br /&gt;
&lt;br /&gt;
===celtune===&lt;br /&gt;
:http://rabenfrost.net/celtune/?C=M;O=D&lt;br /&gt;
:http://rabenfrost.net/celtune/ipk/&lt;br /&gt;
&lt;br /&gt;
Celtune offers Standard-Builds (.jffs2, .tar.gz, .bin, .ipk) and several special-images with additional packages (e.g. monster-images,navigation-images,...)&lt;br /&gt;
For more info take a look at http://rabenfrost.net/celtune/1-NEWS-WARNING-INFO &lt;br /&gt;
You can find images, kernels and packages for other devices too on http://rabenfrost.net/celtune/ (e.g. HTC-Blueangel, Asus730W ...)&lt;br /&gt;
A huge number of packages is located at http://rabenfrost.net/celtune/ipk/  &lt;br /&gt;
Use the following line to add celtune's feed to your neo: &lt;br /&gt;
 cd /etc/opkg &amp;amp;&amp;amp; wget http://rabenfrost.net/celtune/celtune-rabenfrost.conf&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===FSO===&lt;br /&gt;
Daily builds of the freesmartphone.org distribution can be found at:&amp;lt;br&amp;gt;&lt;br /&gt;
http://totalueberwachung.de/~alphaone/openembedded-build/glibc/images/neo1973/&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Note===&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;br /&gt;
&lt;br /&gt;
[[Category:Openmoko]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Om_2008_Installer</id>
		<title>Om 2008 Installer</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Om_2008_Installer"/>
				<updated>2008-08-16T17:36:59Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: Undo revision 46950 by Dewey (Talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Om 2008.8}}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
The OpenMoko Installer (Codename: [http://code.google.com/p/om-assassin/ Assassin]) is a tool for ''installing'', ''updating'' and ''uninstalling'' programs on your Neo.  &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; style=&amp;quot;padding: 0%; margin:0em 0em 1em 0em; border:1px solid #c0c0c0; background:#eeeeee; floating=&amp;quot;center&amp;quot;;width:100%; &amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#fcfcfc;border-left:1px solid #9999cc;border-right:1px ; border-top:2px solid 75d806; border:0px solid #222222; width:25% &amp;quot; |  &lt;br /&gt;
[[Image:Install.png|200px|thumb|catogory]]&lt;br /&gt;
! style=&amp;quot;background:#fcfcfc;border-left:1px solid #9999cc;border-right:1px ; border-top:2px solid 75d806; border:0px solid #222222; width:25% &amp;quot; |&lt;br /&gt;
[[Image:Install1.png|200px|thumb|choose program]]&lt;br /&gt;
! style=&amp;quot;background:#fcfcfc;border-left:1px solid #9999cc;border-right:1px ; border-top:2px solid 75d806; border:0px solid #222222; width:25% &amp;quot; |&lt;br /&gt;
[[Image:Installer4.png|200px|thumb|install application]]&lt;br /&gt;
! style=&amp;quot;background:#fcfcfc;border-left:1px solid #9999cc;border-right:1px ; border-top:2px solid 75d806; border:0px solid #222222; width:25% &amp;quot; |&lt;br /&gt;
[[Image:Om2008 installer2.png|200px|thumb|install application]]&lt;br /&gt;
|}&lt;br /&gt;
==Install an Application ==&lt;br /&gt;
'''Installer''' needs an internet connection to install applications for the repositories.  This can be done via WiFi (currently unstable), [http://svn.openmoko.org/developers/tick/Test_env_script_GTA02A5/setneo USB], [[GPRS]] or [[How_to_use_bluetooth_to_transfer_data_between_Neo_and_Desk-top|Bluetooth]].&lt;br /&gt;
&lt;br /&gt;
===Instructions===&lt;br /&gt;
&lt;br /&gt;
'''[1]'''   Make sure you are connected to the internet and launch '''Installer'''.  &lt;br /&gt;
&lt;br /&gt;
'''[2]'''   At launch, '''Installer''' will initially refresh a list of installable programs.  After refresh is complete, press the '''INSTALL''' button from the bottom bar to view a list of Categories.  This is also the default page of the Installer application.&lt;br /&gt;
&lt;br /&gt;
'''[3]'''   Select a Category from the category list, then select a package to install.&lt;br /&gt;
&lt;br /&gt;
'''[4]'''   In the package information page, press the image box and confirm to begin.&lt;br /&gt;
&lt;br /&gt;
'''[5]'''   Once the progress bar shows '''Done''', you will return to the Installer default page.  Installation is then complete.&lt;br /&gt;
&lt;br /&gt;
* To ''update'' or ''uninstall'' packages, simply replace step '''[2]''' with the desired function '''UPDATE''' or '''UNINSTALL''' and repeat steps '''[3]''' through '''[5]'''.&lt;br /&gt;
&lt;br /&gt;
==Sharing Applications==&lt;br /&gt;
Sharing applications is done by uploading packages to the [http://downloads.openmoko.org/repository/Multiverse/ Community Repository], which is a similar concept to the Multiverse repository in Ubuntu.  [[CommunityRepository|Anyone can upload applications]] or even their own repository to share with fellow Neo owners.&lt;br /&gt;
&lt;br /&gt;
===How to add a package to Openmoko Repository===&lt;br /&gt;
&lt;br /&gt;
You can release your package with ipk file. &lt;br /&gt;
&lt;br /&gt;
* [[Create package on projects.openmoko.org and upload]]&lt;br /&gt;
* '''Create ipk files'''&lt;br /&gt;
** Using OE&lt;br /&gt;
** [[Toolchain|Meta-toolchain]]&lt;br /&gt;
&lt;br /&gt;
==== Package Tags ====&lt;br /&gt;
Packages in '''Installer''' are displayed according to '''Package Tags'''.&lt;br /&gt;
To display a package through [[Om2008.8_Installer |Installer]], add the appropriate tag message. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border:1px ;&lt;br /&gt;
! Category !! Tag &lt;br /&gt;
|- &lt;br /&gt;
| Communication || group::communication &lt;br /&gt;
|-&lt;br /&gt;
| Development   || group::programming&lt;br /&gt;
|-&lt;br /&gt;
| Games         || group::games&lt;br /&gt;
|-&lt;br /&gt;
| Maps          || group::maps&lt;br /&gt;
|-&lt;br /&gt;
| Miscellaneous || group::unknown&lt;br /&gt;
|-&lt;br /&gt;
| Network       || group::network&lt;br /&gt;
|-&lt;br /&gt;
|Repos          || group::repos&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* For OpenEmbedded users, add a Tag by adding one line in your bb file&lt;br /&gt;
:For [http://code.google.com/p/comic-reader/source/browse/trunk/data/comic-reader_svn.bb example]:&lt;br /&gt;
 PKG_TAGS_${PN} = &amp;quot;group::games&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Add a Repository ==== &lt;br /&gt;
===== Add repositories by installing repository packages =====&lt;br /&gt;
* The community-repository is installed by default in [[Om2008.8 | Om 2008.8]].&lt;br /&gt;
&lt;br /&gt;
===== Add repository manually =====&lt;br /&gt;
* Create a file, here we call it community-repos.conf&lt;br /&gt;
 &amp;gt; echo &amp;quot;arch community-repos 50&amp;quot; &amp;gt; community-repos.conf&lt;br /&gt;
 &amp;gt; echo &amp;quot;src community-repos http://downloads.openmoko.org/repository/Multiverse/&amp;quot; &amp;gt;&amp;gt; community-repos.conf&lt;br /&gt;
* Connect to your Neo with USB&lt;br /&gt;
 &amp;gt; sudo ifconfig usb0 192.168.0.200&lt;br /&gt;
 &amp;gt; scp community-repos.conf root@192.168.0.202:/etc/opkg/&lt;br /&gt;
* Let your Neo connect to the Internet&lt;br /&gt;
** For USB users:&lt;br /&gt;
 &amp;gt; echo 1 | sudo tee  /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
 &amp;gt; sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE&lt;br /&gt;
 &amp;gt; scp /etc/resolv.conf root@192.168.0.202:/etc/&lt;br /&gt;
** For geek users:&lt;br /&gt;
 &amp;gt; ssh root@192.168.0.202&lt;br /&gt;
 &amp;gt; iwlist eth0 scan&lt;br /&gt;
 Find a usable AP lets say OpenMind (Support it's an open AP)&lt;br /&gt;
 &amp;gt; iwconfig eth0 essid OpenMind&lt;br /&gt;
 &amp;gt; udhcpc eth0&lt;br /&gt;
 Then pray, if successfull, remove default gw *twice*.&lt;br /&gt;
 &amp;gt; route -n  # to see your gateway of eth0 say 192.168.1.1&lt;br /&gt;
 &amp;gt; route del default&lt;br /&gt;
 &amp;gt; route del default&lt;br /&gt;
 &amp;gt; route add default gw 192.168.1.1 eth0&lt;br /&gt;
 Then you can ping wiki.openmoko.org for testing :)&lt;br /&gt;
** For GUI WiFi user:&lt;br /&gt;
 Click Settings&lt;br /&gt;
 Click WiFi&lt;br /&gt;
 Select an AP&lt;br /&gt;
 Input password if needed&lt;br /&gt;
 &lt;br /&gt;
* Refresh the opkg metadata database&lt;br /&gt;
 after connecting to Neo&lt;br /&gt;
 &amp;gt; opkg update&lt;br /&gt;
&lt;br /&gt;
== Technical Features ==&lt;br /&gt;
* '''Installer''' is a specialized GUI front-end of [http://packagekit.org/ Packagekit] over DBus interface.&lt;br /&gt;
&lt;br /&gt;
* Please run '''Installer''' under stable network conditions and enough power supply.  Once '''Installer''' is launched, it will actually try to detect repositories you installed. This will take some time if your network condition is not stable.&lt;br /&gt;
** If you do not have access to WiFi, a [http://svn.openmoko.org/developers/tick/Test_env_script_GTA02A5/setneo USB] connection is recommended.&lt;br /&gt;
* The default Packagekit backend on Neo is [[opkg]], but is not restricted to opkg. &lt;br /&gt;
&lt;br /&gt;
* '''Installer''' refreshes the package meta-data every 2 days.&lt;br /&gt;
&lt;br /&gt;
* While running '''Installer''', it will also launch packagekitd automatically, in which it will lock the libopkg for synchronization issues.  If you want to use opkg, you may terminate '''Installer''' and killall packagekitd.&lt;br /&gt;
&lt;br /&gt;
* You can also talk with Packagekit through DBus.&lt;br /&gt;
&lt;br /&gt;
For more information, refer to the reference section below.&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
[1] Installer project - http://code.google.com/p/om-assassin/&lt;br /&gt;
&lt;br /&gt;
[2] Packagekit project - http://packagekit.org/&lt;br /&gt;
&lt;br /&gt;
[3] Opkg package management - http://wiki.openmoko.org/wiki/Opkg&lt;br /&gt;
&lt;br /&gt;
[[Category:Applications]]&lt;br /&gt;
[[Category:Om 2008.8]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Om_2008_Installer</id>
		<title>Om 2008 Installer</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Om_2008_Installer"/>
				<updated>2008-08-16T17:34:23Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: /* Install an Application */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Om 2008.8}}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
The OpenMoko Installer (Codename: [http://code.google.com/p/om-assassin/ Assassin]) is a tool for ''installing'', ''updating'' and ''uninstalling'' programs on your Neo.  &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; style=&amp;quot;padding: 0%; margin:0em 0em 1em 0em; border:1px solid #c0c0c0; background:#eeeeee; floating=&amp;quot;center&amp;quot;;width:100%; &amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#fcfcfc;border-left:1px solid #9999cc;border-right:1px ; border-top:2px solid 75d806; border:0px solid #222222; width:25% &amp;quot; |  &lt;br /&gt;
[[Image:Install.png|200px|thumb|catogory]]&lt;br /&gt;
! style=&amp;quot;background:#fcfcfc;border-left:1px solid #9999cc;border-right:1px ; border-top:2px solid 75d806; border:0px solid #222222; width:25% &amp;quot; |&lt;br /&gt;
[[Image:Install1.png|200px|thumb|choose program]]&lt;br /&gt;
! style=&amp;quot;background:#fcfcfc;border-left:1px solid #9999cc;border-right:1px ; border-top:2px solid 75d806; border:0px solid #222222; width:25% &amp;quot; |&lt;br /&gt;
[[Image:Installer4.png|200px|thumb|install application]]&lt;br /&gt;
! style=&amp;quot;background:#fcfcfc;border-left:1px solid #9999cc;border-right:1px ; border-top:2px solid 75d806; border:0px solid #222222; width:25% &amp;quot; |&lt;br /&gt;
[[Image:Om2008 installer2.png|200px|thumb|install application]]&lt;br /&gt;
|}&lt;br /&gt;
==Install an Application ==&lt;br /&gt;
&lt;br /&gt;
There are two ways to install an application:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== 1. Using the Graphical Installer ===&lt;br /&gt;
&lt;br /&gt;
'''Installer''' needs an internet connection to install applications for the repositories.  This can be done via WiFi (currently unstable), [http://svn.openmoko.org/developers/tick/Test_env_script_GTA02A5/setneo USB], [[GPRS]] or [[How_to_use_bluetooth_to_transfer_data_between_Neo_and_Desk-top|Bluetooth]].&lt;br /&gt;
&lt;br /&gt;
====Instructions====&lt;br /&gt;
&lt;br /&gt;
'''[1]'''   Make sure you are connected to the internet and launch '''Installer'''.  &lt;br /&gt;
&lt;br /&gt;
'''[2]'''   At launch, '''Installer''' will initially refresh a list of installable programs.  After refresh is complete, press the '''INSTALL''' button from the bottom bar to view a list of Categories.  This is also the default page of the Installer application.&lt;br /&gt;
&lt;br /&gt;
'''[3]'''   Select a Category from the category list, then select a package to install.&lt;br /&gt;
&lt;br /&gt;
'''[4]'''   In the package information page, press the image box and confirm to begin.&lt;br /&gt;
&lt;br /&gt;
'''[5]'''   Once the progress bar shows '''Done''', you will return to the Installer default page.  Installation is then complete.&lt;br /&gt;
&lt;br /&gt;
* To ''update'' or ''uninstall'' packages, simply replace step '''[2]''' with the desired function '''UPDATE''' or '''UNINSTALL''' and repeat steps '''[3]''' through '''[5]'''.&lt;br /&gt;
&lt;br /&gt;
=== 2. Using opkg from the command line ===&lt;br /&gt;
&lt;br /&gt;
  opkg install &amp;lt;package name from repository, filename, or url to package&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This method is most useful for installing packages that are not in any of the repositories.  You may have to kill the packagekit service if opkg compalins about:&lt;br /&gt;
&lt;br /&gt;
   * Could not obtain administrative lock&lt;br /&gt;
&lt;br /&gt;
Issue a &lt;br /&gt;
&lt;br /&gt;
  pkill packagekit&lt;br /&gt;
&lt;br /&gt;
==Sharing Applications==&lt;br /&gt;
Sharing applications is done by uploading packages to the [http://downloads.openmoko.org/repository/Multiverse/ Community Repository], which is a similar concept to the Multiverse repository in Ubuntu.  [[CommunityRepository|Anyone can upload applications]] or even their own repository to share with fellow Neo owners.&lt;br /&gt;
&lt;br /&gt;
===How to add a package to Openmoko Repository===&lt;br /&gt;
&lt;br /&gt;
You can release your package with ipk file. &lt;br /&gt;
&lt;br /&gt;
* [[Create package on projects.openmoko.org and upload]]&lt;br /&gt;
* '''Create ipk files'''&lt;br /&gt;
** Using OE&lt;br /&gt;
** [[Toolchain|Meta-toolchain]]&lt;br /&gt;
&lt;br /&gt;
==== Package Tags ====&lt;br /&gt;
Packages in '''Installer''' are displayed according to '''Package Tags'''.&lt;br /&gt;
To display a package through [[Om2008.8_Installer |Installer]], add the appropriate tag message. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border:1px ;&lt;br /&gt;
! Category !! Tag &lt;br /&gt;
|- &lt;br /&gt;
| Communication || group::communication &lt;br /&gt;
|-&lt;br /&gt;
| Development   || group::programming&lt;br /&gt;
|-&lt;br /&gt;
| Games         || group::games&lt;br /&gt;
|-&lt;br /&gt;
| Maps          || group::maps&lt;br /&gt;
|-&lt;br /&gt;
| Miscellaneous || group::unknown&lt;br /&gt;
|-&lt;br /&gt;
| Network       || group::network&lt;br /&gt;
|-&lt;br /&gt;
|Repos          || group::repos&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* For OpenEmbedded users, add a Tag by adding one line in your bb file&lt;br /&gt;
:For [http://code.google.com/p/comic-reader/source/browse/trunk/data/comic-reader_svn.bb example]:&lt;br /&gt;
 PKG_TAGS_${PN} = &amp;quot;group::games&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Add a Repository ==== &lt;br /&gt;
===== Add repositories by installing repository packages =====&lt;br /&gt;
* The community-repository is installed by default in [[Om2008.8 | Om 2008.8]].&lt;br /&gt;
&lt;br /&gt;
===== Add repository manually =====&lt;br /&gt;
* Create a file, here we call it community-repos.conf&lt;br /&gt;
 &amp;gt; echo &amp;quot;arch community-repos 50&amp;quot; &amp;gt; community-repos.conf&lt;br /&gt;
 &amp;gt; echo &amp;quot;src community-repos http://downloads.openmoko.org/repository/Multiverse/&amp;quot; &amp;gt;&amp;gt; community-repos.conf&lt;br /&gt;
* Connect to your Neo with USB&lt;br /&gt;
 &amp;gt; sudo ifconfig usb0 192.168.0.200&lt;br /&gt;
 &amp;gt; scp community-repos.conf root@192.168.0.202:/etc/opkg/&lt;br /&gt;
* Let your Neo connect to the Internet&lt;br /&gt;
** For USB users:&lt;br /&gt;
 &amp;gt; echo 1 | sudo tee  /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
 &amp;gt; sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE&lt;br /&gt;
 &amp;gt; scp /etc/resolv.conf root@192.168.0.202:/etc/&lt;br /&gt;
** For geek users:&lt;br /&gt;
 &amp;gt; ssh root@192.168.0.202&lt;br /&gt;
 &amp;gt; iwlist eth0 scan&lt;br /&gt;
 Find a usable AP lets say OpenMind (Support it's an open AP)&lt;br /&gt;
 &amp;gt; iwconfig eth0 essid OpenMind&lt;br /&gt;
 &amp;gt; udhcpc eth0&lt;br /&gt;
 Then pray, if successfull, remove default gw *twice*.&lt;br /&gt;
 &amp;gt; route -n  # to see your gateway of eth0 say 192.168.1.1&lt;br /&gt;
 &amp;gt; route del default&lt;br /&gt;
 &amp;gt; route del default&lt;br /&gt;
 &amp;gt; route add default gw 192.168.1.1 eth0&lt;br /&gt;
 Then you can ping wiki.openmoko.org for testing :)&lt;br /&gt;
** For GUI WiFi user:&lt;br /&gt;
 Click Settings&lt;br /&gt;
 Click WiFi&lt;br /&gt;
 Select an AP&lt;br /&gt;
 Input password if needed&lt;br /&gt;
 &lt;br /&gt;
* Refresh the opkg metadata database&lt;br /&gt;
 after connecting to Neo&lt;br /&gt;
 &amp;gt; opkg update&lt;br /&gt;
&lt;br /&gt;
== Technical Features ==&lt;br /&gt;
* '''Installer''' is a specialized GUI front-end of [http://packagekit.org/ Packagekit] over DBus interface.&lt;br /&gt;
&lt;br /&gt;
* Please run '''Installer''' under stable network conditions and enough power supply.  Once '''Installer''' is launched, it will actually try to detect repositories you installed. This will take some time if your network condition is not stable.&lt;br /&gt;
** If you do not have access to WiFi, a [http://svn.openmoko.org/developers/tick/Test_env_script_GTA02A5/setneo USB] connection is recommended.&lt;br /&gt;
* The default Packagekit backend on Neo is [[opkg]], but is not restricted to opkg. &lt;br /&gt;
&lt;br /&gt;
* '''Installer''' refreshes the package meta-data every 2 days.&lt;br /&gt;
&lt;br /&gt;
* While running '''Installer''', it will also launch packagekitd automatically, in which it will lock the libopkg for synchronization issues.  If you want to use opkg, you may terminate '''Installer''' and killall packagekitd.&lt;br /&gt;
&lt;br /&gt;
* You can also talk with Packagekit through DBus.&lt;br /&gt;
&lt;br /&gt;
For more information, refer to the reference section below.&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
[1] Installer project - http://code.google.com/p/om-assassin/&lt;br /&gt;
&lt;br /&gt;
[2] Packagekit project - http://packagekit.org/&lt;br /&gt;
&lt;br /&gt;
[3] Opkg package management - http://wiki.openmoko.org/wiki/Opkg&lt;br /&gt;
&lt;br /&gt;
[[Category:Applications]]&lt;br /&gt;
[[Category:Om 2008.8]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Om_2008_Installer</id>
		<title>Om 2008 Installer</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Om_2008_Installer"/>
				<updated>2008-08-16T16:54:09Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: /* Install an Application */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Om 2008.8}}&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
The OpenMoko Installer (Codename: [http://code.google.com/p/om-assassin/ Assassin]) is a tool for ''installing'', ''updating'' and ''uninstalling'' programs on your Neo.  &lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;0&amp;quot; style=&amp;quot;padding: 0%; margin:0em 0em 1em 0em; border:1px solid #c0c0c0; background:#eeeeee; floating=&amp;quot;center&amp;quot;;width:100%; &amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#fcfcfc;border-left:1px solid #9999cc;border-right:1px ; border-top:2px solid 75d806; border:0px solid #222222; width:25% &amp;quot; |  &lt;br /&gt;
[[Image:Install.png|200px|thumb|catogory]]&lt;br /&gt;
! style=&amp;quot;background:#fcfcfc;border-left:1px solid #9999cc;border-right:1px ; border-top:2px solid 75d806; border:0px solid #222222; width:25% &amp;quot; |&lt;br /&gt;
[[Image:Install1.png|200px|thumb|choose program]]&lt;br /&gt;
! style=&amp;quot;background:#fcfcfc;border-left:1px solid #9999cc;border-right:1px ; border-top:2px solid 75d806; border:0px solid #222222; width:25% &amp;quot; |&lt;br /&gt;
[[Image:Installer4.png|200px|thumb|install application]]&lt;br /&gt;
! style=&amp;quot;background:#fcfcfc;border-left:1px solid #9999cc;border-right:1px ; border-top:2px solid 75d806; border:0px solid #222222; width:25% &amp;quot; |&lt;br /&gt;
[[Image:Om2008 installer2.png|200px|thumb|install application]]&lt;br /&gt;
|}&lt;br /&gt;
==Install an Application ==&lt;br /&gt;
'''Installer''' needs an internet connection to install applications for the repositories.  This can be done via WiFi (currently unstable), [http://svn.openmoko.org/developers/tick/Test_env_script_GTA02A5/setneo USB], [[GPRS]] or [[How_to_use_bluetooth_to_transfer_data_between_Neo_and_Desk-top|Bluetooth]].&lt;br /&gt;
&lt;br /&gt;
===Instructions===&lt;br /&gt;
&lt;br /&gt;
'''[1]'''   Make sure you are connected to the internet and launch '''Installer'''.  &lt;br /&gt;
&lt;br /&gt;
'''[2]'''   At launch, '''Installer''' will initially refresh a list of installable programs.  After refresh is complete, press the '''INSTALL''' button from the bottom bar to view a list of Categories.  This is also the default page of the Installer application.&lt;br /&gt;
&lt;br /&gt;
'''[3]'''   Select a Category from the category list, then select a package to install.&lt;br /&gt;
&lt;br /&gt;
'''[4]'''   In the package information page, press the image box and confirm to begin.&lt;br /&gt;
&lt;br /&gt;
'''[5]'''   Once the progress bar shows '''Done''', you will return to the Installer default page.  Installation is then complete.&lt;br /&gt;
&lt;br /&gt;
* To ''update'' or ''uninstall'' packages, simply replace step '''[2]''' with the desired function '''UPDATE''' or '''UNINSTALL''' and repeat steps '''[3]''' through '''[5]'''.&lt;br /&gt;
&lt;br /&gt;
==Sharing Applications==&lt;br /&gt;
Sharing applications is done by uploading packages to the [http://downloads.openmoko.org/repository/Multiverse/ Community Repository], which is a similar concept to the Multiverse repository in Ubuntu.  [[CommunityRepository|Anyone can upload applications]] or even their own repository to share with fellow Neo owners.&lt;br /&gt;
&lt;br /&gt;
===How to add a package to Openmoko Repository===&lt;br /&gt;
&lt;br /&gt;
You can release your package with ipk file. &lt;br /&gt;
&lt;br /&gt;
* [[Create package on projects.openmoko.org and upload]]&lt;br /&gt;
* '''Create ipk files'''&lt;br /&gt;
** Using OE&lt;br /&gt;
** [[Toolchain|Meta-toolchain]]&lt;br /&gt;
&lt;br /&gt;
==== Package Tags ====&lt;br /&gt;
Packages in '''Installer''' are displayed according to '''Package Tags'''.&lt;br /&gt;
To display a package through [[Om2008.8_Installer |Installer]], add the appropriate tag message. &lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; border:1px ;&lt;br /&gt;
! Category !! Tag &lt;br /&gt;
|- &lt;br /&gt;
| Communication || group::communication &lt;br /&gt;
|-&lt;br /&gt;
| Development   || group::programming&lt;br /&gt;
|-&lt;br /&gt;
| Games         || group::games&lt;br /&gt;
|-&lt;br /&gt;
| Maps          || group::maps&lt;br /&gt;
|-&lt;br /&gt;
| Miscellaneous || group::unknown&lt;br /&gt;
|-&lt;br /&gt;
| Network       || group::network&lt;br /&gt;
|-&lt;br /&gt;
|Repos          || group::repos&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* For OpenEmbedded users, add a Tag by adding one line in your bb file&lt;br /&gt;
:For [http://code.google.com/p/comic-reader/source/browse/trunk/data/comic-reader_svn.bb example]:&lt;br /&gt;
 PKG_TAGS_${PN} = &amp;quot;group::games&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==== Add a Repository ==== &lt;br /&gt;
===== Add repositories by installing repository packages =====&lt;br /&gt;
* The community-repository is installed by default in [[Om2008.8 | Om 2008.8]].&lt;br /&gt;
&lt;br /&gt;
===== Add repository manually =====&lt;br /&gt;
* Create a file, here we call it community-repos.conf&lt;br /&gt;
 &amp;gt; echo &amp;quot;arch community-repos 50&amp;quot; &amp;gt; community-repos.conf&lt;br /&gt;
 &amp;gt; echo &amp;quot;src community-repos http://downloads.openmoko.org/repository/Multiverse/&amp;quot; &amp;gt;&amp;gt; community-repos.conf&lt;br /&gt;
* Connect to your Neo with USB&lt;br /&gt;
 &amp;gt; sudo ifconfig usb0 192.168.0.200&lt;br /&gt;
 &amp;gt; scp community-repos.conf root@192.168.0.202:/etc/opkg/&lt;br /&gt;
* Let your Neo connect to the Internet&lt;br /&gt;
** For USB users:&lt;br /&gt;
 &amp;gt; echo 1 | sudo tee  /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
 &amp;gt; sudo iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE&lt;br /&gt;
 &amp;gt; scp /etc/resolv.conf root@192.168.0.202:/etc/&lt;br /&gt;
** For geek users:&lt;br /&gt;
 &amp;gt; ssh root@192.168.0.202&lt;br /&gt;
 &amp;gt; iwlist eth0 scan&lt;br /&gt;
 Find a usable AP lets say OpenMind (Support it's an open AP)&lt;br /&gt;
 &amp;gt; iwconfig eth0 essid OpenMind&lt;br /&gt;
 &amp;gt; udhcpc eth0&lt;br /&gt;
 Then pray, if successfull, remove default gw *twice*.&lt;br /&gt;
 &amp;gt; route -n  # to see your gateway of eth0 say 192.168.1.1&lt;br /&gt;
 &amp;gt; route del default&lt;br /&gt;
 &amp;gt; route del default&lt;br /&gt;
 &amp;gt; route add default gw 192.168.1.1 eth0&lt;br /&gt;
 Then you can ping wiki.openmoko.org for testing :)&lt;br /&gt;
** For GUI WiFi user:&lt;br /&gt;
 Click Settings&lt;br /&gt;
 Click WiFi&lt;br /&gt;
 Select an AP&lt;br /&gt;
 Input password if needed&lt;br /&gt;
 &lt;br /&gt;
* Refresh the opkg metadata database&lt;br /&gt;
 after connecting to Neo&lt;br /&gt;
 &amp;gt; opkg update&lt;br /&gt;
&lt;br /&gt;
== Technical Features ==&lt;br /&gt;
* '''Installer''' is a specialized GUI front-end of [http://packagekit.org/ Packagekit] over DBus interface.&lt;br /&gt;
&lt;br /&gt;
* Please run '''Installer''' under stable network conditions and enough power supply.  Once '''Installer''' is launched, it will actually try to detect repositories you installed. This will take some time if your network condition is not stable.&lt;br /&gt;
** If you do not have access to WiFi, a [http://svn.openmoko.org/developers/tick/Test_env_script_GTA02A5/setneo USB] connection is recommended.&lt;br /&gt;
* The default Packagekit backend on Neo is [[opkg]], but is not restricted to opkg. &lt;br /&gt;
&lt;br /&gt;
* '''Installer''' refreshes the package meta-data every 2 days.&lt;br /&gt;
&lt;br /&gt;
* While running '''Installer''', it will also launch packagekitd automatically, in which it will lock the libopkg for synchronization issues.  If you want to use opkg, you may terminate '''Installer''' and killall packagekitd.&lt;br /&gt;
&lt;br /&gt;
* You can also talk with Packagekit through DBus.&lt;br /&gt;
&lt;br /&gt;
For more information, refer to the reference section below.&lt;br /&gt;
&lt;br /&gt;
== Reference ==&lt;br /&gt;
[1] Installer project - http://code.google.com/p/om-assassin/&lt;br /&gt;
&lt;br /&gt;
[2] Packagekit project - http://packagekit.org/&lt;br /&gt;
&lt;br /&gt;
[3] Opkg package management - http://wiki.openmoko.org/wiki/Opkg&lt;br /&gt;
&lt;br /&gt;
[[Category:Applications]]&lt;br /&gt;
[[Category:Om 2008.8]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Minimo</id>
		<title>Minimo</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Minimo"/>
				<updated>2008-08-16T16:07:20Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: /* Installing Minimo web browser */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|Minimo}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Minimo-slashdot.jpeg|thumb|minimo in QEMU displaying it.slashdot.org]]&lt;br /&gt;
[[Image:GTA01-minimo.JPG|thumb|minimo on GTA01 displaying www.heise.de]]&lt;br /&gt;
&lt;br /&gt;
= Installing Minimo web browser =&lt;br /&gt;
&lt;br /&gt;
[http://www.mozilla.org/projects/minimo/develop.html Minimo] is a Mozilla based web browser. It features full [http://en.wikipedia.org/wiki/Ajax_%28programming%29 AJAX] support and other goodies. Currently stock Openmoko build doesn't include Minimo. &lt;br /&gt;
&lt;br /&gt;
== Running on Om2008.8 ==&lt;br /&gt;
&lt;br /&gt;
From the Neo, download the minimo package:&lt;br /&gt;
&lt;br /&gt;
  wget http://www.ginguppin.de/files/minimo.tar.bz2&lt;br /&gt;
&lt;br /&gt;
Then install it:&lt;br /&gt;
&lt;br /&gt;
  opkg install /tmp/minimo_0.02\+cvs20070626-r0_armv4t.ipk&lt;br /&gt;
&lt;br /&gt;
If you get the following error:&lt;br /&gt;
&lt;br /&gt;
  * ERROR: Cannot satisfy the following dependencies for minimo:&lt;br /&gt;
        *  libfreetype6 (&amp;gt;= 2.3.6) *&lt;br /&gt;
&lt;br /&gt;
First try:&lt;br /&gt;
&lt;br /&gt;
  opkg install libfreetype6&lt;br /&gt;
&lt;br /&gt;
If this does not install a libfreetype6 version &amp;gt; 2.3.6, you can download a newer libfreetype6 from the Angstrom repository at this location: http://www.angstrom-distribution.org/repo/?action=details&amp;amp;pnm=libfreetype6&lt;br /&gt;
&lt;br /&gt;
Ex:&lt;br /&gt;
&lt;br /&gt;
  wget http://www.angstrom-distribution.org/feeds/2008/ipk/glibc/armv4t/base/libfreetype6_2.3.6-r0_armv4t.ipk&lt;br /&gt;
  opkg install minimo_0.02\+cvs20070626-r0_armv4t.ipk&lt;br /&gt;
&lt;br /&gt;
Using Minimo with the stock Om2008.8 gets annoying because the keyboard always takes up half the screen.  I recommend reactivating the [[Keyboard_Toggle#Reactivating_the_keyboard_toggle_under_Om2008.8|Keyboard Toggle]] so that you can hide the keyboard while browsing.&lt;br /&gt;
&lt;br /&gt;
I also highly recommend getting [[GPRS]] going so that you can browse on the go!&lt;br /&gt;
&lt;br /&gt;
== Running in Xephyr PC environment ==&lt;br /&gt;
&lt;br /&gt;
Here are instructions on how to run minimo in Xephyr PC environment and how to use other third party packages too. &lt;br /&gt;
&lt;br /&gt;
* [http://bec-systems.com/web/content/view/79/9/ Instructions for including new OpenEmbedded packages to your project]&lt;br /&gt;
&lt;br /&gt;
These instructions should be updated to use a custom image rather than DISTRO_EXTRA_RDEPENDS -- see link above.&lt;br /&gt;
&lt;br /&gt;
Alternatively, a binary ipkg was posted here[[http://www.ginguppin.de/files/minimo.tar.bz2]]&lt;br /&gt;
&lt;br /&gt;
=== Setup build environment ===&lt;br /&gt;
&lt;br /&gt;
If you have built your Openmoko using MokoMakefile some of these steps might not be familiar to you.&lt;br /&gt;
&lt;br /&gt;
Assume your Openmoko root is at ~/workspace/moko&lt;br /&gt;
&lt;br /&gt;
First setup build environment variables:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
moo@hacker:~/workspace/moko/build$ . ../setup-env &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then checkout minimo from OpenEmbedded repository:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
moo@hacker:~/workspace/moko/build$ bitbake minimo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit local.conf and add minimo to build dependencies list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MACHINE = &amp;quot;qemux86&amp;quot;&lt;br /&gt;
DISTRO = &amp;quot;openmoko&amp;quot;&lt;br /&gt;
BUILD_ARCH = &amp;quot;i686&amp;quot;&lt;br /&gt;
INHERIT += &amp;quot; devshell&amp;quot;&lt;br /&gt;
SRCDATE_eds-dbus = &amp;quot;now&amp;quot;&lt;br /&gt;
DISTRO_EXTRA_RDEPENDS = &amp;quot;minimo&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After local.conf has added new packages, one must refresh bitbake tasks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bitbake task-base -crebuild&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, you should be able to rebuild root fs using MokoMakefile.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make openmoko-devel-image&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tips ===&lt;br /&gt;
&lt;br /&gt;
The default Openmoko distribution lacks ''/etc/resolv.conf'' file which is used to configure system DNS look-up. Without this file, failing  domain name look-up prevents web browsing. The easiest way to fix is to copy the host system resolv.conf to the rootfs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
moo@hacker:~/workspace/moko$ cp /etc/resolv.conf rootfs/etc/resolv.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If build fails with &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/bin/ld: skipping incompatible $OMDIR/local/tmp/staging/arm-angstrom-linux-gnueabi/lib/libIDL-2.a when searching for -lIDL-2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(here minimo is installed in a [http://wiki.openmoko.org/wiki/Application_Development_Crash_Course#Setting_Up_a_Local_Overlay Local Overlay], so your path will perhaps differ) try installing the libidl-dev package on the buildhost:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo aptitude install libidl-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== In chroot'ed environment ===&lt;br /&gt;
&lt;br /&gt;
Following instructions in [[Getting Openmoko working on host with Xephyr]] to get yourself chroot'ed into OpenMoko environment. &lt;br /&gt;
&lt;br /&gt;
Start Xephyr. You don't need to start Openmoko session, minimo can run as is. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/ $ minimo  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Applications]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Minimo</id>
		<title>Minimo</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Minimo"/>
				<updated>2008-08-16T15:57:21Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|Minimo}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:Minimo-slashdot.jpeg|thumb|minimo in QEMU displaying it.slashdot.org]]&lt;br /&gt;
[[Image:GTA01-minimo.JPG|thumb|minimo on GTA01 displaying www.heise.de]]&lt;br /&gt;
&lt;br /&gt;
= Installing Minimo web browser =&lt;br /&gt;
&lt;br /&gt;
[http://www.mozilla.org/projects/minimo/develop.html Minimo] is a Mozilla based web browser. It features full [http://en.wikipedia.org/wiki/Ajax_%28programming%29 AJAX] support and other goodies. Currently stock Openmoko build doesn't include Minimo. &lt;br /&gt;
&lt;br /&gt;
== Running on Om2008.8 ==&lt;br /&gt;
&lt;br /&gt;
From the Neo, download the minimo package:&lt;br /&gt;
&lt;br /&gt;
  wget http://www.ginguppin.de/files/minimo.tar.bz2&lt;br /&gt;
&lt;br /&gt;
Then install it:&lt;br /&gt;
&lt;br /&gt;
  opkg install /tmp/minimo_0.02\+cvs20070626-r0_armv4t.ipk&lt;br /&gt;
&lt;br /&gt;
If you get the following error:&lt;br /&gt;
&lt;br /&gt;
  * ERROR: Cannot satisfy the following dependencies for minimo:&lt;br /&gt;
        *  libfreetype6 (&amp;gt;= 2.3.6) *&lt;br /&gt;
&lt;br /&gt;
First try:&lt;br /&gt;
&lt;br /&gt;
  opkg install libfreetype6&lt;br /&gt;
&lt;br /&gt;
If this does not install a libfreetype6 version &amp;gt; 2.3.6, you can download a newer libfreetype6 from the Angstrom repository at this location: http://www.angstrom-distribution.org/repo/?action=details&amp;amp;pnm=libfreetype6&lt;br /&gt;
&lt;br /&gt;
Ex:&lt;br /&gt;
&lt;br /&gt;
  wget http://www.angstrom-distribution.org/feeds/2008/ipk/glibc/armv4t/base/libfreetype6_2.3.6-r0_armv4t.ipk&lt;br /&gt;
  opkg install minimo_0.02\+cvs20070626-r0_armv4t.ipk&lt;br /&gt;
&lt;br /&gt;
Using Minimo with the stock Om2008.8 gets annoying because the keyboard always takes up half the screen.  I recommend reactivating the [[Keyboard_Toggle#Reactivating_the_keyboard_toggle_under_Om2008.8|Keyboard Toggle]] so that you can hide the keyboard while browsing.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Running in Xephyr PC environment ==&lt;br /&gt;
&lt;br /&gt;
Here are instructions on how to run minimo in Xephyr PC environment and how to use other third party packages too. &lt;br /&gt;
&lt;br /&gt;
* [http://bec-systems.com/web/content/view/79/9/ Instructions for including new OpenEmbedded packages to your project]&lt;br /&gt;
&lt;br /&gt;
These instructions should be updated to use a custom image rather than DISTRO_EXTRA_RDEPENDS -- see link above.&lt;br /&gt;
&lt;br /&gt;
Alternatively, a binary ipkg was posted here[[http://www.ginguppin.de/files/minimo.tar.bz2]]&lt;br /&gt;
&lt;br /&gt;
=== Setup build environment ===&lt;br /&gt;
&lt;br /&gt;
If you have built your Openmoko using MokoMakefile some of these steps might not be familiar to you.&lt;br /&gt;
&lt;br /&gt;
Assume your Openmoko root is at ~/workspace/moko&lt;br /&gt;
&lt;br /&gt;
First setup build environment variables:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
moo@hacker:~/workspace/moko/build$ . ../setup-env &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Then checkout minimo from OpenEmbedded repository:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
moo@hacker:~/workspace/moko/build$ bitbake minimo&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Edit local.conf and add minimo to build dependencies list.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MACHINE = &amp;quot;qemux86&amp;quot;&lt;br /&gt;
DISTRO = &amp;quot;openmoko&amp;quot;&lt;br /&gt;
BUILD_ARCH = &amp;quot;i686&amp;quot;&lt;br /&gt;
INHERIT += &amp;quot; devshell&amp;quot;&lt;br /&gt;
SRCDATE_eds-dbus = &amp;quot;now&amp;quot;&lt;br /&gt;
DISTRO_EXTRA_RDEPENDS = &amp;quot;minimo&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After local.conf has added new packages, one must refresh bitbake tasks.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
bitbake task-base -crebuild&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, you should be able to rebuild root fs using MokoMakefile.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
make openmoko-devel-image&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Tips ===&lt;br /&gt;
&lt;br /&gt;
The default Openmoko distribution lacks ''/etc/resolv.conf'' file which is used to configure system DNS look-up. Without this file, failing  domain name look-up prevents web browsing. The easiest way to fix is to copy the host system resolv.conf to the rootfs.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
moo@hacker:~/workspace/moko$ cp /etc/resolv.conf rootfs/etc/resolv.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If build fails with &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/usr/bin/ld: skipping incompatible $OMDIR/local/tmp/staging/arm-angstrom-linux-gnueabi/lib/libIDL-2.a when searching for -lIDL-2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(here minimo is installed in a [http://wiki.openmoko.org/wiki/Application_Development_Crash_Course#Setting_Up_a_Local_Overlay Local Overlay], so your path will perhaps differ) try installing the libidl-dev package on the buildhost:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo aptitude install libidl-dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== In chroot'ed environment ===&lt;br /&gt;
&lt;br /&gt;
Following instructions in [[Getting Openmoko working on host with Xephyr]] to get yourself chroot'ed into OpenMoko environment. &lt;br /&gt;
&lt;br /&gt;
Start Xephyr. You don't need to start Openmoko session, minimo can run as is. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/ $ minimo  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Applications]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/TangoGPS</id>
		<title>TangoGPS</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/TangoGPS"/>
				<updated>2008-08-16T15:25:31Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: /* Running tangoGPS on OM2008.8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|TangoGPS}}&lt;br /&gt;
TangoGPS is a map application which can utilize Neo's built-in GPS to show your current location.&lt;br /&gt;
&lt;br /&gt;
Website: http://www.tangogps.org&lt;br /&gt;
&lt;br /&gt;
== Running tangoGPS on OM2008.8 ==&lt;br /&gt;
&lt;br /&gt;
{{note|There may be other steps because I remember it took a while before my TangoGPS started working, but these are the only things I remember installing}}&lt;br /&gt;
&lt;br /&gt;
From the freerunner connected to the internet:&lt;br /&gt;
&lt;br /&gt;
  opkg install gpsd&lt;br /&gt;
  opkg install tangogps&lt;br /&gt;
&lt;br /&gt;
If opkg complains about not being able to acquire a lock, try:&lt;br /&gt;
&lt;br /&gt;
  pkill packagekit&lt;br /&gt;
&lt;br /&gt;
I think TangoGPS may have started working after I followed the instructions to get GPRS working with GSM multiplexing here: [[Manually_using_GPRS#Option_1:_With_GSM_multiplexing_and_with_a_GUI]]&lt;br /&gt;
&lt;br /&gt;
There are steps included in those instructions to improve GPS performance.  The great thing is that once you get GPRS working, you can roam with TangoGPS running and have it download maps as needed over the GPRS connection!&lt;br /&gt;
&lt;br /&gt;
[[Category:GPS]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/TangoGPS</id>
		<title>TangoGPS</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/TangoGPS"/>
				<updated>2008-08-16T15:19:31Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: /* Running tangoGPS on OM2008.8 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|TangoGPS}}&lt;br /&gt;
TangoGPS is a map application which can utilize Neo's built-in GPS to show your current location.&lt;br /&gt;
&lt;br /&gt;
Website: http://www.tangogps.org&lt;br /&gt;
&lt;br /&gt;
== Running tangoGPS on OM2008.8 ==&lt;br /&gt;
&lt;br /&gt;
{{note|There may be other steps because I remember it took a while before my TangoGPS started working, but these are the only things I remember installing}}&lt;br /&gt;
&lt;br /&gt;
From the freerunner connected to the internet:&lt;br /&gt;
&lt;br /&gt;
  opkg install gpsd&lt;br /&gt;
  opkg install tangogps&lt;br /&gt;
&lt;br /&gt;
If opkg complains about not being able to acquire a lock, try:&lt;br /&gt;
&lt;br /&gt;
  pkill packagekit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:GPS]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Manually_using_GPRS</id>
		<title>Manually using GPRS</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Manually_using_GPRS"/>
				<updated>2008-08-15T02:02:17Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: Modified section titles&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The GPRS connection is made using the PPP protocol to a server identified by an &amp;quot;APN&amp;quot; at the network operator. &lt;br /&gt;
&lt;br /&gt;
= Option 1: With GSM multiplexing and with a GUI =&lt;br /&gt;
&lt;br /&gt;
{{note|The following does not appear to work if you have a SIM PIN.  The dialog to enter your SIM PIN never pops up and the GSM multiplexing daemon continuous loops and runs into a SIM PIN error.}}&lt;br /&gt;
&lt;br /&gt;
GSM multiplexing allows both a GPRS connection and a phone call to be handled at the same time.  By default, [[Om 2008.8]] does not multiplex the GSM device.  The [[FSO]] distribution, however, introduces GSM multiplexing with a new service and a DBus API to that service.  The instructions to modify the OM2008.8 distribution to make use of GSM multiplexing and allow you to start GPRS from a GUI can be found here: http://freeyourphone.de/portal_v1/viewtopic.php?f=21&amp;amp;t=295&lt;br /&gt;
&lt;br /&gt;
However, using those instructions, you will encounter a few hurdles.  Do not use the gsm0710muxd that is found in the OM2008.8 repository.  It will not work, instead, use the one found here:&lt;br /&gt;
&lt;br /&gt;
http://www.angstrom-distribution.org/feeds/2008/ipk/glibc/armv4t/base/gsm0710muxd_0.9.1+gitr6fecc78198dd821bbe29efd096bd8fecd855179d-r0_armv4t.ipk&lt;br /&gt;
&lt;br /&gt;
In order to install that version of gsm0710muxd, however, you will also have to install a bunch of missing dependencies.  Those can be found by clicking on the dependencies found here:&lt;br /&gt;
&lt;br /&gt;
http://www.angstrom-distribution.org/repo/?action=details&amp;amp;pnm=gsm0710muxd&lt;br /&gt;
&lt;br /&gt;
Make sure that you install the armv4t versions of all packages.&lt;br /&gt;
&lt;br /&gt;
The [[#Some APN names for reference|APN Reference]] table may come in handy when you are looking for the required network specific information.&lt;br /&gt;
&lt;br /&gt;
Once you follow through with all the instructions, you will notice that the &amp;quot;Services&amp;quot; GUI will crash.  This has to do with this bug: http://docs.openmoko.org/trac/ticket/1718&lt;br /&gt;
&lt;br /&gt;
The fix is to change the &amp;quot;init()&amp;quot; call on line 82 of /usr/lib/python2.5/site-packages/gtk-2.0/gtk/_init_.py  to &amp;quot;_init()&amp;quot; (add an underscore).&lt;br /&gt;
&lt;br /&gt;
You may also have to modify your /etc/resolv.conf file and add the nameserver (DNS Server) of your service provider if you have DNS resolution problems.&lt;br /&gt;
&lt;br /&gt;
Then, hopefully, you should be up in running with GPRS and a GUI to turn it on and off.&lt;br /&gt;
&lt;br /&gt;
= Option 2: Without GSM multiplexing and without a GUI =&lt;br /&gt;
&lt;br /&gt;
The program that implements PPP on Linux is [[pppd]], which we need to configure and run to get a connection. When that is working, we can configure pppd to wait until it's needed before it connects, and to disconnect if the connection becomes idle. Further, we can start pppd in the background during the boot process.&lt;br /&gt;
&lt;br /&gt;
== Configuring pppd for manual connections ==&lt;br /&gt;
&lt;br /&gt;
You'll need /etc/ppp/peers/gprs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Uncomment the following if you want some debug.&lt;br /&gt;
#debug&lt;br /&gt;
#logfile /var/volatile/log/pppd.log&lt;br /&gt;
lock&lt;br /&gt;
/dev/ttySAC0 115200&lt;br /&gt;
crtscts &lt;br /&gt;
connect /etc/ppp/gprs-connect-chat&lt;br /&gt;
disconnect /etc/ppp/gprs-disconnect-chat&lt;br /&gt;
hide-password&lt;br /&gt;
usepeerdns&lt;br /&gt;
ipcp-accept-local&lt;br /&gt;
noauth&lt;br /&gt;
noipdefault&lt;br /&gt;
novj&lt;br /&gt;
novjccomp&lt;br /&gt;
defaultroute&lt;br /&gt;
replacedefaultroute&lt;br /&gt;
# Reopen the connection if it fails, pausing for a while.&lt;br /&gt;
persist&lt;br /&gt;
holdoff 15&lt;br /&gt;
# Check the line every 20 seconds and presume&lt;br /&gt;
# the peer is gone if no replay for 4 times.&lt;br /&gt;
lcp-echo-interval 20&lt;br /&gt;
lcp-echo-failure 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depending on the APN, you may need password authentication using CHAP or PAP. In /etc/ppp/pap-secrets you can add the following default line for &amp;quot;password-less&amp;quot; connections:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# client        server  secret                  IP addresses&lt;br /&gt;
*               *       &amp;quot;&amp;quot;                      *&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For CHAP, lines in /etc/ppp/chap-secrets are used. For PAP, the lines are in /etc/ppp/pap-secrets. The client should match the &amp;quot;user&amp;quot; option in pppd the config file (below). You can use * to mean any here, but the option user &amp;quot;&amp;quot; doesn't mean empty!&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Secrets for authentication using CHAP&lt;br /&gt;
# client        server  secret                  IP addresses&lt;br /&gt;
&amp;quot;user&amp;quot;         *       &amp;quot;password&amp;quot;                  *  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this you need the following options in /etc/ppp/peers/gprs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# username to use for authentication, should match &amp;quot;client&amp;quot; in /etc/ppp/{chap,pap}-secrets&lt;br /&gt;
user &amp;quot;user&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== gprs-connect-chat, version 1 ==&lt;br /&gt;
&lt;br /&gt;
You'll also need /etc/ppp/gprs-connect-chat (needs &amp;quot;chmod +x&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
exec chat -v -S -s\&lt;br /&gt;
        TIMEOUT 15\&lt;br /&gt;
        &amp;quot;&amp;quot; &amp;quot;\K\K\K\d+++ATH&amp;quot;\&lt;br /&gt;
        OK-AT-OK ATZ\&lt;br /&gt;
        OK ATE1\&lt;br /&gt;
        ABORT BUSY\&lt;br /&gt;
        ABORT DELAYED\&lt;br /&gt;
        ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
        ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
        ABORT VOICE\&lt;br /&gt;
        ABORT ERROR\&lt;br /&gt;
        ABORT RINGING\&lt;br /&gt;
        TIMEOUT 60\&lt;br /&gt;
        OK AT+CFUN=1\&lt;br /&gt;
        OK AT+COPS\&lt;br /&gt;
        OK AT+CGDCONT=1,\&amp;quot;IP\&amp;quot;,\&amp;quot;internet\&amp;quot;\&lt;br /&gt;
        OK ATD*99#\&lt;br /&gt;
        CONNECT /n/d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== gprs-connect-chat, version 2 ==&lt;br /&gt;
&lt;br /&gt;
Update: On my freerunner the first AT+CFUN=1 always generated ERROR. I managed to get gprs work by using the following script from http://lists.openmoko.org/pipermail/community/2008-July/023246.html:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
exec /usr/sbin/chat -v \&lt;br /&gt;
        TIMEOUT 10 \&lt;br /&gt;
        OK-AT-'' ''\&lt;br /&gt;
        ABORT BUSY\&lt;br /&gt;
        ABORT DELAYED\&lt;br /&gt;
        ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
        ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
        ABORT VOICE\&lt;br /&gt;
        ABORT ERROR\&lt;br /&gt;
        ABORT RINGING\&lt;br /&gt;
        TIMEOUT 30 \&lt;br /&gt;
        '' ATZ\&lt;br /&gt;
        OK ATE1\&lt;br /&gt;
        OK AT+CFUN=1\&lt;br /&gt;
        ERROR AT+CPIN=\&amp;quot;XXXX\&amp;quot;\         &amp;lt;&amp;lt; USE YOUR OWN&lt;br /&gt;
        OK AT+COPS\&lt;br /&gt;
        OK AT+CGDCONT=1,\&amp;quot;IP\&amp;quot;,\&amp;quot;internet\&amp;quot;\&lt;br /&gt;
        OK 'ATDT*99***1#'\&lt;br /&gt;
        CONNECT ''&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The error seems to vary a bit, sometimes it's before AT+COPS, sometimes as above. I have two versions of the gprs-connect-chat, which I vary between depending on which is needed. Or is there a way to specify two acceptable answers like {OK,ERROR}?&lt;br /&gt;
&lt;br /&gt;
You will need to adjust the APN name &amp;quot;internet&amp;quot; in at+cgdcont line and possibly the phone number in the ATD line to match what your network operator provides. See below in the table &amp;quot;Some APN names for reference&amp;quot; for the right settings for your operator.&lt;br /&gt;
&lt;br /&gt;
== gprs-disconnect-chat ==&lt;br /&gt;
&lt;br /&gt;
Also good to have is /etc/ppp/gprs-disconnect-chat (needs &amp;quot;chmod +x&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
/usr/sbin/chat -v\&lt;br /&gt;
	ABORT OK\&lt;br /&gt;
	ABORT BUSY\&lt;br /&gt;
	ABORT DELAYED\&lt;br /&gt;
	ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
	ABORT &amp;quot;NO CARRIER&amp;quot;\&lt;br /&gt;
	ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
	ABORT VOICE\&lt;br /&gt;
	ABORT ERROR\&lt;br /&gt;
	ABORT RINGING\&lt;br /&gt;
	TIMEOUT 12\&lt;br /&gt;
	&amp;quot;&amp;quot; &amp;quot;\K\K\K\d+++ATH&amp;quot;\&lt;br /&gt;
	&amp;quot;NO CARRIER-AT-OK&amp;quot; &amp;quot;\c&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Starting PPP connection ==&lt;br /&gt;
&lt;br /&gt;
The following script can be used to start the ppp connection. First it stops gsmd because gsmd may put the phone in a unknown state. It then turns on the power to the phone, modifies the ownership, and then creates a tty connection. Finally it starts [[pppd]] with the gprs settings.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/init.d/gsmd stop&lt;br /&gt;
echo &amp;quot;1&amp;quot; &amp;gt; /sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
chown uucp.uucp /dev/ttySAC0&lt;br /&gt;
stty -F /dev/ttySAC0 crtscts&lt;br /&gt;
pppd call gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are having problems connecting ensure you have a good GSM signal and replace the last line with the below line. This will allow you to see the details of the connection on the console. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pppd debug nodetach call gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The config above will establish a persistant link over gprs. The battery will run low in less than an hour. See an example for an on-demand config below.&lt;br /&gt;
&lt;br /&gt;
=== Resolve.conf issues ===&lt;br /&gt;
&lt;br /&gt;
The latest build seems to have solved the following issue, it should be automatically updated by pppd.&lt;br /&gt;
&lt;br /&gt;
If you expeience DNS issues after connecting to DNS you may need a proper /etc/resolv.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln -sf /var/run/resolv.conf /etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If needed put your nameserver for usb-net into /var/run/resolv.conf, not in /etc.&lt;br /&gt;
&lt;br /&gt;
The image does not set a correct resolv.conf. i do so with an &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo  nameserver 192.168.0.201 &amp;gt; /var/run/resolv.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in the right place. because a post-up in /etc/network/interfaces is not supported i do that in /etc/network/if-up.d/08setupdns&lt;br /&gt;
&lt;br /&gt;
another problem is pppd's /etc/ppp/ip-down.d/92removedns which does not properly remove the link when shuting down ppp. my fix is this script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
ACTUALCONF=/var/run/resolv.conf&lt;br /&gt;
PPPCONF=/var/run/ppp/resolv.conf&lt;br /&gt;
if [ -f $PPPCONF ] ; then&lt;br /&gt;
        if [ -f $ACTUALCONF ] ; then&lt;br /&gt;
                if [ ! -h $ACTUALCONF -o ! &amp;quot;`readlink $ACTUALCONF 2&amp;gt;&amp;amp;1`&amp;quot; = &amp;quot;$PPPCONF&amp;quot; ] ; then&lt;br /&gt;
                        mv $ACTUALCONF $ACTUALCONF.ppporig&lt;br /&gt;
                fi&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        ln -sf $PPPCONF $ACTUALCONF&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Some APN names for reference ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Country&lt;br /&gt;
! Carrier&lt;br /&gt;
! Plan&lt;br /&gt;
! APN/Phone&lt;br /&gt;
! user/password if required&lt;br /&gt;
! Working pppd scripts&lt;br /&gt;
|-&lt;br /&gt;
| Australia || Vodafone || Any || vfinternet.au || ||&lt;br /&gt;
|-&lt;br /&gt;
| Canada || Fido || Any, behind NAT || internet.fido.ca || fido/fido || mdbus -s org.freesmartphone.frameworkd /org/freesmartphone/GSM/Device&lt;br /&gt;
org.freesmartphone.GSM.PDP.ActivateContext internet.fido.ca fido&lt;br /&gt;
fido&lt;br /&gt;
|-&lt;br /&gt;
| Canada || Rogers || Any, behind NAT || internet.com || wapuser1/wap || nameserver 207.181.101.4&lt;br /&gt;
|-&lt;br /&gt;
| Estonia || Elisa || Any, behind NAT || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Estonia || EMT || Any, behind NAT || internet.emt.ee || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Saunalahti || Any || internet.saunalahti || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Sonera   || Any, behind NAT || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Sonera   || Any, public IP  || prointernet || ||&lt;br /&gt;
|-&lt;br /&gt;
| France || SFR || 10.x.x.x? || websfr || || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || SFR || 10.x.x.x? || wapsfr&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;|| || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || Orange || ??? || orange.fr || || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || Bouyges Telecom || Web &amp;amp; Mail || mmsbouygtel.com || || Work great under FSO. Just follow instructions at http://wiki.openmoko.org/wiki/GPRS_FSO. Proxy:  62.201.129.225:8080. For emails, only ports 25 (smtp) and 110 (pop) are allowed. (They use a transparent proxy ...)&lt;br /&gt;
|-&lt;br /&gt;
| Germany || E-Plus || BASE (and others?) || internet.eplus.de || eplus gprs || [[Base pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| Germany || E-Plus || Simyo || internet.eplus.de || || [[simyo pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| Germany || T-Mobile ||  || internet.t-mobile || ||&lt;br /&gt;
|-&lt;br /&gt;
| Germany || Vodafone || Any, behind NAT || web.vodafone.de || ||&lt;br /&gt;
|-&lt;br /&gt;
| India || AirTel || MobileOffice || airtelgprs.com || ||&lt;br /&gt;
|- &lt;br /&gt;
| Italy   || Wind     || Superinternet, public IP  || internet.wind / *99# || wind/wind (any string) || [[Wind pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| Netherlands || Vodafone || Any || live.vodafone.com / *99***1#||  || [[Vodafone pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| New Zealand || Vodafone || Any || live.vodafone.com / *99***2#||  ||&lt;br /&gt;
|-&lt;br /&gt;
| Norway || Netcom || Any || internet.netcom.no || ||&lt;br /&gt;
|-&lt;br /&gt;
| Norway || Telenor || Any || telenor || ||&lt;br /&gt;
|-&lt;br /&gt;
| Sweden || Parlino ||  || internet.parlino.se || || [[GPRS_FSO|Works with FSO]]&lt;br /&gt;
|-&lt;br /&gt;
| Switzerland || Swisscom || e.g. Natel Basic Liberty, behind NAT || gprs.swisscom.ch || ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || T-Mobile|| || general.t-mobile.uk || ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || Virgin || || goto.virginmobile.uk || user ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || [http://www.filesaveas.com/gprs.html other providers] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || AT&amp;amp;T || Unlimited data plan (attached to pay-as-you-go voice plan) || wap.cingular / *99***1# || WAP@CINGULARGPRS.COM/CINGULAR1 ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || Cincinnati Bell Wireless || || wap.gocbw.com ||  cbw  ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || Cingular (AT&amp;amp;T) || Less than full internet || wap.cingular / may require *99***1# || ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || T-mobile || Anything less than full internet || wap.voicestream.com ||  || Need to set proxy to 216.155.165.50  T-Mobile docs say &amp;quot;216.155.165.050&amp;quot;.  050 octal = 40 decimal and will *not* work.  I think port is 8080 or 9100.  No luck w/ pppd scripts.  GPRS_FSO directions work under FSO though.&lt;br /&gt;
|- &lt;br /&gt;
| USA || T-mobile || Regular internet plan || internet2.voicestream.com || || [[T-Mobile pppd scripts]]&lt;br /&gt;
|- &lt;br /&gt;
| USA || T-mobile || &amp;quot;VPN&amp;quot; internet plan || internet3.voicestream.com || ||&lt;br /&gt;
|- &lt;br /&gt;
| Venezuela || Digitel || Pre- y post-pago || gprsweb.digitel.ve || ||&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[1] connected through a WAP proxy (slower, but the only way to access Vodafone live! and SFR portal)&lt;br /&gt;
&lt;br /&gt;
[2] Unless stated otherwise the phone number to call is &amp;quot;*99#&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Also see Ross Barkman's page for a detailed list of more [http://www.taniwha.org.uk/gprs.html global GPRS providers APN details]&lt;br /&gt;
&lt;br /&gt;
== Starting pppd automatically ==&lt;br /&gt;
&lt;br /&gt;
Once you have finished debugging your gprs-connect-chat and gprs options files, you may wish to automatically connect whenever needed and hang up when finished.  Make sure you understand the impact of this change to your carrier plan billing.  This is not recommended unless you have a large-use or unlimited data plan.  These scripts do NOT prompt you before connecting.&lt;br /&gt;
&lt;br /&gt;
=== On-demand connection settings ===&lt;br /&gt;
&lt;br /&gt;
Additional settings are needed if you want the actual connection to be up only while there is traffic. In the 'gprs' file above, insert the following, making sure 'nodetach' is commented out.  If 'nodetach' is on, the boot process will stop when it starts pppd. Also remove the option 'persist' mentioned above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Wait until needed before connecting&lt;br /&gt;
demand&lt;br /&gt;
&lt;br /&gt;
# Disconnect if idle for given amount of seconds&lt;br /&gt;
idle 20&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Start on boot (method 1) ===&lt;br /&gt;
&lt;br /&gt;
Add the following definition to /etc/network/interfaces:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auto ppp0&lt;br /&gt;
iface ppp0 inet ppp&lt;br /&gt;
        provider gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That should be it. Now you can use 'ifup ppp0' and 'ifdown ppp0' manually too.&lt;br /&gt;
&lt;br /&gt;
=== Start on boot (method 2) ===&lt;br /&gt;
&lt;br /&gt;
Create the following file as /etc/ppp/ppp_on_boot (needs chmod +x).  The /etc/init.d/ppp script will call it to set up the daemon.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
#&lt;br /&gt;
#   Rename this file to ppp_on_boot and pppd will be fired up as&lt;br /&gt;
#   soon as the system comes up, connecting to `provider'.&lt;br /&gt;
#&lt;br /&gt;
#   If you also make this file executable, and replace the first line&lt;br /&gt;
#   with just &amp;quot;#!/bin/sh&amp;quot;, the commands below will be executed instead.&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# The location of the ppp daemon itself (shouldn't need to be changed)&lt;br /&gt;
PPPD=/usr/sbin/pppd&lt;br /&gt;
&lt;br /&gt;
# The default provider to connect to&lt;br /&gt;
$PPPD call gprs&lt;br /&gt;
&lt;br /&gt;
# Additional connections, which would just use settings from&lt;br /&gt;
# /etc/ppp/options.&amp;lt;tty&amp;gt;&lt;br /&gt;
#$PPPD ttyS0&lt;br /&gt;
#$PPPD ttyS1&lt;br /&gt;
#$PPPD ttyS2&lt;br /&gt;
#$PPPD ttyS3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, you need to add the /etc/init.d/ppp script to the init process by creating symbolic links from the appropriate directories.  I chose the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/rc0.d/K25ppp&lt;br /&gt;
/etc/rc1.d/K45ppp&lt;br /&gt;
/etc/rc2.d/S45ppp&lt;br /&gt;
/etc/rc3.d/S45ppp&lt;br /&gt;
/etc/rc4.d/S45ppp&lt;br /&gt;
/etc/rc5.d/S45ppp&lt;br /&gt;
/etc/rc6.d/K25ppp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[pppd]]&lt;br /&gt;
* [[Manually using GSM]]&lt;br /&gt;
* [[Manually using Bluetooth]]&lt;br /&gt;
&lt;br /&gt;
{{Languages|Manually_using_GPRS}}&lt;br /&gt;
[[Category:Documentation]]&lt;br /&gt;
[[Category:Application Developer]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Manually_using_GPRS</id>
		<title>Manually using GPRS</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Manually_using_GPRS"/>
				<updated>2008-08-15T01:57:43Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The GPRS connection is made using the PPP protocol to a server identified by an &amp;quot;APN&amp;quot; at the network operator. &lt;br /&gt;
&lt;br /&gt;
= Option 1: With GSM Multiplexing =&lt;br /&gt;
&lt;br /&gt;
{{note|The following does not appear to work if you have a SIM PIN.  The dialog to enter your SIM PIN never pops up and the GSM multiplexing daemon continuous loops and runs into a SIM PIN error.}}&lt;br /&gt;
&lt;br /&gt;
GSM multiplexing allows both a GPRS connection and a phone call to be handled at the same time.  By default, [[Om 2008.8]] does not multiplex the GSM device.  The [[FSO]] distribution, however, introduces GSM multiplexing with a new service and a DBus API to that service.  The instructions to modify the OM2008.8 distribution to make use of GSM multiplexing and allow you to start GPRS from a GUI can be found here: http://freeyourphone.de/portal_v1/viewtopic.php?f=21&amp;amp;t=295&lt;br /&gt;
&lt;br /&gt;
However, using those instructions, you will encounter a few hurdles.  Do not use the gsm0710muxd that is found in the OM2008.8 repository.  It will not work, instead, use the one found here:&lt;br /&gt;
&lt;br /&gt;
http://www.angstrom-distribution.org/feeds/2008/ipk/glibc/armv4t/base/gsm0710muxd_0.9.1+gitr6fecc78198dd821bbe29efd096bd8fecd855179d-r0_armv4t.ipk&lt;br /&gt;
&lt;br /&gt;
In order to install that version of gsm0710muxd, however, you will also have to install a bunch of missing dependencies.  Those can be found by clicking on the dependencies found here:&lt;br /&gt;
&lt;br /&gt;
http://www.angstrom-distribution.org/repo/?action=details&amp;amp;pnm=gsm0710muxd&lt;br /&gt;
&lt;br /&gt;
Make sure that you install the armv4t versions of all packages.&lt;br /&gt;
&lt;br /&gt;
The [[#Some APN names for reference|APN Reference]] table may come in handy when you are looking for the required network specific information.&lt;br /&gt;
&lt;br /&gt;
Once you follow through with all the instructions, you will notice that the &amp;quot;Services&amp;quot; GUI will crash.  This has to do with this bug: http://docs.openmoko.org/trac/ticket/1718&lt;br /&gt;
&lt;br /&gt;
The fix is to change the &amp;quot;init()&amp;quot; call on line 82 of /usr/lib/python2.5/site-packages/gtk-2.0/gtk/_init_.py  to &amp;quot;_init()&amp;quot; (add an underscore).&lt;br /&gt;
&lt;br /&gt;
You may also have to modify your /etc/resolv.conf file and add the nameserver (DNS Server) of your service provider if you have DNS resolution problems.&lt;br /&gt;
&lt;br /&gt;
Then, hopefully, you should be up in running with GPRS and a GUI to turn it on and off.&lt;br /&gt;
&lt;br /&gt;
= Option 2: Without GSM Multiplexing =&lt;br /&gt;
&lt;br /&gt;
The program that implements PPP on Linux is [[pppd]], which we need to configure and run to get a connection. When that is working, we can configure pppd to wait until it's needed before it connects, and to disconnect if the connection becomes idle. Further, we can start pppd in the background during the boot process.&lt;br /&gt;
&lt;br /&gt;
== Configuring pppd for manual connections ==&lt;br /&gt;
&lt;br /&gt;
You'll need /etc/ppp/peers/gprs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Uncomment the following if you want some debug.&lt;br /&gt;
#debug&lt;br /&gt;
#logfile /var/volatile/log/pppd.log&lt;br /&gt;
lock&lt;br /&gt;
/dev/ttySAC0 115200&lt;br /&gt;
crtscts &lt;br /&gt;
connect /etc/ppp/gprs-connect-chat&lt;br /&gt;
disconnect /etc/ppp/gprs-disconnect-chat&lt;br /&gt;
hide-password&lt;br /&gt;
usepeerdns&lt;br /&gt;
ipcp-accept-local&lt;br /&gt;
noauth&lt;br /&gt;
noipdefault&lt;br /&gt;
novj&lt;br /&gt;
novjccomp&lt;br /&gt;
defaultroute&lt;br /&gt;
replacedefaultroute&lt;br /&gt;
# Reopen the connection if it fails, pausing for a while.&lt;br /&gt;
persist&lt;br /&gt;
holdoff 15&lt;br /&gt;
# Check the line every 20 seconds and presume&lt;br /&gt;
# the peer is gone if no replay for 4 times.&lt;br /&gt;
lcp-echo-interval 20&lt;br /&gt;
lcp-echo-failure 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depending on the APN, you may need password authentication using CHAP or PAP. In /etc/ppp/pap-secrets you can add the following default line for &amp;quot;password-less&amp;quot; connections:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# client        server  secret                  IP addresses&lt;br /&gt;
*               *       &amp;quot;&amp;quot;                      *&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For CHAP, lines in /etc/ppp/chap-secrets are used. For PAP, the lines are in /etc/ppp/pap-secrets. The client should match the &amp;quot;user&amp;quot; option in pppd the config file (below). You can use * to mean any here, but the option user &amp;quot;&amp;quot; doesn't mean empty!&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Secrets for authentication using CHAP&lt;br /&gt;
# client        server  secret                  IP addresses&lt;br /&gt;
&amp;quot;user&amp;quot;         *       &amp;quot;password&amp;quot;                  *  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this you need the following options in /etc/ppp/peers/gprs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# username to use for authentication, should match &amp;quot;client&amp;quot; in /etc/ppp/{chap,pap}-secrets&lt;br /&gt;
user &amp;quot;user&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== gprs-connect-chat, version 1 ==&lt;br /&gt;
&lt;br /&gt;
You'll also need /etc/ppp/gprs-connect-chat (needs &amp;quot;chmod +x&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
exec chat -v -S -s\&lt;br /&gt;
        TIMEOUT 15\&lt;br /&gt;
        &amp;quot;&amp;quot; &amp;quot;\K\K\K\d+++ATH&amp;quot;\&lt;br /&gt;
        OK-AT-OK ATZ\&lt;br /&gt;
        OK ATE1\&lt;br /&gt;
        ABORT BUSY\&lt;br /&gt;
        ABORT DELAYED\&lt;br /&gt;
        ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
        ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
        ABORT VOICE\&lt;br /&gt;
        ABORT ERROR\&lt;br /&gt;
        ABORT RINGING\&lt;br /&gt;
        TIMEOUT 60\&lt;br /&gt;
        OK AT+CFUN=1\&lt;br /&gt;
        OK AT+COPS\&lt;br /&gt;
        OK AT+CGDCONT=1,\&amp;quot;IP\&amp;quot;,\&amp;quot;internet\&amp;quot;\&lt;br /&gt;
        OK ATD*99#\&lt;br /&gt;
        CONNECT /n/d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== gprs-connect-chat, version 2 ==&lt;br /&gt;
&lt;br /&gt;
Update: On my freerunner the first AT+CFUN=1 always generated ERROR. I managed to get gprs work by using the following script from http://lists.openmoko.org/pipermail/community/2008-July/023246.html:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
exec /usr/sbin/chat -v \&lt;br /&gt;
        TIMEOUT 10 \&lt;br /&gt;
        OK-AT-'' ''\&lt;br /&gt;
        ABORT BUSY\&lt;br /&gt;
        ABORT DELAYED\&lt;br /&gt;
        ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
        ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
        ABORT VOICE\&lt;br /&gt;
        ABORT ERROR\&lt;br /&gt;
        ABORT RINGING\&lt;br /&gt;
        TIMEOUT 30 \&lt;br /&gt;
        '' ATZ\&lt;br /&gt;
        OK ATE1\&lt;br /&gt;
        OK AT+CFUN=1\&lt;br /&gt;
        ERROR AT+CPIN=\&amp;quot;XXXX\&amp;quot;\         &amp;lt;&amp;lt; USE YOUR OWN&lt;br /&gt;
        OK AT+COPS\&lt;br /&gt;
        OK AT+CGDCONT=1,\&amp;quot;IP\&amp;quot;,\&amp;quot;internet\&amp;quot;\&lt;br /&gt;
        OK 'ATDT*99***1#'\&lt;br /&gt;
        CONNECT ''&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The error seems to vary a bit, sometimes it's before AT+COPS, sometimes as above. I have two versions of the gprs-connect-chat, which I vary between depending on which is needed. Or is there a way to specify two acceptable answers like {OK,ERROR}?&lt;br /&gt;
&lt;br /&gt;
You will need to adjust the APN name &amp;quot;internet&amp;quot; in at+cgdcont line and possibly the phone number in the ATD line to match what your network operator provides. See below in the table &amp;quot;Some APN names for reference&amp;quot; for the right settings for your operator.&lt;br /&gt;
&lt;br /&gt;
== gprs-disconnect-chat ==&lt;br /&gt;
&lt;br /&gt;
Also good to have is /etc/ppp/gprs-disconnect-chat (needs &amp;quot;chmod +x&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
/usr/sbin/chat -v\&lt;br /&gt;
	ABORT OK\&lt;br /&gt;
	ABORT BUSY\&lt;br /&gt;
	ABORT DELAYED\&lt;br /&gt;
	ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
	ABORT &amp;quot;NO CARRIER&amp;quot;\&lt;br /&gt;
	ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
	ABORT VOICE\&lt;br /&gt;
	ABORT ERROR\&lt;br /&gt;
	ABORT RINGING\&lt;br /&gt;
	TIMEOUT 12\&lt;br /&gt;
	&amp;quot;&amp;quot; &amp;quot;\K\K\K\d+++ATH&amp;quot;\&lt;br /&gt;
	&amp;quot;NO CARRIER-AT-OK&amp;quot; &amp;quot;\c&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Starting PPP connection ==&lt;br /&gt;
&lt;br /&gt;
The following script can be used to start the ppp connection. First it stops gsmd because gsmd may put the phone in a unknown state. It then turns on the power to the phone, modifies the ownership, and then creates a tty connection. Finally it starts [[pppd]] with the gprs settings.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/init.d/gsmd stop&lt;br /&gt;
echo &amp;quot;1&amp;quot; &amp;gt; /sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
chown uucp.uucp /dev/ttySAC0&lt;br /&gt;
stty -F /dev/ttySAC0 crtscts&lt;br /&gt;
pppd call gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are having problems connecting ensure you have a good GSM signal and replace the last line with the below line. This will allow you to see the details of the connection on the console. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pppd debug nodetach call gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The config above will establish a persistant link over gprs. The battery will run low in less than an hour. See an example for an on-demand config below.&lt;br /&gt;
&lt;br /&gt;
=== Resolve.conf issues ===&lt;br /&gt;
&lt;br /&gt;
The latest build seems to have solved the following issue, it should be automatically updated by pppd.&lt;br /&gt;
&lt;br /&gt;
If you expeience DNS issues after connecting to DNS you may need a proper /etc/resolv.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln -sf /var/run/resolv.conf /etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If needed put your nameserver for usb-net into /var/run/resolv.conf, not in /etc.&lt;br /&gt;
&lt;br /&gt;
The image does not set a correct resolv.conf. i do so with an &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo  nameserver 192.168.0.201 &amp;gt; /var/run/resolv.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in the right place. because a post-up in /etc/network/interfaces is not supported i do that in /etc/network/if-up.d/08setupdns&lt;br /&gt;
&lt;br /&gt;
another problem is pppd's /etc/ppp/ip-down.d/92removedns which does not properly remove the link when shuting down ppp. my fix is this script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
ACTUALCONF=/var/run/resolv.conf&lt;br /&gt;
PPPCONF=/var/run/ppp/resolv.conf&lt;br /&gt;
if [ -f $PPPCONF ] ; then&lt;br /&gt;
        if [ -f $ACTUALCONF ] ; then&lt;br /&gt;
                if [ ! -h $ACTUALCONF -o ! &amp;quot;`readlink $ACTUALCONF 2&amp;gt;&amp;amp;1`&amp;quot; = &amp;quot;$PPPCONF&amp;quot; ] ; then&lt;br /&gt;
                        mv $ACTUALCONF $ACTUALCONF.ppporig&lt;br /&gt;
                fi&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        ln -sf $PPPCONF $ACTUALCONF&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Some APN names for reference ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Country&lt;br /&gt;
! Carrier&lt;br /&gt;
! Plan&lt;br /&gt;
! APN/Phone&lt;br /&gt;
! user/password if required&lt;br /&gt;
! Working pppd scripts&lt;br /&gt;
|-&lt;br /&gt;
| Australia || Vodafone || Any || vfinternet.au || ||&lt;br /&gt;
|-&lt;br /&gt;
| Canada || Fido || Any, behind NAT || internet.fido.ca || fido/fido || mdbus -s org.freesmartphone.frameworkd /org/freesmartphone/GSM/Device&lt;br /&gt;
org.freesmartphone.GSM.PDP.ActivateContext internet.fido.ca fido&lt;br /&gt;
fido&lt;br /&gt;
|-&lt;br /&gt;
| Canada || Rogers || Any, behind NAT || internet.com || wapuser1/wap || nameserver 207.181.101.4&lt;br /&gt;
|-&lt;br /&gt;
| Estonia || Elisa || Any, behind NAT || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Estonia || EMT || Any, behind NAT || internet.emt.ee || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Saunalahti || Any || internet.saunalahti || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Sonera   || Any, behind NAT || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Sonera   || Any, public IP  || prointernet || ||&lt;br /&gt;
|-&lt;br /&gt;
| France || SFR || 10.x.x.x? || websfr || || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || SFR || 10.x.x.x? || wapsfr&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;|| || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || Orange || ??? || orange.fr || || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || Bouyges Telecom || Web &amp;amp; Mail || mmsbouygtel.com || || Work great under FSO. Just follow instructions at http://wiki.openmoko.org/wiki/GPRS_FSO. Proxy:  62.201.129.225:8080. For emails, only ports 25 (smtp) and 110 (pop) are allowed. (They use a transparent proxy ...)&lt;br /&gt;
|-&lt;br /&gt;
| Germany || E-Plus || BASE (and others?) || internet.eplus.de || eplus gprs || [[Base pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| Germany || E-Plus || Simyo || internet.eplus.de || || [[simyo pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| Germany || T-Mobile ||  || internet.t-mobile || ||&lt;br /&gt;
|-&lt;br /&gt;
| Germany || Vodafone || Any, behind NAT || web.vodafone.de || ||&lt;br /&gt;
|-&lt;br /&gt;
| India || AirTel || MobileOffice || airtelgprs.com || ||&lt;br /&gt;
|- &lt;br /&gt;
| Italy   || Wind     || Superinternet, public IP  || internet.wind / *99# || wind/wind (any string) || [[Wind pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| Netherlands || Vodafone || Any || live.vodafone.com / *99***1#||  || [[Vodafone pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| New Zealand || Vodafone || Any || live.vodafone.com / *99***2#||  ||&lt;br /&gt;
|-&lt;br /&gt;
| Norway || Netcom || Any || internet.netcom.no || ||&lt;br /&gt;
|-&lt;br /&gt;
| Norway || Telenor || Any || telenor || ||&lt;br /&gt;
|-&lt;br /&gt;
| Sweden || Parlino ||  || internet.parlino.se || || [[GPRS_FSO|Works with FSO]]&lt;br /&gt;
|-&lt;br /&gt;
| Switzerland || Swisscom || e.g. Natel Basic Liberty, behind NAT || gprs.swisscom.ch || ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || T-Mobile|| || general.t-mobile.uk || ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || Virgin || || goto.virginmobile.uk || user ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || [http://www.filesaveas.com/gprs.html other providers] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || AT&amp;amp;T || Unlimited data plan (attached to pay-as-you-go voice plan) || wap.cingular / *99***1# || WAP@CINGULARGPRS.COM/CINGULAR1 ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || Cincinnati Bell Wireless || || wap.gocbw.com ||  cbw  ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || Cingular (AT&amp;amp;T) || Less than full internet || wap.cingular / may require *99***1# || ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || T-mobile || Anything less than full internet || wap.voicestream.com ||  || Need to set proxy to 216.155.165.50  T-Mobile docs say &amp;quot;216.155.165.050&amp;quot;.  050 octal = 40 decimal and will *not* work.  I think port is 8080 or 9100.  No luck w/ pppd scripts.  GPRS_FSO directions work under FSO though.&lt;br /&gt;
|- &lt;br /&gt;
| USA || T-mobile || Regular internet plan || internet2.voicestream.com || || [[T-Mobile pppd scripts]]&lt;br /&gt;
|- &lt;br /&gt;
| USA || T-mobile || &amp;quot;VPN&amp;quot; internet plan || internet3.voicestream.com || ||&lt;br /&gt;
|- &lt;br /&gt;
| Venezuela || Digitel || Pre- y post-pago || gprsweb.digitel.ve || ||&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[1] connected through a WAP proxy (slower, but the only way to access Vodafone live! and SFR portal)&lt;br /&gt;
&lt;br /&gt;
[2] Unless stated otherwise the phone number to call is &amp;quot;*99#&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Also see Ross Barkman's page for a detailed list of more [http://www.taniwha.org.uk/gprs.html global GPRS providers APN details]&lt;br /&gt;
&lt;br /&gt;
== Starting pppd automatically ==&lt;br /&gt;
&lt;br /&gt;
Once you have finished debugging your gprs-connect-chat and gprs options files, you may wish to automatically connect whenever needed and hang up when finished.  Make sure you understand the impact of this change to your carrier plan billing.  This is not recommended unless you have a large-use or unlimited data plan.  These scripts do NOT prompt you before connecting.&lt;br /&gt;
&lt;br /&gt;
=== On-demand connection settings ===&lt;br /&gt;
&lt;br /&gt;
Additional settings are needed if you want the actual connection to be up only while there is traffic. In the 'gprs' file above, insert the following, making sure 'nodetach' is commented out.  If 'nodetach' is on, the boot process will stop when it starts pppd. Also remove the option 'persist' mentioned above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Wait until needed before connecting&lt;br /&gt;
demand&lt;br /&gt;
&lt;br /&gt;
# Disconnect if idle for given amount of seconds&lt;br /&gt;
idle 20&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Start on boot (method 1) ===&lt;br /&gt;
&lt;br /&gt;
Add the following definition to /etc/network/interfaces:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auto ppp0&lt;br /&gt;
iface ppp0 inet ppp&lt;br /&gt;
        provider gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That should be it. Now you can use 'ifup ppp0' and 'ifdown ppp0' manually too.&lt;br /&gt;
&lt;br /&gt;
=== Start on boot (method 2) ===&lt;br /&gt;
&lt;br /&gt;
Create the following file as /etc/ppp/ppp_on_boot (needs chmod +x).  The /etc/init.d/ppp script will call it to set up the daemon.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
#&lt;br /&gt;
#   Rename this file to ppp_on_boot and pppd will be fired up as&lt;br /&gt;
#   soon as the system comes up, connecting to `provider'.&lt;br /&gt;
#&lt;br /&gt;
#   If you also make this file executable, and replace the first line&lt;br /&gt;
#   with just &amp;quot;#!/bin/sh&amp;quot;, the commands below will be executed instead.&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# The location of the ppp daemon itself (shouldn't need to be changed)&lt;br /&gt;
PPPD=/usr/sbin/pppd&lt;br /&gt;
&lt;br /&gt;
# The default provider to connect to&lt;br /&gt;
$PPPD call gprs&lt;br /&gt;
&lt;br /&gt;
# Additional connections, which would just use settings from&lt;br /&gt;
# /etc/ppp/options.&amp;lt;tty&amp;gt;&lt;br /&gt;
#$PPPD ttyS0&lt;br /&gt;
#$PPPD ttyS1&lt;br /&gt;
#$PPPD ttyS2&lt;br /&gt;
#$PPPD ttyS3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, you need to add the /etc/init.d/ppp script to the init process by creating symbolic links from the appropriate directories.  I chose the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/rc0.d/K25ppp&lt;br /&gt;
/etc/rc1.d/K45ppp&lt;br /&gt;
/etc/rc2.d/S45ppp&lt;br /&gt;
/etc/rc3.d/S45ppp&lt;br /&gt;
/etc/rc4.d/S45ppp&lt;br /&gt;
/etc/rc5.d/S45ppp&lt;br /&gt;
/etc/rc6.d/K25ppp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[pppd]]&lt;br /&gt;
* [[Manually using GSM]]&lt;br /&gt;
* [[Manually using Bluetooth]]&lt;br /&gt;
&lt;br /&gt;
{{Languages|Manually_using_GPRS}}&lt;br /&gt;
[[Category:Documentation]]&lt;br /&gt;
[[Category:Application Developer]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Manually_using_GPRS</id>
		<title>Manually using GPRS</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Manually_using_GPRS"/>
				<updated>2008-08-15T00:43:15Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: /* Some APN names for reference */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The GPRS connection is made using the PPP protocol to a server identified by an &amp;quot;APN&amp;quot; at the network operator. &lt;br /&gt;
&lt;br /&gt;
The program that implements PPP on Linux is [[pppd]], which we need to configure and run to get a connection. When that is working, we can configure pppd to wait until it's needed before it connects, and to disconnect if the connection becomes idle. Further, we can start pppd in the background during the boot process.&lt;br /&gt;
&lt;br /&gt;
== Configuring pppd for manual connections ==&lt;br /&gt;
&lt;br /&gt;
You'll need /etc/ppp/peers/gprs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Uncomment the following if you want some debug.&lt;br /&gt;
#debug&lt;br /&gt;
#logfile /var/volatile/log/pppd.log&lt;br /&gt;
lock&lt;br /&gt;
/dev/ttySAC0 115200&lt;br /&gt;
crtscts &lt;br /&gt;
connect /etc/ppp/gprs-connect-chat&lt;br /&gt;
disconnect /etc/ppp/gprs-disconnect-chat&lt;br /&gt;
hide-password&lt;br /&gt;
usepeerdns&lt;br /&gt;
ipcp-accept-local&lt;br /&gt;
noauth&lt;br /&gt;
noipdefault&lt;br /&gt;
novj&lt;br /&gt;
novjccomp&lt;br /&gt;
defaultroute&lt;br /&gt;
replacedefaultroute&lt;br /&gt;
# Reopen the connection if it fails, pausing for a while.&lt;br /&gt;
persist&lt;br /&gt;
holdoff 15&lt;br /&gt;
# Check the line every 20 seconds and presume&lt;br /&gt;
# the peer is gone if no replay for 4 times.&lt;br /&gt;
lcp-echo-interval 20&lt;br /&gt;
lcp-echo-failure 4&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depending on the APN, you may need password authentication using CHAP or PAP. In /etc/ppp/pap-secrets you can add the following default line for &amp;quot;password-less&amp;quot; connections:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# client        server  secret                  IP addresses&lt;br /&gt;
*               *       &amp;quot;&amp;quot;                      *&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For CHAP, lines in /etc/ppp/chap-secrets are used. For PAP, the lines are in /etc/ppp/pap-secrets. The client should match the &amp;quot;user&amp;quot; option in pppd the config file (below). You can use * to mean any here, but the option user &amp;quot;&amp;quot; doesn't mean empty!&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Secrets for authentication using CHAP&lt;br /&gt;
# client        server  secret                  IP addresses&lt;br /&gt;
&amp;quot;user&amp;quot;         *       &amp;quot;password&amp;quot;                  *  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this you need the following options in /etc/ppp/peers/gprs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# username to use for authentication, should match &amp;quot;client&amp;quot; in /etc/ppp/{chap,pap}-secrets&lt;br /&gt;
user &amp;quot;user&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== gprs-connect-chat, version 1 ==&lt;br /&gt;
&lt;br /&gt;
You'll also need /etc/ppp/gprs-connect-chat (needs &amp;quot;chmod +x&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
exec chat -v -S -s\&lt;br /&gt;
        TIMEOUT 15\&lt;br /&gt;
        &amp;quot;&amp;quot; &amp;quot;\K\K\K\d+++ATH&amp;quot;\&lt;br /&gt;
        OK-AT-OK ATZ\&lt;br /&gt;
        OK ATE1\&lt;br /&gt;
        ABORT BUSY\&lt;br /&gt;
        ABORT DELAYED\&lt;br /&gt;
        ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
        ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
        ABORT VOICE\&lt;br /&gt;
        ABORT ERROR\&lt;br /&gt;
        ABORT RINGING\&lt;br /&gt;
        TIMEOUT 60\&lt;br /&gt;
        OK AT+CFUN=1\&lt;br /&gt;
        OK AT+COPS\&lt;br /&gt;
        OK AT+CGDCONT=1,\&amp;quot;IP\&amp;quot;,\&amp;quot;internet\&amp;quot;\&lt;br /&gt;
        OK ATD*99#\&lt;br /&gt;
        CONNECT /n/d&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== gprs-connect-chat, version 2 ==&lt;br /&gt;
&lt;br /&gt;
Update: On my freerunner the first AT+CFUN=1 always generated ERROR. I managed to get gprs work by using the following script from http://lists.openmoko.org/pipermail/community/2008-July/023246.html:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
exec /usr/sbin/chat -v \&lt;br /&gt;
        TIMEOUT 10 \&lt;br /&gt;
        OK-AT-'' ''\&lt;br /&gt;
        ABORT BUSY\&lt;br /&gt;
        ABORT DELAYED\&lt;br /&gt;
        ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
        ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
        ABORT VOICE\&lt;br /&gt;
        ABORT ERROR\&lt;br /&gt;
        ABORT RINGING\&lt;br /&gt;
        TIMEOUT 30 \&lt;br /&gt;
        '' ATZ\&lt;br /&gt;
        OK ATE1\&lt;br /&gt;
        OK AT+CFUN=1\&lt;br /&gt;
        ERROR AT+CPIN=\&amp;quot;XXXX\&amp;quot;\         &amp;lt;&amp;lt; USE YOUR OWN&lt;br /&gt;
        OK AT+COPS\&lt;br /&gt;
        OK AT+CGDCONT=1,\&amp;quot;IP\&amp;quot;,\&amp;quot;internet\&amp;quot;\&lt;br /&gt;
        OK 'ATDT*99***1#'\&lt;br /&gt;
        CONNECT ''&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The error seems to vary a bit, sometimes it's before AT+COPS, sometimes as above. I have two versions of the gprs-connect-chat, which I vary between depending on which is needed. Or is there a way to specify two acceptable answers like {OK,ERROR}?&lt;br /&gt;
&lt;br /&gt;
You will need to adjust the APN name &amp;quot;internet&amp;quot; in at+cgdcont line and possibly the phone number in the ATD line to match what your network operator provides. See below in the table &amp;quot;Some APN names for reference&amp;quot; for the right settings for your operator.&lt;br /&gt;
&lt;br /&gt;
== gprs-disconnect-chat ==&lt;br /&gt;
&lt;br /&gt;
Also good to have is /etc/ppp/gprs-disconnect-chat (needs &amp;quot;chmod +x&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
/usr/sbin/chat -v\&lt;br /&gt;
	ABORT OK\&lt;br /&gt;
	ABORT BUSY\&lt;br /&gt;
	ABORT DELAYED\&lt;br /&gt;
	ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
	ABORT &amp;quot;NO CARRIER&amp;quot;\&lt;br /&gt;
	ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
	ABORT VOICE\&lt;br /&gt;
	ABORT ERROR\&lt;br /&gt;
	ABORT RINGING\&lt;br /&gt;
	TIMEOUT 12\&lt;br /&gt;
	&amp;quot;&amp;quot; &amp;quot;\K\K\K\d+++ATH&amp;quot;\&lt;br /&gt;
	&amp;quot;NO CARRIER-AT-OK&amp;quot; &amp;quot;\c&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Starting PPP connection ==&lt;br /&gt;
&lt;br /&gt;
The following script can be used to start the ppp connection. First it stops gsmd because gsmd may put the phone in a unknown state. It then turns on the power to the phone, modifies the ownership, and then creates a tty connection. Finally it starts [[pppd]] with the gprs settings.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/init.d/gsmd stop&lt;br /&gt;
echo &amp;quot;1&amp;quot; &amp;gt; /sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
chown uucp.uucp /dev/ttySAC0&lt;br /&gt;
stty -F /dev/ttySAC0 crtscts&lt;br /&gt;
pppd call gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are having problems connecting ensure you have a good GSM signal and replace the last line with the below line. This will allow you to see the details of the connection on the console. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pppd debug nodetach call gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The config above will establish a persistant link over gprs. The battery will run low in less than an hour. See an example for an on-demand config below.&lt;br /&gt;
&lt;br /&gt;
=== Resolve.conf issues ===&lt;br /&gt;
&lt;br /&gt;
The latest build seems to have solved the following issue, it should be automatically updated by pppd.&lt;br /&gt;
&lt;br /&gt;
If you expeience DNS issues after connecting to DNS you may need a proper /etc/resolv.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln -sf /var/run/resolv.conf /etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If needed put your nameserver for usb-net into /var/run/resolv.conf, not in /etc.&lt;br /&gt;
&lt;br /&gt;
The image does not set a correct resolv.conf. i do so with an &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo  nameserver 192.168.0.201 &amp;gt; /var/run/resolv.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in the right place. because a post-up in /etc/network/interfaces is not supported i do that in /etc/network/if-up.d/08setupdns&lt;br /&gt;
&lt;br /&gt;
another problem is pppd's /etc/ppp/ip-down.d/92removedns which does not properly remove the link when shuting down ppp. my fix is this script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
ACTUALCONF=/var/run/resolv.conf&lt;br /&gt;
PPPCONF=/var/run/ppp/resolv.conf&lt;br /&gt;
if [ -f $PPPCONF ] ; then&lt;br /&gt;
        if [ -f $ACTUALCONF ] ; then&lt;br /&gt;
                if [ ! -h $ACTUALCONF -o ! &amp;quot;`readlink $ACTUALCONF 2&amp;gt;&amp;amp;1`&amp;quot; = &amp;quot;$PPPCONF&amp;quot; ] ; then&lt;br /&gt;
                        mv $ACTUALCONF $ACTUALCONF.ppporig&lt;br /&gt;
                fi&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        ln -sf $PPPCONF $ACTUALCONF&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Some APN names for reference ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Country&lt;br /&gt;
! Carrier&lt;br /&gt;
! Plan&lt;br /&gt;
! APN/Phone&lt;br /&gt;
! user/password if required&lt;br /&gt;
! Working pppd scripts&lt;br /&gt;
|-&lt;br /&gt;
| Australia || Vodafone || Any || vfinternet.au || ||&lt;br /&gt;
|-&lt;br /&gt;
| Canada || Fido || Any, behind NAT || internet.fido.ca || fido/fido || mdbus -s org.freesmartphone.frameworkd /org/freesmartphone/GSM/Device&lt;br /&gt;
org.freesmartphone.GSM.PDP.ActivateContext internet.fido.ca fido&lt;br /&gt;
fido&lt;br /&gt;
|-&lt;br /&gt;
| Canada || Rogers || Any, behind NAT || internet.com || wapuser1/wap || nameserver 207.181.101.4&lt;br /&gt;
|-&lt;br /&gt;
| Estonia || Elisa || Any, behind NAT || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Estonia || EMT || Any, behind NAT || internet.emt.ee || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Saunalahti || Any || internet.saunalahti || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Sonera   || Any, behind NAT || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Sonera   || Any, public IP  || prointernet || ||&lt;br /&gt;
|-&lt;br /&gt;
| France || SFR || 10.x.x.x? || websfr || || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || SFR || 10.x.x.x? || wapsfr&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;|| || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || Orange || ??? || orange.fr || || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || Bouyges Telecom || Web &amp;amp; Mail || mmsbouygtel.com || || Work great under FSO. Just follow instructions at http://wiki.openmoko.org/wiki/GPRS_FSO. Proxy:  62.201.129.225:8080. For emails, only ports 25 (smtp) and 110 (pop) are allowed. (They use a transparent proxy ...)&lt;br /&gt;
|-&lt;br /&gt;
| Germany || E-Plus || BASE (and others?) || internet.eplus.de || eplus gprs || [[Base pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| Germany || E-Plus || Simyo || internet.eplus.de || || [[simyo pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| Germany || T-Mobile ||  || internet.t-mobile || ||&lt;br /&gt;
|-&lt;br /&gt;
| Germany || Vodafone || Any, behind NAT || web.vodafone.de || ||&lt;br /&gt;
|-&lt;br /&gt;
| India || AirTel || MobileOffice || airtelgprs.com || ||&lt;br /&gt;
|- &lt;br /&gt;
| Italy   || Wind     || Superinternet, public IP  || internet.wind / *99# || wind/wind (any string) || [[Wind pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| Netherlands || Vodafone || Any || live.vodafone.com / *99***1#||  || [[Vodafone pppd scripts]]&lt;br /&gt;
|-&lt;br /&gt;
| New Zealand || Vodafone || Any || live.vodafone.com / *99***2#||  ||&lt;br /&gt;
|-&lt;br /&gt;
| Norway || Netcom || Any || internet.netcom.no || ||&lt;br /&gt;
|-&lt;br /&gt;
| Norway || Telenor || Any || telenor || ||&lt;br /&gt;
|-&lt;br /&gt;
| Sweden || Parlino ||  || internet.parlino.se || || [[GPRS_FSO|Works with FSO]]&lt;br /&gt;
|-&lt;br /&gt;
| Switzerland || Swisscom || e.g. Natel Basic Liberty, behind NAT || gprs.swisscom.ch || ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || T-Mobile|| || general.t-mobile.uk || ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || Virgin || || goto.virginmobile.uk || user ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || [http://www.filesaveas.com/gprs.html other providers] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || AT&amp;amp;T || Unlimited data plan (attached to pay-as-you-go voice plan) || wap.cingular / *99***1# || WAP@CINGULARGPRS.COM/CINGULAR1 ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || Cincinnati Bell Wireless || || wap.gocbw.com ||  cbw  ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || Cingular (AT&amp;amp;T) || Less than full internet || wap.cingular / may require *99***1# || ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || T-mobile || Anything less than full internet || wap.voicestream.com ||  || Need to set proxy to 216.155.165.50  T-Mobile docs say &amp;quot;216.155.165.050&amp;quot;.  050 octal = 40 decimal and will *not* work.  I think port is 8080 or 9100.  No luck w/ pppd scripts.  GPRS_FSO directions work under FSO though.&lt;br /&gt;
|- &lt;br /&gt;
| USA || T-mobile || Regular internet plan || internet2.voicestream.com || || [[T-Mobile pppd scripts]]&lt;br /&gt;
|- &lt;br /&gt;
| USA || T-mobile || &amp;quot;VPN&amp;quot; internet plan || internet3.voicestream.com || ||&lt;br /&gt;
|- &lt;br /&gt;
| Venezuela || Digitel || Pre- y post-pago || gprsweb.digitel.ve || ||&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[1] connected through a WAP proxy (slower, but the only way to access Vodafone live! and SFR portal)&lt;br /&gt;
&lt;br /&gt;
[2] Unless stated otherwise the phone number to call is &amp;quot;*99#&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Also see Ross Barkman's page for a detailed list of more [http://www.taniwha.org.uk/gprs.html global GPRS providers APN details]&lt;br /&gt;
&lt;br /&gt;
== Starting pppd automatically ==&lt;br /&gt;
&lt;br /&gt;
Once you have finished debugging your gprs-connect-chat and gprs options files, you may wish to automatically connect whenever needed and hang up when finished.  Make sure you understand the impact of this change to your carrier plan billing.  This is not recommended unless you have a large-use or unlimited data plan.  These scripts do NOT prompt you before connecting.&lt;br /&gt;
&lt;br /&gt;
=== On-demand connection settings ===&lt;br /&gt;
&lt;br /&gt;
Additional settings are needed if you want the actual connection to be up only while there is traffic. In the 'gprs' file above, insert the following, making sure 'nodetach' is commented out.  If 'nodetach' is on, the boot process will stop when it starts pppd. Also remove the option 'persist' mentioned above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Wait until needed before connecting&lt;br /&gt;
demand&lt;br /&gt;
&lt;br /&gt;
# Disconnect if idle for given amount of seconds&lt;br /&gt;
idle 20&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Start on boot (method 1) ===&lt;br /&gt;
&lt;br /&gt;
Add the following definition to /etc/network/interfaces:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auto ppp0&lt;br /&gt;
iface ppp0 inet ppp&lt;br /&gt;
        provider gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That should be it. Now you can use 'ifup ppp0' and 'ifdown ppp0' manually too.&lt;br /&gt;
&lt;br /&gt;
=== Start on boot (method 2) ===&lt;br /&gt;
&lt;br /&gt;
Create the following file as /etc/ppp/ppp_on_boot (needs chmod +x).  The /etc/init.d/ppp script will call it to set up the daemon.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
#&lt;br /&gt;
#   Rename this file to ppp_on_boot and pppd will be fired up as&lt;br /&gt;
#   soon as the system comes up, connecting to `provider'.&lt;br /&gt;
#&lt;br /&gt;
#   If you also make this file executable, and replace the first line&lt;br /&gt;
#   with just &amp;quot;#!/bin/sh&amp;quot;, the commands below will be executed instead.&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# The location of the ppp daemon itself (shouldn't need to be changed)&lt;br /&gt;
PPPD=/usr/sbin/pppd&lt;br /&gt;
&lt;br /&gt;
# The default provider to connect to&lt;br /&gt;
$PPPD call gprs&lt;br /&gt;
&lt;br /&gt;
# Additional connections, which would just use settings from&lt;br /&gt;
# /etc/ppp/options.&amp;lt;tty&amp;gt;&lt;br /&gt;
#$PPPD ttyS0&lt;br /&gt;
#$PPPD ttyS1&lt;br /&gt;
#$PPPD ttyS2&lt;br /&gt;
#$PPPD ttyS3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, you need to add the /etc/init.d/ppp script to the init process by creating symbolic links from the appropriate directories.  I chose the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/rc0.d/K25ppp&lt;br /&gt;
/etc/rc1.d/K45ppp&lt;br /&gt;
/etc/rc2.d/S45ppp&lt;br /&gt;
/etc/rc3.d/S45ppp&lt;br /&gt;
/etc/rc4.d/S45ppp&lt;br /&gt;
/etc/rc5.d/S45ppp&lt;br /&gt;
/etc/rc6.d/K25ppp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[pppd]]&lt;br /&gt;
* [[Manually using GSM]]&lt;br /&gt;
* [[Manually using Bluetooth]]&lt;br /&gt;
&lt;br /&gt;
{{Languages|Manually_using_GPRS}}&lt;br /&gt;
[[Category:Documentation]]&lt;br /&gt;
[[Category:Application Developer]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Flashing_the_Neo_FreeRunner</id>
		<title>Flashing the Neo FreeRunner</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Flashing_the_Neo_FreeRunner"/>
				<updated>2008-08-07T18:45:53Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: /* Boot the FreeRunner from NOR Flash */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Openmoko regularly releases updated versions of the Openmoko root filesystem, the [[kernel]], and the [[Bootloader| U-Boot]] as binary images. These may be programmed into the Flash memory (NAND) of Neo FreeRunner. For that, you can use the USB cable and another computer which will run an Openmoko provided tool to flash the Neo FreeRunner &amp;quot;through&amp;quot; USB.&lt;br /&gt;
&lt;br /&gt;
{{note|The Openmoko software team builds images daily. If you want to use the latest images, you can download the image from the daily build, but we recommend you '''use the most stable image from http://downloads.openmoko.org/releases/Freerunner/.''' Images here have been tested by the test team.}}&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
All the components of the software in the FreeRunner are bundled together into binary images.&lt;br /&gt;
&lt;br /&gt;
The '''bootloader''' is a small program that runs first when the FreeRunner is powered on or reset (depending on [[Booting the Neo FreeRunner|how you reset it]], the version from NOR or NAND is booted).&lt;br /&gt;
The '''kernel''' is the central component in the Linux operating system.&lt;br /&gt;
The '''root filesystem''' contains all the files that make up the commands and applications that you can run.&lt;br /&gt;
&lt;br /&gt;
On a desktop computer when you want to replace the operating system, you would boot it from a CD-ROM drive, then copy files from the CD to the internal hard drive. &lt;br /&gt;
&lt;br /&gt;
The FreeRunner does not have a CD-ROM drive but it does have two kinds of internal program storage: NOR flash and NAND flash. The NOR flash is small and stores only a special boot program used when you need to re-write the contents of the NAND flash. NAND flash acts more like a hard drive.&lt;br /&gt;
&lt;br /&gt;
The NAND Flash is divided into 3 partitions so that you can flash each component separately.&lt;br /&gt;
For example if you are trying to install a better kernel, you only have to follow the steps to flash the kernel image.&lt;br /&gt;
&lt;br /&gt;
The FreeRunner can also boot from an image in its micro SD card but that option is not covered here. See [[Booting from SD]] for more information.&lt;br /&gt;
 &lt;br /&gt;
'''Before you start: Erasing the root filesystem or flashing the uboot are radical measures. Take the time to ponder the necessity. Sometimes problems can be fixed by updating only the kernel.'''&lt;br /&gt;
&lt;br /&gt;
The steps to reflash NAND are&lt;br /&gt;
&lt;br /&gt;
# Collect everything you need together on your desktop computer. This includes the dfu-util program and the images you will load into the FreeRunner and a USB cable.&lt;br /&gt;
# Boot the FreeRunner from NOR Flash.&lt;br /&gt;
# Connect the FreeRunner to the desktop computer via the USB cable.&lt;br /&gt;
# Use dfu-util to backup the current contents of the FreeRunner. &lt;br /&gt;
# Use dfu-util to copy the images from the desktop into the FreeRunner.&lt;br /&gt;
# Boot the FreeRunner from NAND Flash to use the new image(s).&lt;br /&gt;
&lt;br /&gt;
== Collect the things you need ==&lt;br /&gt;
&lt;br /&gt;
=== Download the DFU-util program ===&lt;br /&gt;
&lt;br /&gt;
You will download that program on your preferred desktop computer. It will allow you to connect to the FreeRunner through the USB cable and control its bootloader. That connection uses a special protocol which addresses the bootloader's interface, and differs from USB networking.&lt;br /&gt;
&lt;br /&gt;
There are versions of dfu-util for both Linux and Windows. It works the same way on both platforms.&lt;br /&gt;
There is a separate page to describe it in more detail: [[dfu-util]]&lt;br /&gt;
&lt;br /&gt;
'''MacOS X'''&lt;br /&gt;
&lt;br /&gt;
There is also a graphical dfu-util based flashing utility for MacOS X which is described here: [[MacOS_X#Graphical_Flashing_with_Openmoko_Flasher]]&lt;br /&gt;
&lt;br /&gt;
'''Linux'''&lt;br /&gt;
You can download the flashing tool for a GNU/Linux host from: &lt;br /&gt;
http://downloads.openmoko.org/releases/Freerunner/dfu-util&lt;br /&gt;
&lt;br /&gt;
Make sure it is executable by setting the permissions with this command: chmod a+x dfu-util&lt;br /&gt;
&lt;br /&gt;
'''Windows'''&lt;br /&gt;
You can download the flashing tool for a Windows host from: &lt;br /&gt;
[http://projects.openmoko.org/frs/?group_id=166&amp;amp;release_id=162 http://projects.openmoko.org/frs/?group_id=166&amp;amp;release_id=162] &lt;br /&gt;
&lt;br /&gt;
See additional driver installation instructions for Windows at [[Dfu-util-windows]]&lt;br /&gt;
&lt;br /&gt;
=== Download the image files that you will need ===&lt;br /&gt;
&lt;br /&gt;
Exactly what files you need depends on what you are trying to install. Here are some pages you can refer to for more information.&lt;br /&gt;
&lt;br /&gt;
''Edit request -- Some comments on why you'd want to replace each component could go here. For example you probably don't want to replace the bootloader unless there are bug fixes you really need.''&lt;br /&gt;
&lt;br /&gt;
[[Bootloader]] : TBD&lt;br /&gt;
&lt;br /&gt;
[[Kernel]] : You can download kernels from http://downloads.openmoko.org/releases/Freerunner/&lt;br /&gt;
&lt;br /&gt;
You can download the standard Openmoko root filesystem from &lt;br /&gt;
http://downloads.openmoko.org/releases/Freerunner/&lt;br /&gt;
or you can see more options at [[Distributions]] and [[Latest_Images]]&lt;br /&gt;
&lt;br /&gt;
If you download a '''Qtopia''' image, you will get a tarball file containing both the Qtopia root filesystem and a matching kernel. You can unpack them with the tar command, for example: tar xzvf ''qtopia.tgz''&lt;br /&gt;
&lt;br /&gt;
If you download an '''FSO''' image, the file system will be in a jffs2 'summary' file.&lt;br /&gt;
A file with the extension &amp;quot;.jffs2.summary&amp;quot; can be flashed to the FreeRunner just like an ordinary jffs2 file.&lt;br /&gt;
&lt;br /&gt;
== Boot the FreeRunner from NOR Flash ==&lt;br /&gt;
&lt;br /&gt;
[[Image:menu15.jpg|thumb|Booting from NOR Flash]]&lt;br /&gt;
&lt;br /&gt;
The Neo FreeRunner needs to be at the NOR uBoot menu for flashing. To get there. 1. press and hold ''aux'' button down, and then 2. press ''power button'' until the boot process starts. (For more information on booting, see [[Booting the Neo FreeRunner| booting the Neo Freerunner]])&lt;br /&gt;
&lt;br /&gt;
Once you see the NOR uBoot menu (labelled '''*** BOOT MENU (NOR) ***''') just stay there, you do not need to select or enter any item in menu. Now you will be able to flash, make backups of your Freerunner or query the Freerunner with dfu-util.&lt;br /&gt;
&lt;br /&gt;
We often hear this comment: '''The screen goes dark before I do anything!!''' The FreeRunner only stays at the NOR boot prompt for about 30 seconds and then shuts off unless you do something. Be sure you are ready to enter commands on your desktop once you have booted. &lt;br /&gt;
&lt;br /&gt;
Once the FreeRunner is at the NOR boot menu, then you can connect your Neo to the GNU/Linux or Windows host via a USB cable. If you have to boot back into NOR at this point (because you did not type fast enough!), pull the USB cable out first. Otherwise you will end up booting into the regular FreeRunner operating system. Got that? This is the routine:&lt;br /&gt;
&lt;br /&gt;
# boot into NOR&lt;br /&gt;
# connect usb&lt;br /&gt;
# type dfu-util commands&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- The following, upto dfu-util -l is taken from the thread &amp;quot;Re: Freerunner (GTK2007.2) has suddenly become unbootable&amp;quot; on the Support list. --&amp;gt;&lt;br /&gt;
Note that the dfu-util connection does '''not''' use Ethernet over USB - that is, you should not attempt to set up a usb0 network interface on your GNU/Linux host desktop (on Windows, you need a DFU class driver, or you can use the LibUSB-Win32 driver described on the [[Dfu-util-windows]] page). The dfu-util utility sets up its own connection to the FreeRunner. In fact, you will not be able to make an Ethernet-over-USB connection to the FreeRunner when it is at the uBoot menu; this type of connection is only available when the FreeRunner has booted fully.&lt;br /&gt;
&lt;br /&gt;
After connecting the FreeRunner to your host via USB cable, you can test whether dfu-util &amp;quot;sees&amp;quot; the FreeRunner by executing:&lt;br /&gt;
&lt;br /&gt;
   dfu-util -l&lt;br /&gt;
&lt;br /&gt;
Sometimes I get error messages from the dfu-util command; I just try again. Often they work on the second try. Sometimes I have to boot into NOR again before things work. Once a connection has been made everything seems to work fine.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Do a backup ==&lt;br /&gt;
&lt;br /&gt;
If you have a working image that you're happy with but want to try something different, you should probably do a [[Pre-Flash Backup]], although it looks like the method on that page may not entirely work.&lt;br /&gt;
&lt;br /&gt;
''Is this still true? 7/31/08??''&lt;br /&gt;
&lt;br /&gt;
== Using dfu-util ==&lt;br /&gt;
&lt;br /&gt;
dfu-util can be used to read flash memory, write memory, and get information from the device.&lt;br /&gt;
&lt;br /&gt;
This is the general command format to write an image file to a (predefined) &amp;quot;partition name&amp;quot; (referred to as ''altsetting'' in dfu-util help/manual) :&lt;br /&gt;
&lt;br /&gt;
 dfu-util -a ''altsetting'' -R -D ''file_name''&lt;br /&gt;
&lt;br /&gt;
where:&amp;lt;br&amp;gt;&lt;br /&gt;
-a ''altsetting'' : Specify the altsetting of the DFU interface by name or by number&amp;lt;br&amp;gt;&lt;br /&gt;
-R  : Issue USB Reset signalling once we're finished&amp;lt;br&amp;gt;&lt;br /&gt;
-D  ''file_name'' : Write firmware from ''file_name'' into device&lt;br /&gt;
&lt;br /&gt;
On Linux, you run dfu-util from a command shell prompt. If you have not put it somewhere on your command path you probably need to prefix it with a &amp;quot;./&amp;quot; like this '''./dfu-util'''.&lt;br /&gt;
On some systems you need to be root before this will work and on Ubuntu you must preface the command with &amp;quot;sudo&amp;quot; or you will get the following error: &amp;quot;Cannot claim interface: could not claim interface 2: Operation not permitted&amp;quot;&lt;br /&gt;
&lt;br /&gt;
On Windows, you need to open a command window and run from a command line. Use Start-Run Program and type &amp;quot;cmd&amp;quot; to open a Window.&lt;br /&gt;
&lt;br /&gt;
== Flashing the Kernel ==&lt;br /&gt;
&lt;br /&gt;
The command format is &lt;br /&gt;
&lt;br /&gt;
 dfu-util -a kernel -R -D ''/path/to/uImage''&lt;br /&gt;
&lt;br /&gt;
When flashing succeeds the following will be shown:&lt;br /&gt;
&lt;br /&gt;
 status(0) = No error condition is present&lt;br /&gt;
 Done!&lt;br /&gt;
&lt;br /&gt;
== Flashing the Root Filesystem ==&lt;br /&gt;
&lt;br /&gt;
The root filesystem has to be an image in jffs2 format. If the file you downloaded is zipped or compressed (has a .gz or .zip extension) you have to uncompress it first.&lt;br /&gt;
&lt;br /&gt;
The command format is&lt;br /&gt;
&lt;br /&gt;
 dfu-util -a rootfs -R -D ''rootfs_filename.jffs2''&lt;br /&gt;
&lt;br /&gt;
where ''rootfs_filename.jffs2'' is the name of the file containing the root filesystem.&lt;br /&gt;
&lt;br /&gt;
When flashing succeeds the following will be shown:&lt;br /&gt;
&lt;br /&gt;
 status(0) = No error condition is present&lt;br /&gt;
 Done!&lt;br /&gt;
&lt;br /&gt;
== Flashing the boot loader to the NAND==&lt;br /&gt;
&lt;br /&gt;
The boot loader (U-boot) file should have a .bin extension. As with the root filesystem, if the file you downloaded is zipped or compressed (has a .gz or .zip extension) you have to uncompress it first.&lt;br /&gt;
&lt;br /&gt;
The command format is &lt;br /&gt;
&lt;br /&gt;
 dfu-util -a u-boot -R -D ''uboot.bin''&lt;br /&gt;
&lt;br /&gt;
where ''uboot.bin'' is the name of the boot loader binary image file.&lt;br /&gt;
&lt;br /&gt;
''Reminder'': You should have [[Flashing_the_Neo_FreeRunner#Boot_the_FreeRunner_from_NOR_Flash|rebooted from NOR first]], in order to flash the boot-loader in NAND. After flashing succesfully, make sure you reboot from NAND's newly flashed boot loader, to benefit from the updates.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Taken from posts by Mikael Berthe &amp;lt;mikael.berthe@lilotux.net&amp;gt; and Torfinn Ingolfsen &amp;lt;tingox@gmail.com&amp;gt; to Support list, subject: Re: Upgrading u-boot needed ? --&amp;gt;&lt;br /&gt;
(Optional) After an upgrade, you may wish to check that the u-boot version matches the one you have just flashed. You can use 'grep  Bootloader /dev/mtdblock1' from a shell on the FreeRunner (and possibly the 1973 as well) to get the '''NAND''' u-boot version, like this:&lt;br /&gt;
   root@om-gta02:~# grep Bootloader /dev/mtdblock1&lt;br /&gt;
   Neo1973 Bootloader U-Boot 1.3.2+gitr18+64eb10cab8055084ae25ea4e73b66dd03cc1a0cb&lt;br /&gt;
&lt;br /&gt;
You can grep for the same string in /dev/mtdblock0 to retrieve the '''NOR''' u-boot version:&lt;br /&gt;
   root@om-gta02:~# grep  Bootloader /dev/mtdblock0&lt;br /&gt;
   Neo1973 Bootloader U-Boot 1.3.2-moko12&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ENDS ... subject: Re: Upgrading u-boot needed ? --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reboot the FreeRunner from NAND ==&lt;br /&gt;
&lt;br /&gt;
You should now be able to boot into the new images.&lt;br /&gt;
&lt;br /&gt;
Pay attention '''to booting from the NAND flash this time''', in particular if you upgraded the boot-loader (in short: 1. press and hold ''power button'' down, and then 2. press ''aux button'')&lt;br /&gt;
&lt;br /&gt;
The boot menu should be labelled '''*** BOOT MENU (NAND) ***''' this time (see [[Booting#Log_into_U-Boot_in_the_NAND_Flash|booting from NAND]] for more detailed instructions).&lt;br /&gt;
&lt;br /&gt;
[[Category:Flashing Openmoko| ]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Dfu-util-windows</id>
		<title>Dfu-util-windows</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Dfu-util-windows"/>
				<updated>2008-08-07T18:45:23Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: /* dfu-util for Win32 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== dfu-util for Win32 ==&lt;br /&gt;
&lt;br /&gt;
{{Note|This has been reported to work on Windows XP and Windows Vista with the Neo FreeRunner.  No reports have been received on whether it works with other versions of Windows or with the Neo 1973}}&lt;br /&gt;
&lt;br /&gt;
In order to use dfu-util for Win32, you need to install a Windows driver when the device is in U-Boot.  Theoretically, a USB standard-compliant DFU class driver should work, unfortunately, Windows does not come bundled with one.  If you do not have a DFU class driver (ie. Windows does not recognize the device in U-Boot mode and pops up the New Device Wizard), the LibUSB-Win32 driver and accompanying INF file for the Neo FreeRunner can be used, this driver can be found in OpenMokoDFU.zip at the link below.  When the Windows New Device Wizard pops up, use this driver.&lt;br /&gt;
&lt;br /&gt;
Once the driver is installed, then you can proceed and use the instructions found at the main [[dfu-util]] page.  &lt;br /&gt;
&lt;br /&gt;
The above mentioned files can be downloaded at: [http://projects.openmoko.org/projects/dfu-util-win32/ http://projects.openmoko.org/projects/dfu-util-win32/]&lt;br /&gt;
&lt;br /&gt;
The information below is for developers who would like to know how to compile dfu-util for Win32.&lt;br /&gt;
&lt;br /&gt;
== Porting dfu-util to Windows ==&lt;br /&gt;
&lt;br /&gt;
{{Note|This is entirely work in progress. Nevertheless hopefully the information on this page will serve as a starting point for anyone who find the time to take this further. After all, as many people still use Windows PCs as their every day computers, having a convenient way to re-flash a Neo from Windows would probably open up the user base.}}&lt;br /&gt;
&lt;br /&gt;
=== Potential Approaches ===&lt;br /&gt;
&lt;br /&gt;
* Cygwin&lt;br /&gt;
: Not very attactive as Cygwin binaries require Cygwin in order to run. You will not get a simple, native dfu-util.exe which can be downloaded and used on any Windows machine that way.&lt;br /&gt;
&lt;br /&gt;
* MinGW/MSYS&lt;br /&gt;
: MinGW (Minimalist GNU for Windows) seems to be the platform of choice.&lt;br /&gt;
&lt;br /&gt;
* LibUSB-Win32&lt;br /&gt;
: Will only be able to be built on a Windows box&lt;br /&gt;
&lt;br /&gt;
=== MinGW/MSYS port ===&lt;br /&gt;
&lt;br /&gt;
The preferred order of installation is:&lt;br /&gt;
&lt;br /&gt;
# Install MinGW (the core installation should be sufficient)&lt;br /&gt;
# Install MSYS (Note: make comes with MSYS while GCC comes with MinGW)&lt;br /&gt;
&lt;br /&gt;
Here is step-by-step howto:&lt;br /&gt;
&lt;br /&gt;
1. Download MinGW-5.1.4.exe from http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=240780&amp;amp;release_id=529741 and execute the installer. It will download additional files required and install MinGW.&lt;br /&gt;
: {{Note|It has often been a good idea to install into a directory that has no spaces in the filename.}}&lt;br /&gt;
2. Download MSYS-1.0.10.exe from http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=24963 and install.&lt;br /&gt;
: {{Note|Make sure to open the &amp;quot;Current Version: 1.0.10&amp;quot; folder as the newer version 1.0.11 does not have an installer yet.}}&lt;br /&gt;
You will need to enter the path where you installed MinGW. It's a good idea to install MinGW and MSYS next to each other, i.e. C:\SOMEDIR\MinGW and C:\SOMEDIR\MSYS.&lt;br /&gt;
: {{Note|For example if MinGW is installed in C:\MinGW enter 'C:/MinGW.' including the period.}}&lt;br /&gt;
&lt;br /&gt;
3. Download msysDTK-1.0.1.exe from http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=67879&amp;amp;release_id=131044, which contains the autotools. Install into the same directory into which you installed MSYS itself. The installer might not automatically suggest the right directory.&lt;br /&gt;
&lt;br /&gt;
That should give you an Icon in your Start menu in MinGW-&amp;gt;MSYS with the name of msys. Open that one, and you will find yourself in a bourne compatible shell on your native Windows system.&lt;br /&gt;
&lt;br /&gt;
You can try to execute some commends such as gcc, make, etc. to make sure you installed everything correctly.&lt;br /&gt;
&lt;br /&gt;
4. Download autoconf 2.59 from http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=67879&amp;amp;release_id=131044.  All you need to do to install it is to use a utility like [http://www.7-zip.org/ 7-Zip] to extract the files into your msys installation directory.&lt;br /&gt;
&lt;br /&gt;
5. You will also need pkg-config.  According to [http://www.mingw.org/MinGWiki/index.php/pkg-config http://www.mingw.org/MinGWiki/index.php/pkg-config], you need the following packages:&lt;br /&gt;
&lt;br /&gt;
  glib&lt;br /&gt;
  glib-dev&lt;br /&gt;
  libiconv&lt;br /&gt;
  gettext&lt;br /&gt;
  pkg-config&lt;br /&gt;
&lt;br /&gt;
You can get all of these from the GTK+ for Windows page at: [http://www.gtk.org/download-windows.html http://www.gtk.org/download-windows.html].  Unzip them to your msys\1.0 directory.&lt;br /&gt;
&lt;br /&gt;
6. Open the file /etc/profile (C:\msys\1.0\etc\profile) with your favorite editor (make sure it uses LF line endings) and add:&lt;br /&gt;
&lt;br /&gt;
  PKG_CONFIG_PATH=&amp;quot; /c/msys/1.0/lib/pkgconfig&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ensuring that the path is accessible from the MSYS shell and points to the pkgconfig files.&lt;br /&gt;
&lt;br /&gt;
7. Download libusb-win32-device-bin-0.1.12.1.tar.gz from http://sourceforge.net/project/showfiles.php?group_id=78138&amp;amp;package_id=79216&amp;amp;release_id=495011. Then, copy the libusb.a file from the LibUSB-Win32\lib\gcc directory into the MinGW\lib directory and the usb.h file from LibUSB-Win32\include into MinGW\include (or you can copy it into your dfu-util\src directory).&lt;br /&gt;
&lt;br /&gt;
8. Then you will need to create a libusb.pc file in the msys\1.0\lib\pkgconfig directory.  I created the following:&lt;br /&gt;
&lt;br /&gt;
  prefix=c:/msys/1.0&lt;br /&gt;
  exec_prefix=${prefix}&lt;br /&gt;
  libdir=${exec_prefix}/lib&lt;br /&gt;
  includedir=${prefix}/include&lt;br /&gt;
  Name: LibUSB&lt;br /&gt;
  Description: USB for Win32&lt;br /&gt;
  Requires: &lt;br /&gt;
  Version: 0.1.12.1&lt;br /&gt;
  Libs: -L${libdir} -lusb&lt;br /&gt;
  Cflags: -I${includedir}&lt;br /&gt;
&lt;br /&gt;
=== Getting dfu-util sources ===&lt;br /&gt;
&lt;br /&gt;
Use your favorite Subversion client to check out the dfu-util sources.  The dfu-util sources can be checked out from [https://svn.openmoko.org/trunk/src/host/dfu-util/ https://svn.openmoko.org/trunk/src/host/dfu-util/].&lt;br /&gt;
&lt;br /&gt;
=== Apply patch to compile with MinGW ===&lt;br /&gt;
&lt;br /&gt;
Apply the following patch to the source code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Index: main.c&lt;br /&gt;
===================================================================&lt;br /&gt;
--- main.c	(revision 4553)&lt;br /&gt;
+++ main.c	(working copy)&lt;br /&gt;
@@ -26,8 +26,10 @@&lt;br /&gt;
 #include &amp;lt;getopt.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;usb.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;errno.h&amp;gt;&lt;br /&gt;
+#ifndef __MINGW32__&lt;br /&gt;
 #include &amp;lt;byteswap.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;endian.h&amp;gt;&lt;br /&gt;
+#endif&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;dfu.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;usb_dfu.h&amp;quot;&lt;br /&gt;
@@ -37,6 +39,10 @@&lt;br /&gt;
 #include &amp;quot;config.h&amp;quot;&lt;br /&gt;
 #endif&lt;br /&gt;
 &lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+#define sleep(seconds) Sleep((seconds)*1000)&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
 #ifdef HAVE_USBPATH_H&lt;br /&gt;
 #include &amp;lt;usbpath.h&amp;gt;&lt;br /&gt;
 #endif&lt;br /&gt;
@@ -579,6 +585,20 @@&lt;br /&gt;
 &lt;br /&gt;
 		/* FIXME: check if the selected device really has only one */&lt;br /&gt;
 &lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+		int configuration = dif-&amp;gt;configuration;&lt;br /&gt;
+    &lt;br /&gt;
+		if (configuration == 0) {&lt;br /&gt;
+			dif-&amp;gt;configuration = 1;&lt;br /&gt;
+		}&lt;br /&gt;
+		printf(&amp;quot;Setting Configuration %u...\n&amp;quot;, dif-&amp;gt;configuration);&lt;br /&gt;
+		if (usb_set_configuration(dif-&amp;gt;dev_handle, dif-&amp;gt;configuration) &amp;lt; 0) {&lt;br /&gt;
+			fprintf(stderr, &amp;quot;Cannot set configuration: %s\n&amp;quot;, usb_strerror());&lt;br /&gt;
+			exit(1);&lt;br /&gt;
+		}&lt;br /&gt;
+		dif-&amp;gt;configuration = configuration;&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
 		printf(&amp;quot;Claiming USB DFU Runtime Interface...\n&amp;quot;);&lt;br /&gt;
 		if (usb_claim_interface(_rt_dif.dev_handle, _rt_dif.interface) &amp;lt; 0) {&lt;br /&gt;
 			fprintf(stderr, &amp;quot;Cannot claim interface: %s\n&amp;quot;, usb_strerror());&lt;br /&gt;
@@ -700,12 +720,18 @@&lt;br /&gt;
 		exit(1);&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
-#if 0&lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+	int configuration = dif-&amp;gt;configuration;&lt;br /&gt;
+  &lt;br /&gt;
+	if (configuration == 0) {&lt;br /&gt;
+		dif-&amp;gt;configuration = 1;&lt;br /&gt;
+	}&lt;br /&gt;
 	printf(&amp;quot;Setting Configuration %u...\n&amp;quot;, dif-&amp;gt;configuration);&lt;br /&gt;
 	if (usb_set_configuration(dif-&amp;gt;dev_handle, dif-&amp;gt;configuration) &amp;lt; 0) {&lt;br /&gt;
 		fprintf(stderr, &amp;quot;Cannot set configuration: %s\n&amp;quot;, usb_strerror());&lt;br /&gt;
 		exit(1);&lt;br /&gt;
 	}&lt;br /&gt;
+	dif-&amp;gt;configuration = configuration;&lt;br /&gt;
 #endif&lt;br /&gt;
 	printf(&amp;quot;Claiming USB DFU Interface...\n&amp;quot;);&lt;br /&gt;
 	if (usb_claim_interface(dif-&amp;gt;dev_handle, dif-&amp;gt;interface) &amp;lt; 0) {&lt;br /&gt;
Index: sam7dfu.c&lt;br /&gt;
===================================================================&lt;br /&gt;
--- sam7dfu.c	(revision 4553)&lt;br /&gt;
+++ sam7dfu.c	(working copy)&lt;br /&gt;
@@ -20,6 +20,11 @@&lt;br /&gt;
 #define O_BINARY 0&lt;br /&gt;
 #endif&lt;br /&gt;
 &lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+#define sleep(seconds) Sleep((seconds)*1000)&lt;br /&gt;
+#define usleep(microseconds) Sleep((microseconds)/1000)&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
 int sam7dfu_do_upload(struct usb_dev_handle *usb_handle, int interface, &lt;br /&gt;
 		      int xfer_size, const char *fname)&lt;br /&gt;
 {&lt;br /&gt;
Index: usb_dfu.h&lt;br /&gt;
===================================================================&lt;br /&gt;
--- usb_dfu.h	(revision 4553)&lt;br /&gt;
+++ usb_dfu.h	(working copy)&lt;br /&gt;
@@ -12,6 +12,13 @@&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
+#define u_int8_t uint8_t&lt;br /&gt;
+#define u_int16_t uint16_t&lt;br /&gt;
+#define u_int32_t uint32_t&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
 #define USB_DT_DFU			0x21&lt;br /&gt;
 &lt;br /&gt;
 struct usb_dfu_func_descriptor {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Build dfu-util ===&lt;br /&gt;
&lt;br /&gt;
In the Msys shell inside the dfu-util directory, run the following command:&lt;br /&gt;
&lt;br /&gt;
  ./autogen.sh&lt;br /&gt;
  ./configure&lt;br /&gt;
  make&lt;br /&gt;
&lt;br /&gt;
dfu-util should successfully compile and you should have the .exe files in the src directory. In case you get the following error&lt;br /&gt;
&lt;br /&gt;
  checking for USB... configure: error: *** Required libusb &amp;gt;= 0.1.4 not installed ***&lt;br /&gt;
&lt;br /&gt;
check your PKG_CONFIG_PATH (see above) to make sure it is correct, otherwise, you can try running the following command (if you are sure that libusb is correctly installed):&lt;br /&gt;
&lt;br /&gt;
  ./configure USB_CFLAGS=-Iinclude USB_LIBS=-lusb&lt;br /&gt;
&lt;br /&gt;
=== Preparing to use dfu-util ===&lt;br /&gt;
&lt;br /&gt;
A Windows driver needs to be installed when the device is in U-Boot and connected through the USB.  Windows does not come with a DFU class driver and Jungo seems to be the only one that has created a DFU class driver, but it is non-free.  You can use LibUSB-Win32 as the driver for the device by creating an INF file for it for this device.  Use inf-wizard.exe, which is a part of the LibUSB-Win32 binaries distribution.  Run the wizard, select the following device:&lt;br /&gt;
&lt;br /&gt;
  Vendor ID  Product ID  Description&lt;br /&gt;
  0x1D50      0x5119      USB Device&lt;br /&gt;
&lt;br /&gt;
Insert the Manufacturer name: OpenMoko, or FIC?&lt;br /&gt;
&lt;br /&gt;
Insert device description: Device Firmware Upgrade&lt;br /&gt;
&lt;br /&gt;
Then save the INF file along with the auto generated CAT files.&lt;br /&gt;
&lt;br /&gt;
When you get the New Device Wizard when plugging in the device in U-Boot mode into Windows, select this newly generated INF file.&lt;br /&gt;
&lt;br /&gt;
=== Running dfu-util ===&lt;br /&gt;
&lt;br /&gt;
Once the Windows driver is successfully installed, you can try some commands:&lt;br /&gt;
&lt;br /&gt;
  dfu-util --list&lt;br /&gt;
&lt;br /&gt;
and you should be able to list the device.  Example:&lt;br /&gt;
&lt;br /&gt;
  Found Runtime: [0x1d50:0x5119] devnum=7, cfg=0, intf=2, alt=0, name=&amp;quot;USB Device Firmware Upgrade&amp;quot;  &lt;br /&gt;
&lt;br /&gt;
=== Binary ===&lt;br /&gt;
&lt;br /&gt;
[http://projects.openmoko.org/projects/dfu-util-win32/ http://projects.openmoko.org/projects/dfu-util-win32/]&lt;br /&gt;
&lt;br /&gt;
=== Outstanding issues ===&lt;br /&gt;
&lt;br /&gt;
Had to call usb_set_configuration() with configuration set to 1 before attempting to claim the device instead of using configuration 0 that the device returns.  It sounds like DFU implementation in U-Boot might not be compliant with USB spec.  A similar issue and discussion can be found here: [http://thread.gmane.org/gmane.comp.lib.libusb.devel.windows/1546/focus=1554 http://thread.gmane.org/gmane.comp.lib.libusb.devel.windows/1546/focus=1554]&lt;br /&gt;
&lt;br /&gt;
[[Category:Flashing Openmoko]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Flashing_the_Neo_FreeRunner</id>
		<title>Flashing the Neo FreeRunner</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Flashing_the_Neo_FreeRunner"/>
				<updated>2008-08-07T18:38:10Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: /* Download the DFU-util program */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Openmoko regularly releases updated versions of the Openmoko root filesystem, the [[kernel]], and the [[Bootloader| U-Boot]] as binary images. These may be programmed into the Flash memory (NAND) of Neo FreeRunner. For that, you can use the USB cable and another computer which will run an Openmoko provided tool to flash the Neo FreeRunner &amp;quot;through&amp;quot; USB.&lt;br /&gt;
&lt;br /&gt;
{{note|The Openmoko software team builds images daily. If you want to use the latest images, you can download the image from the daily build, but we recommend you '''use the most stable image from http://downloads.openmoko.org/releases/Freerunner/.''' Images here have been tested by the test team.}}&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
All the components of the software in the FreeRunner are bundled together into binary images.&lt;br /&gt;
&lt;br /&gt;
The '''bootloader''' is a small program that runs first when the FreeRunner is powered on or reset (depending on [[Booting the Neo FreeRunner|how you reset it]], the version from NOR or NAND is booted).&lt;br /&gt;
The '''kernel''' is the central component in the Linux operating system.&lt;br /&gt;
The '''root filesystem''' contains all the files that make up the commands and applications that you can run.&lt;br /&gt;
&lt;br /&gt;
On a desktop computer when you want to replace the operating system, you would boot it from a CD-ROM drive, then copy files from the CD to the internal hard drive. &lt;br /&gt;
&lt;br /&gt;
The FreeRunner does not have a CD-ROM drive but it does have two kinds of internal program storage: NOR flash and NAND flash. The NOR flash is small and stores only a special boot program used when you need to re-write the contents of the NAND flash. NAND flash acts more like a hard drive.&lt;br /&gt;
&lt;br /&gt;
The NAND Flash is divided into 3 partitions so that you can flash each component separately.&lt;br /&gt;
For example if you are trying to install a better kernel, you only have to follow the steps to flash the kernel image.&lt;br /&gt;
&lt;br /&gt;
The FreeRunner can also boot from an image in its micro SD card but that option is not covered here. See [[Booting from SD]] for more information.&lt;br /&gt;
 &lt;br /&gt;
'''Before you start: Erasing the root filesystem or flashing the uboot are radical measures. Take the time to ponder the necessity. Sometimes problems can be fixed by updating only the kernel.'''&lt;br /&gt;
&lt;br /&gt;
The steps to reflash NAND are&lt;br /&gt;
&lt;br /&gt;
# Collect everything you need together on your desktop computer. This includes the dfu-util program and the images you will load into the FreeRunner and a USB cable.&lt;br /&gt;
# Boot the FreeRunner from NOR Flash.&lt;br /&gt;
# Connect the FreeRunner to the desktop computer via the USB cable.&lt;br /&gt;
# Use dfu-util to backup the current contents of the FreeRunner. &lt;br /&gt;
# Use dfu-util to copy the images from the desktop into the FreeRunner.&lt;br /&gt;
# Boot the FreeRunner from NAND Flash to use the new image(s).&lt;br /&gt;
&lt;br /&gt;
== Collect the things you need ==&lt;br /&gt;
&lt;br /&gt;
=== Download the DFU-util program ===&lt;br /&gt;
&lt;br /&gt;
You will download that program on your preferred desktop computer. It will allow you to connect to the FreeRunner through the USB cable and control its bootloader. That connection uses a special protocol which addresses the bootloader's interface, and differs from USB networking.&lt;br /&gt;
&lt;br /&gt;
There are versions of dfu-util for both Linux and Windows. It works the same way on both platforms.&lt;br /&gt;
There is a separate page to describe it in more detail: [[dfu-util]]&lt;br /&gt;
&lt;br /&gt;
'''MacOS X'''&lt;br /&gt;
&lt;br /&gt;
There is also a graphical dfu-util based flashing utility for MacOS X which is described here: [[MacOS_X#Graphical_Flashing_with_Openmoko_Flasher]]&lt;br /&gt;
&lt;br /&gt;
'''Linux'''&lt;br /&gt;
You can download the flashing tool for a GNU/Linux host from: &lt;br /&gt;
http://downloads.openmoko.org/releases/Freerunner/dfu-util&lt;br /&gt;
&lt;br /&gt;
Make sure it is executable by setting the permissions with this command: chmod a+x dfu-util&lt;br /&gt;
&lt;br /&gt;
'''Windows'''&lt;br /&gt;
You can download the flashing tool for a Windows host from: &lt;br /&gt;
[http://projects.openmoko.org/frs/?group_id=166&amp;amp;release_id=162 http://projects.openmoko.org/frs/?group_id=166&amp;amp;release_id=162] &lt;br /&gt;
&lt;br /&gt;
See additional driver installation instructions for Windows at [[Dfu-util-windows]]&lt;br /&gt;
&lt;br /&gt;
=== Download the image files that you will need ===&lt;br /&gt;
&lt;br /&gt;
Exactly what files you need depends on what you are trying to install. Here are some pages you can refer to for more information.&lt;br /&gt;
&lt;br /&gt;
''Edit request -- Some comments on why you'd want to replace each component could go here. For example you probably don't want to replace the bootloader unless there are bug fixes you really need.''&lt;br /&gt;
&lt;br /&gt;
[[Bootloader]] : TBD&lt;br /&gt;
&lt;br /&gt;
[[Kernel]] : You can download kernels from http://downloads.openmoko.org/releases/Freerunner/&lt;br /&gt;
&lt;br /&gt;
You can download the standard Openmoko root filesystem from &lt;br /&gt;
http://downloads.openmoko.org/releases/Freerunner/&lt;br /&gt;
or you can see more options at [[Distributions]] and [[Latest_Images]]&lt;br /&gt;
&lt;br /&gt;
If you download a '''Qtopia''' image, you will get a tarball file containing both the Qtopia root filesystem and a matching kernel. You can unpack them with the tar command, for example: tar xzvf ''qtopia.tgz''&lt;br /&gt;
&lt;br /&gt;
If you download an '''FSO''' image, the file system will be in a jffs2 'summary' file.&lt;br /&gt;
A file with the extension &amp;quot;.jffs2.summary&amp;quot; can be flashed to the FreeRunner just like an ordinary jffs2 file.&lt;br /&gt;
&lt;br /&gt;
== Boot the FreeRunner from NOR Flash ==&lt;br /&gt;
&lt;br /&gt;
[[Image:menu15.jpg|thumb|Booting from NOR Flash]]&lt;br /&gt;
&lt;br /&gt;
The Neo FreeRunner needs to be at the NOR uBoot menu for flashing. To get there. 1. press and hold ''aux'' button down, and then 2. press ''power button'' until the boot process starts. (For more information on booting, see [[Booting the Neo FreeRunner| booting the Neo Freerunner]])&lt;br /&gt;
&lt;br /&gt;
Once you see the NOR uBoot menu (labelled '''*** BOOT MENU (NOR) ***''') just stay there, you do not need to select or enter any item in menu. Now you will be able to flash, make backups of your Freerunner or query the Freerunner with dfu-util.&lt;br /&gt;
&lt;br /&gt;
We often hear this comment: '''The screen goes dark before I do anything!!''' The FreeRunner only stays at the NOR boot prompt for about 30 seconds and then shuts off unless you do something. Be sure you are ready to enter commands on your desktop once you have booted. &lt;br /&gt;
&lt;br /&gt;
Once the FreeRunner is at the NOR boot menu, then you can connect your Neo to the GNU/Linux or Windows host via a USB cable. If you have to boot back into NOR at this point (because you did not type fast enough!), pull the USB cable out first. Otherwise you will end up booting into the regular FreeRunner operating system. Got that? This is the routine:&lt;br /&gt;
&lt;br /&gt;
# boot into NOR&lt;br /&gt;
# connect usb&lt;br /&gt;
# type dfu-util commands&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- The following, upto dfu-util -l is taken from the thread &amp;quot;Re: Freerunner (GTK2007.2) has suddenly become unbootable&amp;quot; on the Support list. --&amp;gt;&lt;br /&gt;
Note that the dfu-util connection does '''not''' use Ethernet over USB - that is, you should not attempt to set up a usb0 network interface on your GNU/Linux host desktop (or the equivalent on Windows). The dfu-util utility sets up its own connection to the FreeRunner. In fact, you will not be able to make an Ethernet-over-USB connection to the FreeRunner when it is at the uBoot menu; this type of connection is only available when the FreeRunner has booted fully.&lt;br /&gt;
&lt;br /&gt;
After connecting the FreeRunner to your host via USB cable, you can test whether dfu-util &amp;quot;sees&amp;quot; the FreeRunner by executing:&lt;br /&gt;
&lt;br /&gt;
   dfu-util -l&lt;br /&gt;
&lt;br /&gt;
Sometimes I get error messages from the dfu-util command; I just try again. Often they work on the second try. Sometimes I have to boot into NOR again before things work. Once a connection has been made everything seems to work fine.&lt;br /&gt;
&amp;lt;br clear=all&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Do a backup ==&lt;br /&gt;
&lt;br /&gt;
If you have a working image that you're happy with but want to try something different, you should probably do a [[Pre-Flash Backup]], although it looks like the method on that page may not entirely work.&lt;br /&gt;
&lt;br /&gt;
''Is this still true? 7/31/08??''&lt;br /&gt;
&lt;br /&gt;
== Using dfu-util ==&lt;br /&gt;
&lt;br /&gt;
dfu-util can be used to read flash memory, write memory, and get information from the device.&lt;br /&gt;
&lt;br /&gt;
This is the general command format to write an image file to a (predefined) &amp;quot;partition name&amp;quot; (referred to as ''altsetting'' in dfu-util help/manual) :&lt;br /&gt;
&lt;br /&gt;
 dfu-util -a ''altsetting'' -R -D ''file_name''&lt;br /&gt;
&lt;br /&gt;
where:&amp;lt;br&amp;gt;&lt;br /&gt;
-a ''altsetting'' : Specify the altsetting of the DFU interface by name or by number&amp;lt;br&amp;gt;&lt;br /&gt;
-R  : Issue USB Reset signalling once we're finished&amp;lt;br&amp;gt;&lt;br /&gt;
-D  ''file_name'' : Write firmware from ''file_name'' into device&lt;br /&gt;
&lt;br /&gt;
On Linux, you run dfu-util from a command shell prompt. If you have not put it somewhere on your command path you probably need to prefix it with a &amp;quot;./&amp;quot; like this '''./dfu-util'''.&lt;br /&gt;
On some systems you need to be root before this will work and on Ubuntu you must preface the command with &amp;quot;sudo&amp;quot; or you will get the following error: &amp;quot;Cannot claim interface: could not claim interface 2: Operation not permitted&amp;quot;&lt;br /&gt;
&lt;br /&gt;
On Windows, you need to open a command window and run from a command line. Use Start-Run Program and type &amp;quot;cmd&amp;quot; to open a Window.&lt;br /&gt;
&lt;br /&gt;
== Flashing the Kernel ==&lt;br /&gt;
&lt;br /&gt;
The command format is &lt;br /&gt;
&lt;br /&gt;
 dfu-util -a kernel -R -D ''/path/to/uImage''&lt;br /&gt;
&lt;br /&gt;
When flashing succeeds the following will be shown:&lt;br /&gt;
&lt;br /&gt;
 status(0) = No error condition is present&lt;br /&gt;
 Done!&lt;br /&gt;
&lt;br /&gt;
== Flashing the Root Filesystem ==&lt;br /&gt;
&lt;br /&gt;
The root filesystem has to be an image in jffs2 format. If the file you downloaded is zipped or compressed (has a .gz or .zip extension) you have to uncompress it first.&lt;br /&gt;
&lt;br /&gt;
The command format is&lt;br /&gt;
&lt;br /&gt;
 dfu-util -a rootfs -R -D ''rootfs_filename.jffs2''&lt;br /&gt;
&lt;br /&gt;
where ''rootfs_filename.jffs2'' is the name of the file containing the root filesystem.&lt;br /&gt;
&lt;br /&gt;
When flashing succeeds the following will be shown:&lt;br /&gt;
&lt;br /&gt;
 status(0) = No error condition is present&lt;br /&gt;
 Done!&lt;br /&gt;
&lt;br /&gt;
== Flashing the boot loader to the NAND==&lt;br /&gt;
&lt;br /&gt;
The boot loader (U-boot) file should have a .bin extension. As with the root filesystem, if the file you downloaded is zipped or compressed (has a .gz or .zip extension) you have to uncompress it first.&lt;br /&gt;
&lt;br /&gt;
The command format is &lt;br /&gt;
&lt;br /&gt;
 dfu-util -a u-boot -R -D ''uboot.bin''&lt;br /&gt;
&lt;br /&gt;
where ''uboot.bin'' is the name of the boot loader binary image file.&lt;br /&gt;
&lt;br /&gt;
''Reminder'': You should have [[Flashing_the_Neo_FreeRunner#Boot_the_FreeRunner_from_NOR_Flash|rebooted from NOR first]], in order to flash the boot-loader in NAND. After flashing succesfully, make sure you reboot from NAND's newly flashed boot loader, to benefit from the updates.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Taken from posts by Mikael Berthe &amp;lt;mikael.berthe@lilotux.net&amp;gt; and Torfinn Ingolfsen &amp;lt;tingox@gmail.com&amp;gt; to Support list, subject: Re: Upgrading u-boot needed ? --&amp;gt;&lt;br /&gt;
(Optional) After an upgrade, you may wish to check that the u-boot version matches the one you have just flashed. You can use 'grep  Bootloader /dev/mtdblock1' from a shell on the FreeRunner (and possibly the 1973 as well) to get the '''NAND''' u-boot version, like this:&lt;br /&gt;
   root@om-gta02:~# grep Bootloader /dev/mtdblock1&lt;br /&gt;
   Neo1973 Bootloader U-Boot 1.3.2+gitr18+64eb10cab8055084ae25ea4e73b66dd03cc1a0cb&lt;br /&gt;
&lt;br /&gt;
You can grep for the same string in /dev/mtdblock0 to retrieve the '''NOR''' u-boot version:&lt;br /&gt;
   root@om-gta02:~# grep  Bootloader /dev/mtdblock0&lt;br /&gt;
   Neo1973 Bootloader U-Boot 1.3.2-moko12&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ENDS ... subject: Re: Upgrading u-boot needed ? --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reboot the FreeRunner from NAND ==&lt;br /&gt;
&lt;br /&gt;
You should now be able to boot into the new images.&lt;br /&gt;
&lt;br /&gt;
Pay attention '''to booting from the NAND flash this time''', in particular if you upgraded the boot-loader (in short: 1. press and hold ''power button'' down, and then 2. press ''aux button'')&lt;br /&gt;
&lt;br /&gt;
The boot menu should be labelled '''*** BOOT MENU (NAND) ***''' this time (see [[Booting#Log_into_U-Boot_in_the_NAND_Flash|booting from NAND]] for more detailed instructions).&lt;br /&gt;
&lt;br /&gt;
[[Category:Flashing Openmoko| ]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Qtopia_/_Qt_Extended_on_FreeRunner</id>
		<title>Qtopia / Qt Extended on FreeRunner</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Qtopia_/_Qt_Extended_on_FreeRunner"/>
				<updated>2008-08-07T18:31:49Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: /* Installing Kernel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page provides instructions on how to install Qtopia (proper, not the [[ASU]] or [[QtopiaOnX11]] efforts) on the GTA02 (Freerunner) phone.  It is similar to the [[Qtopia on Neo1973]] page.&lt;br /&gt;
&lt;br /&gt;
{|align=right&lt;br /&gt;
|__TOC__&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Current status ==&lt;br /&gt;
On 18 July 2008, Qtopia released the [http://www.qtopia.net/modules/mydownloads/singlefile.php?lid=72 latest flash image for the FIC Neo Freerunner (gta02)] containing the Qtopia 4.3.2 snapshot of 17 July 2008 (GPL version). &lt;br /&gt;
&lt;br /&gt;
This image can successfully make and receive calls and text messages.  It can read all contacts from the SIM card (which the updated 2007.2 does not appear to be able to do).  It contains apps that appear to be more stable than the ones found in the 2007.2 image.  It has multiple input methods that appear to be more mature.  It does not, however, have a web browser or a GPS application.&lt;br /&gt;
&lt;br /&gt;
== Option 1: Flashing Qtopia to FreeRunner ==&lt;br /&gt;
&lt;br /&gt;
Download the image mentioned above and follow the instructions here: [[Flashing the Neo FreeRunner]]&lt;br /&gt;
&lt;br /&gt;
== Option 2: Dual-Booting between Qtopia and 2007.2 (Qtopia boots from MicroSD card) ==&lt;br /&gt;
&lt;br /&gt;
Installation Requirements: &lt;br /&gt;
&lt;br /&gt;
# SSH shell access to 2007.2 based image of the FreeRunner through USB interface or WLAN.&lt;br /&gt;
# A Desktop Linux distro (to unpack the .jffs2 image, I ran Ubuntu under VMWare)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Preparing the SD card ===&lt;br /&gt;
&lt;br /&gt;
See the [[Booting from SD#Prepare the SD card| Preparing the SD Card]] section of the [[Booting from SD]] page for partitioning and formatting instructions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Installing Qtopia ===&lt;br /&gt;
&lt;br /&gt;
==== Unpacking the Qtopia Root Filesystem Image ====&lt;br /&gt;
&lt;br /&gt;
Download the Qtopia FLASH image from [[Latest Images#Qtopia image from qtopia.net]] to your Linux box and extract its contents:&lt;br /&gt;
&lt;br /&gt;
  tar xzf qtopia-4.3.2-gta02-flash-*.tgz&lt;br /&gt;
&lt;br /&gt;
You should now have two files: &lt;br /&gt;
#uImage-2.6.24+git18+9c058ff0d2641df3c36fc3300acb72078d2c41d4-r0-om-gta02.bin&lt;br /&gt;
#qtopia-4.3.2-gta02-rootfs-07172049.jffs2  &lt;br /&gt;
Now extract the root file system from the jffs2 using the commands found [[Userspace root image#Mounting the JFFS2 image on a loop back device (Block Memory MTD Emulation) |here]].&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
Now, tar up the root filesystem:&lt;br /&gt;
&lt;br /&gt;
  tar czf qtopia-4.3.2-gta02-rootfs-07172049.tar.gz -C &amp;lt;mountpoint&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Where ''&amp;lt;mountpoint&amp;gt;'' is the location where the jff2 filesystem was mounted.&lt;br /&gt;
&lt;br /&gt;
==== Installing Root Filesystem ====&lt;br /&gt;
&lt;br /&gt;
Transfer this compressed tarball to the second partition of the MicroSD that is mounted on the FreeRunner:&lt;br /&gt;
&lt;br /&gt;
  scp qtopia-4.3.2-gta02-rootfs-07172049.tar.gz root@192.168.0.202:/media/mmcblk0p2/&lt;br /&gt;
&lt;br /&gt;
Log in to your FreeRunner and unpack the root filesystem:&lt;br /&gt;
&lt;br /&gt;
  cd /media/mmcblk0p2&lt;br /&gt;
  tar xzf qtopia-4.3.2-gta02-rootfs-07172049.tar.gz&lt;br /&gt;
  rm qtopia-4.3.2-gta02-rootfs-07172049.tar.gz&lt;br /&gt;
  rm -f /media/mmcblk0p2/boot/*&lt;br /&gt;
&lt;br /&gt;
'''''Note:''''' the last step removes the kernel image from the second partition.  For some reason, U-Boot cannot find the uImage.bin file in the first partition if a kernel image exists in the second partition boot/ directory.&lt;br /&gt;
&lt;br /&gt;
==== Installing Kernel ====&lt;br /&gt;
&lt;br /&gt;
From your Linux box, rename uImage-2.6.24+git18+9c058ff0d2641df3c36fc3300acb72078d2c41d4-r0-om-gta02.bin to uImage.bin and copy it to the boot/ on the first partition of the MicroSD card.&lt;br /&gt;
&lt;br /&gt;
{{note|There are reports that the kernel image sometimes does not work from the /boot directory.  If this is the case for you, try moving the kernel image into the root of the microSD card, ie: /media/card instead of /media/card/boot.  This is probably dependent on the version of U-Boot installed.  It also doesn't hurt, seeing as there is room on the first partition, to simply have uImage.bin in both locations.}}&lt;br /&gt;
&lt;br /&gt;
  mv uImage-2.6.24+git18+9c058ff0d2641df3c36fc3300acb72078d2c41d4-r0-om-gta02.bin uImage.bin&lt;br /&gt;
  scp uImage.bin root@192.168.0.202:/media/card/boot/&lt;br /&gt;
  scp uImage.bin root@192.168.0.202:/media/card/&lt;br /&gt;
&lt;br /&gt;
=== Option 3: updating from source ===&lt;br /&gt;
&lt;br /&gt;
{{note|This will upgrade only opt/Qtopia directory, you should use opkg update/upgrade for the rest}}&lt;br /&gt;
Original Qtopia images (the distribution released by Trolltech, not ASU) are rarely released as a rootfs image, but the source code is often updated. If you want to reflash your OM with the latest version of Qtopia you might build it from sources. This has been explained in [http://lists.openmoko.org/pipermail/community/2008-August/024785.html this thread] of the community mailing list. Summing up:&lt;br /&gt;
&lt;br /&gt;
* get the latest toolchain released by trolltech: http://www.qtopia.net/modules/mydownloads/singlefile.php?lid=38 &lt;br /&gt;
* unzip it on your PC in / (as root)&lt;br /&gt;
* get the latest snapshot from trolltech: ftp://ftp.trolltech.com/qtopia/snapshots/&lt;br /&gt;
*  once dowloaded untar it&lt;br /&gt;
   tar xvzf qtopia-opensource-src-4.3.2-snapshot-20080804.tar.gz&lt;br /&gt;
* make a &amp;quot;build&amp;quot; dir &lt;br /&gt;
   mkdir build&lt;br /&gt;
   cd build&lt;br /&gt;
* configure and make:&lt;br /&gt;
   ../qtopia-opensource-src-4.3.2-snapshot-20080804/configure -device ficgta01&lt;br /&gt;
   make &lt;br /&gt;
This will take some time (couple hours). Note that the option &amp;quot;-device ficgta01&amp;quot; should work for both neo and freerunner. Then:&lt;br /&gt;
&lt;br /&gt;
  make install&lt;br /&gt;
&lt;br /&gt;
will make a root directory into build directory. That directory should be copied to /opt/Qtopia of your phone with scp. once done restart qpe or whole phone.&lt;br /&gt;
&lt;br /&gt;
=== Booting into Qtopia ===&lt;br /&gt;
&lt;br /&gt;
Now shutdown the FreeRunner&lt;br /&gt;
&lt;br /&gt;
  shutdown -h now&lt;br /&gt;
&lt;br /&gt;
Log into U-Boot in the NOR Flash to boot from the MicroSD card: (instructions from [[Booting the Neo FreeRunner]])&lt;br /&gt;
&lt;br /&gt;
* Press and hold Power button&lt;br /&gt;
* Then while still pressing the Power button, press and hold AUX button for 5 to 8 seconds. &lt;br /&gt;
* A boot menu will appear. &lt;br /&gt;
* Press the AUX button to select &amp;quot;[[Boot from sd card|Boot from MicroSD]]&amp;quot; and then press the Power button to execute.&lt;br /&gt;
&lt;br /&gt;
Qtopia should now boot.&lt;br /&gt;
&lt;br /&gt;
'''''Note:''''' you may get a kernel panic which says that &amp;quot;optional features not supported&amp;quot;.  If this is the case, boot back into 2007.2 and run&lt;br /&gt;
&lt;br /&gt;
  umount /dev/mmcblk0p2&lt;br /&gt;
  fsck.ext3.e2fsprogs /dev/mmcblk0p2&lt;br /&gt;
&lt;br /&gt;
This will clean up the file system and clear recovery flags in ext3 that ext2 does not support, then try booting from the MicroSD again.&lt;br /&gt;
&lt;br /&gt;
[[Category:Distributions]]&lt;br /&gt;
[[Category:Qtopia]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Dfu-util-windows</id>
		<title>Dfu-util-windows</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Dfu-util-windows"/>
				<updated>2008-08-01T17:23:42Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: /* dfu-util for Win32 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== dfu-util for Win32 ==&lt;br /&gt;
&lt;br /&gt;
{{Note|This has been reported to work on Windows XP and Windows Vista with the Neo FreeRunner.  No reports have been received on whether it works with other versions of Windows or with the Neo 1973}}&lt;br /&gt;
&lt;br /&gt;
In order to use dfu-util for Win32, you need to install a Windows driver when the device is in U-Boot.  The LibUSB-Win32 driver and accompanying INF file for the OpenMoko can be found in OpenMokoDFU.zip at the link below.  When the Windows New Device Wizard pops up, use this driver.&lt;br /&gt;
&lt;br /&gt;
Once the driver is installed, then you can proceed and use the instructions found at the main [[dfu-util]] page.  &lt;br /&gt;
&lt;br /&gt;
The above mentioned files can be downloaded at: [http://projects.openmoko.org/projects/dfu-util-win32/ http://projects.openmoko.org/projects/dfu-util-win32/]&lt;br /&gt;
&lt;br /&gt;
The information below is for developers who would like to know how to compile dfu-util for Win32.&lt;br /&gt;
&lt;br /&gt;
== Porting dfu-util to Windows ==&lt;br /&gt;
&lt;br /&gt;
{{Note|This is entirely work in progress. Nevertheless hopefully the information on this page will serve as a starting point for anyone who find the time to take this further. After all, as many people still use Windows PCs as their every day computers, having a convenient way to re-flash a Neo from Windows would probably open up the user base.}}&lt;br /&gt;
&lt;br /&gt;
=== Potential Approaches ===&lt;br /&gt;
&lt;br /&gt;
* Cygwin&lt;br /&gt;
: Not very attactive as Cygwin binaries require Cygwin in order to run. You will not get a simple, native dfu-util.exe which can be downloaded and used on any Windows machine that way.&lt;br /&gt;
&lt;br /&gt;
* MinGW/MSYS&lt;br /&gt;
: MinGW (Minimalist GNU for Windows) seems to be the platform of choice.&lt;br /&gt;
&lt;br /&gt;
* LibUSB-Win32&lt;br /&gt;
: Will only be able to be built on a Windows box&lt;br /&gt;
&lt;br /&gt;
=== MinGW/MSYS port ===&lt;br /&gt;
&lt;br /&gt;
The preferred order of installation is:&lt;br /&gt;
&lt;br /&gt;
# Install MinGW (the core installation should be sufficient)&lt;br /&gt;
# Install MSYS (Note: make comes with MSYS while GCC comes with MinGW)&lt;br /&gt;
&lt;br /&gt;
Here is step-by-step howto:&lt;br /&gt;
&lt;br /&gt;
1. Download MinGW-5.1.4.exe from http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=240780&amp;amp;release_id=529741 and execute the installer. It will download additional files required and install MinGW.&lt;br /&gt;
: {{Note|It has often been a good idea to install into a directory that has no spaces in the filename.}}&lt;br /&gt;
2. Download MSYS-1.0.10.exe from http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=24963 and install.&lt;br /&gt;
: {{Note|Make sure to open the &amp;quot;Current Version: 1.0.10&amp;quot; folder as the newer version 1.0.11 does not have an installer yet.}}&lt;br /&gt;
You will need to enter the path where you installed MinGW. It's a good idea to install MinGW and MSYS next to each other, i.e. C:\SOMEDIR\MinGW and C:\SOMEDIR\MSYS.&lt;br /&gt;
: {{Note|For example if MinGW is installed in C:\MinGW enter 'C:/MinGW.' including the period.}}&lt;br /&gt;
&lt;br /&gt;
3. Download msysDTK-1.0.1.exe from http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=67879&amp;amp;release_id=131044, which contains the autotools. Install into the same directory into which you installed MSYS itself. The installer might not automatically suggest the right directory.&lt;br /&gt;
&lt;br /&gt;
That should give you an Icon in your Start menu in MinGW-&amp;gt;MSYS with the name of msys. Open that one, and you will find yourself in a bourne compatible shell on your native Windows system.&lt;br /&gt;
&lt;br /&gt;
You can try to execute some commends such as gcc, make, etc. to make sure you installed everything correctly.&lt;br /&gt;
&lt;br /&gt;
4. Download autoconf 2.59 from http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=67879&amp;amp;release_id=131044.  All you need to do to install it is to use a utility like [http://www.7-zip.org/ 7-Zip] to extract the files into your msys installation directory.&lt;br /&gt;
&lt;br /&gt;
5. You will also need pkg-config.  According to [http://www.mingw.org/MinGWiki/index.php/pkg-config http://www.mingw.org/MinGWiki/index.php/pkg-config], you need the following packages:&lt;br /&gt;
&lt;br /&gt;
  glib&lt;br /&gt;
  glib-dev&lt;br /&gt;
  libiconv&lt;br /&gt;
  gettext&lt;br /&gt;
  pkg-config&lt;br /&gt;
&lt;br /&gt;
You can get all of these from the GTK+ for Windows page at: [http://www.gtk.org/download-windows.html http://www.gtk.org/download-windows.html].  Unzip them to your msys\1.0 directory.&lt;br /&gt;
&lt;br /&gt;
6. Open the file /etc/profile (C:\msys\1.0\etc\profile) with your favorite editor (make sure it uses LF line endings) and add:&lt;br /&gt;
&lt;br /&gt;
  PKG_CONFIG_PATH=&amp;quot; /c/msys/1.0/lib/pkgconfig&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ensuring that the path is accessible from the MSYS shell and points to the pkgconfig files.&lt;br /&gt;
&lt;br /&gt;
7. Download libusb-win32-device-bin-0.1.12.1.tar.gz from http://sourceforge.net/project/showfiles.php?group_id=78138&amp;amp;package_id=79216&amp;amp;release_id=495011. Then, copy the libusb.a file from the LibUSB-Win32\lib\gcc directory into the MinGW\lib directory and the usb.h file from LibUSB-Win32\include into MinGW\include (or you can copy it into your dfu-util\src directory).&lt;br /&gt;
&lt;br /&gt;
8. Then you will need to create a libusb.pc file in the msys\1.0\lib\pkgconfig directory.  I created the following:&lt;br /&gt;
&lt;br /&gt;
  prefix=c:/msys/1.0&lt;br /&gt;
  exec_prefix=${prefix}&lt;br /&gt;
  libdir=${exec_prefix}/lib&lt;br /&gt;
  includedir=${prefix}/include&lt;br /&gt;
  Name: LibUSB&lt;br /&gt;
  Description: USB for Win32&lt;br /&gt;
  Requires: &lt;br /&gt;
  Version: 0.1.12.1&lt;br /&gt;
  Libs: -L${libdir} -lusb&lt;br /&gt;
  Cflags: -I${includedir}&lt;br /&gt;
&lt;br /&gt;
=== Getting dfu-util sources ===&lt;br /&gt;
&lt;br /&gt;
Use your favorite Subversion client to check out the dfu-util sources.  The dfu-util sources can be checked out from [https://svn.openmoko.org/trunk/src/host/dfu-util/ https://svn.openmoko.org/trunk/src/host/dfu-util/].&lt;br /&gt;
&lt;br /&gt;
=== Apply patch to compile with MinGW ===&lt;br /&gt;
&lt;br /&gt;
Apply the following patch to the source code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Index: main.c&lt;br /&gt;
===================================================================&lt;br /&gt;
--- main.c	(revision 4553)&lt;br /&gt;
+++ main.c	(working copy)&lt;br /&gt;
@@ -26,8 +26,10 @@&lt;br /&gt;
 #include &amp;lt;getopt.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;usb.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;errno.h&amp;gt;&lt;br /&gt;
+#ifndef __MINGW32__&lt;br /&gt;
 #include &amp;lt;byteswap.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;endian.h&amp;gt;&lt;br /&gt;
+#endif&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;dfu.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;usb_dfu.h&amp;quot;&lt;br /&gt;
@@ -37,6 +39,10 @@&lt;br /&gt;
 #include &amp;quot;config.h&amp;quot;&lt;br /&gt;
 #endif&lt;br /&gt;
 &lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+#define sleep(seconds) Sleep((seconds)*1000)&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
 #ifdef HAVE_USBPATH_H&lt;br /&gt;
 #include &amp;lt;usbpath.h&amp;gt;&lt;br /&gt;
 #endif&lt;br /&gt;
@@ -579,6 +585,20 @@&lt;br /&gt;
 &lt;br /&gt;
 		/* FIXME: check if the selected device really has only one */&lt;br /&gt;
 &lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+		int configuration = dif-&amp;gt;configuration;&lt;br /&gt;
+    &lt;br /&gt;
+		if (configuration == 0) {&lt;br /&gt;
+			dif-&amp;gt;configuration = 1;&lt;br /&gt;
+		}&lt;br /&gt;
+		printf(&amp;quot;Setting Configuration %u...\n&amp;quot;, dif-&amp;gt;configuration);&lt;br /&gt;
+		if (usb_set_configuration(dif-&amp;gt;dev_handle, dif-&amp;gt;configuration) &amp;lt; 0) {&lt;br /&gt;
+			fprintf(stderr, &amp;quot;Cannot set configuration: %s\n&amp;quot;, usb_strerror());&lt;br /&gt;
+			exit(1);&lt;br /&gt;
+		}&lt;br /&gt;
+		dif-&amp;gt;configuration = configuration;&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
 		printf(&amp;quot;Claiming USB DFU Runtime Interface...\n&amp;quot;);&lt;br /&gt;
 		if (usb_claim_interface(_rt_dif.dev_handle, _rt_dif.interface) &amp;lt; 0) {&lt;br /&gt;
 			fprintf(stderr, &amp;quot;Cannot claim interface: %s\n&amp;quot;, usb_strerror());&lt;br /&gt;
@@ -700,12 +720,18 @@&lt;br /&gt;
 		exit(1);&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
-#if 0&lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+	int configuration = dif-&amp;gt;configuration;&lt;br /&gt;
+  &lt;br /&gt;
+	if (configuration == 0) {&lt;br /&gt;
+		dif-&amp;gt;configuration = 1;&lt;br /&gt;
+	}&lt;br /&gt;
 	printf(&amp;quot;Setting Configuration %u...\n&amp;quot;, dif-&amp;gt;configuration);&lt;br /&gt;
 	if (usb_set_configuration(dif-&amp;gt;dev_handle, dif-&amp;gt;configuration) &amp;lt; 0) {&lt;br /&gt;
 		fprintf(stderr, &amp;quot;Cannot set configuration: %s\n&amp;quot;, usb_strerror());&lt;br /&gt;
 		exit(1);&lt;br /&gt;
 	}&lt;br /&gt;
+	dif-&amp;gt;configuration = configuration;&lt;br /&gt;
 #endif&lt;br /&gt;
 	printf(&amp;quot;Claiming USB DFU Interface...\n&amp;quot;);&lt;br /&gt;
 	if (usb_claim_interface(dif-&amp;gt;dev_handle, dif-&amp;gt;interface) &amp;lt; 0) {&lt;br /&gt;
Index: sam7dfu.c&lt;br /&gt;
===================================================================&lt;br /&gt;
--- sam7dfu.c	(revision 4553)&lt;br /&gt;
+++ sam7dfu.c	(working copy)&lt;br /&gt;
@@ -20,6 +20,11 @@&lt;br /&gt;
 #define O_BINARY 0&lt;br /&gt;
 #endif&lt;br /&gt;
 &lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+#define sleep(seconds) Sleep((seconds)*1000)&lt;br /&gt;
+#define usleep(microseconds) Sleep((microseconds)/1000)&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
 int sam7dfu_do_upload(struct usb_dev_handle *usb_handle, int interface, &lt;br /&gt;
 		      int xfer_size, const char *fname)&lt;br /&gt;
 {&lt;br /&gt;
Index: usb_dfu.h&lt;br /&gt;
===================================================================&lt;br /&gt;
--- usb_dfu.h	(revision 4553)&lt;br /&gt;
+++ usb_dfu.h	(working copy)&lt;br /&gt;
@@ -12,6 +12,13 @@&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
+#define u_int8_t uint8_t&lt;br /&gt;
+#define u_int16_t uint16_t&lt;br /&gt;
+#define u_int32_t uint32_t&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
 #define USB_DT_DFU			0x21&lt;br /&gt;
 &lt;br /&gt;
 struct usb_dfu_func_descriptor {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Build dfu-util ===&lt;br /&gt;
&lt;br /&gt;
In the Msys shell inside the dfu-util directory, run the following command:&lt;br /&gt;
&lt;br /&gt;
  ./autogen.sh&lt;br /&gt;
  ./configure&lt;br /&gt;
  make&lt;br /&gt;
&lt;br /&gt;
dfu-util should successfully compile and you should have the .exe files in the src directory. In case you get the following error&lt;br /&gt;
&lt;br /&gt;
  checking for USB... configure: error: *** Required libusb &amp;gt;= 0.1.4 not installed ***&lt;br /&gt;
&lt;br /&gt;
check your PKG_CONFIG_PATH (see above) to make sure it is correct, otherwise, you can try running the following command (if you are sure that libusb is correctly installed):&lt;br /&gt;
&lt;br /&gt;
  ./configure USB_CFLAGS=-Iinclude USB_LIBS=-lusb&lt;br /&gt;
&lt;br /&gt;
=== Preparing to use dfu-util ===&lt;br /&gt;
&lt;br /&gt;
A Windows driver needs to be installed when the device is in U-Boot and connected through the USB.  Windows does not come with a DFU class driver and Jungo seems to be the only one that has created a DFU class driver, but it is non-free.  You can use LibUSB-Win32 as the driver for the device by creating an INF file for it for this device.  Use inf-wizard.exe, which is a part of the LibUSB-Win32 binaries distribution.  Run the wizard, select the following device:&lt;br /&gt;
&lt;br /&gt;
  Vendor ID  Product ID  Description&lt;br /&gt;
  0x1D50      0x5119      USB Device&lt;br /&gt;
&lt;br /&gt;
Insert the Manufacturer name: OpenMoko, or FIC?&lt;br /&gt;
&lt;br /&gt;
Insert device description: Device Firmware Upgrade&lt;br /&gt;
&lt;br /&gt;
Then save the INF file along with the auto generated CAT files.&lt;br /&gt;
&lt;br /&gt;
When you get the New Device Wizard when plugging in the device in U-Boot mode into Windows, select this newly generated INF file.&lt;br /&gt;
&lt;br /&gt;
=== Running dfu-util ===&lt;br /&gt;
&lt;br /&gt;
Once the Windows driver is successfully installed, you can try some commands:&lt;br /&gt;
&lt;br /&gt;
  dfu-util --list&lt;br /&gt;
&lt;br /&gt;
and you should be able to list the device.  Example:&lt;br /&gt;
&lt;br /&gt;
  Found Runtime: [0x1d50:0x5119] devnum=7, cfg=0, intf=2, alt=0, name=&amp;quot;USB Device Firmware Upgrade&amp;quot;  &lt;br /&gt;
&lt;br /&gt;
=== Binary ===&lt;br /&gt;
&lt;br /&gt;
[http://projects.openmoko.org/projects/dfu-util-win32/ http://projects.openmoko.org/projects/dfu-util-win32/]&lt;br /&gt;
&lt;br /&gt;
=== Outstanding issues ===&lt;br /&gt;
&lt;br /&gt;
Had to call usb_set_configuration() with configuration set to 1 before attempting to claim the device instead of using configuration 0 that the device returns.  It sounds like DFU implementation in U-Boot might not be compliant with USB spec.  A similar issue and discussion can be found here: [http://thread.gmane.org/gmane.comp.lib.libusb.devel.windows/1546/focus=1554 http://thread.gmane.org/gmane.comp.lib.libusb.devel.windows/1546/focus=1554]&lt;br /&gt;
&lt;br /&gt;
[[Category:Flashing Openmoko]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Dfu-util-windows</id>
		<title>Dfu-util-windows</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Dfu-util-windows"/>
				<updated>2008-07-29T19:02:14Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: /* Build dfu-util */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== dfu-util for Win32 ==&lt;br /&gt;
&lt;br /&gt;
{{Note|This has only been tested on the developer's box and with the FreeRunner.}}&lt;br /&gt;
&lt;br /&gt;
In order to use dfu-util for Win32, you need to install a Windows driver when the device is in U-Boot.  The LibUSB-Win32 driver and accompanying INF file for the OpenMoko can be found in OpenMokoDFU.zip at the link below.  When the Windows New Device Wizard pops up, use this driver.&lt;br /&gt;
&lt;br /&gt;
Once the driver is installed, then you can proceed and use the instructions found at the main [[dfu-util]] page.  &lt;br /&gt;
&lt;br /&gt;
The above mentioned files can be downloaded at: [http://projects.openmoko.org/projects/dfu-util-win32/ http://projects.openmoko.org/projects/dfu-util-win32/]&lt;br /&gt;
&lt;br /&gt;
The information below is for developers who would like to know how to compile dfu-util for Win32.&lt;br /&gt;
&lt;br /&gt;
== Porting dfu-util to Windows ==&lt;br /&gt;
&lt;br /&gt;
{{Note|This is entirely work in progress. Nevertheless hopefully the information on this page will serve as a starting point for anyone who find the time to take this further. After all, as many people still use Windows PCs as their every day computers, having a convenient way to re-flash a Neo from Windows would probably open up the user base.}}&lt;br /&gt;
&lt;br /&gt;
=== Potential Approaches ===&lt;br /&gt;
&lt;br /&gt;
* Cygwin&lt;br /&gt;
: Not very attactive as Cygwin binaries require Cygwin in order to run. You will not get a simple, native dfu-util.exe which can be downloaded and used on any Windows machine that way.&lt;br /&gt;
&lt;br /&gt;
* MinGW/MSYS&lt;br /&gt;
: MinGW (Minimalist GNU for Windows) seems to be the platform of choice.&lt;br /&gt;
&lt;br /&gt;
* LibUSB-Win32&lt;br /&gt;
: Will only be able to be built on a Windows box&lt;br /&gt;
&lt;br /&gt;
=== MinGW/MSYS port ===&lt;br /&gt;
&lt;br /&gt;
The preferred order of installation is:&lt;br /&gt;
&lt;br /&gt;
# Install MinGW (the core installation should be sufficient)&lt;br /&gt;
# Install MSYS (Note: make comes with MSYS while GCC comes with MinGW)&lt;br /&gt;
&lt;br /&gt;
Here is step-by-step howto:&lt;br /&gt;
&lt;br /&gt;
1. Download MinGW-5.1.4.exe from http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=240780&amp;amp;release_id=529741 and execute the installer. It will download additional files required and install MinGW.&lt;br /&gt;
: {{Note|It has often been a good idea to install into a directory that has no spaces in the filename.}}&lt;br /&gt;
2. Download MSYS-1.0.10.exe from http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=24963 and install.&lt;br /&gt;
: {{Note|Make sure to open the &amp;quot;Current Version: 1.0.10&amp;quot; folder as the newer version 1.0.11 does not have an installer yet.}}&lt;br /&gt;
You will need to enter the path where you installed MinGW. It's a good idea to install MinGW and MSYS next to each other, i.e. C:\SOMEDIR\MinGW and C:\SOMEDIR\MSYS.&lt;br /&gt;
: {{Note|For example if MinGW is installed in C:\MinGW enter 'C:/MinGW.' including the period.}}&lt;br /&gt;
&lt;br /&gt;
3. Download msysDTK-1.0.1.exe from http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=67879&amp;amp;release_id=131044, which contains the autotools. Install into the same directory into which you installed MSYS itself. The installer might not automatically suggest the right directory.&lt;br /&gt;
&lt;br /&gt;
That should give you an Icon in your Start menu in MinGW-&amp;gt;MSYS with the name of msys. Open that one, and you will find yourself in a bourne compatible shell on your native Windows system.&lt;br /&gt;
&lt;br /&gt;
You can try to execute some commends such as gcc, make, etc. to make sure you installed everything correctly.&lt;br /&gt;
&lt;br /&gt;
4. Download autoconf 2.59 from http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=67879&amp;amp;release_id=131044.  All you need to do to install it is to use a utility like [http://www.7-zip.org/ 7-Zip] to extract the files into your msys installation directory.&lt;br /&gt;
&lt;br /&gt;
5. You will also need pkg-config.  According to [http://www.mingw.org/MinGWiki/index.php/pkg-config http://www.mingw.org/MinGWiki/index.php/pkg-config], you need the following packages:&lt;br /&gt;
&lt;br /&gt;
  glib&lt;br /&gt;
  glib-dev&lt;br /&gt;
  libiconv&lt;br /&gt;
  gettext&lt;br /&gt;
  pkg-config&lt;br /&gt;
&lt;br /&gt;
You can get all of these from the GTK+ for Windows page at: [http://www.gtk.org/download-windows.html http://www.gtk.org/download-windows.html].  Unzip them to your msys\1.0 directory.&lt;br /&gt;
&lt;br /&gt;
6. Open the file /etc/profile (C:\msys\1.0\etc\profile) with your favorite editor (make sure it uses LF line endings) and add:&lt;br /&gt;
&lt;br /&gt;
  PKG_CONFIG_PATH=&amp;quot; /c/msys/1.0/lib/pkgconfig&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ensuring that the path is accessible from the MSYS shell and points to the pkgconfig files.&lt;br /&gt;
&lt;br /&gt;
7. Download libusb-win32-device-bin-0.1.12.1.tar.gz from http://sourceforge.net/project/showfiles.php?group_id=78138&amp;amp;package_id=79216&amp;amp;release_id=495011. Then, copy the libusb.a file from the LibUSB-Win32\lib\gcc directory into the MinGW\lib directory and the usb.h file from LibUSB-Win32\include into MinGW\include (or you can copy it into your dfu-util\src directory).&lt;br /&gt;
&lt;br /&gt;
8. Then you will need to create a libusb.pc file in the msys\1.0\lib\pkgconfig directory.  I created the following:&lt;br /&gt;
&lt;br /&gt;
  prefix=c:/msys/1.0&lt;br /&gt;
  exec_prefix=${prefix}&lt;br /&gt;
  libdir=${exec_prefix}/lib&lt;br /&gt;
  includedir=${prefix}/include&lt;br /&gt;
  Name: LibUSB&lt;br /&gt;
  Description: USB for Win32&lt;br /&gt;
  Requires: &lt;br /&gt;
  Version: 0.1.12.1&lt;br /&gt;
  Libs: -L${libdir} -lusb&lt;br /&gt;
  Cflags: -I${includedir}&lt;br /&gt;
&lt;br /&gt;
=== Getting dfu-util sources ===&lt;br /&gt;
&lt;br /&gt;
Use your favorite Subversion client to check out the dfu-util sources.  The dfu-util sources can be checked out from [https://svn.openmoko.org/trunk/src/host/dfu-util/ https://svn.openmoko.org/trunk/src/host/dfu-util/].&lt;br /&gt;
&lt;br /&gt;
=== Apply patch to compile with MinGW ===&lt;br /&gt;
&lt;br /&gt;
Apply the following patch to the source code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Index: main.c&lt;br /&gt;
===================================================================&lt;br /&gt;
--- main.c	(revision 4553)&lt;br /&gt;
+++ main.c	(working copy)&lt;br /&gt;
@@ -26,8 +26,10 @@&lt;br /&gt;
 #include &amp;lt;getopt.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;usb.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;errno.h&amp;gt;&lt;br /&gt;
+#ifndef __MINGW32__&lt;br /&gt;
 #include &amp;lt;byteswap.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;endian.h&amp;gt;&lt;br /&gt;
+#endif&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;dfu.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;usb_dfu.h&amp;quot;&lt;br /&gt;
@@ -37,6 +39,10 @@&lt;br /&gt;
 #include &amp;quot;config.h&amp;quot;&lt;br /&gt;
 #endif&lt;br /&gt;
 &lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+#define sleep(seconds) Sleep((seconds)*1000)&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
 #ifdef HAVE_USBPATH_H&lt;br /&gt;
 #include &amp;lt;usbpath.h&amp;gt;&lt;br /&gt;
 #endif&lt;br /&gt;
@@ -579,6 +585,20 @@&lt;br /&gt;
 &lt;br /&gt;
 		/* FIXME: check if the selected device really has only one */&lt;br /&gt;
 &lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+		int configuration = dif-&amp;gt;configuration;&lt;br /&gt;
+    &lt;br /&gt;
+		if (configuration == 0) {&lt;br /&gt;
+			dif-&amp;gt;configuration = 1;&lt;br /&gt;
+		}&lt;br /&gt;
+		printf(&amp;quot;Setting Configuration %u...\n&amp;quot;, dif-&amp;gt;configuration);&lt;br /&gt;
+		if (usb_set_configuration(dif-&amp;gt;dev_handle, dif-&amp;gt;configuration) &amp;lt; 0) {&lt;br /&gt;
+			fprintf(stderr, &amp;quot;Cannot set configuration: %s\n&amp;quot;, usb_strerror());&lt;br /&gt;
+			exit(1);&lt;br /&gt;
+		}&lt;br /&gt;
+		dif-&amp;gt;configuration = configuration;&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
 		printf(&amp;quot;Claiming USB DFU Runtime Interface...\n&amp;quot;);&lt;br /&gt;
 		if (usb_claim_interface(_rt_dif.dev_handle, _rt_dif.interface) &amp;lt; 0) {&lt;br /&gt;
 			fprintf(stderr, &amp;quot;Cannot claim interface: %s\n&amp;quot;, usb_strerror());&lt;br /&gt;
@@ -700,12 +720,18 @@&lt;br /&gt;
 		exit(1);&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
-#if 0&lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+	int configuration = dif-&amp;gt;configuration;&lt;br /&gt;
+  &lt;br /&gt;
+	if (configuration == 0) {&lt;br /&gt;
+		dif-&amp;gt;configuration = 1;&lt;br /&gt;
+	}&lt;br /&gt;
 	printf(&amp;quot;Setting Configuration %u...\n&amp;quot;, dif-&amp;gt;configuration);&lt;br /&gt;
 	if (usb_set_configuration(dif-&amp;gt;dev_handle, dif-&amp;gt;configuration) &amp;lt; 0) {&lt;br /&gt;
 		fprintf(stderr, &amp;quot;Cannot set configuration: %s\n&amp;quot;, usb_strerror());&lt;br /&gt;
 		exit(1);&lt;br /&gt;
 	}&lt;br /&gt;
+	dif-&amp;gt;configuration = configuration;&lt;br /&gt;
 #endif&lt;br /&gt;
 	printf(&amp;quot;Claiming USB DFU Interface...\n&amp;quot;);&lt;br /&gt;
 	if (usb_claim_interface(dif-&amp;gt;dev_handle, dif-&amp;gt;interface) &amp;lt; 0) {&lt;br /&gt;
Index: sam7dfu.c&lt;br /&gt;
===================================================================&lt;br /&gt;
--- sam7dfu.c	(revision 4553)&lt;br /&gt;
+++ sam7dfu.c	(working copy)&lt;br /&gt;
@@ -20,6 +20,11 @@&lt;br /&gt;
 #define O_BINARY 0&lt;br /&gt;
 #endif&lt;br /&gt;
 &lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+#define sleep(seconds) Sleep((seconds)*1000)&lt;br /&gt;
+#define usleep(microseconds) Sleep((microseconds)/1000)&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
 int sam7dfu_do_upload(struct usb_dev_handle *usb_handle, int interface, &lt;br /&gt;
 		      int xfer_size, const char *fname)&lt;br /&gt;
 {&lt;br /&gt;
Index: usb_dfu.h&lt;br /&gt;
===================================================================&lt;br /&gt;
--- usb_dfu.h	(revision 4553)&lt;br /&gt;
+++ usb_dfu.h	(working copy)&lt;br /&gt;
@@ -12,6 +12,13 @@&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
+#define u_int8_t uint8_t&lt;br /&gt;
+#define u_int16_t uint16_t&lt;br /&gt;
+#define u_int32_t uint32_t&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
 #define USB_DT_DFU			0x21&lt;br /&gt;
 &lt;br /&gt;
 struct usb_dfu_func_descriptor {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Build dfu-util ===&lt;br /&gt;
&lt;br /&gt;
In the Msys shell inside the dfu-util directory, run the following command:&lt;br /&gt;
&lt;br /&gt;
  ./autogen.sh&lt;br /&gt;
  ./configure&lt;br /&gt;
  make&lt;br /&gt;
&lt;br /&gt;
dfu-util should successfully compile and you should have the .exe files in the src directory. In case you get the following error&lt;br /&gt;
&lt;br /&gt;
  checking for USB... configure: error: *** Required libusb &amp;gt;= 0.1.4 not installed ***&lt;br /&gt;
&lt;br /&gt;
check your PKG_CONFIG_PATH (see above) to make sure it is correct, otherwise, you can try running the following command (if you are sure that libusb is correctly installed):&lt;br /&gt;
&lt;br /&gt;
  ./configure USB_CFLAGS=-Iinclude USB_LIBS=-lusb&lt;br /&gt;
&lt;br /&gt;
=== Preparing to use dfu-util ===&lt;br /&gt;
&lt;br /&gt;
A Windows driver needs to be installed when the device is in U-Boot and connected through the USB.  Windows does not come with a DFU class driver and Jungo seems to be the only one that has created a DFU class driver, but it is non-free.  You can use LibUSB-Win32 as the driver for the device by creating an INF file for it for this device.  Use inf-wizard.exe, which is a part of the LibUSB-Win32 binaries distribution.  Run the wizard, select the following device:&lt;br /&gt;
&lt;br /&gt;
  Vendor ID  Product ID  Description&lt;br /&gt;
  0x1D50      0x5119      USB Device&lt;br /&gt;
&lt;br /&gt;
Insert the Manufacturer name: OpenMoko, or FIC?&lt;br /&gt;
&lt;br /&gt;
Insert device description: Device Firmware Upgrade&lt;br /&gt;
&lt;br /&gt;
Then save the INF file along with the auto generated CAT files.&lt;br /&gt;
&lt;br /&gt;
When you get the New Device Wizard when plugging in the device in U-Boot mode into Windows, select this newly generated INF file.&lt;br /&gt;
&lt;br /&gt;
=== Running dfu-util ===&lt;br /&gt;
&lt;br /&gt;
Once the Windows driver is successfully installed, you can try some commands:&lt;br /&gt;
&lt;br /&gt;
  dfu-util --list&lt;br /&gt;
&lt;br /&gt;
and you should be able to list the device.  Example:&lt;br /&gt;
&lt;br /&gt;
  Found Runtime: [0x1d50:0x5119] devnum=7, cfg=0, intf=2, alt=0, name=&amp;quot;USB Device Firmware Upgrade&amp;quot;  &lt;br /&gt;
&lt;br /&gt;
=== Binary ===&lt;br /&gt;
&lt;br /&gt;
[http://projects.openmoko.org/projects/dfu-util-win32/ http://projects.openmoko.org/projects/dfu-util-win32/]&lt;br /&gt;
&lt;br /&gt;
=== Outstanding issues ===&lt;br /&gt;
&lt;br /&gt;
Had to call usb_set_configuration() with configuration set to 1 before attempting to claim the device instead of using configuration 0 that the device returns.  It sounds like DFU implementation in U-Boot might not be compliant with USB spec.  A similar issue and discussion can be found here: [http://thread.gmane.org/gmane.comp.lib.libusb.devel.windows/1546/focus=1554 http://thread.gmane.org/gmane.comp.lib.libusb.devel.windows/1546/focus=1554]&lt;br /&gt;
&lt;br /&gt;
[[Category:Flashing Openmoko]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Dfu-util-windows</id>
		<title>Dfu-util-windows</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Dfu-util-windows"/>
				<updated>2008-07-29T19:01:22Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: /* MinGW/MSYS port */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== dfu-util for Win32 ==&lt;br /&gt;
&lt;br /&gt;
{{Note|This has only been tested on the developer's box and with the FreeRunner.}}&lt;br /&gt;
&lt;br /&gt;
In order to use dfu-util for Win32, you need to install a Windows driver when the device is in U-Boot.  The LibUSB-Win32 driver and accompanying INF file for the OpenMoko can be found in OpenMokoDFU.zip at the link below.  When the Windows New Device Wizard pops up, use this driver.&lt;br /&gt;
&lt;br /&gt;
Once the driver is installed, then you can proceed and use the instructions found at the main [[dfu-util]] page.  &lt;br /&gt;
&lt;br /&gt;
The above mentioned files can be downloaded at: [http://projects.openmoko.org/projects/dfu-util-win32/ http://projects.openmoko.org/projects/dfu-util-win32/]&lt;br /&gt;
&lt;br /&gt;
The information below is for developers who would like to know how to compile dfu-util for Win32.&lt;br /&gt;
&lt;br /&gt;
== Porting dfu-util to Windows ==&lt;br /&gt;
&lt;br /&gt;
{{Note|This is entirely work in progress. Nevertheless hopefully the information on this page will serve as a starting point for anyone who find the time to take this further. After all, as many people still use Windows PCs as their every day computers, having a convenient way to re-flash a Neo from Windows would probably open up the user base.}}&lt;br /&gt;
&lt;br /&gt;
=== Potential Approaches ===&lt;br /&gt;
&lt;br /&gt;
* Cygwin&lt;br /&gt;
: Not very attactive as Cygwin binaries require Cygwin in order to run. You will not get a simple, native dfu-util.exe which can be downloaded and used on any Windows machine that way.&lt;br /&gt;
&lt;br /&gt;
* MinGW/MSYS&lt;br /&gt;
: MinGW (Minimalist GNU for Windows) seems to be the platform of choice.&lt;br /&gt;
&lt;br /&gt;
* LibUSB-Win32&lt;br /&gt;
: Will only be able to be built on a Windows box&lt;br /&gt;
&lt;br /&gt;
=== MinGW/MSYS port ===&lt;br /&gt;
&lt;br /&gt;
The preferred order of installation is:&lt;br /&gt;
&lt;br /&gt;
# Install MinGW (the core installation should be sufficient)&lt;br /&gt;
# Install MSYS (Note: make comes with MSYS while GCC comes with MinGW)&lt;br /&gt;
&lt;br /&gt;
Here is step-by-step howto:&lt;br /&gt;
&lt;br /&gt;
1. Download MinGW-5.1.4.exe from http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=240780&amp;amp;release_id=529741 and execute the installer. It will download additional files required and install MinGW.&lt;br /&gt;
: {{Note|It has often been a good idea to install into a directory that has no spaces in the filename.}}&lt;br /&gt;
2. Download MSYS-1.0.10.exe from http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=24963 and install.&lt;br /&gt;
: {{Note|Make sure to open the &amp;quot;Current Version: 1.0.10&amp;quot; folder as the newer version 1.0.11 does not have an installer yet.}}&lt;br /&gt;
You will need to enter the path where you installed MinGW. It's a good idea to install MinGW and MSYS next to each other, i.e. C:\SOMEDIR\MinGW and C:\SOMEDIR\MSYS.&lt;br /&gt;
: {{Note|For example if MinGW is installed in C:\MinGW enter 'C:/MinGW.' including the period.}}&lt;br /&gt;
&lt;br /&gt;
3. Download msysDTK-1.0.1.exe from http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=67879&amp;amp;release_id=131044, which contains the autotools. Install into the same directory into which you installed MSYS itself. The installer might not automatically suggest the right directory.&lt;br /&gt;
&lt;br /&gt;
That should give you an Icon in your Start menu in MinGW-&amp;gt;MSYS with the name of msys. Open that one, and you will find yourself in a bourne compatible shell on your native Windows system.&lt;br /&gt;
&lt;br /&gt;
You can try to execute some commends such as gcc, make, etc. to make sure you installed everything correctly.&lt;br /&gt;
&lt;br /&gt;
4. Download autoconf 2.59 from http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=67879&amp;amp;release_id=131044.  All you need to do to install it is to use a utility like [http://www.7-zip.org/ 7-Zip] to extract the files into your msys installation directory.&lt;br /&gt;
&lt;br /&gt;
5. You will also need pkg-config.  According to [http://www.mingw.org/MinGWiki/index.php/pkg-config http://www.mingw.org/MinGWiki/index.php/pkg-config], you need the following packages:&lt;br /&gt;
&lt;br /&gt;
  glib&lt;br /&gt;
  glib-dev&lt;br /&gt;
  libiconv&lt;br /&gt;
  gettext&lt;br /&gt;
  pkg-config&lt;br /&gt;
&lt;br /&gt;
You can get all of these from the GTK+ for Windows page at: [http://www.gtk.org/download-windows.html http://www.gtk.org/download-windows.html].  Unzip them to your msys\1.0 directory.&lt;br /&gt;
&lt;br /&gt;
6. Open the file /etc/profile (C:\msys\1.0\etc\profile) with your favorite editor (make sure it uses LF line endings) and add:&lt;br /&gt;
&lt;br /&gt;
  PKG_CONFIG_PATH=&amp;quot; /c/msys/1.0/lib/pkgconfig&amp;quot;&lt;br /&gt;
&lt;br /&gt;
ensuring that the path is accessible from the MSYS shell and points to the pkgconfig files.&lt;br /&gt;
&lt;br /&gt;
7. Download libusb-win32-device-bin-0.1.12.1.tar.gz from http://sourceforge.net/project/showfiles.php?group_id=78138&amp;amp;package_id=79216&amp;amp;release_id=495011. Then, copy the libusb.a file from the LibUSB-Win32\lib\gcc directory into the MinGW\lib directory and the usb.h file from LibUSB-Win32\include into MinGW\include (or you can copy it into your dfu-util\src directory).&lt;br /&gt;
&lt;br /&gt;
8. Then you will need to create a libusb.pc file in the msys\1.0\lib\pkgconfig directory.  I created the following:&lt;br /&gt;
&lt;br /&gt;
  prefix=c:/msys/1.0&lt;br /&gt;
  exec_prefix=${prefix}&lt;br /&gt;
  libdir=${exec_prefix}/lib&lt;br /&gt;
  includedir=${prefix}/include&lt;br /&gt;
  Name: LibUSB&lt;br /&gt;
  Description: USB for Win32&lt;br /&gt;
  Requires: &lt;br /&gt;
  Version: 0.1.12.1&lt;br /&gt;
  Libs: -L${libdir} -lusb&lt;br /&gt;
  Cflags: -I${includedir}&lt;br /&gt;
&lt;br /&gt;
=== Getting dfu-util sources ===&lt;br /&gt;
&lt;br /&gt;
Use your favorite Subversion client to check out the dfu-util sources.  The dfu-util sources can be checked out from [https://svn.openmoko.org/trunk/src/host/dfu-util/ https://svn.openmoko.org/trunk/src/host/dfu-util/].&lt;br /&gt;
&lt;br /&gt;
=== Apply patch to compile with MinGW ===&lt;br /&gt;
&lt;br /&gt;
Apply the following patch to the source code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Index: main.c&lt;br /&gt;
===================================================================&lt;br /&gt;
--- main.c	(revision 4553)&lt;br /&gt;
+++ main.c	(working copy)&lt;br /&gt;
@@ -26,8 +26,10 @@&lt;br /&gt;
 #include &amp;lt;getopt.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;usb.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;errno.h&amp;gt;&lt;br /&gt;
+#ifndef __MINGW32__&lt;br /&gt;
 #include &amp;lt;byteswap.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;endian.h&amp;gt;&lt;br /&gt;
+#endif&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;dfu.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;usb_dfu.h&amp;quot;&lt;br /&gt;
@@ -37,6 +39,10 @@&lt;br /&gt;
 #include &amp;quot;config.h&amp;quot;&lt;br /&gt;
 #endif&lt;br /&gt;
 &lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+#define sleep(seconds) Sleep((seconds)*1000)&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
 #ifdef HAVE_USBPATH_H&lt;br /&gt;
 #include &amp;lt;usbpath.h&amp;gt;&lt;br /&gt;
 #endif&lt;br /&gt;
@@ -579,6 +585,20 @@&lt;br /&gt;
 &lt;br /&gt;
 		/* FIXME: check if the selected device really has only one */&lt;br /&gt;
 &lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+		int configuration = dif-&amp;gt;configuration;&lt;br /&gt;
+    &lt;br /&gt;
+		if (configuration == 0) {&lt;br /&gt;
+			dif-&amp;gt;configuration = 1;&lt;br /&gt;
+		}&lt;br /&gt;
+		printf(&amp;quot;Setting Configuration %u...\n&amp;quot;, dif-&amp;gt;configuration);&lt;br /&gt;
+		if (usb_set_configuration(dif-&amp;gt;dev_handle, dif-&amp;gt;configuration) &amp;lt; 0) {&lt;br /&gt;
+			fprintf(stderr, &amp;quot;Cannot set configuration: %s\n&amp;quot;, usb_strerror());&lt;br /&gt;
+			exit(1);&lt;br /&gt;
+		}&lt;br /&gt;
+		dif-&amp;gt;configuration = configuration;&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
 		printf(&amp;quot;Claiming USB DFU Runtime Interface...\n&amp;quot;);&lt;br /&gt;
 		if (usb_claim_interface(_rt_dif.dev_handle, _rt_dif.interface) &amp;lt; 0) {&lt;br /&gt;
 			fprintf(stderr, &amp;quot;Cannot claim interface: %s\n&amp;quot;, usb_strerror());&lt;br /&gt;
@@ -700,12 +720,18 @@&lt;br /&gt;
 		exit(1);&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
-#if 0&lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+	int configuration = dif-&amp;gt;configuration;&lt;br /&gt;
+  &lt;br /&gt;
+	if (configuration == 0) {&lt;br /&gt;
+		dif-&amp;gt;configuration = 1;&lt;br /&gt;
+	}&lt;br /&gt;
 	printf(&amp;quot;Setting Configuration %u...\n&amp;quot;, dif-&amp;gt;configuration);&lt;br /&gt;
 	if (usb_set_configuration(dif-&amp;gt;dev_handle, dif-&amp;gt;configuration) &amp;lt; 0) {&lt;br /&gt;
 		fprintf(stderr, &amp;quot;Cannot set configuration: %s\n&amp;quot;, usb_strerror());&lt;br /&gt;
 		exit(1);&lt;br /&gt;
 	}&lt;br /&gt;
+	dif-&amp;gt;configuration = configuration;&lt;br /&gt;
 #endif&lt;br /&gt;
 	printf(&amp;quot;Claiming USB DFU Interface...\n&amp;quot;);&lt;br /&gt;
 	if (usb_claim_interface(dif-&amp;gt;dev_handle, dif-&amp;gt;interface) &amp;lt; 0) {&lt;br /&gt;
Index: sam7dfu.c&lt;br /&gt;
===================================================================&lt;br /&gt;
--- sam7dfu.c	(revision 4553)&lt;br /&gt;
+++ sam7dfu.c	(working copy)&lt;br /&gt;
@@ -20,6 +20,11 @@&lt;br /&gt;
 #define O_BINARY 0&lt;br /&gt;
 #endif&lt;br /&gt;
 &lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+#define sleep(seconds) Sleep((seconds)*1000)&lt;br /&gt;
+#define usleep(microseconds) Sleep((microseconds)/1000)&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
 int sam7dfu_do_upload(struct usb_dev_handle *usb_handle, int interface, &lt;br /&gt;
 		      int xfer_size, const char *fname)&lt;br /&gt;
 {&lt;br /&gt;
Index: usb_dfu.h&lt;br /&gt;
===================================================================&lt;br /&gt;
--- usb_dfu.h	(revision 4553)&lt;br /&gt;
+++ usb_dfu.h	(working copy)&lt;br /&gt;
@@ -12,6 +12,13 @@&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
+#define u_int8_t uint8_t&lt;br /&gt;
+#define u_int16_t uint16_t&lt;br /&gt;
+#define u_int32_t uint32_t&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
 #define USB_DT_DFU			0x21&lt;br /&gt;
 &lt;br /&gt;
 struct usb_dfu_func_descriptor {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Build dfu-util ===&lt;br /&gt;
&lt;br /&gt;
In the Msys shell inside the dfu-util directory, run the following command:&lt;br /&gt;
&lt;br /&gt;
  ./autogen.sh&lt;br /&gt;
  ./configure&lt;br /&gt;
  make&lt;br /&gt;
&lt;br /&gt;
dfu-util should successfully compile and you should have the .exe files in the src directory. In case you get the following error&lt;br /&gt;
&lt;br /&gt;
  checking for USB... configure: error: *** Required libusb &amp;gt;= 0.1.4 not installed ***&lt;br /&gt;
&lt;br /&gt;
You can try running the following command (if you are sure that libusb is correctly installed):&lt;br /&gt;
&lt;br /&gt;
  ./configure USB_CFLAGS=-Iinclude USB_LIBS=-lusb&lt;br /&gt;
&lt;br /&gt;
=== Preparing to use dfu-util ===&lt;br /&gt;
&lt;br /&gt;
A Windows driver needs to be installed when the device is in U-Boot and connected through the USB.  Windows does not come with a DFU class driver and Jungo seems to be the only one that has created a DFU class driver, but it is non-free.  You can use LibUSB-Win32 as the driver for the device by creating an INF file for it for this device.  Use inf-wizard.exe, which is a part of the LibUSB-Win32 binaries distribution.  Run the wizard, select the following device:&lt;br /&gt;
&lt;br /&gt;
  Vendor ID  Product ID  Description&lt;br /&gt;
  0x1D50      0x5119      USB Device&lt;br /&gt;
&lt;br /&gt;
Insert the Manufacturer name: OpenMoko, or FIC?&lt;br /&gt;
&lt;br /&gt;
Insert device description: Device Firmware Upgrade&lt;br /&gt;
&lt;br /&gt;
Then save the INF file along with the auto generated CAT files.&lt;br /&gt;
&lt;br /&gt;
When you get the New Device Wizard when plugging in the device in U-Boot mode into Windows, select this newly generated INF file.&lt;br /&gt;
&lt;br /&gt;
=== Running dfu-util ===&lt;br /&gt;
&lt;br /&gt;
Once the Windows driver is successfully installed, you can try some commands:&lt;br /&gt;
&lt;br /&gt;
  dfu-util --list&lt;br /&gt;
&lt;br /&gt;
and you should be able to list the device.  Example:&lt;br /&gt;
&lt;br /&gt;
  Found Runtime: [0x1d50:0x5119] devnum=7, cfg=0, intf=2, alt=0, name=&amp;quot;USB Device Firmware Upgrade&amp;quot;  &lt;br /&gt;
&lt;br /&gt;
=== Binary ===&lt;br /&gt;
&lt;br /&gt;
[http://projects.openmoko.org/projects/dfu-util-win32/ http://projects.openmoko.org/projects/dfu-util-win32/]&lt;br /&gt;
&lt;br /&gt;
=== Outstanding issues ===&lt;br /&gt;
&lt;br /&gt;
Had to call usb_set_configuration() with configuration set to 1 before attempting to claim the device instead of using configuration 0 that the device returns.  It sounds like DFU implementation in U-Boot might not be compliant with USB spec.  A similar issue and discussion can be found here: [http://thread.gmane.org/gmane.comp.lib.libusb.devel.windows/1546/focus=1554 http://thread.gmane.org/gmane.comp.lib.libusb.devel.windows/1546/focus=1554]&lt;br /&gt;
&lt;br /&gt;
[[Category:Flashing Openmoko]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Dfu-util-windows</id>
		<title>Dfu-util-windows</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Dfu-util-windows"/>
				<updated>2008-07-29T18:59:42Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: Undo revision 42941 by Dewey (Talk)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== dfu-util for Win32 ==&lt;br /&gt;
&lt;br /&gt;
{{Note|This has only been tested on the developer's box and with the FreeRunner.}}&lt;br /&gt;
&lt;br /&gt;
In order to use dfu-util for Win32, you need to install a Windows driver when the device is in U-Boot.  The LibUSB-Win32 driver and accompanying INF file for the OpenMoko can be found in OpenMokoDFU.zip at the link below.  When the Windows New Device Wizard pops up, use this driver.&lt;br /&gt;
&lt;br /&gt;
Once the driver is installed, then you can proceed and use the instructions found at the main [[dfu-util]] page.  &lt;br /&gt;
&lt;br /&gt;
The above mentioned files can be downloaded at: [http://projects.openmoko.org/projects/dfu-util-win32/ http://projects.openmoko.org/projects/dfu-util-win32/]&lt;br /&gt;
&lt;br /&gt;
The information below is for developers who would like to know how to compile dfu-util for Win32.&lt;br /&gt;
&lt;br /&gt;
== Porting dfu-util to Windows ==&lt;br /&gt;
&lt;br /&gt;
{{Note|This is entirely work in progress. Nevertheless hopefully the information on this page will serve as a starting point for anyone who find the time to take this further. After all, as many people still use Windows PCs as their every day computers, having a convenient way to re-flash a Neo from Windows would probably open up the user base.}}&lt;br /&gt;
&lt;br /&gt;
=== Potential Approaches ===&lt;br /&gt;
&lt;br /&gt;
* Cygwin&lt;br /&gt;
: Not very attactive as Cygwin binaries require Cygwin in order to run. You will not get a simple, native dfu-util.exe which can be downloaded and used on any Windows machine that way.&lt;br /&gt;
&lt;br /&gt;
* MinGW/MSYS&lt;br /&gt;
: MinGW (Minimalist GNU for Windows) seems to be the platform of choice.&lt;br /&gt;
&lt;br /&gt;
* LibUSB-Win32&lt;br /&gt;
: Will only be able to be built on a Windows box&lt;br /&gt;
&lt;br /&gt;
=== MinGW/MSYS port ===&lt;br /&gt;
&lt;br /&gt;
The preferred order of installation is:&lt;br /&gt;
&lt;br /&gt;
# Install MinGW (the core installation should be sufficient)&lt;br /&gt;
# Install MSYS (Note: make comes with MSYS while GCC comes with MinGW)&lt;br /&gt;
&lt;br /&gt;
Here is step-by-step howto:&lt;br /&gt;
&lt;br /&gt;
1. Download MinGW-5.1.4.exe from http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=240780&amp;amp;release_id=529741 and execute the installer. It will download additional files required and install MinGW.&lt;br /&gt;
: {{Note|It has often been a good idea to install into a directory that has no spaces in the filename.}}&lt;br /&gt;
2. Download MSYS-1.0.10.exe from http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=24963 and install.&lt;br /&gt;
: {{Note|Make sure to open the &amp;quot;Current Version: 1.0.10&amp;quot; folder as the newer version 1.0.11 does not have an installer yet.}}&lt;br /&gt;
You will need to enter the path where you installed MinGW. It's a good idea to install MinGW and MSYS next to each other, i.e. C:\SOMEDIR\MinGW and C:\SOMEDIR\MSYS.&lt;br /&gt;
: {{Note|For example if MinGW is installed in C:\MinGW enter 'C:/MinGW.' including the period.}}&lt;br /&gt;
&lt;br /&gt;
3. Download msysDTK-1.0.1.exe from http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=67879&amp;amp;release_id=131044, which contains the autotools. Install into the same directory into which you installed MSYS itself. The installer might not automatically suggest the right directory.&lt;br /&gt;
&lt;br /&gt;
That should give you an Icon in your Start menu in MinGW-&amp;gt;MSYS with the name of msys. Open that one, and you will find yourself in a bourne compatible shell on your native Windows system.&lt;br /&gt;
&lt;br /&gt;
You can try to execute some commends such as gcc, make, etc. to make sure you installed everything correctly.&lt;br /&gt;
&lt;br /&gt;
4. Download autoconf 2.59 from http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=67879&amp;amp;release_id=131044.  All you need to do to install it is to use a utility like [http://www.7-zip.org/ 7-Zip] to extract the files into your msys installation directory.&lt;br /&gt;
&lt;br /&gt;
5. You will also need pkg-config.  According to [http://www.mingw.org/MinGWiki/index.php/pkg-config http://www.mingw.org/MinGWiki/index.php/pkg-config], you need the following packages:&lt;br /&gt;
&lt;br /&gt;
  glib&lt;br /&gt;
  glib-dev&lt;br /&gt;
  libiconv&lt;br /&gt;
  gettext&lt;br /&gt;
  pkg-config&lt;br /&gt;
&lt;br /&gt;
You can get all of these from the GTK+ for Windows page at: [http://www.gtk.org/download-windows.html http://www.gtk.org/download-windows.html].  Unzip them to your msys\1.0 directory.&lt;br /&gt;
&lt;br /&gt;
6. Open the file /etc/profile (C:\msys\1.0\etc\profile) with your favorite editor (make sure it uses LF line endings) and add:&lt;br /&gt;
&lt;br /&gt;
  PKG_CONFIG_PATH=&amp;quot;/msys/1.0/lib/pkgconfig&amp;quot;&lt;br /&gt;
&lt;br /&gt;
7. Download libusb-win32-device-bin-0.1.12.1.tar.gz from http://sourceforge.net/project/showfiles.php?group_id=78138&amp;amp;package_id=79216&amp;amp;release_id=495011. Then, copy the libusb.a file from the LibUSB-Win32\lib\gcc directory into the MinGW\lib directory and the usb.h file from LibUSB-Win32\include into MinGW\include (or you can copy it into your dfu-util\src directory).&lt;br /&gt;
&lt;br /&gt;
8. Then you will need to create a libusb.pc file in the msys\1.0\lib\pkgconfig directory.  I created the following:&lt;br /&gt;
&lt;br /&gt;
  prefix=c:/msys/1.0&lt;br /&gt;
  exec_prefix=${prefix}&lt;br /&gt;
  libdir=${exec_prefix}/lib&lt;br /&gt;
  includedir=${prefix}/include&lt;br /&gt;
  Name: LibUSB&lt;br /&gt;
  Description: USB for Win32&lt;br /&gt;
  Requires: &lt;br /&gt;
  Version: 0.1.12.1&lt;br /&gt;
  Libs: -L${libdir} -lusb&lt;br /&gt;
  Cflags: -I${includedir}&lt;br /&gt;
&lt;br /&gt;
=== Getting dfu-util sources ===&lt;br /&gt;
&lt;br /&gt;
Use your favorite Subversion client to check out the dfu-util sources.  The dfu-util sources can be checked out from [https://svn.openmoko.org/trunk/src/host/dfu-util/ https://svn.openmoko.org/trunk/src/host/dfu-util/].&lt;br /&gt;
&lt;br /&gt;
=== Apply patch to compile with MinGW ===&lt;br /&gt;
&lt;br /&gt;
Apply the following patch to the source code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Index: main.c&lt;br /&gt;
===================================================================&lt;br /&gt;
--- main.c	(revision 4553)&lt;br /&gt;
+++ main.c	(working copy)&lt;br /&gt;
@@ -26,8 +26,10 @@&lt;br /&gt;
 #include &amp;lt;getopt.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;usb.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;errno.h&amp;gt;&lt;br /&gt;
+#ifndef __MINGW32__&lt;br /&gt;
 #include &amp;lt;byteswap.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;endian.h&amp;gt;&lt;br /&gt;
+#endif&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;dfu.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;usb_dfu.h&amp;quot;&lt;br /&gt;
@@ -37,6 +39,10 @@&lt;br /&gt;
 #include &amp;quot;config.h&amp;quot;&lt;br /&gt;
 #endif&lt;br /&gt;
 &lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+#define sleep(seconds) Sleep((seconds)*1000)&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
 #ifdef HAVE_USBPATH_H&lt;br /&gt;
 #include &amp;lt;usbpath.h&amp;gt;&lt;br /&gt;
 #endif&lt;br /&gt;
@@ -579,6 +585,20 @@&lt;br /&gt;
 &lt;br /&gt;
 		/* FIXME: check if the selected device really has only one */&lt;br /&gt;
 &lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+		int configuration = dif-&amp;gt;configuration;&lt;br /&gt;
+    &lt;br /&gt;
+		if (configuration == 0) {&lt;br /&gt;
+			dif-&amp;gt;configuration = 1;&lt;br /&gt;
+		}&lt;br /&gt;
+		printf(&amp;quot;Setting Configuration %u...\n&amp;quot;, dif-&amp;gt;configuration);&lt;br /&gt;
+		if (usb_set_configuration(dif-&amp;gt;dev_handle, dif-&amp;gt;configuration) &amp;lt; 0) {&lt;br /&gt;
+			fprintf(stderr, &amp;quot;Cannot set configuration: %s\n&amp;quot;, usb_strerror());&lt;br /&gt;
+			exit(1);&lt;br /&gt;
+		}&lt;br /&gt;
+		dif-&amp;gt;configuration = configuration;&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
 		printf(&amp;quot;Claiming USB DFU Runtime Interface...\n&amp;quot;);&lt;br /&gt;
 		if (usb_claim_interface(_rt_dif.dev_handle, _rt_dif.interface) &amp;lt; 0) {&lt;br /&gt;
 			fprintf(stderr, &amp;quot;Cannot claim interface: %s\n&amp;quot;, usb_strerror());&lt;br /&gt;
@@ -700,12 +720,18 @@&lt;br /&gt;
 		exit(1);&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
-#if 0&lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+	int configuration = dif-&amp;gt;configuration;&lt;br /&gt;
+  &lt;br /&gt;
+	if (configuration == 0) {&lt;br /&gt;
+		dif-&amp;gt;configuration = 1;&lt;br /&gt;
+	}&lt;br /&gt;
 	printf(&amp;quot;Setting Configuration %u...\n&amp;quot;, dif-&amp;gt;configuration);&lt;br /&gt;
 	if (usb_set_configuration(dif-&amp;gt;dev_handle, dif-&amp;gt;configuration) &amp;lt; 0) {&lt;br /&gt;
 		fprintf(stderr, &amp;quot;Cannot set configuration: %s\n&amp;quot;, usb_strerror());&lt;br /&gt;
 		exit(1);&lt;br /&gt;
 	}&lt;br /&gt;
+	dif-&amp;gt;configuration = configuration;&lt;br /&gt;
 #endif&lt;br /&gt;
 	printf(&amp;quot;Claiming USB DFU Interface...\n&amp;quot;);&lt;br /&gt;
 	if (usb_claim_interface(dif-&amp;gt;dev_handle, dif-&amp;gt;interface) &amp;lt; 0) {&lt;br /&gt;
Index: sam7dfu.c&lt;br /&gt;
===================================================================&lt;br /&gt;
--- sam7dfu.c	(revision 4553)&lt;br /&gt;
+++ sam7dfu.c	(working copy)&lt;br /&gt;
@@ -20,6 +20,11 @@&lt;br /&gt;
 #define O_BINARY 0&lt;br /&gt;
 #endif&lt;br /&gt;
 &lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+#define sleep(seconds) Sleep((seconds)*1000)&lt;br /&gt;
+#define usleep(microseconds) Sleep((microseconds)/1000)&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
 int sam7dfu_do_upload(struct usb_dev_handle *usb_handle, int interface, &lt;br /&gt;
 		      int xfer_size, const char *fname)&lt;br /&gt;
 {&lt;br /&gt;
Index: usb_dfu.h&lt;br /&gt;
===================================================================&lt;br /&gt;
--- usb_dfu.h	(revision 4553)&lt;br /&gt;
+++ usb_dfu.h	(working copy)&lt;br /&gt;
@@ -12,6 +12,13 @@&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
+#define u_int8_t uint8_t&lt;br /&gt;
+#define u_int16_t uint16_t&lt;br /&gt;
+#define u_int32_t uint32_t&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
 #define USB_DT_DFU			0x21&lt;br /&gt;
 &lt;br /&gt;
 struct usb_dfu_func_descriptor {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Build dfu-util ===&lt;br /&gt;
&lt;br /&gt;
In the Msys shell inside the dfu-util directory, run the following command:&lt;br /&gt;
&lt;br /&gt;
  ./autogen.sh&lt;br /&gt;
  ./configure&lt;br /&gt;
  make&lt;br /&gt;
&lt;br /&gt;
dfu-util should successfully compile and you should have the .exe files in the src directory. In case you get the following error&lt;br /&gt;
&lt;br /&gt;
  checking for USB... configure: error: *** Required libusb &amp;gt;= 0.1.4 not installed ***&lt;br /&gt;
&lt;br /&gt;
You can try running the following command (if you are sure that libusb is correctly installed):&lt;br /&gt;
&lt;br /&gt;
  ./configure USB_CFLAGS=-Iinclude USB_LIBS=-lusb&lt;br /&gt;
&lt;br /&gt;
=== Preparing to use dfu-util ===&lt;br /&gt;
&lt;br /&gt;
A Windows driver needs to be installed when the device is in U-Boot and connected through the USB.  Windows does not come with a DFU class driver and Jungo seems to be the only one that has created a DFU class driver, but it is non-free.  You can use LibUSB-Win32 as the driver for the device by creating an INF file for it for this device.  Use inf-wizard.exe, which is a part of the LibUSB-Win32 binaries distribution.  Run the wizard, select the following device:&lt;br /&gt;
&lt;br /&gt;
  Vendor ID  Product ID  Description&lt;br /&gt;
  0x1D50      0x5119      USB Device&lt;br /&gt;
&lt;br /&gt;
Insert the Manufacturer name: OpenMoko, or FIC?&lt;br /&gt;
&lt;br /&gt;
Insert device description: Device Firmware Upgrade&lt;br /&gt;
&lt;br /&gt;
Then save the INF file along with the auto generated CAT files.&lt;br /&gt;
&lt;br /&gt;
When you get the New Device Wizard when plugging in the device in U-Boot mode into Windows, select this newly generated INF file.&lt;br /&gt;
&lt;br /&gt;
=== Running dfu-util ===&lt;br /&gt;
&lt;br /&gt;
Once the Windows driver is successfully installed, you can try some commands:&lt;br /&gt;
&lt;br /&gt;
  dfu-util --list&lt;br /&gt;
&lt;br /&gt;
and you should be able to list the device.  Example:&lt;br /&gt;
&lt;br /&gt;
  Found Runtime: [0x1d50:0x5119] devnum=7, cfg=0, intf=2, alt=0, name=&amp;quot;USB Device Firmware Upgrade&amp;quot;  &lt;br /&gt;
&lt;br /&gt;
=== Binary ===&lt;br /&gt;
&lt;br /&gt;
[http://projects.openmoko.org/projects/dfu-util-win32/ http://projects.openmoko.org/projects/dfu-util-win32/]&lt;br /&gt;
&lt;br /&gt;
=== Outstanding issues ===&lt;br /&gt;
&lt;br /&gt;
Had to call usb_set_configuration() with configuration set to 1 before attempting to claim the device instead of using configuration 0 that the device returns.  It sounds like DFU implementation in U-Boot might not be compliant with USB spec.  A similar issue and discussion can be found here: [http://thread.gmane.org/gmane.comp.lib.libusb.devel.windows/1546/focus=1554 http://thread.gmane.org/gmane.comp.lib.libusb.devel.windows/1546/focus=1554]&lt;br /&gt;
&lt;br /&gt;
[[Category:Flashing Openmoko]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Dfu-util-windows</id>
		<title>Dfu-util-windows</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Dfu-util-windows"/>
				<updated>2008-07-29T18:43:20Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: /* Build dfu-util */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== dfu-util for Win32 ==&lt;br /&gt;
&lt;br /&gt;
{{Note|This has only been tested on the developer's box and with the FreeRunner.}}&lt;br /&gt;
&lt;br /&gt;
In order to use dfu-util for Win32, you need to install a Windows driver when the device is in U-Boot.  The LibUSB-Win32 driver and accompanying INF file for the OpenMoko can be found in OpenMokoDFU.zip at the link below.  When the Windows New Device Wizard pops up, use this driver.&lt;br /&gt;
&lt;br /&gt;
Once the driver is installed, then you can proceed and use the instructions found at the main [[dfu-util]] page.  &lt;br /&gt;
&lt;br /&gt;
The above mentioned files can be downloaded at: [http://projects.openmoko.org/projects/dfu-util-win32/ http://projects.openmoko.org/projects/dfu-util-win32/]&lt;br /&gt;
&lt;br /&gt;
The information below is for developers who would like to know how to compile dfu-util for Win32.&lt;br /&gt;
&lt;br /&gt;
== Porting dfu-util to Windows ==&lt;br /&gt;
&lt;br /&gt;
{{Note|This is entirely work in progress. Nevertheless hopefully the information on this page will serve as a starting point for anyone who find the time to take this further. After all, as many people still use Windows PCs as their every day computers, having a convenient way to re-flash a Neo from Windows would probably open up the user base.}}&lt;br /&gt;
&lt;br /&gt;
=== Potential Approaches ===&lt;br /&gt;
&lt;br /&gt;
* Cygwin&lt;br /&gt;
: Not very attactive as Cygwin binaries require Cygwin in order to run. You will not get a simple, native dfu-util.exe which can be downloaded and used on any Windows machine that way.&lt;br /&gt;
&lt;br /&gt;
* MinGW/MSYS&lt;br /&gt;
: MinGW (Minimalist GNU for Windows) seems to be the platform of choice.&lt;br /&gt;
&lt;br /&gt;
* LibUSB-Win32&lt;br /&gt;
: Will only be able to be built on a Windows box&lt;br /&gt;
&lt;br /&gt;
=== MinGW/MSYS port ===&lt;br /&gt;
&lt;br /&gt;
The preferred order of installation is:&lt;br /&gt;
&lt;br /&gt;
# Install MinGW (the core installation should be sufficient)&lt;br /&gt;
# Install MSYS (Note: make comes with MSYS while GCC comes with MinGW)&lt;br /&gt;
&lt;br /&gt;
Here is step-by-step howto:&lt;br /&gt;
&lt;br /&gt;
1. Download MinGW-5.1.4.exe from http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=240780&amp;amp;release_id=529741 and execute the installer. It will download additional files required and install MinGW.&lt;br /&gt;
: {{Note|It has often been a good idea to install into a directory that has no spaces in the filename.}}&lt;br /&gt;
2. Download MSYS-1.0.10.exe from http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=24963 and install.&lt;br /&gt;
: {{Note|Make sure to open the &amp;quot;Current Version: 1.0.10&amp;quot; folder as the newer version 1.0.11 does not have an installer yet.}}&lt;br /&gt;
You will need to enter the path where you installed MinGW. It's a good idea to install MinGW and MSYS next to each other, i.e. C:\SOMEDIR\MinGW and C:\SOMEDIR\MSYS.&lt;br /&gt;
: {{Note|For example if MinGW is installed in C:\MinGW enter 'C:/MinGW.' including the period.}}&lt;br /&gt;
&lt;br /&gt;
3. Download msysDTK-1.0.1.exe from http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=67879&amp;amp;release_id=131044, which contains the autotools. Install into the same directory into which you installed MSYS itself. The installer might not automatically suggest the right directory.&lt;br /&gt;
&lt;br /&gt;
That should give you an Icon in your Start menu in MinGW-&amp;gt;MSYS with the name of msys. Open that one, and you will find yourself in a bourne compatible shell on your native Windows system.&lt;br /&gt;
&lt;br /&gt;
You can try to execute some commends such as gcc, make, etc. to make sure you installed everything correctly.&lt;br /&gt;
&lt;br /&gt;
4. Download autoconf 2.59 from http://sourceforge.net/project/showfiles.php?group_id=2435&amp;amp;package_id=67879&amp;amp;release_id=131044.  All you need to do to install it is to use a utility like [http://www.7-zip.org/ 7-Zip] to extract the files into your msys installation directory.&lt;br /&gt;
&lt;br /&gt;
5. You will also need pkg-config.  According to [http://www.mingw.org/MinGWiki/index.php/pkg-config http://www.mingw.org/MinGWiki/index.php/pkg-config], you need the following packages:&lt;br /&gt;
&lt;br /&gt;
  glib&lt;br /&gt;
  glib-dev&lt;br /&gt;
  libiconv&lt;br /&gt;
  gettext&lt;br /&gt;
  pkg-config&lt;br /&gt;
&lt;br /&gt;
You can get all of these from the GTK+ for Windows page at: [http://www.gtk.org/download-windows.html http://www.gtk.org/download-windows.html].  Unzip them to your msys\1.0 directory.&lt;br /&gt;
&lt;br /&gt;
6. Open the file /etc/profile (C:\msys\1.0\etc\profile) with your favorite editor (make sure it uses LF line endings) and add:&lt;br /&gt;
&lt;br /&gt;
  PKG_CONFIG_PATH=&amp;quot;/msys/1.0/lib/pkgconfig&amp;quot;&lt;br /&gt;
&lt;br /&gt;
7. Download libusb-win32-device-bin-0.1.12.1.tar.gz from http://sourceforge.net/project/showfiles.php?group_id=78138&amp;amp;package_id=79216&amp;amp;release_id=495011. Then, copy the libusb.a file from the LibUSB-Win32\lib\gcc directory into the MinGW\lib directory and the usb.h file from LibUSB-Win32\include into MinGW\include (or you can copy it into your dfu-util\src directory).&lt;br /&gt;
&lt;br /&gt;
8. Then you will need to create a libusb.pc file in the msys\1.0\lib\pkgconfig directory.  I created the following:&lt;br /&gt;
&lt;br /&gt;
  prefix=c:/msys/1.0&lt;br /&gt;
  exec_prefix=${prefix}&lt;br /&gt;
  libdir=${exec_prefix}/lib&lt;br /&gt;
  includedir=${prefix}/include&lt;br /&gt;
  Name: LibUSB&lt;br /&gt;
  Description: USB for Win32&lt;br /&gt;
  Requires: &lt;br /&gt;
  Version: 0.1.12.1&lt;br /&gt;
  Libs: -L${libdir} -lusb&lt;br /&gt;
  Cflags: -I${includedir}&lt;br /&gt;
&lt;br /&gt;
=== Getting dfu-util sources ===&lt;br /&gt;
&lt;br /&gt;
Use your favorite Subversion client to check out the dfu-util sources.  The dfu-util sources can be checked out from [https://svn.openmoko.org/trunk/src/host/dfu-util/ https://svn.openmoko.org/trunk/src/host/dfu-util/].&lt;br /&gt;
&lt;br /&gt;
=== Apply patch to compile with MinGW ===&lt;br /&gt;
&lt;br /&gt;
Apply the following patch to the source code:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Index: main.c&lt;br /&gt;
===================================================================&lt;br /&gt;
--- main.c	(revision 4553)&lt;br /&gt;
+++ main.c	(working copy)&lt;br /&gt;
@@ -26,8 +26,10 @@&lt;br /&gt;
 #include &amp;lt;getopt.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;usb.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;errno.h&amp;gt;&lt;br /&gt;
+#ifndef __MINGW32__&lt;br /&gt;
 #include &amp;lt;byteswap.h&amp;gt;&lt;br /&gt;
 #include &amp;lt;endian.h&amp;gt;&lt;br /&gt;
+#endif&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;quot;dfu.h&amp;quot;&lt;br /&gt;
 #include &amp;quot;usb_dfu.h&amp;quot;&lt;br /&gt;
@@ -37,6 +39,10 @@&lt;br /&gt;
 #include &amp;quot;config.h&amp;quot;&lt;br /&gt;
 #endif&lt;br /&gt;
 &lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+#define sleep(seconds) Sleep((seconds)*1000)&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
 #ifdef HAVE_USBPATH_H&lt;br /&gt;
 #include &amp;lt;usbpath.h&amp;gt;&lt;br /&gt;
 #endif&lt;br /&gt;
@@ -579,6 +585,20 @@&lt;br /&gt;
 &lt;br /&gt;
 		/* FIXME: check if the selected device really has only one */&lt;br /&gt;
 &lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+		int configuration = dif-&amp;gt;configuration;&lt;br /&gt;
+    &lt;br /&gt;
+		if (configuration == 0) {&lt;br /&gt;
+			dif-&amp;gt;configuration = 1;&lt;br /&gt;
+		}&lt;br /&gt;
+		printf(&amp;quot;Setting Configuration %u...\n&amp;quot;, dif-&amp;gt;configuration);&lt;br /&gt;
+		if (usb_set_configuration(dif-&amp;gt;dev_handle, dif-&amp;gt;configuration) &amp;lt; 0) {&lt;br /&gt;
+			fprintf(stderr, &amp;quot;Cannot set configuration: %s\n&amp;quot;, usb_strerror());&lt;br /&gt;
+			exit(1);&lt;br /&gt;
+		}&lt;br /&gt;
+		dif-&amp;gt;configuration = configuration;&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
 		printf(&amp;quot;Claiming USB DFU Runtime Interface...\n&amp;quot;);&lt;br /&gt;
 		if (usb_claim_interface(_rt_dif.dev_handle, _rt_dif.interface) &amp;lt; 0) {&lt;br /&gt;
 			fprintf(stderr, &amp;quot;Cannot claim interface: %s\n&amp;quot;, usb_strerror());&lt;br /&gt;
@@ -700,12 +720,18 @@&lt;br /&gt;
 		exit(1);&lt;br /&gt;
 	}&lt;br /&gt;
 &lt;br /&gt;
-#if 0&lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+	int configuration = dif-&amp;gt;configuration;&lt;br /&gt;
+  &lt;br /&gt;
+	if (configuration == 0) {&lt;br /&gt;
+		dif-&amp;gt;configuration = 1;&lt;br /&gt;
+	}&lt;br /&gt;
 	printf(&amp;quot;Setting Configuration %u...\n&amp;quot;, dif-&amp;gt;configuration);&lt;br /&gt;
 	if (usb_set_configuration(dif-&amp;gt;dev_handle, dif-&amp;gt;configuration) &amp;lt; 0) {&lt;br /&gt;
 		fprintf(stderr, &amp;quot;Cannot set configuration: %s\n&amp;quot;, usb_strerror());&lt;br /&gt;
 		exit(1);&lt;br /&gt;
 	}&lt;br /&gt;
+	dif-&amp;gt;configuration = configuration;&lt;br /&gt;
 #endif&lt;br /&gt;
 	printf(&amp;quot;Claiming USB DFU Interface...\n&amp;quot;);&lt;br /&gt;
 	if (usb_claim_interface(dif-&amp;gt;dev_handle, dif-&amp;gt;interface) &amp;lt; 0) {&lt;br /&gt;
Index: sam7dfu.c&lt;br /&gt;
===================================================================&lt;br /&gt;
--- sam7dfu.c	(revision 4553)&lt;br /&gt;
+++ sam7dfu.c	(working copy)&lt;br /&gt;
@@ -20,6 +20,11 @@&lt;br /&gt;
 #define O_BINARY 0&lt;br /&gt;
 #endif&lt;br /&gt;
 &lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+#define sleep(seconds) Sleep((seconds)*1000)&lt;br /&gt;
+#define usleep(microseconds) Sleep((microseconds)/1000)&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
 int sam7dfu_do_upload(struct usb_dev_handle *usb_handle, int interface, &lt;br /&gt;
 		      int xfer_size, const char *fname)&lt;br /&gt;
 {&lt;br /&gt;
Index: usb_dfu.h&lt;br /&gt;
===================================================================&lt;br /&gt;
--- usb_dfu.h	(revision 4553)&lt;br /&gt;
+++ usb_dfu.h	(working copy)&lt;br /&gt;
@@ -12,6 +12,13 @@&lt;br /&gt;
 &lt;br /&gt;
 #include &amp;lt;sys/types.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
+#ifdef __MINGW32__&lt;br /&gt;
+#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
+#define u_int8_t uint8_t&lt;br /&gt;
+#define u_int16_t uint16_t&lt;br /&gt;
+#define u_int32_t uint32_t&lt;br /&gt;
+#endif&lt;br /&gt;
+&lt;br /&gt;
 #define USB_DT_DFU			0x21&lt;br /&gt;
 &lt;br /&gt;
 struct usb_dfu_func_descriptor {&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Build dfu-util ===&lt;br /&gt;
&lt;br /&gt;
In the Msys shell inside the dfu-util directory, run the following command:&lt;br /&gt;
&lt;br /&gt;
  ./autogen.sh&lt;br /&gt;
  ./configure&lt;br /&gt;
  make&lt;br /&gt;
&lt;br /&gt;
dfu-util should successfully compile and you should have the .exe files in the src directory. In case you get the following error&lt;br /&gt;
&lt;br /&gt;
  checking for USB... configure: error: *** Required libusb &amp;gt;= 0.1.4 not installed ***&lt;br /&gt;
&lt;br /&gt;
It means that it could not find the libusb.pc file mentioned earlier.  Your PKG_CONFIG_PATH may not be set up properly.  Try the following:&lt;br /&gt;
&lt;br /&gt;
Open the file /etc/profile (C:\msys\1.0\etc\profile) with your favorite editor (make sure it uses LF line endings) and add:&lt;br /&gt;
&lt;br /&gt;
  PKG_CONFIG_PATH=&amp;quot;/c/msys/lib/pkgconfig&amp;quot;&lt;br /&gt;
&lt;br /&gt;
as described here: http://www.mingw.org/node/18 (modify the path to point to your pkgconfig directory of course), and restart your MSYS shell.&lt;br /&gt;
&lt;br /&gt;
If that doesn't work, you can try running the following command (if you are sure that libusb is correctly installed):&lt;br /&gt;
&lt;br /&gt;
  ./configure USB_CFLAGS=-Iinclude USB_LIBS=-lusb&lt;br /&gt;
&lt;br /&gt;
=== Preparing to use dfu-util ===&lt;br /&gt;
&lt;br /&gt;
A Windows driver needs to be installed when the device is in U-Boot and connected through the USB.  Windows does not come with a DFU class driver and Jungo seems to be the only one that has created a DFU class driver, but it is non-free.  You can use LibUSB-Win32 as the driver for the device by creating an INF file for it for this device.  Use inf-wizard.exe, which is a part of the LibUSB-Win32 binaries distribution.  Run the wizard, select the following device:&lt;br /&gt;
&lt;br /&gt;
  Vendor ID  Product ID  Description&lt;br /&gt;
  0x1D50      0x5119      USB Device&lt;br /&gt;
&lt;br /&gt;
Insert the Manufacturer name: OpenMoko, or FIC?&lt;br /&gt;
&lt;br /&gt;
Insert device description: Device Firmware Upgrade&lt;br /&gt;
&lt;br /&gt;
Then save the INF file along with the auto generated CAT files.&lt;br /&gt;
&lt;br /&gt;
When you get the New Device Wizard when plugging in the device in U-Boot mode into Windows, select this newly generated INF file.&lt;br /&gt;
&lt;br /&gt;
=== Running dfu-util ===&lt;br /&gt;
&lt;br /&gt;
Once the Windows driver is successfully installed, you can try some commands:&lt;br /&gt;
&lt;br /&gt;
  dfu-util --list&lt;br /&gt;
&lt;br /&gt;
and you should be able to list the device.  Example:&lt;br /&gt;
&lt;br /&gt;
  Found Runtime: [0x1d50:0x5119] devnum=7, cfg=0, intf=2, alt=0, name=&amp;quot;USB Device Firmware Upgrade&amp;quot;  &lt;br /&gt;
&lt;br /&gt;
=== Binary ===&lt;br /&gt;
&lt;br /&gt;
[http://projects.openmoko.org/projects/dfu-util-win32/ http://projects.openmoko.org/projects/dfu-util-win32/]&lt;br /&gt;
&lt;br /&gt;
=== Outstanding issues ===&lt;br /&gt;
&lt;br /&gt;
Had to call usb_set_configuration() with configuration set to 1 before attempting to claim the device instead of using configuration 0 that the device returns.  It sounds like DFU implementation in U-Boot might not be compliant with USB spec.  A similar issue and discussion can be found here: [http://thread.gmane.org/gmane.comp.lib.libusb.devel.windows/1546/focus=1554 http://thread.gmane.org/gmane.comp.lib.libusb.devel.windows/1546/focus=1554]&lt;br /&gt;
&lt;br /&gt;
[[Category:Flashing Openmoko]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Flashing_the_Neo_FreeRunner</id>
		<title>Flashing the Neo FreeRunner</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Flashing_the_Neo_FreeRunner"/>
				<updated>2008-07-25T22:53:13Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: /* Windows */  replaced https link with http link.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As Openmoko development continues, Openmoko regularly releases updated versions of the Openmoko root filesystem, the kernel, and the[[Bootloader| U-Boot]]. These may be programmed into the Flash memory of Neo FreeRunner. You can use the USB cable and Openmoko provided tool to flash Neo FreeRunner.&lt;br /&gt;
&lt;br /&gt;
{{note|The Openmoko software team builds images daily. If you want to use the latest images, you can download the image from the daily build, but we recommend you download the most stable image from http://downloads.openmoko.org/releases/Freerunner/. Images here have been tested by the test team.&lt;br /&gt;
&lt;br /&gt;
See [[Latest Images]] for more information about the different images available.}}&lt;br /&gt;
{{note|If you have a working image that you're happy with but want to try something different, you should probably do a [[Pre-Flash Backup]], although it looks like the method on that page may not entirely work.}}&lt;br /&gt;
&lt;br /&gt;
===Step 1. Download the DFU-util===&lt;br /&gt;
&lt;br /&gt;
==== GNU/Linux ====&lt;br /&gt;
&lt;br /&gt;
You can download the flashing tool for a GNU/Linux host from: &lt;br /&gt;
http://downloads.openmoko.org/releases/Freerunner/dfu-util&lt;br /&gt;
&lt;br /&gt;
On the GNU/Linux host you can use the following command to download the dfu-util:&lt;br /&gt;
 wget http://downloads.openmoko.org/releases/Freerunner/dfu-util&lt;br /&gt;
&lt;br /&gt;
Afterwards you have to change the rights on the file:&lt;br /&gt;
 chmod a+x dfu-util&lt;br /&gt;
&lt;br /&gt;
==== Windows ====&lt;br /&gt;
&lt;br /&gt;
You can download the flashing tool for a Windows host from: [http://projects.openmoko.org/frs/?group_id=166&amp;amp;release_id=162 http://projects.openmoko.org/frs/?group_id=166&amp;amp;release_id=162] (see installation instructions at [[Dfu-util-windows]])&lt;br /&gt;
&lt;br /&gt;
===Step 2. Flashing the Kernel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; cellspacing=&amp;quot;2&amp;quot; cellpadding=&amp;quot;2&amp;quot; style=&amp;quot;padding: 0%; margin:0em 0em 1em 0em; border:0px solid #ffffff; background:#ffffff; width:100%;floating=&amp;quot;center&amp;quot;;font-weight: normal; &amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#ffffff;border-left:1px solid #ffffff;border-right:1px ; border-top:2px solid #ffffff; border:1px solid #ffffff; width:75%;font-weight: normal; &amp;quot; |  &lt;br /&gt;
&amp;lt;div align=&amp;quot;left&amp;quot;&amp;gt;&lt;br /&gt;
[[Image:menu15.jpg|thumb|Log into U-Boot in NOR Flash, connect your Neo with Linux Host via USB cable]]&lt;br /&gt;
&lt;br /&gt;
The Neo FreeRunner needs to be at the NOR uBoot menu for flashing. For more information on booting, see [[Booting the Neo FreeRunner| booting the Neo Freerunner]]. Log into the NOR uBoot menu and select Set console to USB. ''/Just stay in NOR uBoot menu to be able to connect via dfu-util. If selected and entered &amp;quot;Set console to USB&amp;quot;, then dfu-util was unable to connect./'' Now you will be able to flash, make backups of your Freerunner or query the Freerunner with dfu-util.&lt;br /&gt;
&lt;br /&gt;
'''Then''', connect your Neo to the GNU/Linux or Windows host via USB cable.&lt;br /&gt;
&lt;br /&gt;
You can download the kernel from &lt;br /&gt;
http://downloads.openmoko.org/releases/Freerunner/&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==== GNU/Linux ====&lt;br /&gt;
&lt;br /&gt;
Type in the following command in the terminal on a GNU/Linux host. On some systems you need to be root before this will work and on Ubuntu you must preface the command with &amp;quot;sudo&amp;quot; or you will get the following error: &amp;quot;Cannot claim interface: could not claim interface 2: Operation not permitted&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 ./dfu-util -a (partion name) -R -D (download image file name)&lt;br /&gt;
&lt;br /&gt;
or:&lt;br /&gt;
&lt;br /&gt;
 sudo ./dfu-util -a kernel -R -D uImage-2.6.24+git20080424-om-gta02.bin&lt;br /&gt;
&lt;br /&gt;
==== Windows ====&lt;br /&gt;
&lt;br /&gt;
Type in the following command in the console on a Windows host:&lt;br /&gt;
&lt;br /&gt;
 dfu-util -a kernel -R -D uImage-2.6.24+git20080424-om-gta02.bin&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Press Enter to execute the command.&lt;br /&gt;
&lt;br /&gt;
When flashing succeeds the following will be shown:&lt;br /&gt;
&lt;br /&gt;
 status(0) = No error condition is present&lt;br /&gt;
 Done!&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note| The meaning of the parameters you specified:&lt;br /&gt;
-a  --alt alt Specify the altsetting of the DFU interface by name or by number&amp;lt;br&amp;gt;&lt;br /&gt;
-R  --reset Issue USB Reset signalling once we're finished&amp;lt;br&amp;gt;&lt;br /&gt;
-D  --download file Write firmware from&amp;lt;file&amp;gt; into device &amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Step 3. Flashing the Root Filesystem ===&lt;br /&gt;
You can download the root filesystem from:&lt;br /&gt;
http://downloads.openmoko.org/releases/Freerunner/&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== GNU/Linux ====&lt;br /&gt;
&lt;br /&gt;
Type the following command in the terminal of a GNU/Linux host. On some systems you will need to be root.&lt;br /&gt;
&lt;br /&gt;
 ./dfu-util -a rootfs -R -D openmoko-devel-image-fic-gta02.jffs2&lt;br /&gt;
&lt;br /&gt;
==== Windows ====&lt;br /&gt;
&lt;br /&gt;
Type the following command in the console of a Windows host.&lt;br /&gt;
&lt;br /&gt;
 dfu-util -a rootfs -R -D openmoko-devel-image-fic-gta02.jffs2&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
When flashing succeeds the following will be shown:&lt;br /&gt;
&lt;br /&gt;
 status(0) = No error condition is present&lt;br /&gt;
 Done!&lt;br /&gt;
&lt;br /&gt;
[[Category:Flashing Openmoko| ]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Qtopia_/_Qt_Extended_on_FreeRunner</id>
		<title>Qtopia / Qt Extended on FreeRunner</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Qtopia_/_Qt_Extended_on_FreeRunner"/>
				<updated>2008-07-25T19:38:47Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: /* Current status */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page provides instructions on how to install Qtopia (proper, not the [[ASU]] or [[QtopiaOnX11]] efforts) on the GTA02 (Freerunner) phone.  It is similar to the [[Qtopia on Neo1973]] page.&lt;br /&gt;
&lt;br /&gt;
{|align=right&lt;br /&gt;
|__TOC__&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Current status ==&lt;br /&gt;
On 18 July 2008, Qtopia released the [http://www.qtopia.net/modules/mydownloads/singlefile.php?lid=72 latest flash image for the FIC Neo Freerunner (gta02)] containing the Qtopia 4.3.2 snapshot of 17 July 2008 (GPL version). &lt;br /&gt;
&lt;br /&gt;
This image can successfully make and receive calls and text messages.  It can read all contacts from the SIM card (which the updated 2007.2 does not appear to be able to do).  It contains apps that appear to be more stable than the ones found in the 2007.2 image.  It has multiple input methods that appear to be more mature.  It does not, however, have a web browser or a GPS application.&lt;br /&gt;
&lt;br /&gt;
== Option 1: Flashing Qtopia to FreeRunner ==&lt;br /&gt;
&lt;br /&gt;
Download the image mentioned above and follow the instructions here: [[Flashing the Neo FreeRunner]]&lt;br /&gt;
&lt;br /&gt;
== Option 2: Dual-Booting between Qtopia and 2007.2 (Qtopia boots from MicroSD card) ==&lt;br /&gt;
&lt;br /&gt;
Installation Requirements: &lt;br /&gt;
&lt;br /&gt;
# SSH shell access to 2007.2 based image of the FreeRunner through USB interface or WLAN.&lt;br /&gt;
# A Desktop Linux distro (to unpack the .jffs2 image, I ran Ubuntu under VMWare)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Preparing the SD card ===&lt;br /&gt;
&lt;br /&gt;
See the [[Booting from SD#Preparing the SD Card| Preparing the SD Card]] section of the [[Booting from SD]] page for partitioning and formatting instructions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Installing Qtopia ===&lt;br /&gt;
&lt;br /&gt;
==== Unpacking the Qtopia Root Filesystem Image ====&lt;br /&gt;
&lt;br /&gt;
Download the Qtopia FLASH image from [[Latest Images#Qtopia image from qtopia.net]] to your Linux box and extract its contents:&lt;br /&gt;
&lt;br /&gt;
  tar xzf qtopia-4.3.2-gta02-flash-07172049.tgz&lt;br /&gt;
&lt;br /&gt;
You should now have two files: &lt;br /&gt;
#uImage-2.6.24+git18+9c058ff0d2641df3c36fc3300acb72078d2c41d4-r0-om-gta02.bin&lt;br /&gt;
#qtopia-4.3.2-gta02-rootfs-07172049.jffs2  &lt;br /&gt;
Now extract the root file system from the jffs2 using the commands found at [[Userspace root image#Mounting the JFFS2 image on a loop back device (Block Memory MTD Emulation) |here]].&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
Now, tar up the root filesystem:&lt;br /&gt;
&lt;br /&gt;
  tar czf qtopia-4.3.2-gta02-rootfs-07172049.tar.gz -C &amp;lt;mountpoint&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Where ''&amp;lt;mountpoint&amp;gt;'' is the location where the jff2 filesystem was mounted.&lt;br /&gt;
&lt;br /&gt;
==== Installing Root Filesystem ====&lt;br /&gt;
&lt;br /&gt;
Transfer this compressed tarball to the second partition of the MicroSD that is mounted on the FreeRunner:&lt;br /&gt;
&lt;br /&gt;
  scp qtopia-4.3.2-gta02-rootfs-07172049.tar.gz root@192.168.0.202:/media/mmcblk0p2/&lt;br /&gt;
&lt;br /&gt;
Log in to your FreeRunner and unpack the root filesystem:&lt;br /&gt;
&lt;br /&gt;
  cd /media/mmcblk0p2&lt;br /&gt;
  tar xzf qtopia-4.3.2-gta02-rootfs-07172049.tar.gz&lt;br /&gt;
  rm qtopia-4.3.2-gta02-rootfs-07172049.tar.gz&lt;br /&gt;
  rm -f /media/mmcblk0p2/boot/*&lt;br /&gt;
&lt;br /&gt;
'''''Note:''''' the last step removes the kernel image from the second partition.  For some reason, U-Boot cannot find the uImage.bin file in the first partition if a kernel image exists in the second partition boot/ directory.&lt;br /&gt;
&lt;br /&gt;
==== Installing Kernel ====&lt;br /&gt;
&lt;br /&gt;
From your Linux box, rename uImage-2.6.24+git18+9c058ff0d2641df3c36fc3300acb72078d2c41d4-r0-om-gta02.bin to uImage.bin and copy it to the boot/ on the first partition of the MicroSD card.&lt;br /&gt;
&lt;br /&gt;
  mv uImage-2.6.24+git18+9c058ff0d2641df3c36fc3300acb72078d2c41d4-r0-om-gta02.bin uImage.bin&lt;br /&gt;
  scp uImage.bin root@192.168.0.202:/media/card/boot/&lt;br /&gt;
  &lt;br /&gt;
=== Booting into Qtopia ===&lt;br /&gt;
&lt;br /&gt;
Now shutdown the FreeRunner&lt;br /&gt;
&lt;br /&gt;
  shutdown -h now&lt;br /&gt;
&lt;br /&gt;
Log into U-Boot in the NOR Flash to boot from the MicroSD card: (instructions from [[Booting the Neo FreeRunner]])&lt;br /&gt;
&lt;br /&gt;
* Press and hold Power button&lt;br /&gt;
* Then while still pressing the Power button, press and hold AUX button for 5 to 8 seconds. &lt;br /&gt;
* A boot menu will appear. &lt;br /&gt;
* Press the AUX button to select &amp;quot;[[Boot from sd card|Boot from MicroSD]]&amp;quot; and then press the Power button to execute.&lt;br /&gt;
&lt;br /&gt;
Qtopia should now boot.&lt;br /&gt;
&lt;br /&gt;
'''''Note:''''' you may get a kernel panic which says that &amp;quot;optional features not supported&amp;quot;.  If this is the case, boot back into 2007.2 and run&lt;br /&gt;
&lt;br /&gt;
  umount /dev/mmcblk0p2&lt;br /&gt;
  fsck.ext3.e2fsprogs /dev/mmcblk0p2&lt;br /&gt;
&lt;br /&gt;
This will clean up the file system and clear recovery flags in ext3 that ext2 does not support, then try booting from the MicroSD again.&lt;br /&gt;
[[category:Technical ]]&lt;br /&gt;
[[category:GTA02 Hardware]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Backup</id>
		<title>Backup</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Backup"/>
				<updated>2008-07-25T19:35:02Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;You will need the [[Dfu-util]] to make a backup of your existing image.&lt;br /&gt;
&lt;br /&gt;
As when [[Flashing_the_Neo_FreeRunner|flashing]], you will need to be in [[Booting_the_Neo_FreeRunner#Log_into_U-Boot_in_the_NOR_Flash|U-Boot in the NOR Flash]]. Log into the NOR uBoot menu and select ''Set console to USB''. Now you will be able to flash, make backups of your Freerunner or query the Freerunner with [[Dfu-util|dfu-util]].&lt;br /&gt;
&lt;br /&gt;
{{note|On a Windows host, omit the &amp;quot;./&amp;quot; or &amp;quot;sudo ./&amp;quot; that precedes the commands listed on this page}}&lt;br /&gt;
&lt;br /&gt;
THIS WILL TAKE AWHILE.  The rootfs will take significantly longer than the kernel.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./dfu-util -a kernel -R -U good-kernel.bin&lt;br /&gt;
./dfu-util -a rootfs -R -U good-rootfs.jffs2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is what my successful output looked like...&lt;br /&gt;
&lt;br /&gt;
on the host PC:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo ./dfu-util -a kernel -R -U good-kernel.img&lt;br /&gt;
dfu-util - (C) 2007 by OpenMoko Inc.&lt;br /&gt;
This program is Free Software and has ABSOLUTELY NO WARRANTY&lt;br /&gt;
&lt;br /&gt;
Opening USB Device 0x0000:0x0000...&lt;br /&gt;
Claiming USB DFU Runtime Interface...&lt;br /&gt;
Determining device status: state = appIDLE, status = 0&lt;br /&gt;
Device really in Runtime Mode, send DFU detach request...&lt;br /&gt;
Resetting USB...&lt;br /&gt;
Opening USB Device...&lt;br /&gt;
Found Runtime: [0x1d50:0x5119] devnum=12, cfg=0, intf=0, alt=3, name=&amp;quot;kernel&amp;quot;&lt;br /&gt;
Claiming USB DFU Interface...&lt;br /&gt;
Setting Alternate Setting ...&lt;br /&gt;
Determining device status: state = dfuIDLE, status = 0&lt;br /&gt;
dfuIDLE, continuing&lt;br /&gt;
Transfer Size = 0x1000&lt;br /&gt;
Resetting USB to switch back to runtime mode&lt;br /&gt;
$ sudo ./dfu-util -a rootfs -R -U good-rootfs.jffs2&lt;br /&gt;
dfu-util - (C) 2007 by OpenMoko Inc.&lt;br /&gt;
This program is Free Software and has ABSOLUTELY NO WARRANTY&lt;br /&gt;
&lt;br /&gt;
Opening USB Device 0x0000:0x0000...&lt;br /&gt;
Found Runtime: [0x1d50:0x5119] devnum=16, cfg=0, intf=0, alt=6, name=&amp;quot;rootfs&amp;quot;&lt;br /&gt;
Claiming USB DFU Interface...&lt;br /&gt;
Setting Alternate Setting ...&lt;br /&gt;
Determining device status: state = dfuERROR, status = 14&lt;br /&gt;
dfuERROR, clearing status&lt;br /&gt;
Determining device status: state = dfuIDLE, status = 0&lt;br /&gt;
dfuIDLE, continuing&lt;br /&gt;
Transfer Size = 0x1000&lt;br /&gt;
Resetting USB to switch back to runtime mode&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Despite the fact that there was a device status with state=dfuERROR, everything seems to have worked.&lt;br /&gt;
&lt;br /&gt;
on the FreeRunner:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DFU: Switching to DFU Mode&lt;br /&gt;
DEVICE_CONFIGURED: 1&lt;br /&gt;
Starting DFU Upload of partition 'kernel'&lt;br /&gt;
DEVICE_CONFIGURED: 1&lt;br /&gt;
Starting DFU Upload of partition 'rootfs'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I could backup the kernel of my GTA02  but trying to use this method to backup the rootfs failed several times....&lt;br /&gt;
 dfu-util - (C) 2007 by OpenMoko Inc.&lt;br /&gt;
 This program is Free Software and has ABSOLUTELY NO WARRANTY&lt;br /&gt;
 &lt;br /&gt;
 Opening USB Device 0x0000:0x0000...&lt;br /&gt;
 Claiming USB DFU Runtime Interface... &lt;br /&gt;
 Determining device status: state = appIDLE, status = 0&lt;br /&gt;
 Device really in Runtime Mode, send DFU detach request...&lt;br /&gt;
 Resetting USB... &lt;br /&gt;
 Opening USB Device...&lt;br /&gt;
 Found Runtime: [0x1d50:0x5119] devnum=20, cfg=0, intf=0, alt=6, name=&amp;quot;rootfs&amp;quot;&lt;br /&gt;
 Claiming USB DFU Interface...&lt;br /&gt;
 Setting Alternate Setting ...&lt;br /&gt;
 Determining device status: state = dfuIDLE, status = 0&lt;br /&gt;
 dfuIDLE, continuing&lt;br /&gt;
 Transfer Size = 0x1000&lt;br /&gt;
 dfu_upload error -110&lt;br /&gt;
&lt;br /&gt;
In demsg I get this error&lt;br /&gt;
 usb 5-2: usbfs: USBDEVFS_CONTROL failed cmd dfu-util rqt 161 rq 2 len 4096 ret -110&lt;br /&gt;
&lt;br /&gt;
I have not been able to backup rootfs using this method.&lt;br /&gt;
[[category:Software]]&lt;br /&gt;
[[category:Technical]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Flashing_the_Neo_FreeRunner</id>
		<title>Flashing the Neo FreeRunner</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Flashing_the_Neo_FreeRunner"/>
				<updated>2008-07-25T19:27:04Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: Added instructions for a Windows host.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;As Openmoko development continues, Openmoko regularly releases updated versions of the Openmoko root filesystem, the kernel, and the[[Bootloader| U-Boot]]. These may be programmed into the Flash memory of Neo FreeRunner. You can use the USB cable and Openmoko provided tool to flash Neo FreeRunner.&lt;br /&gt;
&lt;br /&gt;
{{note|The Openmoko software team builds images daily. If you want to use the latest images, you can download the image from the daily build, but we recommend you download the most stable image from http://downloads.openmoko.org/releases/Freerunner/. Images here have been tested by the test team.&lt;br /&gt;
&lt;br /&gt;
See [[Latest Images]] for more information about the different images available.}}&lt;br /&gt;
{{note|If you have a working image that you're happy with but want to try something different, you should probably do a [[Pre-Flash Backup]], although it looks like the method on that page may not entirely work.}}&lt;br /&gt;
&lt;br /&gt;
===Step 1. Download the DFU-util===&lt;br /&gt;
&lt;br /&gt;
==== GNU/Linux ====&lt;br /&gt;
&lt;br /&gt;
You can download the flashing tool for a GNU/Linux host from: &lt;br /&gt;
http://downloads.openmoko.org/releases/Freerunner/dfu-util&lt;br /&gt;
&lt;br /&gt;
On the GNU/Linux host you can use the following command to download the dfu-util:&lt;br /&gt;
 wget http://downloads.openmoko.org/releases/Freerunner/dfu-util&lt;br /&gt;
&lt;br /&gt;
Afterwards you have to change the rights on the file:&lt;br /&gt;
 chmod a+x dfu-util&lt;br /&gt;
&lt;br /&gt;
==== Windows ====&lt;br /&gt;
&lt;br /&gt;
You can download the flashing tool for a Windows host from: https://projects.openmoko.org/frs/?group_id=166 (see installation instructions at [[Dfu-util-windows]])&lt;br /&gt;
&lt;br /&gt;
===Step 2. Flashing the Kernel===&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; cellspacing=&amp;quot;2&amp;quot; cellpadding=&amp;quot;2&amp;quot; style=&amp;quot;padding: 0%; margin:0em 0em 1em 0em; border:0px solid #ffffff; background:#ffffff; width:100%;floating=&amp;quot;center&amp;quot;;font-weight: normal; &amp;quot;&lt;br /&gt;
! style=&amp;quot;background:#ffffff;border-left:1px solid #ffffff;border-right:1px ; border-top:2px solid #ffffff; border:1px solid #ffffff; width:75%;font-weight: normal; &amp;quot; |  &lt;br /&gt;
&amp;lt;div align=&amp;quot;left&amp;quot;&amp;gt;&lt;br /&gt;
[[Image:menu15.jpg|thumb|Log into U-Boot in NOR Flash, connect your Neo with Linux Host via USB cable]]&lt;br /&gt;
&lt;br /&gt;
The Neo FreeRunner needs to be at the NOR uBoot menu for flashing. For more information on booting, see [[Booting the Neo FreeRunner| booting the Neo Freerunner]]. Log into the NOR uBoot menu and select Set console to USB. Now you will be able to flash, make backups of your Freerunner or query the Freerunner with dfu-util.&lt;br /&gt;
&lt;br /&gt;
'''Then''', connect your Neo to the GNU/Linux or Windows host via USB cable.&lt;br /&gt;
&lt;br /&gt;
You can download the kernel from &lt;br /&gt;
http://downloads.openmoko.org/releases/Freerunner/&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
==== GNU/Linux ====&lt;br /&gt;
&lt;br /&gt;
Type in the following command in the terminal on a GNU/Linux host. On some systems you need to be root before this will work and on Ubuntu you must preface the command with &amp;quot;sudo&amp;quot; or you will get the following error: &amp;quot;Cannot claim interface: could not claim interface 2: Operation not permitted&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 ./dfu-util -a (partion name) -R -D (download image file name)&lt;br /&gt;
&lt;br /&gt;
or:&lt;br /&gt;
&lt;br /&gt;
 sudo ./dfu-util -a kernel -R -D uImage-2.6.24+git20080424-om-gta02.bin&lt;br /&gt;
&lt;br /&gt;
==== Windows ====&lt;br /&gt;
&lt;br /&gt;
Type in the following command in the console on a Windows host:&lt;br /&gt;
&lt;br /&gt;
 dfu-util -a kernel -R -D uImage-2.6.24+git20080424-om-gta02.bin&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Press Enter to execute the command.&lt;br /&gt;
&lt;br /&gt;
When flashing succeeds the following will be shown:&lt;br /&gt;
&lt;br /&gt;
 status(0) = No error condition is present&lt;br /&gt;
 Done!&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{note| The meaning of the parameters you specified:&lt;br /&gt;
-a  --alt alt Specify the altsetting of the DFU interface by name or by number&amp;lt;br&amp;gt;&lt;br /&gt;
-R  --reset Issue USB Reset signalling once we're finished&amp;lt;br&amp;gt;&lt;br /&gt;
-D  --download file Write firmware from&amp;lt;file&amp;gt; into device &amp;lt;br&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Step 3. Flashing the Root Filesystem ===&lt;br /&gt;
You can download the root filesystem from:&lt;br /&gt;
http://downloads.openmoko.org/releases/Freerunner/&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==== GNU/Linux ====&lt;br /&gt;
&lt;br /&gt;
Type the following command in the terminal of a GNU/Linux host. On some systems you will need to be root.&lt;br /&gt;
&lt;br /&gt;
 ./dfu-util -a rootfs -R -D openmoko-devel-image-fic-gta02.jffs2&lt;br /&gt;
&lt;br /&gt;
==== Windows ====&lt;br /&gt;
&lt;br /&gt;
Type the following command in the console of a Windows host.&lt;br /&gt;
&lt;br /&gt;
 dfu-util -a rootfs -R -D openmoko-devel-image-fic-gta02.jffs2&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
When flashing succeeds the following will be shown:&lt;br /&gt;
&lt;br /&gt;
 status(0) = No error condition is present&lt;br /&gt;
 Done!&lt;br /&gt;
&lt;br /&gt;
[[Category:Flashing Openmoko| ]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Qtopia_/_Qt_Extended_on_FreeRunner</id>
		<title>Qtopia / Qt Extended on FreeRunner</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Qtopia_/_Qt_Extended_on_FreeRunner"/>
				<updated>2008-07-25T19:16:10Z</updated>
		
		<summary type="html">&lt;p&gt;Dewey: Added option to flash the freerunner instead of dual-booting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page provides instructions on how to install Qtopia (proper, not the [[ASU]] or [[QtopiaOnX11]] efforts) on the GTA02 (Freerunner) phone.  It is similar to the [[Qtopia on Neo1973]] page.&lt;br /&gt;
&lt;br /&gt;
{|align=right&lt;br /&gt;
|__TOC__&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Current status ==&lt;br /&gt;
On 18 July 2008, Qtopia released the [http://www.qtopia.net/modules/mydownloads/singlefile.php?lid=72 latest flash image for the FIC Neo Freerunner (gta02)] containing the Qtopia 4.3.2 snapshot of 17 July 2008 (GPL version). &lt;br /&gt;
&lt;br /&gt;
This image can successfully make and receive calls and text messages.  It can read all contacts from the SIM card (which the updated 2007.2 does not appear to be able to do).  It contains apps that appear to be more stable than the ones found in the 2007.2 image.  It has multiple input methods that appear to be more mature.&lt;br /&gt;
&lt;br /&gt;
== Option 1: Flashing Qtopia to FreeRunner ==&lt;br /&gt;
&lt;br /&gt;
Download the image mentioned above and follow the instructions here: [[Flashing the Neo FreeRunner]]&lt;br /&gt;
&lt;br /&gt;
== Option 2: Dual-Booting between Qtopia and 2007.2 (Qtopia boots from MicroSD card) ==&lt;br /&gt;
&lt;br /&gt;
Installation Requirements: &lt;br /&gt;
&lt;br /&gt;
# SSH shell access to 2007.2 based image of the FreeRunner through USB interface or WLAN.&lt;br /&gt;
# A Desktop Linux distro (to unpack the .jffs2 image, I ran Ubuntu under VMWare)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Preparing the SD card ===&lt;br /&gt;
&lt;br /&gt;
See the [[Booting from SD#Preparing the SD Card| Preparing the SD Card]] section of the [[Booting from SD]] page for partitioning and formatting instructions.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Installing Qtopia ===&lt;br /&gt;
&lt;br /&gt;
==== Unpacking the Qtopia Root Filesystem Image ====&lt;br /&gt;
&lt;br /&gt;
Download the Qtopia FLASH image from [[Latest Images#Qtopia image from qtopia.net]] to your Linux box and extract its contents:&lt;br /&gt;
&lt;br /&gt;
  tar xzf qtopia-4.3.2-gta02-flash-07172049.tgz&lt;br /&gt;
&lt;br /&gt;
You should now have two files: &lt;br /&gt;
#uImage-2.6.24+git18+9c058ff0d2641df3c36fc3300acb72078d2c41d4-r0-om-gta02.bin&lt;br /&gt;
#qtopia-4.3.2-gta02-rootfs-07172049.jffs2  &lt;br /&gt;
Now extract the root file system from the jffs2 using the commands found at [[Userspace root image#Mounting the JFFS2 image on a loop back device (Block Memory MTD Emulation) |here]].&lt;br /&gt;
&lt;br /&gt;
  &lt;br /&gt;
Now, tar up the root filesystem:&lt;br /&gt;
&lt;br /&gt;
  tar czf qtopia-4.3.2-gta02-rootfs-07172049.tar.gz -C &amp;lt;mountpoint&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Where ''&amp;lt;mountpoint&amp;gt;'' is the location where the jff2 filesystem was mounted.&lt;br /&gt;
&lt;br /&gt;
==== Installing Root Filesystem ====&lt;br /&gt;
&lt;br /&gt;
Transfer this compressed tarball to the second partition of the MicroSD that is mounted on the FreeRunner:&lt;br /&gt;
&lt;br /&gt;
  scp qtopia-4.3.2-gta02-rootfs-07172049.tar.gz root@192.168.0.202:/media/mmcblk0p2/&lt;br /&gt;
&lt;br /&gt;
Log in to your FreeRunner and unpack the root filesystem:&lt;br /&gt;
&lt;br /&gt;
  cd /media/mmcblk0p2&lt;br /&gt;
  tar xzf qtopia-4.3.2-gta02-rootfs-07172049.tar.gz&lt;br /&gt;
  rm qtopia-4.3.2-gta02-rootfs-07172049.tar.gz&lt;br /&gt;
  rm -f /media/mmcblk0p2/boot/*&lt;br /&gt;
&lt;br /&gt;
'''''Note:''''' the last step removes the kernel image from the second partition.  For some reason, U-Boot cannot find the uImage.bin file in the first partition if a kernel image exists in the second partition boot/ directory.&lt;br /&gt;
&lt;br /&gt;
==== Installing Kernel ====&lt;br /&gt;
&lt;br /&gt;
From your Linux box, rename uImage-2.6.24+git18+9c058ff0d2641df3c36fc3300acb72078d2c41d4-r0-om-gta02.bin to uImage.bin and copy it to the boot/ on the first partition of the MicroSD card.&lt;br /&gt;
&lt;br /&gt;
  mv uImage-2.6.24+git18+9c058ff0d2641df3c36fc3300acb72078d2c41d4-r0-om-gta02.bin uImage.bin&lt;br /&gt;
  scp uImage.bin root@192.168.0.202:/media/card/boot/&lt;br /&gt;
  &lt;br /&gt;
=== Booting into Qtopia ===&lt;br /&gt;
&lt;br /&gt;
Now shutdown the FreeRunner&lt;br /&gt;
&lt;br /&gt;
  shutdown -h now&lt;br /&gt;
&lt;br /&gt;
Log into U-Boot in the NOR Flash to boot from the MicroSD card: (instructions from [[Booting the Neo FreeRunner]])&lt;br /&gt;
&lt;br /&gt;
* Press and hold Power button&lt;br /&gt;
* Then while still pressing the Power button, press and hold AUX button for 5 to 8 seconds. &lt;br /&gt;
* A boot menu will appear. &lt;br /&gt;
* Press the AUX button to select &amp;quot;[[Boot from sd card|Boot from MicroSD]]&amp;quot; and then press the Power button to execute.&lt;br /&gt;
&lt;br /&gt;
Qtopia should now boot.&lt;br /&gt;
&lt;br /&gt;
'''''Note:''''' you may get a kernel panic which says that &amp;quot;optional features not supported&amp;quot;.  If this is the case, boot back into 2007.2 and run&lt;br /&gt;
&lt;br /&gt;
  umount /dev/mmcblk0p2&lt;br /&gt;
  fsck.ext3.e2fsprogs /dev/mmcblk0p2&lt;br /&gt;
&lt;br /&gt;
This will clean up the file system and clear recovery flags in ext3 that ext2 does not support, then try booting from the MicroSD again.&lt;br /&gt;
[[category:Technical ]]&lt;br /&gt;
[[category:GTA02 Hardware]]&lt;/div&gt;</summary>
		<author><name>Dewey</name></author>	</entry>

	</feed>