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

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:TonyGarnockJones</id>
		<title>User:TonyGarnockJones</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:TonyGarnockJones"/>
				<updated>2011-12-11T14:34:41Z</updated>
		
		<summary type="html">&lt;p&gt;TonyGarnockJones: Updated my email address&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tony Garnock-Jones, tonygarnockjones@gmail.com.&lt;br /&gt;
&lt;br /&gt;
I own a phase-1 Neo1973.&lt;br /&gt;
&lt;br /&gt;
== Erlang Userland ==&lt;br /&gt;
&lt;br /&gt;
I'm running [[Erlang]] with GTK and serial-port extensions on my phone, using it as an openmoko userland replacement (for gsmd/dialer/addressbook etc.).&lt;br /&gt;
* &amp;quot;git clone git://github.com/tonyg/erlang-oe.git&amp;quot; for bitbake scripts for building erlang, erlang-gtknode and erlang-serial ipkg packages&lt;br /&gt;
* &amp;quot;git clone git://github.com/tonyg/erlang-serial.git&amp;quot; to track the serial-port erlang interface program&lt;br /&gt;
* &amp;quot;git clone git://github.com/tonyg/erlang-openmoko.git&amp;quot; to track my userland (gsmd/dialer etc) code&lt;br /&gt;
&lt;br /&gt;
A screenshot, not that the GUI is worth anything - the value of the approach is in the lower-level &amp;quot;model&amp;quot;/business-logic part (the gsmd/neod equivalent): http://homepages.kcbbs.gen.nz/tonyg/pictures/openmoko-erlang-ui.png&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
&lt;br /&gt;
See the [http://github.com/tonyg/erlang-openmoko/blob/master/README README] for the current status, TODO and bugs. Currently 2090 non-blank, non-comment lines of code.&lt;br /&gt;
&lt;br /&gt;
Core (non-UI):&lt;br /&gt;
&lt;br /&gt;
* Clean(ish) API for scripting phone functionality (in Erlang)&lt;br /&gt;
* Takes calls, makes calls, reliably enough for me to use as an everyday phone&lt;br /&gt;
* Sends, receives, archives SMSes&lt;br /&gt;
* DTMF send support during a call&lt;br /&gt;
* Battery and charge-state monitoring&lt;br /&gt;
* Detects when you might be connected to a dumb charger (no UI for forcing fast charge yet)&lt;br /&gt;
* Powers GSM modem off when the phone is shut down&lt;br /&gt;
* About 4-5 hours of battery life when idle - this will improve as general GTA01 power management improves&lt;br /&gt;
&lt;br /&gt;
Non-GUI user interface:&lt;br /&gt;
&lt;br /&gt;
* Plays an mp3/ogg file and vibrates when ringing&lt;br /&gt;
* Vibrates on SMS receive&lt;br /&gt;
* Switches ALSA profiles between in-call state (gsmhandset)/idle state (stereoout)&lt;br /&gt;
* Press &amp;quot;power&amp;quot; to activate screen lock; press &amp;quot;aux&amp;quot; to release screen lock&lt;br /&gt;
&lt;br /&gt;
GUI user interface:&lt;br /&gt;
&lt;br /&gt;
* Really, really, really ugly.&lt;br /&gt;
* Dims screen on user inactivity&lt;br /&gt;
* Blanks screen and locks touchscreen on further inactivity&lt;br /&gt;
* Very basic addressbook&lt;br /&gt;
* Very basic SMS compose/display facility (no T9 yet)&lt;br /&gt;
* Very basic dialer&lt;br /&gt;
&lt;br /&gt;
== gsmhandset.state echoes your own voice ==&lt;br /&gt;
&lt;br /&gt;
I've a tentative fix for this - here's the patch against gsmhandset.state. The alsamixer setting is labelled &amp;quot;Bypass&amp;quot; in the UI, and it's way over to the right, just after the &amp;quot;Amp ...&amp;quot; settings and just before &amp;quot;DAI Mode&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--- old/gsmhandset.state	2008-01-28 12:29:47.000000000 +0000&lt;br /&gt;
+++ new/gsmhandset.state	2008-01-28 12:29:23.000000000 +0000&lt;br /&gt;
@@ -55,8 +55,8 @@&lt;br /&gt;
 		comment.range '0 - 7'&lt;br /&gt;
 		iface MIXER&lt;br /&gt;
 		name 'Bypass Playback Volume'&lt;br /&gt;
-		value.0 5&lt;br /&gt;
-		value.1 5&lt;br /&gt;
+		value.0 0&lt;br /&gt;
+		value.1 0&lt;br /&gt;
 	}&lt;br /&gt;
 	control.7 {&lt;br /&gt;
 		comment.access 'read write'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>TonyGarnockJones</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:TonyGarnockJones</id>
		<title>User:TonyGarnockJones</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:TonyGarnockJones"/>
				<updated>2011-12-11T14:31:44Z</updated>
		
		<summary type="html">&lt;p&gt;TonyGarnockJones: Fixed link to screenshot&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tony Garnock-Jones, tonyg@lshift.net.&lt;br /&gt;
&lt;br /&gt;
I own a phase-1 Neo1973.&lt;br /&gt;
&lt;br /&gt;
== Erlang Userland ==&lt;br /&gt;
&lt;br /&gt;
I'm running [[Erlang]] with GTK and serial-port extensions on my phone, using it as an openmoko userland replacement (for gsmd/dialer/addressbook etc.).&lt;br /&gt;
* &amp;quot;git clone git://github.com/tonyg/erlang-oe.git&amp;quot; for bitbake scripts for building erlang, erlang-gtknode and erlang-serial ipkg packages&lt;br /&gt;
* &amp;quot;git clone git://github.com/tonyg/erlang-serial.git&amp;quot; to track the serial-port erlang interface program&lt;br /&gt;
* &amp;quot;git clone git://github.com/tonyg/erlang-openmoko.git&amp;quot; to track my userland (gsmd/dialer etc) code&lt;br /&gt;
&lt;br /&gt;
A screenshot, not that the GUI is worth anything - the value of the approach is in the lower-level &amp;quot;model&amp;quot;/business-logic part (the gsmd/neod equivalent): http://homepages.kcbbs.gen.nz/tonyg/pictures/openmoko-erlang-ui.png&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
&lt;br /&gt;
See the [http://github.com/tonyg/erlang-openmoko/blob/master/README README] for the current status, TODO and bugs. Currently 2090 non-blank, non-comment lines of code.&lt;br /&gt;
&lt;br /&gt;
Core (non-UI):&lt;br /&gt;
&lt;br /&gt;
* Clean(ish) API for scripting phone functionality (in Erlang)&lt;br /&gt;
* Takes calls, makes calls, reliably enough for me to use as an everyday phone&lt;br /&gt;
* Sends, receives, archives SMSes&lt;br /&gt;
* DTMF send support during a call&lt;br /&gt;
* Battery and charge-state monitoring&lt;br /&gt;
* Detects when you might be connected to a dumb charger (no UI for forcing fast charge yet)&lt;br /&gt;
* Powers GSM modem off when the phone is shut down&lt;br /&gt;
* About 4-5 hours of battery life when idle - this will improve as general GTA01 power management improves&lt;br /&gt;
&lt;br /&gt;
Non-GUI user interface:&lt;br /&gt;
&lt;br /&gt;
* Plays an mp3/ogg file and vibrates when ringing&lt;br /&gt;
* Vibrates on SMS receive&lt;br /&gt;
* Switches ALSA profiles between in-call state (gsmhandset)/idle state (stereoout)&lt;br /&gt;
* Press &amp;quot;power&amp;quot; to activate screen lock; press &amp;quot;aux&amp;quot; to release screen lock&lt;br /&gt;
&lt;br /&gt;
GUI user interface:&lt;br /&gt;
&lt;br /&gt;
* Really, really, really ugly.&lt;br /&gt;
* Dims screen on user inactivity&lt;br /&gt;
* Blanks screen and locks touchscreen on further inactivity&lt;br /&gt;
* Very basic addressbook&lt;br /&gt;
* Very basic SMS compose/display facility (no T9 yet)&lt;br /&gt;
* Very basic dialer&lt;br /&gt;
&lt;br /&gt;
== gsmhandset.state echoes your own voice ==&lt;br /&gt;
&lt;br /&gt;
I've a tentative fix for this - here's the patch against gsmhandset.state. The alsamixer setting is labelled &amp;quot;Bypass&amp;quot; in the UI, and it's way over to the right, just after the &amp;quot;Amp ...&amp;quot; settings and just before &amp;quot;DAI Mode&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--- old/gsmhandset.state	2008-01-28 12:29:47.000000000 +0000&lt;br /&gt;
+++ new/gsmhandset.state	2008-01-28 12:29:23.000000000 +0000&lt;br /&gt;
@@ -55,8 +55,8 @@&lt;br /&gt;
 		comment.range '0 - 7'&lt;br /&gt;
 		iface MIXER&lt;br /&gt;
 		name 'Bypass Playback Volume'&lt;br /&gt;
-		value.0 5&lt;br /&gt;
-		value.1 5&lt;br /&gt;
+		value.0 0&lt;br /&gt;
+		value.1 0&lt;br /&gt;
 	}&lt;br /&gt;
 	control.7 {&lt;br /&gt;
 		comment.access 'read write'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>TonyGarnockJones</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:TonyGarnockJones</id>
		<title>User:TonyGarnockJones</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:TonyGarnockJones"/>
				<updated>2011-05-11T15:20:46Z</updated>
		
		<summary type="html">&lt;p&gt;TonyGarnockJones: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tony Garnock-Jones, tonyg@lshift.net.&lt;br /&gt;
&lt;br /&gt;
I own a phase-1 Neo1973.&lt;br /&gt;
&lt;br /&gt;
== Erlang Userland ==&lt;br /&gt;
&lt;br /&gt;
I'm running [[Erlang]] with GTK and serial-port extensions on my phone, using it as an openmoko userland replacement (for gsmd/dialer/addressbook etc.).&lt;br /&gt;
* &amp;quot;git clone git://github.com/tonyg/erlang-oe.git&amp;quot; for bitbake scripts for building erlang, erlang-gtknode and erlang-serial ipkg packages&lt;br /&gt;
* &amp;quot;git clone git://github.com/tonyg/erlang-serial.git&amp;quot; to track the serial-port erlang interface program&lt;br /&gt;
* &amp;quot;git clone git://github.com/tonyg/erlang-openmoko.git&amp;quot; to track my userland (gsmd/dialer etc) code&lt;br /&gt;
&lt;br /&gt;
A few screenshots, not that the GUI is worth anything - the value of the approach is in the lower-level &amp;quot;model&amp;quot;/business-logic part (the gsmd/neod equivalent): http://eighty-twenty.org/~tonyg/erlang-openmoko-screenshots/&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
&lt;br /&gt;
See the [http://github.com/tonyg/erlang-openmoko/blob/master/README README] for the current status, TODO and bugs. Currently 2090 non-blank, non-comment lines of code.&lt;br /&gt;
&lt;br /&gt;
Core (non-UI):&lt;br /&gt;
&lt;br /&gt;
* Clean(ish) API for scripting phone functionality (in Erlang)&lt;br /&gt;
* Takes calls, makes calls, reliably enough for me to use as an everyday phone&lt;br /&gt;
* Sends, receives, archives SMSes&lt;br /&gt;
* DTMF send support during a call&lt;br /&gt;
* Battery and charge-state monitoring&lt;br /&gt;
* Detects when you might be connected to a dumb charger (no UI for forcing fast charge yet)&lt;br /&gt;
* Powers GSM modem off when the phone is shut down&lt;br /&gt;
* About 4-5 hours of battery life when idle - this will improve as general GTA01 power management improves&lt;br /&gt;
&lt;br /&gt;
Non-GUI user interface:&lt;br /&gt;
&lt;br /&gt;
* Plays an mp3/ogg file and vibrates when ringing&lt;br /&gt;
* Vibrates on SMS receive&lt;br /&gt;
* Switches ALSA profiles between in-call state (gsmhandset)/idle state (stereoout)&lt;br /&gt;
* Press &amp;quot;power&amp;quot; to activate screen lock; press &amp;quot;aux&amp;quot; to release screen lock&lt;br /&gt;
&lt;br /&gt;
GUI user interface:&lt;br /&gt;
&lt;br /&gt;
* Really, really, really ugly.&lt;br /&gt;
* Dims screen on user inactivity&lt;br /&gt;
* Blanks screen and locks touchscreen on further inactivity&lt;br /&gt;
* Very basic addressbook&lt;br /&gt;
* Very basic SMS compose/display facility (no T9 yet)&lt;br /&gt;
* Very basic dialer&lt;br /&gt;
&lt;br /&gt;
== gsmhandset.state echoes your own voice ==&lt;br /&gt;
&lt;br /&gt;
I've a tentative fix for this - here's the patch against gsmhandset.state. The alsamixer setting is labelled &amp;quot;Bypass&amp;quot; in the UI, and it's way over to the right, just after the &amp;quot;Amp ...&amp;quot; settings and just before &amp;quot;DAI Mode&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--- old/gsmhandset.state	2008-01-28 12:29:47.000000000 +0000&lt;br /&gt;
+++ new/gsmhandset.state	2008-01-28 12:29:23.000000000 +0000&lt;br /&gt;
@@ -55,8 +55,8 @@&lt;br /&gt;
 		comment.range '0 - 7'&lt;br /&gt;
 		iface MIXER&lt;br /&gt;
 		name 'Bypass Playback Volume'&lt;br /&gt;
-		value.0 5&lt;br /&gt;
-		value.1 5&lt;br /&gt;
+		value.0 0&lt;br /&gt;
+		value.1 0&lt;br /&gt;
 	}&lt;br /&gt;
 	control.7 {&lt;br /&gt;
 		comment.access 'read write'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>TonyGarnockJones</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:TonyGarnockJones</id>
		<title>User:TonyGarnockJones</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:TonyGarnockJones"/>
				<updated>2009-05-14T16:12:28Z</updated>
		
		<summary type="html">&lt;p&gt;TonyGarnockJones: /* Erlang Userland */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tony Garnock-Jones, tonyg@lshift.net.&lt;br /&gt;
&lt;br /&gt;
I own a phase-1 Neo1973.&lt;br /&gt;
&lt;br /&gt;
== Erlang Userland ==&lt;br /&gt;
&lt;br /&gt;
I'm running Erlang with GTK and serial-port extensions on my phone, using it as an openmoko userland replacement (for gsmd/dialer/addressbook etc.).&lt;br /&gt;
* &amp;quot;git clone git://github.com/tonyg/erlang-oe.git&amp;quot; for bitbake scripts for building erlang, erlang-gtknode and erlang-serial ipkg packages&lt;br /&gt;
* &amp;quot;git clone git://github.com/tonyg/erlang-serial.git&amp;quot; to track the serial-port erlang interface program&lt;br /&gt;
* &amp;quot;git clone git://github.com/tonyg/erlang-openmoko.git&amp;quot; to track my userland (gsmd/dialer etc) code&lt;br /&gt;
&lt;br /&gt;
A few screenshots, not that the GUI is worth anything - the value of the approach is in the lower-level &amp;quot;model&amp;quot;/business-logic part (the gsmd/neod equivalent): http://eighty-twenty.org/~tonyg/erlang-openmoko-screenshots/&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
&lt;br /&gt;
See the [http://github.com/tonyg/erlang-openmoko/blob/master/README README] for the current status, TODO and bugs. Currently 2090 non-blank, non-comment lines of code.&lt;br /&gt;
&lt;br /&gt;
Core (non-UI):&lt;br /&gt;
&lt;br /&gt;
* Clean(ish) API for scripting phone functionality (in Erlang)&lt;br /&gt;
* Takes calls, makes calls, reliably enough for me to use as an everyday phone&lt;br /&gt;
* Sends, receives, archives SMSes&lt;br /&gt;
* DTMF send support during a call&lt;br /&gt;
* Battery and charge-state monitoring&lt;br /&gt;
* Detects when you might be connected to a dumb charger (no UI for forcing fast charge yet)&lt;br /&gt;
* Powers GSM modem off when the phone is shut down&lt;br /&gt;
* About 4-5 hours of battery life when idle - this will improve as general GTA01 power management improves&lt;br /&gt;
&lt;br /&gt;
Non-GUI user interface:&lt;br /&gt;
&lt;br /&gt;
* Plays an mp3/ogg file and vibrates when ringing&lt;br /&gt;
* Vibrates on SMS receive&lt;br /&gt;
* Switches ALSA profiles between in-call state (gsmhandset)/idle state (stereoout)&lt;br /&gt;
* Press &amp;quot;power&amp;quot; to activate screen lock; press &amp;quot;aux&amp;quot; to release screen lock&lt;br /&gt;
&lt;br /&gt;
GUI user interface:&lt;br /&gt;
&lt;br /&gt;
* Really, really, really ugly.&lt;br /&gt;
* Dims screen on user inactivity&lt;br /&gt;
* Blanks screen and locks touchscreen on further inactivity&lt;br /&gt;
* Very basic addressbook&lt;br /&gt;
* Very basic SMS compose/display facility (no T9 yet)&lt;br /&gt;
* Very basic dialer&lt;br /&gt;
&lt;br /&gt;
== gsmhandset.state echoes your own voice ==&lt;br /&gt;
&lt;br /&gt;
I've a tentative fix for this - here's the patch against gsmhandset.state. The alsamixer setting is labelled &amp;quot;Bypass&amp;quot; in the UI, and it's way over to the right, just after the &amp;quot;Amp ...&amp;quot; settings and just before &amp;quot;DAI Mode&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--- old/gsmhandset.state	2008-01-28 12:29:47.000000000 +0000&lt;br /&gt;
+++ new/gsmhandset.state	2008-01-28 12:29:23.000000000 +0000&lt;br /&gt;
@@ -55,8 +55,8 @@&lt;br /&gt;
 		comment.range '0 - 7'&lt;br /&gt;
 		iface MIXER&lt;br /&gt;
 		name 'Bypass Playback Volume'&lt;br /&gt;
-		value.0 5&lt;br /&gt;
-		value.1 5&lt;br /&gt;
+		value.0 0&lt;br /&gt;
+		value.1 0&lt;br /&gt;
 	}&lt;br /&gt;
 	control.7 {&lt;br /&gt;
 		comment.access 'read write'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>TonyGarnockJones</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:TonyGarnockJones</id>
		<title>User:TonyGarnockJones</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:TonyGarnockJones"/>
				<updated>2009-05-14T16:00:13Z</updated>
		
		<summary type="html">&lt;p&gt;TonyGarnockJones: /* Erlang Userland */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tony Garnock-Jones, tonyg@lshift.net.&lt;br /&gt;
&lt;br /&gt;
I own a phase-1 Neo1973.&lt;br /&gt;
&lt;br /&gt;
== Erlang Userland ==&lt;br /&gt;
&lt;br /&gt;
I'm running Erlang with GTK and serial-port extensions on my phone, using it as an openmoko userland replacement (for gsmd/dialer/addressbook etc.).&lt;br /&gt;
* &amp;quot;git clone git://github.com/tonyg/erlang-oe.git&amp;quot; for bitbake scripts for building erlang, erlang-gtknode and erlang-serial ipkg packages&lt;br /&gt;
* &amp;quot;darcs get http://www.eighty-twenty.org/~tonyg/Darcs/erlang-serial/&amp;quot; to track the serial-port erlang interface program&lt;br /&gt;
* &amp;quot;git clone git://github.com/tonyg/erlang-openmoko.git&amp;quot; to track my userland (gsmd/dialer etc) code&lt;br /&gt;
&lt;br /&gt;
A few screenshots, not that the GUI is worth anything - the value of the approach is in the lower-level &amp;quot;model&amp;quot;/business-logic part (the gsmd/neod equivalent): http://eighty-twenty.org/~tonyg/erlang-openmoko-screenshots/&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
&lt;br /&gt;
See the [http://github.com/tonyg/erlang-openmoko/blob/master/README README] for the current status, TODO and bugs. Currently 2090 non-blank, non-comment lines of code.&lt;br /&gt;
&lt;br /&gt;
Core (non-UI):&lt;br /&gt;
&lt;br /&gt;
* Clean(ish) API for scripting phone functionality (in Erlang)&lt;br /&gt;
* Takes calls, makes calls, reliably enough for me to use as an everyday phone&lt;br /&gt;
* Sends, receives, archives SMSes&lt;br /&gt;
* DTMF send support during a call&lt;br /&gt;
* Battery and charge-state monitoring&lt;br /&gt;
* Detects when you might be connected to a dumb charger (no UI for forcing fast charge yet)&lt;br /&gt;
* Powers GSM modem off when the phone is shut down&lt;br /&gt;
* About 4-5 hours of battery life when idle - this will improve as general GTA01 power management improves&lt;br /&gt;
&lt;br /&gt;
Non-GUI user interface:&lt;br /&gt;
&lt;br /&gt;
* Plays an mp3/ogg file and vibrates when ringing&lt;br /&gt;
* Vibrates on SMS receive&lt;br /&gt;
* Switches ALSA profiles between in-call state (gsmhandset)/idle state (stereoout)&lt;br /&gt;
* Press &amp;quot;power&amp;quot; to activate screen lock; press &amp;quot;aux&amp;quot; to release screen lock&lt;br /&gt;
&lt;br /&gt;
GUI user interface:&lt;br /&gt;
&lt;br /&gt;
* Really, really, really ugly.&lt;br /&gt;
* Dims screen on user inactivity&lt;br /&gt;
* Blanks screen and locks touchscreen on further inactivity&lt;br /&gt;
* Very basic addressbook&lt;br /&gt;
* Very basic SMS compose/display facility (no T9 yet)&lt;br /&gt;
* Very basic dialer&lt;br /&gt;
&lt;br /&gt;
== gsmhandset.state echoes your own voice ==&lt;br /&gt;
&lt;br /&gt;
I've a tentative fix for this - here's the patch against gsmhandset.state. The alsamixer setting is labelled &amp;quot;Bypass&amp;quot; in the UI, and it's way over to the right, just after the &amp;quot;Amp ...&amp;quot; settings and just before &amp;quot;DAI Mode&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--- old/gsmhandset.state	2008-01-28 12:29:47.000000000 +0000&lt;br /&gt;
+++ new/gsmhandset.state	2008-01-28 12:29:23.000000000 +0000&lt;br /&gt;
@@ -55,8 +55,8 @@&lt;br /&gt;
 		comment.range '0 - 7'&lt;br /&gt;
 		iface MIXER&lt;br /&gt;
 		name 'Bypass Playback Volume'&lt;br /&gt;
-		value.0 5&lt;br /&gt;
-		value.1 5&lt;br /&gt;
+		value.0 0&lt;br /&gt;
+		value.1 0&lt;br /&gt;
 	}&lt;br /&gt;
 	control.7 {&lt;br /&gt;
 		comment.access 'read write'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>TonyGarnockJones</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/U-Boot</id>
		<title>U-Boot</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/U-Boot"/>
				<updated>2009-05-14T12:21:04Z</updated>
		
		<summary type="html">&lt;p&gt;TonyGarnockJones: /* Using usbtty from Linux */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|Bootloader}}&lt;br /&gt;
&lt;br /&gt;
[[Image:GTA01-U-Boot.JPG|thumb|300px|u-boot menu on Neo1973]] [[Image:Neo1973 uboot splash closeup.jpg|thumb|300px|u-boot splash screen on Neo1973]]&lt;br /&gt;
&lt;br /&gt;
The bootloader used on the smartphones is called '''U-Boot'''. It takes care of device functionality until Openmoko is booted. This includes [[USB DFU]] for [[Flashing the Neo FreeRunner]], a splash screen, a boot menu, a console for [[bootloader commands]], configuration via [[bootloader environment]], and loading a [[kernel]].&lt;br /&gt;
&lt;br /&gt;
There are various [[bootloader versions]] available. Newer yet is [[Qi]].&lt;br /&gt;
&lt;br /&gt;
== Booting into U-boot ==&lt;br /&gt;
&lt;br /&gt;
* Make sure that your phone has had the battery and USB cable removed for at least 30 seconds.&lt;br /&gt;
* Hold in the AUX button on power-up to access the boot menu.&lt;br /&gt;
* Connect the Neo (ie not Debug Board) to a Linux host with the USB cable.&lt;br /&gt;
* Set the console to USB.&lt;br /&gt;
* Connect to /dev/ttyACM0 with a terminal program on the Linux host (you might need to chown uucp.uucp /dev/ttyACM0; see also below)&lt;br /&gt;
* Note that the cdc_acm /dev/ttyACM0 access disappears as soon as the Neo boots, and is replaced by the cdc_ether usb0 network access.&lt;br /&gt;
* You're now at the bootloader prompt.&lt;br /&gt;
* Set the bootdelay uboot environment variable to -1 if you want it to always halt at the bootloader on power-up.&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
All versions of the OM smartphone use the [http://u-boot.sourceforge.net/ u-boot] bootloader.&lt;br /&gt;
&lt;br /&gt;
More information on u-boot can be found at&lt;br /&gt;
* http://www.denx.de/wiki/DULG&lt;br /&gt;
* http://www.gumstix.org/tikiwiki/tiki-index.php?page=U-Boot&lt;br /&gt;
* http://linuxdevices.com/articles/AT5085702347.html&lt;br /&gt;
&lt;br /&gt;
Additions to the vanilla u-boot already implemented include:&lt;br /&gt;
* Support for boot from NAND flash using [[S3C2410 Steppingstone]]&lt;br /&gt;
* Support for S3C2410 NAND flash&lt;br /&gt;
* Support for downloading programs via S3C2410 USB Device Controller&lt;br /&gt;
* Support to display bootup logo / status on S3C2410 Framebuffer&lt;br /&gt;
&lt;br /&gt;
However, u-boot still doesn't support many of the features that GTA01 needs, such as&lt;br /&gt;
* Support for reading kernel/initrd from SD/Transflash&lt;br /&gt;
&lt;br /&gt;
[[User:HaraldWelte|HaraldWelte]] is working on those issues, and in fact most of them have already been implemented.&lt;br /&gt;
&lt;br /&gt;
== Bootloader source code ==&lt;br /&gt;
&lt;br /&gt;
The current bootloader source can be found at http://git.openmoko.org/?p=u-boot.git;a=shortlog;h=stable .&lt;br /&gt;
&lt;br /&gt;
To get u-boot by git:&lt;br /&gt;
&lt;br /&gt;
git clone git://git.openmoko.org/git/u-boot.git openmoko/u-boot&lt;br /&gt;
&lt;br /&gt;
To build u-boot:&lt;br /&gt;
* Clone the git tree and check out the stable branch&lt;br /&gt;
* Set the CROSS_COMPILE environment variable to specify the prefix to your toolchain binaries&lt;br /&gt;
* Run &amp;quot;make gta02v5_config&amp;quot; (or gta01bv4_config, or whatever hardware revision you have)&lt;br /&gt;
* Run &amp;quot;make u-boot.udfu&amp;quot;. This will give you an image which you can install with dfu-util, or which you can upload into memory via JTAG (with a debug board)&lt;br /&gt;
&lt;br /&gt;
== Bootloader binary ==&lt;br /&gt;
&lt;br /&gt;
The latest bootloader binary builds can be found under http://downloads.openmoko.org/distro/unstable/daily/ .&lt;br /&gt;
&lt;br /&gt;
All versions of the GTA02 (Neo FreeRunner) that have been sold to the public are version 5 hardware, so look for a file with &amp;quot;gta02&amp;quot; and &amp;quot;v5&amp;quot; in the name, for example:&lt;br /&gt;
uboot-gta02v5-latest.bin&lt;br /&gt;
&lt;br /&gt;
The file should be written to the NAND flash address 0x00000000 (size 0x30000) (the first [[Partitions|partition]]).&lt;br /&gt;
&lt;br /&gt;
== Bootloader development ==&lt;br /&gt;
&lt;br /&gt;
=== QT2410 ===&lt;br /&gt;
If you want to do bootloader development on the QT2410, it's easier to work with a bootloader image that can be downloaded via USB into RAM instead of flashing.&lt;br /&gt;
&lt;br /&gt;
To do so, you need to edit the u-boot/include/configs/qt2410.h file, and change the &amp;quot;if 0&amp;quot; in Line 32 into a &amp;quot;if 1&amp;quot;, then recompile with &amp;quot;make&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The resulting &amp;quot;u-boot.bin&amp;quot; is _NOT SUITABLE_ for NAND flash, but only for direct execution from within ram, e.g. by using the [[s3c2410_boot_usb]] program.&lt;br /&gt;
&lt;br /&gt;
=== Neo 1973 ===&lt;br /&gt;
&lt;br /&gt;
Doing bootloader development on the [[Neo 1973]] is a bit more tricky.  First, we don't have any NOR flash.  Second, there is no other way to boot _but_ from NAND.  Therefore, we also don't have a USB downloader like the QT2410.&lt;br /&gt;
&lt;br /&gt;
The main problem is:  The [[S3C2410 Steppingstone]] unconditionally copies the first 4k of flash into its internal SRAM.   That SRAM segment stays unconditionally mapped at physical address zero. How do we get around this&lt;br /&gt;
&lt;br /&gt;
=== Neo FreeRunner ===&lt;br /&gt;
{{main|Neo_FreeRunner_Memory_Mapping}}&lt;br /&gt;
&lt;br /&gt;
==== Using JTAG to boot from RAM ====&lt;br /&gt;
&lt;br /&gt;
So how can we boot from RAM? We use JTAG / OpenOCD to:&lt;br /&gt;
&lt;br /&gt;
* Reset and halt the cpu at PC=0&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; reset halt&lt;br /&gt;
target halted in ARM state due to debug request, current mode: Supervisor&lt;br /&gt;
cpsr: 0x400000d3 pc: 0x00000000&lt;br /&gt;
MMU: disabled, D-Cache: disabled, I-Cache: disabled&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Download a small piece of code for low-level SDRAM timing initialization (overwrite 4k SRAM of steppingstone)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; load_binary /space/misc/gta01/u-boot.git/board/gta01/lowlevel_foo.bin 0&lt;br /&gt;
downloaded 332 byte in 0s 21899us&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Assert a break point at address 0x33f80000 (which indicates that the low-level code has finished)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; bp 0x33f80000 4 hw&lt;br /&gt;
breakpoint added at address 0x33f80000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Run the code up to the break point&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; resume&lt;br /&gt;
Target 0 resumed&lt;br /&gt;
&amp;gt; Target 0 halted&lt;br /&gt;
target halted in ARM state due to breakpoint, current mode: Supervisor&lt;br /&gt;
cpsr: 0x600000d3 pc: 0x33f80000&lt;br /&gt;
MMU: disabled, D-Cache: disabled, I-Cache: enabled&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Download the u-boot RAM image to 0x33f80000&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; load_binary /space/misc/gta01/u-boot.git/u-boot.bin 0x33f80000&lt;br /&gt;
downloaded 135692 byte in 6s 567264us&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Resume processing&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; resume&lt;br /&gt;
Target 0 resumed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this point, the display backlight gets bright and we see the following familiar prompt on the serial console:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
U-Boot 1.1.6 (Jan 13 2007 - 23:44:23)&lt;br /&gt;
&lt;br /&gt;
DRAM:  128 MB&lt;br /&gt;
NAND:  64 MiB&lt;br /&gt;
*** Warning - bad CRC or NAND, using default environment&lt;br /&gt;
&lt;br /&gt;
In:    serial&lt;br /&gt;
Out:   serial&lt;br /&gt;
Err:   serial&lt;br /&gt;
Hit any key to stop autoboot:  0&lt;br /&gt;
GTA01Bv2 #&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Creating bootable images ==&lt;br /&gt;
&lt;br /&gt;
U-boot needs bootable images (such as kernels, but also initrd and others) in form of a so-called ''uImage''.  In order to create a ''uImage'' from e.g. a ''vmlinux'' kernel image, you can proceed as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
objcopy -O binary -R .note -R .comment -S vmlinux linux.bin&lt;br /&gt;
gzip -9 linux.bin&lt;br /&gt;
u-boot/tools/mkimage -A arm -O linux -T kernel -C gzip -a 30008000 -e 30008000 -n &amp;quot;Kernel Image QT2410&amp;quot; -d linux.bin.gz uImage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Boot menu ==&lt;br /&gt;
[[Image:Neo1973 uboot menu.jpg|thumb|400px|u-boot boot menu on Neo1973]]&lt;br /&gt;
&lt;br /&gt;
As of the Phase-0 release, our u-boot version now features an on-screen boot menu. The items are defined by [[bootloader environment#menu|menu entries in the environment]].&lt;br /&gt;
&lt;br /&gt;
=== Accessing the boot menu ===&lt;br /&gt;
&lt;br /&gt;
You can access the boot menu by pressing and holding the [[Neo1973 AUX Button]] together with the power button while switching the phone on.&lt;br /&gt;
&lt;br /&gt;
=== Using the boot menu ===&lt;br /&gt;
&lt;br /&gt;
By pressing the [[Neo1973 AUX Button]] you can cycle through the menu items.  Use the ''POWER'' button to select one item.&lt;br /&gt;
&lt;br /&gt;
== Bootloader prompt ==&lt;br /&gt;
&lt;br /&gt;
=== Accessing the bootloader prompt ===&lt;br /&gt;
The bootloader prompt is available either on the serial console (via [[Debug Board]]), or as virtual USB Serial device (USB CDC_ACM).&lt;br /&gt;
Whether the serial port or usb is used depends on the u-boot environment variables '''stdin''', '''stdout''' and '''stderr'''.&lt;br /&gt;
&lt;br /&gt;
Whether or not you use usbtty, the first couple of messages will always be displayed on the serial console.&lt;br /&gt;
&lt;br /&gt;
The bootloader is currently configured to wait for three seconds.  If a key press on the '''stdin''' is received within those three seconds, auto-boot is aborted.&lt;br /&gt;
&lt;br /&gt;
==== Using usbtty from Linux ====&lt;br /&gt;
&lt;br /&gt;
Just by connecting the phone in u-boot mode to your Linux pc should make it detect a [[CDC ACM]] device, and you should get a new tty device called /dev/ttyACM0. If not, check that module cdc_acm is loaded or CONFIG_USB_ACM=y (Device Drivers -&amp;gt; USB support -&amp;gt; USB Modem (CDC ACM) support). (Instructions for MacOS users are [[MacOS_X#USB_Serial|here]])&lt;br /&gt;
&lt;br /&gt;
Use your favourite terminal emulator (minicom, cu, zc, screen ...) to access it like any other serial port. Clear any modem intialisation strings (minicom).&lt;br /&gt;
&lt;br /&gt;
You can adapt the instructions for USB-serial from the [[MacOS_X#USB_Serial|Mac OS]] page.&lt;br /&gt;
If you don't have a favorite, try just &amp;quot;cu -l dev/ttyACM0&amp;quot;. It is in the taylor-uucp package, use &amp;quot;apt-get install cu&amp;quot; if it is not yet installed&lt;br /&gt;
&lt;br /&gt;
Enter Bootprompt with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cu -l /dev/ttyACM0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You might need to&lt;br /&gt;
 chown uucp.uucp /dev/ttyACM0&lt;br /&gt;
to get the necessary rights (even as root, must be done each time). For example, if cu prints &amp;quot;cu: /dev/ttyACM0: Line in use&amp;quot;, then try chowning /dev/ttyACM0 to uucp.uucp; apparently cu can be pretty picky about permissions.&lt;br /&gt;
&lt;br /&gt;
A nice alternative for cu is Werner Almesberger's [[NeoCon|neocon]].&lt;br /&gt;
&lt;br /&gt;
First, you should try to check whether the USB device shows up in 'lsusb' while you're running in u-boot mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# lsusb -d 1457:5119&lt;br /&gt;
Bus 005 Device 079: ID 1457:5119&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Note''': The Neo Freerunner (GTA02) has the ID 1d50:5119&lt;br /&gt;
&lt;br /&gt;
Second, let's see some more details about the available endpoints and configurations:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# lsusb -v -d 1457:5119&lt;br /&gt;
Bus 005 Device 079: ID 1457:5119&lt;br /&gt;
Device Descriptor:&lt;br /&gt;
bLength                18&lt;br /&gt;
bDescriptorType         1&lt;br /&gt;
bcdUSB               1.10&lt;br /&gt;
bDeviceClass            2 Communications&lt;br /&gt;
bDeviceSubClass         0&lt;br /&gt;
bDeviceProtocol         0&lt;br /&gt;
bMaxPacketSize0        16&lt;br /&gt;
idVendor           0x1457&lt;br /&gt;
idProduct          0x5119&lt;br /&gt;
bcdDevice            0.00&lt;br /&gt;
iManufacturer           1 Openmoko, Inc&lt;br /&gt;
iProduct                2 Neo1973 Bootloader U-Boot 1.2.0-g6c7cac8c-dirty-moko3&lt;br /&gt;
iSerial                 3 0000000&lt;br /&gt;
bNumConfigurations      1&lt;br /&gt;
Configuration Descriptor:&lt;br /&gt;
bLength                 9&lt;br /&gt;
bDescriptorType         2&lt;br /&gt;
wTotalLength           85&lt;br /&gt;
bNumInterfaces          3&lt;br /&gt;
bConfigurationValue     1&lt;br /&gt;
iConfiguration          4 TTY via USB&lt;br /&gt;
bmAttributes         0xc0&lt;br /&gt;
Self Powered&lt;br /&gt;
MaxPower                0mA&lt;br /&gt;
Interface Descriptor:&lt;br /&gt;
bLength                 9&lt;br /&gt;
bDescriptorType         4&lt;br /&gt;
bInterfaceNumber        0&lt;br /&gt;
bAlternateSetting       0&lt;br /&gt;
bNumEndpoints           1&lt;br /&gt;
bInterfaceClass         2 Communications&lt;br /&gt;
bInterfaceSubClass      2 Abstract (modem)&lt;br /&gt;
bInterfaceProtocol      1 AT-commands (v.25ter)&lt;br /&gt;
iInterface              6 Control Interface&lt;br /&gt;
CDC Header:&lt;br /&gt;
bcdCDC               0.6e&lt;br /&gt;
CDC Call Management:&lt;br /&gt;
bmCapabilities       0x00&lt;br /&gt;
bDataInterface          1&lt;br /&gt;
CDC ACM:&lt;br /&gt;
bmCapabilities       0x00&lt;br /&gt;
CDC Union:&lt;br /&gt;
bMasterInterface        0&lt;br /&gt;
bSlaveInterface         1&lt;br /&gt;
Endpoint Descriptor:&lt;br /&gt;
bLength                 7&lt;br /&gt;
bDescriptorType         5&lt;br /&gt;
bEndpointAddress     0x81  EP 1 IN&lt;br /&gt;
bmAttributes            3&lt;br /&gt;
Transfer Type            Interrupt&lt;br /&gt;
Synch Type               None&lt;br /&gt;
Usage Type               Data&lt;br /&gt;
wMaxPacketSize     0x0010  1x 16 bytes&lt;br /&gt;
bInterval             255&lt;br /&gt;
Interface Descriptor:&lt;br /&gt;
bLength                 9&lt;br /&gt;
bDescriptorType         4&lt;br /&gt;
bInterfaceNumber        1&lt;br /&gt;
bAlternateSetting       0&lt;br /&gt;
bNumEndpoints           2&lt;br /&gt;
bInterfaceClass        10 CDC Data&lt;br /&gt;
bInterfaceSubClass      0 Unused&lt;br /&gt;
bInterfaceProtocol      0&lt;br /&gt;
iInterface              5 Bulk Data Interface&lt;br /&gt;
Endpoint Descriptor:&lt;br /&gt;
bLength                 7&lt;br /&gt;
bDescriptorType         5&lt;br /&gt;
bEndpointAddress     0x02  EP 2 OUT&lt;br /&gt;
bmAttributes            2&lt;br /&gt;
Transfer Type            Bulk&lt;br /&gt;
Synch Type               None&lt;br /&gt;
Usage Type               Data&lt;br /&gt;
wMaxPacketSize     0x0010  1x 16 bytes&lt;br /&gt;
bInterval             255&lt;br /&gt;
Endpoint Descriptor:&lt;br /&gt;
bLength                 7&lt;br /&gt;
bDescriptorType         5&lt;br /&gt;
bEndpointAddress     0x83  EP 3 IN&lt;br /&gt;
bmAttributes            2&lt;br /&gt;
Transfer Type            Bulk&lt;br /&gt;
Synch Type               None&lt;br /&gt;
Usage Type               Data&lt;br /&gt;
wMaxPacketSize     0x0010  1x 16 bytes&lt;br /&gt;
bInterval             255&lt;br /&gt;
Interface Descriptor:&lt;br /&gt;
bLength                 9&lt;br /&gt;
bDescriptorType         4&lt;br /&gt;
bInterfaceNumber        2&lt;br /&gt;
bAlternateSetting       0&lt;br /&gt;
bNumEndpoints           0&lt;br /&gt;
bInterfaceClass       254 Application Specific Interface&lt;br /&gt;
bInterfaceSubClass      1 Device Firmware Update&lt;br /&gt;
bInterfaceProtocol      1&lt;br /&gt;
iInterface              7 USB Device Firmware Upgrade&lt;br /&gt;
Device Status:     0x0001&lt;br /&gt;
Self Powered&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, you can access it using your favourite terminal program.&lt;br /&gt;
&lt;br /&gt;
Then, if the environment is not set correctly, you will need to use the current console (e.g. serial console) to change the [[bootloader environment#console|console entries in the environment]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GTA01Bv2 # setenv stderr usbtty&lt;br /&gt;
GTA01Bv2 # setenv stdout usbtty&lt;br /&gt;
GTA01Bv2 # setenv stdin usbtty&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Typical u-boot prompt ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
U-Boot 1.2.0-moko1 (Feb 16 2007 - 00:36:13)&lt;br /&gt;
&lt;br /&gt;
DRAM:  128 MB&lt;br /&gt;
NAND:  64 MiB&lt;br /&gt;
Found Environment offset in OOB..&lt;br /&gt;
Video: 640x480x8 31kHz 59Hz&lt;br /&gt;
USB:   S3C2410 USB Deviced&lt;br /&gt;
In:    serial&lt;br /&gt;
Out:   serial&lt;br /&gt;
Err:   serial&lt;br /&gt;
Hit any key to stop autoboot:  0&lt;br /&gt;
GTA01Bv3 #&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Commands on the bootloader prompt ===&lt;br /&gt;
&lt;br /&gt;
:''See [[bootloader commands]].''&lt;br /&gt;
&lt;br /&gt;
=== What if I borked my bootloader environment and don't get a prompt anymore? ===&lt;br /&gt;
{{Note|This solution applies to a changed u-boot environment which prevents NAND u-boot to successfully boot.  The Debian u-boot configuration script may be a cause of this issue.}}&lt;br /&gt;
Found a solution here:&lt;br /&gt;
[[http://markmail.org/message/gqypwiohdet6x4am?q=almesberger+partition&amp;amp;page=1&amp;amp;refer=xbamkzwwsaobv7wa]]&lt;br /&gt;
&lt;br /&gt;
It works the following way:&lt;br /&gt;
* Get the devirginator:&lt;br /&gt;
svn co http://svn.openmoko.org/trunk/src/host/devirginator&lt;br /&gt;
cd devirginator&lt;br /&gt;
* Read the u-boot environment from the device:&lt;br /&gt;
dfu-util -a u-boot_env -R -U env.in&lt;br /&gt;
* Create a file that contains everything you want to change in your u-boot environment or get it by issuing the following command:&lt;br /&gt;
wget http://svn.openmoko.org/trunk/src/host/devirginator/environment.in&lt;br /&gt;
* Now let devirginator generate a new u-boot_env partition for us, - that contains the partition table from our u-boot_env, - and all changes we wanted to make; Note that the -D GTA02 is needed for the neo FreeRunner only, and has to come before the other options.&lt;br /&gt;
./envedit.pl -D GTA02 -i env.in -f environment.in -o env.out&lt;br /&gt;
* On my box the partition layout didn't seem to match the idea of envedit.pl, so it issued 2 warnings:&lt;br /&gt;
warning: environment is 262144 bytes, expected 16384&lt;br /&gt;
CRC error: expected 0xc33e35fc, got 0x93097bfb&lt;br /&gt;
* In this case jut add an additional argument to the command line - that has to be the 1st argument, though, and that contains the size information we got from the warning:&lt;br /&gt;
./envedit.pl -s 262144 -D GTA02 -i env.in -f environment.in  -o env.out&lt;br /&gt;
* Now the perl script should produce no more output anything but write a new u-boot_env partition that we can upload to the device by:&lt;br /&gt;
dfu-util -a u-boot_env -R -D env.out&lt;br /&gt;
&lt;br /&gt;
== Device Firmware Upgrade ==&lt;br /&gt;
&lt;br /&gt;
Our version of u-boot also implements [[USB DFU]]. This can be useful to&lt;br /&gt;
load files and kernel for quick testing.&lt;br /&gt;
&lt;br /&gt;
To find out whether your version of u-boot supports this, use the output of&lt;br /&gt;
$ lsusb -v -d 1457:5119&lt;br /&gt;
while the phone is in u-boot mode.&lt;br /&gt;
&lt;br /&gt;
If it supports DFU, you should see the following snippet towards the end of the output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Interface Descriptor:&lt;br /&gt;
bLength                 9&lt;br /&gt;
bDescriptorType         4&lt;br /&gt;
bInterfaceNumber        2&lt;br /&gt;
bAlternateSetting       0&lt;br /&gt;
bNumEndpoints           0&lt;br /&gt;
bInterfaceClass       254 Application Specific Interface&lt;br /&gt;
bInterfaceSubClass      1 Device Firmware Update&lt;br /&gt;
bInterfaceProtocol      1&lt;br /&gt;
iInterface              0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For information on how to do firmware upgrades, please see [[dfu-util]]. For neo 1973 you may see [[Flashing the Neo 1973#Actually_flashing_things_into_the_device]], and for the FreeRunner : [[Flashing the Neo FreeRunner]].&lt;br /&gt;
&lt;br /&gt;
=== Booting files over DFU ===&lt;br /&gt;
&lt;br /&gt;
To load a file at memory address 0x32000000:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dfu-util -a 0 -D fileToLoad -R&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After that, send 'bootm 0x32000000' to u-boot or 'bootelf 0x32000000' if&lt;br /&gt;
its an elf file.&lt;br /&gt;
&lt;br /&gt;
Simple python script that can boot an ELF image - avoiding a ACM bug that breaks on large packets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
import sys&lt;br /&gt;
import os&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
cmd1 = &amp;quot;neo backlight off\n&amp;quot;&lt;br /&gt;
cmd2 = &amp;quot;bootelf 0x32000000\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
def output(tty, str):&lt;br /&gt;
for x in str:&lt;br /&gt;
tty.write(x)&lt;br /&gt;
tty.flush()&lt;br /&gt;
&lt;br /&gt;
if len(sys.argv) == 2:&lt;br /&gt;
print &amp;quot;Loading %s...&amp;quot; % sys.argv[1]&lt;br /&gt;
&lt;br /&gt;
loadfile = &amp;quot;dfu-util -a 0 -D %s -R&amp;quot; % sys.argv[1]&lt;br /&gt;
&lt;br /&gt;
os.system(loadfile)&lt;br /&gt;
&lt;br /&gt;
time.sleep(3)&lt;br /&gt;
&lt;br /&gt;
tty = open(&amp;quot;/dev/ttyACM0&amp;quot;, &amp;quot;a&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
output(tty, cmd1)&lt;br /&gt;
output(tty, cmd2)&lt;br /&gt;
&lt;br /&gt;
tty.close()&lt;br /&gt;
else:&lt;br /&gt;
print &amp;quot;Usage: %s elffile&amp;quot; % sys.argv[0]&lt;br /&gt;
print &amp;quot;&amp;quot;&lt;br /&gt;
sys.exit(2)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== USB connectivity problems ===&lt;br /&gt;
&lt;br /&gt;
I once got errors like this (in dmesg or /var/log/messages) on the host side while connecting the neo in u-boot:&lt;br /&gt;
&lt;br /&gt;
usb 2-1: device descriptor read/64, error -110&lt;br /&gt;
usb usb2: Controller not stopped yet!&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
hub 4-0:1.0: port 1 disabled by hub (EMI?), re-enabling...&lt;br /&gt;
usb 4-1: USB disconnect, address 2&lt;br /&gt;
&lt;br /&gt;
A possible solution is given below. Please note that if you have a usb keyboard or mouse then the command might cause trouble.&lt;br /&gt;
&lt;br /&gt;
rmmod uhci_hcd ; modprobe uhci_hcd&lt;br /&gt;
&lt;br /&gt;
Another option is to plug the FR into a different USB port on the host, preferably one on the Motherboard not the hub.&lt;br /&gt;
&lt;br /&gt;
Disconnecting the Neo's USB while powering up may prevent this problem in the future.&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
See [[Flashing the Neo 1973]] and [[Flashing the Neo FreeRunner]] for instructions on using dfu-util to install a new bootloader in your phone.&lt;br /&gt;
&lt;br /&gt;
[[Category:System Developers]]&lt;br /&gt;
[[Category:Flashing Openmoko]]&lt;/div&gt;</summary>
		<author><name>TonyGarnockJones</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/U-Boot</id>
		<title>U-Boot</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/U-Boot"/>
				<updated>2009-05-14T12:20:00Z</updated>
		
		<summary type="html">&lt;p&gt;TonyGarnockJones: /* Booting into U-boot */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|Bootloader}}&lt;br /&gt;
&lt;br /&gt;
[[Image:GTA01-U-Boot.JPG|thumb|300px|u-boot menu on Neo1973]] [[Image:Neo1973 uboot splash closeup.jpg|thumb|300px|u-boot splash screen on Neo1973]]&lt;br /&gt;
&lt;br /&gt;
The bootloader used on the smartphones is called '''U-Boot'''. It takes care of device functionality until Openmoko is booted. This includes [[USB DFU]] for [[Flashing the Neo FreeRunner]], a splash screen, a boot menu, a console for [[bootloader commands]], configuration via [[bootloader environment]], and loading a [[kernel]].&lt;br /&gt;
&lt;br /&gt;
There are various [[bootloader versions]] available. Newer yet is [[Qi]].&lt;br /&gt;
&lt;br /&gt;
== Booting into U-boot ==&lt;br /&gt;
&lt;br /&gt;
* Make sure that your phone has had the battery and USB cable removed for at least 30 seconds.&lt;br /&gt;
* Hold in the AUX button on power-up to access the boot menu.&lt;br /&gt;
* Connect the Neo (ie not Debug Board) to a Linux host with the USB cable.&lt;br /&gt;
* Set the console to USB.&lt;br /&gt;
* Connect to /dev/ttyACM0 with a terminal program on the Linux host (you might need to chown uucp.uucp /dev/ttyACM0; see also below)&lt;br /&gt;
* Note that the cdc_acm /dev/ttyACM0 access disappears as soon as the Neo boots, and is replaced by the cdc_ether usb0 network access.&lt;br /&gt;
* You're now at the bootloader prompt.&lt;br /&gt;
* Set the bootdelay uboot environment variable to -1 if you want it to always halt at the bootloader on power-up.&lt;br /&gt;
&lt;br /&gt;
== General ==&lt;br /&gt;
&lt;br /&gt;
All versions of the OM smartphone use the [http://u-boot.sourceforge.net/ u-boot] bootloader.&lt;br /&gt;
&lt;br /&gt;
More information on u-boot can be found at&lt;br /&gt;
* http://www.denx.de/wiki/DULG&lt;br /&gt;
* http://www.gumstix.org/tikiwiki/tiki-index.php?page=U-Boot&lt;br /&gt;
* http://linuxdevices.com/articles/AT5085702347.html&lt;br /&gt;
&lt;br /&gt;
Additions to the vanilla u-boot already implemented include:&lt;br /&gt;
* Support for boot from NAND flash using [[S3C2410 Steppingstone]]&lt;br /&gt;
* Support for S3C2410 NAND flash&lt;br /&gt;
* Support for downloading programs via S3C2410 USB Device Controller&lt;br /&gt;
* Support to display bootup logo / status on S3C2410 Framebuffer&lt;br /&gt;
&lt;br /&gt;
However, u-boot still doesn't support many of the features that GTA01 needs, such as&lt;br /&gt;
* Support for reading kernel/initrd from SD/Transflash&lt;br /&gt;
&lt;br /&gt;
[[User:HaraldWelte|HaraldWelte]] is working on those issues, and in fact most of them have already been implemented.&lt;br /&gt;
&lt;br /&gt;
== Bootloader source code ==&lt;br /&gt;
&lt;br /&gt;
The current bootloader source can be found at http://git.openmoko.org/?p=u-boot.git;a=shortlog;h=stable .&lt;br /&gt;
&lt;br /&gt;
To get u-boot by git:&lt;br /&gt;
&lt;br /&gt;
git clone git://git.openmoko.org/git/u-boot.git openmoko/u-boot&lt;br /&gt;
&lt;br /&gt;
To build u-boot:&lt;br /&gt;
* Clone the git tree and check out the stable branch&lt;br /&gt;
* Set the CROSS_COMPILE environment variable to specify the prefix to your toolchain binaries&lt;br /&gt;
* Run &amp;quot;make gta02v5_config&amp;quot; (or gta01bv4_config, or whatever hardware revision you have)&lt;br /&gt;
* Run &amp;quot;make u-boot.udfu&amp;quot;. This will give you an image which you can install with dfu-util, or which you can upload into memory via JTAG (with a debug board)&lt;br /&gt;
&lt;br /&gt;
== Bootloader binary ==&lt;br /&gt;
&lt;br /&gt;
The latest bootloader binary builds can be found under http://downloads.openmoko.org/distro/unstable/daily/ .&lt;br /&gt;
&lt;br /&gt;
All versions of the GTA02 (Neo FreeRunner) that have been sold to the public are version 5 hardware, so look for a file with &amp;quot;gta02&amp;quot; and &amp;quot;v5&amp;quot; in the name, for example:&lt;br /&gt;
uboot-gta02v5-latest.bin&lt;br /&gt;
&lt;br /&gt;
The file should be written to the NAND flash address 0x00000000 (size 0x30000) (the first [[Partitions|partition]]).&lt;br /&gt;
&lt;br /&gt;
== Bootloader development ==&lt;br /&gt;
&lt;br /&gt;
=== QT2410 ===&lt;br /&gt;
If you want to do bootloader development on the QT2410, it's easier to work with a bootloader image that can be downloaded via USB into RAM instead of flashing.&lt;br /&gt;
&lt;br /&gt;
To do so, you need to edit the u-boot/include/configs/qt2410.h file, and change the &amp;quot;if 0&amp;quot; in Line 32 into a &amp;quot;if 1&amp;quot;, then recompile with &amp;quot;make&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The resulting &amp;quot;u-boot.bin&amp;quot; is _NOT SUITABLE_ for NAND flash, but only for direct execution from within ram, e.g. by using the [[s3c2410_boot_usb]] program.&lt;br /&gt;
&lt;br /&gt;
=== Neo 1973 ===&lt;br /&gt;
&lt;br /&gt;
Doing bootloader development on the [[Neo 1973]] is a bit more tricky.  First, we don't have any NOR flash.  Second, there is no other way to boot _but_ from NAND.  Therefore, we also don't have a USB downloader like the QT2410.&lt;br /&gt;
&lt;br /&gt;
The main problem is:  The [[S3C2410 Steppingstone]] unconditionally copies the first 4k of flash into its internal SRAM.   That SRAM segment stays unconditionally mapped at physical address zero. How do we get around this&lt;br /&gt;
&lt;br /&gt;
=== Neo FreeRunner ===&lt;br /&gt;
{{main|Neo_FreeRunner_Memory_Mapping}}&lt;br /&gt;
&lt;br /&gt;
==== Using JTAG to boot from RAM ====&lt;br /&gt;
&lt;br /&gt;
So how can we boot from RAM? We use JTAG / OpenOCD to:&lt;br /&gt;
&lt;br /&gt;
* Reset and halt the cpu at PC=0&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; reset halt&lt;br /&gt;
target halted in ARM state due to debug request, current mode: Supervisor&lt;br /&gt;
cpsr: 0x400000d3 pc: 0x00000000&lt;br /&gt;
MMU: disabled, D-Cache: disabled, I-Cache: disabled&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Download a small piece of code for low-level SDRAM timing initialization (overwrite 4k SRAM of steppingstone)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; load_binary /space/misc/gta01/u-boot.git/board/gta01/lowlevel_foo.bin 0&lt;br /&gt;
downloaded 332 byte in 0s 21899us&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Assert a break point at address 0x33f80000 (which indicates that the low-level code has finished)&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; bp 0x33f80000 4 hw&lt;br /&gt;
breakpoint added at address 0x33f80000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Run the code up to the break point&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; resume&lt;br /&gt;
Target 0 resumed&lt;br /&gt;
&amp;gt; Target 0 halted&lt;br /&gt;
target halted in ARM state due to breakpoint, current mode: Supervisor&lt;br /&gt;
cpsr: 0x600000d3 pc: 0x33f80000&lt;br /&gt;
MMU: disabled, D-Cache: disabled, I-Cache: enabled&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Download the u-boot RAM image to 0x33f80000&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; load_binary /space/misc/gta01/u-boot.git/u-boot.bin 0x33f80000&lt;br /&gt;
downloaded 135692 byte in 6s 567264us&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Resume processing&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;gt; resume&lt;br /&gt;
Target 0 resumed&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At this point, the display backlight gets bright and we see the following familiar prompt on the serial console:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
U-Boot 1.1.6 (Jan 13 2007 - 23:44:23)&lt;br /&gt;
&lt;br /&gt;
DRAM:  128 MB&lt;br /&gt;
NAND:  64 MiB&lt;br /&gt;
*** Warning - bad CRC or NAND, using default environment&lt;br /&gt;
&lt;br /&gt;
In:    serial&lt;br /&gt;
Out:   serial&lt;br /&gt;
Err:   serial&lt;br /&gt;
Hit any key to stop autoboot:  0&lt;br /&gt;
GTA01Bv2 #&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Creating bootable images ==&lt;br /&gt;
&lt;br /&gt;
U-boot needs bootable images (such as kernels, but also initrd and others) in form of a so-called ''uImage''.  In order to create a ''uImage'' from e.g. a ''vmlinux'' kernel image, you can proceed as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
objcopy -O binary -R .note -R .comment -S vmlinux linux.bin&lt;br /&gt;
gzip -9 linux.bin&lt;br /&gt;
u-boot/tools/mkimage -A arm -O linux -T kernel -C gzip -a 30008000 -e 30008000 -n &amp;quot;Kernel Image QT2410&amp;quot; -d linux.bin.gz uImage&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Boot menu ==&lt;br /&gt;
[[Image:Neo1973 uboot menu.jpg|thumb|400px|u-boot boot menu on Neo1973]]&lt;br /&gt;
&lt;br /&gt;
As of the Phase-0 release, our u-boot version now features an on-screen boot menu. The items are defined by [[bootloader environment#menu|menu entries in the environment]].&lt;br /&gt;
&lt;br /&gt;
=== Accessing the boot menu ===&lt;br /&gt;
&lt;br /&gt;
You can access the boot menu by pressing and holding the [[Neo1973 AUX Button]] together with the power button while switching the phone on.&lt;br /&gt;
&lt;br /&gt;
=== Using the boot menu ===&lt;br /&gt;
&lt;br /&gt;
By pressing the [[Neo1973 AUX Button]] you can cycle through the menu items.  Use the ''POWER'' button to select one item.&lt;br /&gt;
&lt;br /&gt;
== Bootloader prompt ==&lt;br /&gt;
&lt;br /&gt;
=== Accessing the bootloader prompt ===&lt;br /&gt;
The bootloader prompt is available either on the serial console (via [[Debug Board]]), or as virtual USB Serial device (USB CDC_ACM).&lt;br /&gt;
Whether the serial port or usb is used depends on the u-boot environment variables '''stdin''', '''stdout''' and '''stderr'''.&lt;br /&gt;
&lt;br /&gt;
Whether or not you use usbtty, the first couple of messages will always be displayed on the serial console.&lt;br /&gt;
&lt;br /&gt;
The bootloader is currently configured to wait for three seconds.  If a key press on the '''stdin''' is received within those three seconds, auto-boot is aborted.&lt;br /&gt;
&lt;br /&gt;
==== Using usbtty from Linux ====&lt;br /&gt;
&lt;br /&gt;
Just by connecting the phone in u-boot mode to your Linux pc should make it detect a [[CDC ACM]] device, and you should get a new tty device called /dev/ttyACM0. If not, check that module cdc_acm is loaded or CONFIG_USB_ACM=y (Device Drivers -&amp;gt; USB support -&amp;gt; USB Modem (CDC ACM) support). (Instructions for MacOS users are [[MacOS_X#USB_Serial|here]])&lt;br /&gt;
&lt;br /&gt;
Use your favourite terminal emulator (minicom, cu, zc, screen ...) to access it like any other serial port. Clear any modem intialisation strings (minicom).&lt;br /&gt;
&lt;br /&gt;
You can adapt the instructions for USB-serial from the [[MacOS_X#USB_Serial|Mac OS]] page.&lt;br /&gt;
If you don't have a favorite, try just &amp;quot;cu -l dev/ttyACM0&amp;quot;. It is in the taylor-uucp package, use &amp;quot;apt-get install cu&amp;quot; if it is not yet installed&lt;br /&gt;
&lt;br /&gt;
Enter Bootprompt with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cu -l /dev/ttyACM0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
You might need to&lt;br /&gt;
 chown uucp.uucp /dev/ttyACM0&lt;br /&gt;
to get the necessary rights (even as root, must be done each time).&lt;br /&gt;
&lt;br /&gt;
A nice alternative for cu is Werner Almesberger's [[NeoCon|neocon]].&lt;br /&gt;
&lt;br /&gt;
First, you should try to check whether the USB device shows up in 'lsusb' while you're running in u-boot mode:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# lsusb -d 1457:5119&lt;br /&gt;
Bus 005 Device 079: ID 1457:5119&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
'''Note''': The Neo Freerunner (GTA02) has the ID 1d50:5119&lt;br /&gt;
&lt;br /&gt;
Second, let's see some more details about the available endpoints and configurations:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# lsusb -v -d 1457:5119&lt;br /&gt;
Bus 005 Device 079: ID 1457:5119&lt;br /&gt;
Device Descriptor:&lt;br /&gt;
bLength                18&lt;br /&gt;
bDescriptorType         1&lt;br /&gt;
bcdUSB               1.10&lt;br /&gt;
bDeviceClass            2 Communications&lt;br /&gt;
bDeviceSubClass         0&lt;br /&gt;
bDeviceProtocol         0&lt;br /&gt;
bMaxPacketSize0        16&lt;br /&gt;
idVendor           0x1457&lt;br /&gt;
idProduct          0x5119&lt;br /&gt;
bcdDevice            0.00&lt;br /&gt;
iManufacturer           1 Openmoko, Inc&lt;br /&gt;
iProduct                2 Neo1973 Bootloader U-Boot 1.2.0-g6c7cac8c-dirty-moko3&lt;br /&gt;
iSerial                 3 0000000&lt;br /&gt;
bNumConfigurations      1&lt;br /&gt;
Configuration Descriptor:&lt;br /&gt;
bLength                 9&lt;br /&gt;
bDescriptorType         2&lt;br /&gt;
wTotalLength           85&lt;br /&gt;
bNumInterfaces          3&lt;br /&gt;
bConfigurationValue     1&lt;br /&gt;
iConfiguration          4 TTY via USB&lt;br /&gt;
bmAttributes         0xc0&lt;br /&gt;
Self Powered&lt;br /&gt;
MaxPower                0mA&lt;br /&gt;
Interface Descriptor:&lt;br /&gt;
bLength                 9&lt;br /&gt;
bDescriptorType         4&lt;br /&gt;
bInterfaceNumber        0&lt;br /&gt;
bAlternateSetting       0&lt;br /&gt;
bNumEndpoints           1&lt;br /&gt;
bInterfaceClass         2 Communications&lt;br /&gt;
bInterfaceSubClass      2 Abstract (modem)&lt;br /&gt;
bInterfaceProtocol      1 AT-commands (v.25ter)&lt;br /&gt;
iInterface              6 Control Interface&lt;br /&gt;
CDC Header:&lt;br /&gt;
bcdCDC               0.6e&lt;br /&gt;
CDC Call Management:&lt;br /&gt;
bmCapabilities       0x00&lt;br /&gt;
bDataInterface          1&lt;br /&gt;
CDC ACM:&lt;br /&gt;
bmCapabilities       0x00&lt;br /&gt;
CDC Union:&lt;br /&gt;
bMasterInterface        0&lt;br /&gt;
bSlaveInterface         1&lt;br /&gt;
Endpoint Descriptor:&lt;br /&gt;
bLength                 7&lt;br /&gt;
bDescriptorType         5&lt;br /&gt;
bEndpointAddress     0x81  EP 1 IN&lt;br /&gt;
bmAttributes            3&lt;br /&gt;
Transfer Type            Interrupt&lt;br /&gt;
Synch Type               None&lt;br /&gt;
Usage Type               Data&lt;br /&gt;
wMaxPacketSize     0x0010  1x 16 bytes&lt;br /&gt;
bInterval             255&lt;br /&gt;
Interface Descriptor:&lt;br /&gt;
bLength                 9&lt;br /&gt;
bDescriptorType         4&lt;br /&gt;
bInterfaceNumber        1&lt;br /&gt;
bAlternateSetting       0&lt;br /&gt;
bNumEndpoints           2&lt;br /&gt;
bInterfaceClass        10 CDC Data&lt;br /&gt;
bInterfaceSubClass      0 Unused&lt;br /&gt;
bInterfaceProtocol      0&lt;br /&gt;
iInterface              5 Bulk Data Interface&lt;br /&gt;
Endpoint Descriptor:&lt;br /&gt;
bLength                 7&lt;br /&gt;
bDescriptorType         5&lt;br /&gt;
bEndpointAddress     0x02  EP 2 OUT&lt;br /&gt;
bmAttributes            2&lt;br /&gt;
Transfer Type            Bulk&lt;br /&gt;
Synch Type               None&lt;br /&gt;
Usage Type               Data&lt;br /&gt;
wMaxPacketSize     0x0010  1x 16 bytes&lt;br /&gt;
bInterval             255&lt;br /&gt;
Endpoint Descriptor:&lt;br /&gt;
bLength                 7&lt;br /&gt;
bDescriptorType         5&lt;br /&gt;
bEndpointAddress     0x83  EP 3 IN&lt;br /&gt;
bmAttributes            2&lt;br /&gt;
Transfer Type            Bulk&lt;br /&gt;
Synch Type               None&lt;br /&gt;
Usage Type               Data&lt;br /&gt;
wMaxPacketSize     0x0010  1x 16 bytes&lt;br /&gt;
bInterval             255&lt;br /&gt;
Interface Descriptor:&lt;br /&gt;
bLength                 9&lt;br /&gt;
bDescriptorType         4&lt;br /&gt;
bInterfaceNumber        2&lt;br /&gt;
bAlternateSetting       0&lt;br /&gt;
bNumEndpoints           0&lt;br /&gt;
bInterfaceClass       254 Application Specific Interface&lt;br /&gt;
bInterfaceSubClass      1 Device Firmware Update&lt;br /&gt;
bInterfaceProtocol      1&lt;br /&gt;
iInterface              7 USB Device Firmware Upgrade&lt;br /&gt;
Device Status:     0x0001&lt;br /&gt;
Self Powered&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, you can access it using your favourite terminal program.&lt;br /&gt;
&lt;br /&gt;
Then, if the environment is not set correctly, you will need to use the current console (e.g. serial console) to change the [[bootloader environment#console|console entries in the environment]]:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
GTA01Bv2 # setenv stderr usbtty&lt;br /&gt;
GTA01Bv2 # setenv stdout usbtty&lt;br /&gt;
GTA01Bv2 # setenv stdin usbtty&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Typical u-boot prompt ====&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
U-Boot 1.2.0-moko1 (Feb 16 2007 - 00:36:13)&lt;br /&gt;
&lt;br /&gt;
DRAM:  128 MB&lt;br /&gt;
NAND:  64 MiB&lt;br /&gt;
Found Environment offset in OOB..&lt;br /&gt;
Video: 640x480x8 31kHz 59Hz&lt;br /&gt;
USB:   S3C2410 USB Deviced&lt;br /&gt;
In:    serial&lt;br /&gt;
Out:   serial&lt;br /&gt;
Err:   serial&lt;br /&gt;
Hit any key to stop autoboot:  0&lt;br /&gt;
GTA01Bv3 #&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Commands on the bootloader prompt ===&lt;br /&gt;
&lt;br /&gt;
:''See [[bootloader commands]].''&lt;br /&gt;
&lt;br /&gt;
=== What if I borked my bootloader environment and don't get a prompt anymore? ===&lt;br /&gt;
{{Note|This solution applies to a changed u-boot environment which prevents NAND u-boot to successfully boot.  The Debian u-boot configuration script may be a cause of this issue.}}&lt;br /&gt;
Found a solution here:&lt;br /&gt;
[[http://markmail.org/message/gqypwiohdet6x4am?q=almesberger+partition&amp;amp;page=1&amp;amp;refer=xbamkzwwsaobv7wa]]&lt;br /&gt;
&lt;br /&gt;
It works the following way:&lt;br /&gt;
* Get the devirginator:&lt;br /&gt;
svn co http://svn.openmoko.org/trunk/src/host/devirginator&lt;br /&gt;
cd devirginator&lt;br /&gt;
* Read the u-boot environment from the device:&lt;br /&gt;
dfu-util -a u-boot_env -R -U env.in&lt;br /&gt;
* Create a file that contains everything you want to change in your u-boot environment or get it by issuing the following command:&lt;br /&gt;
wget http://svn.openmoko.org/trunk/src/host/devirginator/environment.in&lt;br /&gt;
* Now let devirginator generate a new u-boot_env partition for us, - that contains the partition table from our u-boot_env, - and all changes we wanted to make; Note that the -D GTA02 is needed for the neo FreeRunner only, and has to come before the other options.&lt;br /&gt;
./envedit.pl -D GTA02 -i env.in -f environment.in -o env.out&lt;br /&gt;
* On my box the partition layout didn't seem to match the idea of envedit.pl, so it issued 2 warnings:&lt;br /&gt;
warning: environment is 262144 bytes, expected 16384&lt;br /&gt;
CRC error: expected 0xc33e35fc, got 0x93097bfb&lt;br /&gt;
* In this case jut add an additional argument to the command line - that has to be the 1st argument, though, and that contains the size information we got from the warning:&lt;br /&gt;
./envedit.pl -s 262144 -D GTA02 -i env.in -f environment.in  -o env.out&lt;br /&gt;
* Now the perl script should produce no more output anything but write a new u-boot_env partition that we can upload to the device by:&lt;br /&gt;
dfu-util -a u-boot_env -R -D env.out&lt;br /&gt;
&lt;br /&gt;
== Device Firmware Upgrade ==&lt;br /&gt;
&lt;br /&gt;
Our version of u-boot also implements [[USB DFU]]. This can be useful to&lt;br /&gt;
load files and kernel for quick testing.&lt;br /&gt;
&lt;br /&gt;
To find out whether your version of u-boot supports this, use the output of&lt;br /&gt;
$ lsusb -v -d 1457:5119&lt;br /&gt;
while the phone is in u-boot mode.&lt;br /&gt;
&lt;br /&gt;
If it supports DFU, you should see the following snippet towards the end of the output:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Interface Descriptor:&lt;br /&gt;
bLength                 9&lt;br /&gt;
bDescriptorType         4&lt;br /&gt;
bInterfaceNumber        2&lt;br /&gt;
bAlternateSetting       0&lt;br /&gt;
bNumEndpoints           0&lt;br /&gt;
bInterfaceClass       254 Application Specific Interface&lt;br /&gt;
bInterfaceSubClass      1 Device Firmware Update&lt;br /&gt;
bInterfaceProtocol      1&lt;br /&gt;
iInterface              0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For information on how to do firmware upgrades, please see [[dfu-util]]. For neo 1973 you may see [[Flashing the Neo 1973#Actually_flashing_things_into_the_device]], and for the FreeRunner : [[Flashing the Neo FreeRunner]].&lt;br /&gt;
&lt;br /&gt;
=== Booting files over DFU ===&lt;br /&gt;
&lt;br /&gt;
To load a file at memory address 0x32000000:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dfu-util -a 0 -D fileToLoad -R&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
After that, send 'bootm 0x32000000' to u-boot or 'bootelf 0x32000000' if&lt;br /&gt;
its an elf file.&lt;br /&gt;
&lt;br /&gt;
Simple python script that can boot an ELF image - avoiding a ACM bug that breaks on large packets.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
import sys&lt;br /&gt;
import os&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
cmd1 = &amp;quot;neo backlight off\n&amp;quot;&lt;br /&gt;
cmd2 = &amp;quot;bootelf 0x32000000\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
def output(tty, str):&lt;br /&gt;
for x in str:&lt;br /&gt;
tty.write(x)&lt;br /&gt;
tty.flush()&lt;br /&gt;
&lt;br /&gt;
if len(sys.argv) == 2:&lt;br /&gt;
print &amp;quot;Loading %s...&amp;quot; % sys.argv[1]&lt;br /&gt;
&lt;br /&gt;
loadfile = &amp;quot;dfu-util -a 0 -D %s -R&amp;quot; % sys.argv[1]&lt;br /&gt;
&lt;br /&gt;
os.system(loadfile)&lt;br /&gt;
&lt;br /&gt;
time.sleep(3)&lt;br /&gt;
&lt;br /&gt;
tty = open(&amp;quot;/dev/ttyACM0&amp;quot;, &amp;quot;a&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
output(tty, cmd1)&lt;br /&gt;
output(tty, cmd2)&lt;br /&gt;
&lt;br /&gt;
tty.close()&lt;br /&gt;
else:&lt;br /&gt;
print &amp;quot;Usage: %s elffile&amp;quot; % sys.argv[0]&lt;br /&gt;
print &amp;quot;&amp;quot;&lt;br /&gt;
sys.exit(2)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Troubleshooting ==&lt;br /&gt;
&lt;br /&gt;
=== USB connectivity problems ===&lt;br /&gt;
&lt;br /&gt;
I once got errors like this (in dmesg or /var/log/messages) on the host side while connecting the neo in u-boot:&lt;br /&gt;
&lt;br /&gt;
usb 2-1: device descriptor read/64, error -110&lt;br /&gt;
usb usb2: Controller not stopped yet!&lt;br /&gt;
&lt;br /&gt;
or&lt;br /&gt;
&lt;br /&gt;
hub 4-0:1.0: port 1 disabled by hub (EMI?), re-enabling...&lt;br /&gt;
usb 4-1: USB disconnect, address 2&lt;br /&gt;
&lt;br /&gt;
A possible solution is given below. Please note that if you have a usb keyboard or mouse then the command might cause trouble.&lt;br /&gt;
&lt;br /&gt;
rmmod uhci_hcd ; modprobe uhci_hcd&lt;br /&gt;
&lt;br /&gt;
Another option is to plug the FR into a different USB port on the host, preferably one on the Motherboard not the hub.&lt;br /&gt;
&lt;br /&gt;
Disconnecting the Neo's USB while powering up may prevent this problem in the future.&lt;br /&gt;
&lt;br /&gt;
== Related pages ==&lt;br /&gt;
&lt;br /&gt;
See [[Flashing the Neo 1973]] and [[Flashing the Neo FreeRunner]] for instructions on using dfu-util to install a new bootloader in your phone.&lt;br /&gt;
&lt;br /&gt;
[[Category:System Developers]]&lt;br /&gt;
[[Category:Flashing Openmoko]]&lt;/div&gt;</summary>
		<author><name>TonyGarnockJones</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/OpenEmbedded</id>
		<title>OpenEmbedded</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/OpenEmbedded"/>
				<updated>2009-05-13T23:49:24Z</updated>
		
		<summary type="html">&lt;p&gt;TonyGarnockJones: /* ${OE_HOME} */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|OpenEmbedded}}&lt;br /&gt;
&lt;br /&gt;
Openmoko, our distribution, is built using OpenEmbedded.  OpenEmbedded will:&lt;br /&gt;
&lt;br /&gt;
* Generate (cross-compile) software packages for multiple embedded targets.&lt;br /&gt;
* Handle different hardware architectures, and support multiple releases across those architectures. &lt;br /&gt;
&lt;br /&gt;
For more information please see the [http://www.openembedded.org/ Open Embedded] website.&lt;br /&gt;
&lt;br /&gt;
== Building the Openmoko Distribution with OpenEmbedded ==&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If you are an application developer, you probably do not want to build OpenEmbedded from scratch. For compiling simple applications with few library dependencies (including boot-loader and kernel), consider using our prebuilt [[Toolchain]]. For more complex applications with many library dependencies, download a prebuilt [[OpenEmbedded Torrent]]. &lt;br /&gt;
&lt;br /&gt;
Building Openmoko from scratch is a time-, cpu- and diskspace-consuming process which should only be done if you are a system integrator and want to customize your Openmoko distribution.&lt;br /&gt;
&lt;br /&gt;
=== Simplified Instructions: MokoMakefile ===&lt;br /&gt;
&lt;br /&gt;
For beginners who wish to customize their Openmoko distribution, the facility called [[MokoMakefile]] simplifies building OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
=== Quick Start: OpenEmbedded Torrent ===&lt;br /&gt;
&lt;br /&gt;
If you are a system developer and would like to get up-to-speed as quickly as possible, then download an [[OpenEmbedded Torrent]].&lt;br /&gt;
&lt;br /&gt;
== From Scratch: OpenEmbedded ==&lt;br /&gt;
&lt;br /&gt;
Beginner Openmoko developers who would prefer to have full control over their OpenEmbedded build environment should follow the instructions below.&lt;br /&gt;
&lt;br /&gt;
=== Preparations ===&lt;br /&gt;
&lt;br /&gt;
Several prerequisite software components are necessary in order to have a fully functional OpenEmbedded build environment. However, setup and installation varies depending on the operating system installed on your workstation. The [http://wiki.openembedded.net/index.php OpenEmbedded Wiki] provides [http://wiki.openembedded.net/index.php/OEandYourDistro setup instructions] for FreeBSD, Mac OS X, and most major Linux distributions, of course.&lt;br /&gt;
&lt;br /&gt;
For OpenEmbedded installation instructions please refer to [http://wiki.openembedded.net/index.php/OEandYourDistro OEandYourDistro]. &lt;br /&gt;
&lt;br /&gt;
=== ${OE_HOME} ===&lt;br /&gt;
&lt;br /&gt;
Assuming that you have installed all prerequisite software, you are now ready to create a directory for all of your OpenEmbedded (OE) related work. We will refer to OE_HOME in a generic way, but for argument's sake, assume that it is equal to ${HOME}/oe. You should expect ${OE_HOME} to grow tremendously in size, up to approximately 8GB or larger in some cases. Also be aware, that a full OE build could require several hours of constant building, which may inhibit the performance of your computer while performing other tasks. Replace ${HOME}/oe with your preferred location.&lt;br /&gt;
&lt;br /&gt;
For Bash users:&lt;br /&gt;
 export OE_HOME=${HOME}/oe&lt;br /&gt;
&lt;br /&gt;
For Tcsh users:&lt;br /&gt;
 setenv OE_HOME ${HOME}/oe&lt;br /&gt;
&lt;br /&gt;
Next, run 'mkdir -p ${OE_HOME}' to create the directory.&lt;br /&gt;
&lt;br /&gt;
Beware of symlinks: make sure that your ${OE_HOME} variable is set to the true path to the directory, and does not involve any symbolic links. See also http://wiki.openembedded.net/index.php/Category_talk:FAQ#3._Error:_Building_libtool-native_dies_with_.22configure:_error:_source_directory_already_configured.3B_run_.22make_distclean.22_there_first.22&lt;br /&gt;
&lt;br /&gt;
=== Synchronizing OpenEmbedded With Git ===&lt;br /&gt;
&lt;br /&gt;
Just like any tree, OpenEmbedded has several branches. In this case they are called 'development branches'. Some noteworthy ones include org.openembedded.dev (the default) and org.openembedded.stable . &lt;br /&gt;
&lt;br /&gt;
To syncronize the OpenEmbedded tree, run&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 git clone git://git.openembedded.net/openembedded ${OE_HOME}/org.openembedded.dev &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that last argument could be any directory name (git will create the directory if it doesn't exist). Sticking to 'good convention', the directory name was chosen to reflect the default development branch, org.openembedded.dev . See the [http://wiki.openembedded.net/index.php/GitPhraseBook OE GitPhraseBook] for more info on checking out different branches. &lt;br /&gt;
&lt;br /&gt;
To update the tree, run&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 cd ${OE_HOME}/org.openembedded.dev&lt;br /&gt;
 git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You probably also want to use an fso branch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 git checkout -b fso/milestone5.5 origin/fso/milestone5.5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For further information on Git, see [http://git-scm.com The Git Homepage].&lt;br /&gt;
&lt;br /&gt;
Also, please explore the directory structure of the OpenEmbedded build tree. Take a few moments to inspect the different types of BitBake files (.bbclass, .bb, .inc, etc). This helps one to become familiar with recipe syntax and the inheritance system. Of particular note, please read the file 'local.conf.sample'. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 org.openembedded.dev&lt;br /&gt;
 |-- classes&lt;br /&gt;
 |   |-- rootfs_ipk.bbclass&lt;br /&gt;
 |   `-- xorg-module.bbclass&lt;br /&gt;
 |-- conf&lt;br /&gt;
 |   `-- local.conf.sample&lt;br /&gt;
 |   |-- distro&lt;br /&gt;
 |   |   `-- angstrom-2008.1.conf&lt;br /&gt;
 |   |-- machine&lt;br /&gt;
 |   |   |-- om-gta01.conf&lt;br /&gt;
 |   |   `-- om-gta02.conf&lt;br /&gt;
 `-- packages&lt;br /&gt;
     |-- tangogps&lt;br /&gt;
     |   |-- tangogps.inc&lt;br /&gt;
     |   `-- tangogps_0.9.3.bb&lt;br /&gt;
     `-- images&lt;br /&gt;
         |-- console-image.bb&lt;br /&gt;
         |-- fso-console-image.bb&lt;br /&gt;
         |-- fso-image.bb&lt;br /&gt;
         |-- openmoko-image.bb&lt;br /&gt;
         |-- opie-image.bb&lt;br /&gt;
         `-- x11-image.bb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== local.conf ===&lt;br /&gt;
&lt;br /&gt;
If you explored local.conf.example, then you would be aware that there are some very important variables to be set like MACHINE, DISTRO, and BBFILES, among many others. This is done in a configuration file (local.conf) inside the build directory. &lt;br /&gt;
&lt;br /&gt;
'''Note:''' Using BitBake and OE for cross-compilation require that each target-distro combination is built in a separate directory, so that no version collisions occur. Concurrent builds may safely share the same DL_DIR though. This would suggest that a safe name for build directories is of the form ${OE_HOME}/build-${MACHINE}-${DISTRO}. Of course, if you don't plan on building for more than one machine-distro combination, then the naming of this directory is arbitrary. For the purpose of this example, we will use the convention ${OE_HOME}/build-${MACHINE} . &lt;br /&gt;
&lt;br /&gt;
Now, create the 'local.conf' configuration file. Notice that the CACHE and TMPDIR variables are neatly kept within the build directory while the DL_DIR variable is outside of the build directory, so that concurrent builds may reuse the same source packages. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 OE_HOME ?= &amp;quot;${HOME}/oe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 MACHINE = &amp;quot;om-gta02&amp;quot;&lt;br /&gt;
 DISTRO = &amp;quot;openmoko&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 DL_DIR = &amp;quot;${OE_HOME}/downloads&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 BBFILES := &amp;quot;${OE_HOME}/org.openembedded.dev/recipes/*/*.bb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 BBMASK = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 TMPDIR = &amp;quot;${OE_HOME}/build-${MACHINE}/tmp&amp;quot;&lt;br /&gt;
 CACHE = &amp;quot;${TMPDIR}/cache&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 IMAGE_FSTYPES = &amp;quot;jffs2 tar.gz&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 ENABLE_BINARY_LOCALE_GENERATION = &amp;quot;0&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The BBFILES variable is also of prime importance! It tells bitbake where to locate all available recipes for a build. The OpenEmbedded build environment is almost completely ready to go, with just one more minor step left.&lt;br /&gt;
&lt;br /&gt;
If you're not using a distro-provided makefile setup, and your site.conf (or local.conf) doesn't include the line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SRCPV = &amp;quot;${@bb.fetch.get_srcrev(d)}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
then you may find bitbake complaining along the lines of&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ERROR: EOL while scanning string literal (&amp;lt;string&amp;gt;, line 1) while parsing .../openmoko/org.openembedded.dev/recipes/freesmartphone/frameworkd_git.bb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
According to mwester on irc #openmoko-cdevel, referring to the use of the SRCPV line, &amp;quot;That's a temporary hack, we hope -- if all goes well that should end up 'upstream'.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== setup-env ===&lt;br /&gt;
&lt;br /&gt;
For quick and easy initialization of the OpenEmbedded build environment, it is often suggested that the developer create a 'setup-env' script to source from the command line. This script can be called to initialize the most important of environment variables. Below is a very basic example of a setup-env script. &lt;br /&gt;
&lt;br /&gt;
setup-env for Bash users:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 [[ -z ${OE_HOME} ]] &amp;amp;&amp;amp; export OE_HOME=${HOME}/oe&lt;br /&gt;
 [[ -z ${MACHINE} ]] &amp;amp;&amp;amp; export MACHINE=om-gta02&lt;br /&gt;
 export BBPATH=${OE_HOME}/build-${MACHINE}:${OE_HOME}/org.openembedded.dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
setup-env for Tcsh users:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 [[ -z ${OE_HOME} ]] &amp;amp;&amp;amp; setenv OE_HOME ${HOME}/oe&lt;br /&gt;
 [[ -z ${MACHINE} ]] &amp;amp;&amp;amp; setenv MACHINE om-gta02&lt;br /&gt;
 setenv BBPATH ${OE_HOME}/build-${MACHINE}:${OE_HOME}/org.openembedded.dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To invoke the setup-env script in bash, run 'source setup-env'. In tcsh, run '. setup-env'.&lt;br /&gt;
&lt;br /&gt;
See the section entitled [http://wiki.openmoko.org/wiki/OpenEmbedded#BitBake_Overlays BitBake Overlays] for an example of a more complicated setup-env script.&lt;br /&gt;
&lt;br /&gt;
=== Testing the OE Build Environment ===&lt;br /&gt;
&lt;br /&gt;
That's it! Now you should be prepared to bake your first BitBake recipe. &lt;br /&gt;
&lt;br /&gt;
 bitbake helloworld&lt;br /&gt;
&lt;br /&gt;
=== Building an Image ===&lt;br /&gt;
&lt;br /&gt;
There are several full filesystem images which can be built directly with OpenEmbedded using a single command. These include openmoko-image, fso-image, and so on. The image definitions can be found under ${OE_HOME}/org.openembedded.dev/packages/images&lt;br /&gt;
&lt;br /&gt;
A good place to start is with &lt;br /&gt;
&lt;br /&gt;
 bitbake fso-image&lt;br /&gt;
&lt;br /&gt;
That concludes this introduction to BitBake and OpenEmbedded. Good luck!&lt;br /&gt;
&lt;br /&gt;
=== Other References ===&lt;br /&gt;
&lt;br /&gt;
Please feel free to refer to other online sources of information for [http://bitbake.berlios.de BitBake], [http://www.openembedded.org OpenEmbedded], and the [http://www.angstrom-distribution.org Angstrom Distribution] to name a few.&lt;br /&gt;
&lt;br /&gt;
== Broken Builds and Bug Reporting ==&lt;br /&gt;
&lt;br /&gt;
Using the org.openembedded.dev branch can often result in broken builds. For that reason, it is usually a good idea to limit synchronizing with the repository only after successfully building an image. Some may even want to archive the tree and build directory after an image is built.&lt;br /&gt;
&lt;br /&gt;
Now in the case that an image does not successfully build, it is not always necessarily a bug or a new bug. The problem might have to do with some conflicting software on the workstation, and it could be a bug that is already know and being fixed.&lt;br /&gt;
&lt;br /&gt;
Below are a few useful steps to follow when a build does not successfully complete:&lt;br /&gt;
&lt;br /&gt;
* Identify the package that failed to build&lt;br /&gt;
** Find a line near the bottom of your output that matches &amp;quot;ERROR: ... failed&amp;quot; or &amp;quot;NOTE: ... failed&amp;quot;. The name of the package should be contained in the '...'&lt;br /&gt;
* If there is a similar, more stable version in ${OE_HOME}/org.openembedded.dev/packages, then try to use that instead&lt;br /&gt;
** bitbake -c clean somepackage &amp;amp;&amp;amp; bitbake -b ${OE_HOME}/org.openembedded.dev/packages/somepackage/somepackage_0.1.bb&lt;br /&gt;
** add PREFERRED_VERSION_somepackage = &amp;quot;0.1&amp;quot; to local.conf&lt;br /&gt;
* Read the BitBake log, as well as config.log if it exists&lt;br /&gt;
** Find the log file. There should be a line near the bottom of your output that matches &amp;quot;ERROR: see log in ...&amp;quot;, where '...' contains the log file name. These are usually of the form log.do_compile.12345 or log.do_configure.12345, etc. &lt;br /&gt;
* Try to identify the root cause of the error&lt;br /&gt;
** In many cases, if one examines log.do_configure, only the error is reported, but not the cause of the error&lt;br /&gt;
** Most packages that build with autotools will also have a config.log file that contains the exact cause of the error&lt;br /&gt;
* If you can fix the error, and the error is local to your workstation, and not really a bug, then fix the error yourself.&lt;br /&gt;
* Otherwise, check the [http://bugs.openembedded.net OpenEmbedded Bugzilla] to see if the error is known.&lt;br /&gt;
* If a solution is already available, then try it out. If you can fix the error, then do so. If your solution is correct, please post all relevent patches to the [http://bugs.openembedded.net OpenEmbedded Bugzilla]&lt;br /&gt;
&lt;br /&gt;
=== Where to Report Bugs ===&lt;br /&gt;
&lt;br /&gt;
Authentic bugs should be reported to the [http://bugs.openembedded.net OpenEmbedded Bugzilla]&lt;br /&gt;
&lt;br /&gt;
== Tips &amp;amp; Tricks ==&lt;br /&gt;
&lt;br /&gt;
=== Setting the PREFERRED_VERSION for a package ===&lt;br /&gt;
&lt;br /&gt;
If a certain package is known to not build, and there is a less recent / more stable version of that package, then a good way to avoid repetitive encounters with known build failures is to use preferred versions of packages. &lt;br /&gt;
&lt;br /&gt;
For example, if building gcc-4.2.4 constantly failed, then it would be wise to edit local.conf and set PREFERRED_VERSION_gcc = &amp;quot;4.1.2&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Screen is Your Friend ===&lt;br /&gt;
&lt;br /&gt;
If you happen to be building all of your packages remotely on a server, using an ssh session, the session might occasionally be interrupted and the connection could be terminated. A similar event could occur if your X server suddenly craches. If in the process of building an image with bitbake, this means that the build process will terminate as well. &lt;br /&gt;
&lt;br /&gt;
In order to ensure that a build continues in the presence of communication failures, it is advisable to use the [http://www.gnu.org/software/screen GNU Screen] utility. Screen is also very useful when performing several concurrent OpenEmbedded builds for different machine-distro combinations.&lt;br /&gt;
&lt;br /&gt;
Screen installation varies with your OS and distribution.&lt;br /&gt;
&lt;br /&gt;
=== BitBake Overlays ===&lt;br /&gt;
&lt;br /&gt;
Bitbake overlays are useful for OpenEmbedded developers to eliminate bugs or package software without disturbiing the OpenEmbedded tree itself. Overlays are very similar in structure to the OpenEmbedded tree, but are usually only sparsely populated. Non-sparsely poplulated overlays are actually more closely related to separate development branches. Good convention would suggest to always name the overlay appropriately. &lt;br /&gt;
&lt;br /&gt;
Below is an example of two overlays, three build directories, a setup-env script, and a local.conf where the developer has multiple build targets as well as multiple BitBake overlays.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 oe&lt;br /&gt;
 |-- build-beagleboard&lt;br /&gt;
 |   |-- conf&lt;br /&gt;
 |   |   `-- local.conf&lt;br /&gt;
 |   `-- tmp&lt;br /&gt;
 |-- build-om-gta02&lt;br /&gt;
 |   |-- conf&lt;br /&gt;
 |   |   `-- local.conf&lt;br /&gt;
 |   `-- tmp&lt;br /&gt;
 |-- build-ts72xx&lt;br /&gt;
 |   |-- conf&lt;br /&gt;
 |   |   `-- local.conf&lt;br /&gt;
 |   `-- tmp&lt;br /&gt;
 |-- com.somecompany.dev&lt;br /&gt;
 |   |-- conf&lt;br /&gt;
 |   |   `-- machine&lt;br /&gt;
 |   `-- packages&lt;br /&gt;
 |       |-- images&lt;br /&gt;
 |       |   `-- console-image.bb&lt;br /&gt;
 |       `-- rxtx&lt;br /&gt;
 |           |-- files&lt;br /&gt;
 |           |-- rxtx-fixes-from-debian.patch&lt;br /&gt;
 |           `-- rxtx_2.1-7r2.bb&lt;br /&gt;
 |-- org.openembedded.dev&lt;br /&gt;
 |   |-- conf&lt;br /&gt;
 |   |   `-- machine&lt;br /&gt;
 |   `-- packages&lt;br /&gt;
 |       `-- images&lt;br /&gt;
 |-- org.openmoko.dev&lt;br /&gt;
 |   |-- conf&lt;br /&gt;
 |   |   `-- machine&lt;br /&gt;
 |   `-- packages&lt;br /&gt;
 |       `-- tangogps&lt;br /&gt;
 |           |-- tangogps.inc&lt;br /&gt;
 |           `-- tangogps_0.9.3.bb&lt;br /&gt;
 `-- setup-env&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example of the setup-env script with multiple overlays and multiple build targets is below. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 [[ -z ${OE_HOME} ]] &amp;amp;&amp;amp; export OE_HOME=${HOME}/oe&lt;br /&gt;
 [[ -z ${MACHINE} ]] &amp;amp;&amp;amp; export MACHINE=om-gta02&lt;br /&gt;
&lt;br /&gt;
 unset BBPATH&lt;br /&gt;
&lt;br /&gt;
 case &amp;quot;${MACHINE}&amp;quot; in&lt;br /&gt;
        &amp;quot;beagleboard&amp;quot; | &amp;quot;ts72xx&amp;quot; ) &lt;br /&gt;
                BBPATH=&amp;quot;${OE_HOME}/com.somecompany.dev&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
        &amp;quot;om-gta02&amp;quot;)&lt;br /&gt;
                BBPATH=&amp;quot;${OE_HOME}/org.openmoko.dev&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
        *)&lt;br /&gt;
                echo -e &amp;quot;error: unsupported machine&amp;quot;&lt;br /&gt;
                 exit -1&lt;br /&gt;
         ;;&lt;br /&gt;
 esac&lt;br /&gt;
&lt;br /&gt;
 export BBPATH=${BBPATH}:${OE_HOME}/build-${MACHINE}:${OE_HOME}/org.openembedded.dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the overlay-specific BBPATH entry ''precedes'' the default BBPATH entries.&lt;br /&gt;
&lt;br /&gt;
Next, observe the changes necessary for local.conf in order to use a specific overlay (in this case org.openmoko.dev).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 BBFILES := &amp;quot;${OE_HOME}/org.openembedded.dev/packages/*/*.bb&amp;quot;&lt;br /&gt;
 BBFILES += &amp;quot; ${OE_HOME}/org.openmoko.dev/packages/*/*.bb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 BBFILE_COLLECTIONS = &amp;quot;upstream moko&amp;quot;&lt;br /&gt;
 BBFILE_PATTERN_upstream = &amp;quot;${OE_HOME}/org.openembedded.dev&amp;quot;&lt;br /&gt;
 BBFILE_PRIORITY_upstream = &amp;quot;0&amp;quot;&lt;br /&gt;
 BBFILE_PATTERN_moko = &amp;quot;${OE_HOME}/org.openmoko.dev&amp;quot;&lt;br /&gt;
 BBFILE_PRIORITY_moko = &amp;quot;1&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order for the overlay to be detected by BitBake, the above variables need to be defined in the local.conf file. It is possible to include more than one overlay. For each overlay, add a separate  BBFILES += statement, an entry in BBFILE_COLLECTIONS, a BBFILE_PATTERN, and BBFILE_PRIORITY. Remember to include at least one space (' ') between each BBFILES entry.&lt;br /&gt;
&lt;br /&gt;
=== Useful BitBake Commands ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 # list all of the tasks defined for a given package_name&lt;br /&gt;
 bitbake -c listtasks &amp;lt;package_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # clean the work directory for a specific package&lt;br /&gt;
 bitbake -c clean &amp;lt;package_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # build a specific recipe&lt;br /&gt;
 bitbake -b &amp;lt;path/to/some/recipe.bb&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # if files or variables not found debug with&lt;br /&gt;
 bitbake -D -D -D&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Developer]]&lt;br /&gt;
[[Category:System Developers]]&lt;/div&gt;</summary>
		<author><name>TonyGarnockJones</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/OpenEmbedded</id>
		<title>OpenEmbedded</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/OpenEmbedded"/>
				<updated>2009-05-13T20:20:36Z</updated>
		
		<summary type="html">&lt;p&gt;TonyGarnockJones: /* local.conf */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|OpenEmbedded}}&lt;br /&gt;
&lt;br /&gt;
Openmoko, our distribution, is built using OpenEmbedded.  OpenEmbedded will:&lt;br /&gt;
&lt;br /&gt;
* Generate (cross-compile) software packages for multiple embedded targets.&lt;br /&gt;
* Handle different hardware architectures, and support multiple releases across those architectures. &lt;br /&gt;
&lt;br /&gt;
For more information please see the [http://www.openembedded.org/ Open Embedded] website.&lt;br /&gt;
&lt;br /&gt;
== Building the Openmoko Distribution with OpenEmbedded ==&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If you are an application developer, you probably do not want to build OpenEmbedded from scratch. For compiling simple applications with few library dependencies (including boot-loader and kernel), consider using our prebuilt [[Toolchain]]. For more complex applications with many library dependencies, download a prebuilt [[OpenEmbedded Torrent]]. &lt;br /&gt;
&lt;br /&gt;
Building Openmoko from scratch is a time-, cpu- and diskspace-consuming process which should only be done if you are a system integrator and want to customize your Openmoko distribution.&lt;br /&gt;
&lt;br /&gt;
=== Simplified Instructions: MokoMakefile ===&lt;br /&gt;
&lt;br /&gt;
For beginners who wish to customize their Openmoko distribution, the facility called [[MokoMakefile]] simplifies building OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
=== Quick Start: OpenEmbedded Torrent ===&lt;br /&gt;
&lt;br /&gt;
If you are a system developer and would like to get up-to-speed as quickly as possible, then download an [[OpenEmbedded Torrent]].&lt;br /&gt;
&lt;br /&gt;
== From Scratch: OpenEmbedded ==&lt;br /&gt;
&lt;br /&gt;
Beginner Openmoko developers who would prefer to have full control over their OpenEmbedded build environment should follow the instructions below.&lt;br /&gt;
&lt;br /&gt;
=== Preparations ===&lt;br /&gt;
&lt;br /&gt;
Several prerequisite software components are necessary in order to have a fully functional OpenEmbedded build environment. However, setup and installation varies depending on the operating system installed on your workstation. The [http://wiki.openembedded.net/index.php OpenEmbedded Wiki] provides [http://wiki.openembedded.net/index.php/OEandYourDistro setup instructions] for FreeBSD, Mac OS X, and most major Linux distributions, of course.&lt;br /&gt;
&lt;br /&gt;
For OpenEmbedded installation instructions please refer to [http://wiki.openembedded.net/index.php/OEandYourDistro OEandYourDistro]. &lt;br /&gt;
&lt;br /&gt;
=== ${OE_HOME} ===&lt;br /&gt;
&lt;br /&gt;
Assuming that you have installed all prerequisite software, you are now ready to create a directory for all of your OpenEmbedded (OE) related work. We will refer to OE_HOME in a generic way, but for argument's sake, assume that it is equal to ${HOME}/oe. You should expect ${OE_HOME} to grow tremendously in size, up to approximately 8GB or larger in some cases. Also be aware, that a full OE build could require several hours of constant building, which may inhibit the performance of your computer while performing other tasks. Replace ${HOME}/oe with your preferred location.&lt;br /&gt;
&lt;br /&gt;
For Bash users:&lt;br /&gt;
 export OE_HOME=${HOME}/oe&lt;br /&gt;
&lt;br /&gt;
For Tcsh users:&lt;br /&gt;
 setenv OE_HOME ${HOME}/oe&lt;br /&gt;
&lt;br /&gt;
Next, run 'mkdir -p ${OE_HOME}' to create the directory. &lt;br /&gt;
&lt;br /&gt;
=== Synchronizing OpenEmbedded With Git ===&lt;br /&gt;
&lt;br /&gt;
Just like any tree, OpenEmbedded has several branches. In this case they are called 'development branches'. Some noteworthy ones include org.openembedded.dev (the default) and org.openembedded.stable . &lt;br /&gt;
&lt;br /&gt;
To syncronize the OpenEmbedded tree, run&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 git clone git://git.openembedded.net/openembedded ${OE_HOME}/org.openembedded.dev &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that last argument could be any directory name (git will create the directory if it doesn't exist). Sticking to 'good convention', the directory name was chosen to reflect the default development branch, org.openembedded.dev . See the [http://wiki.openembedded.net/index.php/GitPhraseBook OE GitPhraseBook] for more info on checking out different branches. &lt;br /&gt;
&lt;br /&gt;
To update the tree, run&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 cd ${OE_HOME}/org.openembedded.dev&lt;br /&gt;
 git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You probably also want to use an fso branch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 git checkout -b fso/milestone5.5 origin/fso/milestone5.5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For further information on Git, see [http://git-scm.com The Git Homepage].&lt;br /&gt;
&lt;br /&gt;
Also, please explore the directory structure of the OpenEmbedded build tree. Take a few moments to inspect the different types of BitBake files (.bbclass, .bb, .inc, etc). This helps one to become familiar with recipe syntax and the inheritance system. Of particular note, please read the file 'local.conf.sample'. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 org.openembedded.dev&lt;br /&gt;
 |-- classes&lt;br /&gt;
 |   |-- rootfs_ipk.bbclass&lt;br /&gt;
 |   `-- xorg-module.bbclass&lt;br /&gt;
 |-- conf&lt;br /&gt;
 |   `-- local.conf.sample&lt;br /&gt;
 |   |-- distro&lt;br /&gt;
 |   |   `-- angstrom-2008.1.conf&lt;br /&gt;
 |   |-- machine&lt;br /&gt;
 |   |   |-- om-gta01.conf&lt;br /&gt;
 |   |   `-- om-gta02.conf&lt;br /&gt;
 `-- packages&lt;br /&gt;
     |-- tangogps&lt;br /&gt;
     |   |-- tangogps.inc&lt;br /&gt;
     |   `-- tangogps_0.9.3.bb&lt;br /&gt;
     `-- images&lt;br /&gt;
         |-- console-image.bb&lt;br /&gt;
         |-- fso-console-image.bb&lt;br /&gt;
         |-- fso-image.bb&lt;br /&gt;
         |-- openmoko-image.bb&lt;br /&gt;
         |-- opie-image.bb&lt;br /&gt;
         `-- x11-image.bb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== local.conf ===&lt;br /&gt;
&lt;br /&gt;
If you explored local.conf.example, then you would be aware that there are some very important variables to be set like MACHINE, DISTRO, and BBFILES, among many others. This is done in a configuration file (local.conf) inside the build directory. &lt;br /&gt;
&lt;br /&gt;
'''Note:''' Using BitBake and OE for cross-compilation require that each target-distro combination is built in a separate directory, so that no version collisions occur. Concurrent builds may safely share the same DL_DIR though. This would suggest that a safe name for build directories is of the form ${OE_HOME}/build-${MACHINE}-${DISTRO}. Of course, if you don't plan on building for more than one machine-distro combination, then the naming of this directory is arbitrary. For the purpose of this example, we will use the convention ${OE_HOME}/build-${MACHINE} . &lt;br /&gt;
&lt;br /&gt;
Now, create the 'local.conf' configuration file. Notice that the CACHE and TMPDIR variables are neatly kept within the build directory while the DL_DIR variable is outside of the build directory, so that concurrent builds may reuse the same source packages. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 OE_HOME ?= &amp;quot;${HOME}/oe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 MACHINE = &amp;quot;om-gta02&amp;quot;&lt;br /&gt;
 DISTRO = &amp;quot;openmoko&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 DL_DIR = &amp;quot;${OE_HOME}/downloads&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 BBFILES := &amp;quot;${OE_HOME}/org.openembedded.dev/recipes/*/*.bb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 BBMASK = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 TMPDIR = &amp;quot;${OE_HOME}/build-${MACHINE}/tmp&amp;quot;&lt;br /&gt;
 CACHE = &amp;quot;${TMPDIR}/cache&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 IMAGE_FSTYPES = &amp;quot;jffs2 tar.gz&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 ENABLE_BINARY_LOCALE_GENERATION = &amp;quot;0&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The BBFILES variable is also of prime importance! It tells bitbake where to locate all available recipes for a build. The OpenEmbedded build environment is almost completely ready to go, with just one more minor step left.&lt;br /&gt;
&lt;br /&gt;
If you're not using a distro-provided makefile setup, and your site.conf (or local.conf) doesn't include the line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SRCPV = &amp;quot;${@bb.fetch.get_srcrev(d)}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
then you may find bitbake complaining along the lines of&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ERROR: EOL while scanning string literal (&amp;lt;string&amp;gt;, line 1) while parsing .../openmoko/org.openembedded.dev/recipes/freesmartphone/frameworkd_git.bb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
According to mwester on irc #openmoko-cdevel, referring to the use of the SRCPV line, &amp;quot;That's a temporary hack, we hope -- if all goes well that should end up 'upstream'.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== setup-env ===&lt;br /&gt;
&lt;br /&gt;
For quick and easy initialization of the OpenEmbedded build environment, it is often suggested that the developer create a 'setup-env' script to source from the command line. This script can be called to initialize the most important of environment variables. Below is a very basic example of a setup-env script. &lt;br /&gt;
&lt;br /&gt;
setup-env for Bash users:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 [[ -z ${OE_HOME} ]] &amp;amp;&amp;amp; export OE_HOME=${HOME}/oe&lt;br /&gt;
 [[ -z ${MACHINE} ]] &amp;amp;&amp;amp; export MACHINE=om-gta02&lt;br /&gt;
 export BBPATH=${OE_HOME}/build-${MACHINE}:${OE_HOME}/org.openembedded.dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
setup-env for Tcsh users:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 [[ -z ${OE_HOME} ]] &amp;amp;&amp;amp; setenv OE_HOME ${HOME}/oe&lt;br /&gt;
 [[ -z ${MACHINE} ]] &amp;amp;&amp;amp; setenv MACHINE om-gta02&lt;br /&gt;
 setenv BBPATH ${OE_HOME}/build-${MACHINE}:${OE_HOME}/org.openembedded.dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To invoke the setup-env script in bash, run 'source setup-env'. In tcsh, run '. setup-env'.&lt;br /&gt;
&lt;br /&gt;
See the section entitled [http://wiki.openmoko.org/wiki/OpenEmbedded#BitBake_Overlays BitBake Overlays] for an example of a more complicated setup-env script.&lt;br /&gt;
&lt;br /&gt;
=== Testing the OE Build Environment ===&lt;br /&gt;
&lt;br /&gt;
That's it! Now you should be prepared to bake your first BitBake recipe. &lt;br /&gt;
&lt;br /&gt;
 bitbake helloworld&lt;br /&gt;
&lt;br /&gt;
=== Building an Image ===&lt;br /&gt;
&lt;br /&gt;
There are several full filesystem images which can be built directly with OpenEmbedded using a single command. These include openmoko-image, fso-image, and so on. The image definitions can be found under ${OE_HOME}/org.openembedded.dev/packages/images&lt;br /&gt;
&lt;br /&gt;
A good place to start is with &lt;br /&gt;
&lt;br /&gt;
 bitbake fso-image&lt;br /&gt;
&lt;br /&gt;
That concludes this introduction to BitBake and OpenEmbedded. Good luck!&lt;br /&gt;
&lt;br /&gt;
=== Other References ===&lt;br /&gt;
&lt;br /&gt;
Please feel free to refer to other online sources of information for [http://bitbake.berlios.de BitBake], [http://www.openembedded.org OpenEmbedded], and the [http://www.angstrom-distribution.org Angstrom Distribution] to name a few.&lt;br /&gt;
&lt;br /&gt;
== Broken Builds and Bug Reporting ==&lt;br /&gt;
&lt;br /&gt;
Using the org.openembedded.dev branch can often result in broken builds. For that reason, it is usually a good idea to limit synchronizing with the repository only after successfully building an image. Some may even want to archive the tree and build directory after an image is built.&lt;br /&gt;
&lt;br /&gt;
Now in the case that an image does not successfully build, it is not always necessarily a bug or a new bug. The problem might have to do with some conflicting software on the workstation, and it could be a bug that is already know and being fixed.&lt;br /&gt;
&lt;br /&gt;
Below are a few useful steps to follow when a build does not successfully complete:&lt;br /&gt;
&lt;br /&gt;
* Identify the package that failed to build&lt;br /&gt;
** Find a line near the bottom of your output that matches &amp;quot;ERROR: ... failed&amp;quot; or &amp;quot;NOTE: ... failed&amp;quot;. The name of the package should be contained in the '...'&lt;br /&gt;
* If there is a similar, more stable version in ${OE_HOME}/org.openembedded.dev/packages, then try to use that instead&lt;br /&gt;
** bitbake -c clean somepackage &amp;amp;&amp;amp; bitbake -b ${OE_HOME}/org.openembedded.dev/packages/somepackage/somepackage_0.1.bb&lt;br /&gt;
** add PREFERRED_VERSION_somepackage = &amp;quot;0.1&amp;quot; to local.conf&lt;br /&gt;
* Read the BitBake log, as well as config.log if it exists&lt;br /&gt;
** Find the log file. There should be a line near the bottom of your output that matches &amp;quot;ERROR: see log in ...&amp;quot;, where '...' contains the log file name. These are usually of the form log.do_compile.12345 or log.do_configure.12345, etc. &lt;br /&gt;
* Try to identify the root cause of the error&lt;br /&gt;
** In many cases, if one examines log.do_configure, only the error is reported, but not the cause of the error&lt;br /&gt;
** Most packages that build with autotools will also have a config.log file that contains the exact cause of the error&lt;br /&gt;
* If you can fix the error, and the error is local to your workstation, and not really a bug, then fix the error yourself.&lt;br /&gt;
* Otherwise, check the [http://bugs.openembedded.net OpenEmbedded Bugzilla] to see if the error is known.&lt;br /&gt;
* If a solution is already available, then try it out. If you can fix the error, then do so. If your solution is correct, please post all relevent patches to the [http://bugs.openembedded.net OpenEmbedded Bugzilla]&lt;br /&gt;
&lt;br /&gt;
=== Where to Report Bugs ===&lt;br /&gt;
&lt;br /&gt;
Authentic bugs should be reported to the [http://bugs.openembedded.net OpenEmbedded Bugzilla]&lt;br /&gt;
&lt;br /&gt;
== Tips &amp;amp; Tricks ==&lt;br /&gt;
&lt;br /&gt;
=== Setting the PREFERRED_VERSION for a package ===&lt;br /&gt;
&lt;br /&gt;
If a certain package is known to not build, and there is a less recent / more stable version of that package, then a good way to avoid repetitive encounters with known build failures is to use preferred versions of packages. &lt;br /&gt;
&lt;br /&gt;
For example, if building gcc-4.2.4 constantly failed, then it would be wise to edit local.conf and set PREFERRED_VERSION_gcc = &amp;quot;4.1.2&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Screen is Your Friend ===&lt;br /&gt;
&lt;br /&gt;
If you happen to be building all of your packages remotely on a server, using an ssh session, the session might occasionally be interrupted and the connection could be terminated. A similar event could occur if your X server suddenly craches. If in the process of building an image with bitbake, this means that the build process will terminate as well. &lt;br /&gt;
&lt;br /&gt;
In order to ensure that a build continues in the presence of communication failures, it is advisable to use the [http://www.gnu.org/software/screen GNU Screen] utility. Screen is also very useful when performing several concurrent OpenEmbedded builds for different machine-distro combinations.&lt;br /&gt;
&lt;br /&gt;
Screen installation varies with your OS and distribution.&lt;br /&gt;
&lt;br /&gt;
=== BitBake Overlays ===&lt;br /&gt;
&lt;br /&gt;
Bitbake overlays are useful for OpenEmbedded developers to eliminate bugs or package software without disturbiing the OpenEmbedded tree itself. Overlays are very similar in structure to the OpenEmbedded tree, but are usually only sparsely populated. Non-sparsely poplulated overlays are actually more closely related to separate development branches. Good convention would suggest to always name the overlay appropriately. &lt;br /&gt;
&lt;br /&gt;
Below is an example of two overlays, three build directories, a setup-env script, and a local.conf where the developer has multiple build targets as well as multiple BitBake overlays.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 oe&lt;br /&gt;
 |-- build-beagleboard&lt;br /&gt;
 |   |-- conf&lt;br /&gt;
 |   |   `-- local.conf&lt;br /&gt;
 |   `-- tmp&lt;br /&gt;
 |-- build-om-gta02&lt;br /&gt;
 |   |-- conf&lt;br /&gt;
 |   |   `-- local.conf&lt;br /&gt;
 |   `-- tmp&lt;br /&gt;
 |-- build-ts72xx&lt;br /&gt;
 |   |-- conf&lt;br /&gt;
 |   |   `-- local.conf&lt;br /&gt;
 |   `-- tmp&lt;br /&gt;
 |-- com.somecompany.dev&lt;br /&gt;
 |   |-- conf&lt;br /&gt;
 |   |   `-- machine&lt;br /&gt;
 |   `-- packages&lt;br /&gt;
 |       |-- images&lt;br /&gt;
 |       |   `-- console-image.bb&lt;br /&gt;
 |       `-- rxtx&lt;br /&gt;
 |           |-- files&lt;br /&gt;
 |           |-- rxtx-fixes-from-debian.patch&lt;br /&gt;
 |           `-- rxtx_2.1-7r2.bb&lt;br /&gt;
 |-- org.openembedded.dev&lt;br /&gt;
 |   |-- conf&lt;br /&gt;
 |   |   `-- machine&lt;br /&gt;
 |   `-- packages&lt;br /&gt;
 |       `-- images&lt;br /&gt;
 |-- org.openmoko.dev&lt;br /&gt;
 |   |-- conf&lt;br /&gt;
 |   |   `-- machine&lt;br /&gt;
 |   `-- packages&lt;br /&gt;
 |       `-- tangogps&lt;br /&gt;
 |           |-- tangogps.inc&lt;br /&gt;
 |           `-- tangogps_0.9.3.bb&lt;br /&gt;
 `-- setup-env&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example of the setup-env script with multiple overlays and multiple build targets is below. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 [[ -z ${OE_HOME} ]] &amp;amp;&amp;amp; export OE_HOME=${HOME}/oe&lt;br /&gt;
 [[ -z ${MACHINE} ]] &amp;amp;&amp;amp; export MACHINE=om-gta02&lt;br /&gt;
&lt;br /&gt;
 unset BBPATH&lt;br /&gt;
&lt;br /&gt;
 case &amp;quot;${MACHINE}&amp;quot; in&lt;br /&gt;
        &amp;quot;beagleboard&amp;quot; | &amp;quot;ts72xx&amp;quot; ) &lt;br /&gt;
                BBPATH=&amp;quot;${OE_HOME}/com.somecompany.dev&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
        &amp;quot;om-gta02&amp;quot;)&lt;br /&gt;
                BBPATH=&amp;quot;${OE_HOME}/org.openmoko.dev&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
        *)&lt;br /&gt;
                echo -e &amp;quot;error: unsupported machine&amp;quot;&lt;br /&gt;
                 exit -1&lt;br /&gt;
         ;;&lt;br /&gt;
 esac&lt;br /&gt;
&lt;br /&gt;
 export BBPATH=${BBPATH}:${OE_HOME}/build-${MACHINE}:${OE_HOME}/org.openembedded.dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the overlay-specific BBPATH entry ''precedes'' the default BBPATH entries.&lt;br /&gt;
&lt;br /&gt;
Next, observe the changes necessary for local.conf in order to use a specific overlay (in this case org.openmoko.dev).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 BBFILES := &amp;quot;${OE_HOME}/org.openembedded.dev/packages/*/*.bb&amp;quot;&lt;br /&gt;
 BBFILES += &amp;quot; ${OE_HOME}/org.openmoko.dev/packages/*/*.bb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 BBFILE_COLLECTIONS = &amp;quot;upstream moko&amp;quot;&lt;br /&gt;
 BBFILE_PATTERN_upstream = &amp;quot;${OE_HOME}/org.openembedded.dev&amp;quot;&lt;br /&gt;
 BBFILE_PRIORITY_upstream = &amp;quot;0&amp;quot;&lt;br /&gt;
 BBFILE_PATTERN_moko = &amp;quot;${OE_HOME}/org.openmoko.dev&amp;quot;&lt;br /&gt;
 BBFILE_PRIORITY_moko = &amp;quot;1&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order for the overlay to be detected by BitBake, the above variables need to be defined in the local.conf file. It is possible to include more than one overlay. For each overlay, add a separate  BBFILES += statement, an entry in BBFILE_COLLECTIONS, a BBFILE_PATTERN, and BBFILE_PRIORITY. Remember to include at least one space (' ') between each BBFILES entry.&lt;br /&gt;
&lt;br /&gt;
=== Useful BitBake Commands ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 # list all of the tasks defined for a given package_name&lt;br /&gt;
 bitbake -c listtasks &amp;lt;package_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # clean the work directory for a specific package&lt;br /&gt;
 bitbake -c clean &amp;lt;package_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # build a specific recipe&lt;br /&gt;
 bitbake -b &amp;lt;path/to/some/recipe.bb&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # if files or variables not found debug with&lt;br /&gt;
 bitbake -D -D -D&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Developer]]&lt;br /&gt;
[[Category:System Developers]]&lt;/div&gt;</summary>
		<author><name>TonyGarnockJones</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/OpenEmbedded</id>
		<title>OpenEmbedded</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/OpenEmbedded"/>
				<updated>2009-05-13T20:18:53Z</updated>
		
		<summary type="html">&lt;p&gt;TonyGarnockJones: /* local.conf */ note on SRCPV in site.conf&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|OpenEmbedded}}&lt;br /&gt;
&lt;br /&gt;
Openmoko, our distribution, is built using OpenEmbedded.  OpenEmbedded will:&lt;br /&gt;
&lt;br /&gt;
* Generate (cross-compile) software packages for multiple embedded targets.&lt;br /&gt;
* Handle different hardware architectures, and support multiple releases across those architectures. &lt;br /&gt;
&lt;br /&gt;
For more information please see the [http://www.openembedded.org/ Open Embedded] website.&lt;br /&gt;
&lt;br /&gt;
== Building the Openmoko Distribution with OpenEmbedded ==&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If you are an application developer, you probably do not want to build OpenEmbedded from scratch. For compiling simple applications with few library dependencies (including boot-loader and kernel), consider using our prebuilt [[Toolchain]]. For more complex applications with many library dependencies, download a prebuilt [[OpenEmbedded Torrent]]. &lt;br /&gt;
&lt;br /&gt;
Building Openmoko from scratch is a time-, cpu- and diskspace-consuming process which should only be done if you are a system integrator and want to customize your Openmoko distribution.&lt;br /&gt;
&lt;br /&gt;
=== Simplified Instructions: MokoMakefile ===&lt;br /&gt;
&lt;br /&gt;
For beginners who wish to customize their Openmoko distribution, the facility called [[MokoMakefile]] simplifies building OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
=== Quick Start: OpenEmbedded Torrent ===&lt;br /&gt;
&lt;br /&gt;
If you are a system developer and would like to get up-to-speed as quickly as possible, then download an [[OpenEmbedded Torrent]].&lt;br /&gt;
&lt;br /&gt;
== From Scratch: OpenEmbedded ==&lt;br /&gt;
&lt;br /&gt;
Beginner Openmoko developers who would prefer to have full control over their OpenEmbedded build environment should follow the instructions below.&lt;br /&gt;
&lt;br /&gt;
=== Preparations ===&lt;br /&gt;
&lt;br /&gt;
Several prerequisite software components are necessary in order to have a fully functional OpenEmbedded build environment. However, setup and installation varies depending on the operating system installed on your workstation. The [http://wiki.openembedded.net/index.php OpenEmbedded Wiki] provides [http://wiki.openembedded.net/index.php/OEandYourDistro setup instructions] for FreeBSD, Mac OS X, and most major Linux distributions, of course.&lt;br /&gt;
&lt;br /&gt;
For OpenEmbedded installation instructions please refer to [http://wiki.openembedded.net/index.php/OEandYourDistro OEandYourDistro]. &lt;br /&gt;
&lt;br /&gt;
=== ${OE_HOME} ===&lt;br /&gt;
&lt;br /&gt;
Assuming that you have installed all prerequisite software, you are now ready to create a directory for all of your OpenEmbedded (OE) related work. We will refer to OE_HOME in a generic way, but for argument's sake, assume that it is equal to ${HOME}/oe. You should expect ${OE_HOME} to grow tremendously in size, up to approximately 8GB or larger in some cases. Also be aware, that a full OE build could require several hours of constant building, which may inhibit the performance of your computer while performing other tasks. Replace ${HOME}/oe with your preferred location.&lt;br /&gt;
&lt;br /&gt;
For Bash users:&lt;br /&gt;
 export OE_HOME=${HOME}/oe&lt;br /&gt;
&lt;br /&gt;
For Tcsh users:&lt;br /&gt;
 setenv OE_HOME ${HOME}/oe&lt;br /&gt;
&lt;br /&gt;
Next, run 'mkdir -p ${OE_HOME}' to create the directory. &lt;br /&gt;
&lt;br /&gt;
=== Synchronizing OpenEmbedded With Git ===&lt;br /&gt;
&lt;br /&gt;
Just like any tree, OpenEmbedded has several branches. In this case they are called 'development branches'. Some noteworthy ones include org.openembedded.dev (the default) and org.openembedded.stable . &lt;br /&gt;
&lt;br /&gt;
To syncronize the OpenEmbedded tree, run&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 git clone git://git.openembedded.net/openembedded ${OE_HOME}/org.openembedded.dev &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that last argument could be any directory name (git will create the directory if it doesn't exist). Sticking to 'good convention', the directory name was chosen to reflect the default development branch, org.openembedded.dev . See the [http://wiki.openembedded.net/index.php/GitPhraseBook OE GitPhraseBook] for more info on checking out different branches. &lt;br /&gt;
&lt;br /&gt;
To update the tree, run&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 cd ${OE_HOME}/org.openembedded.dev&lt;br /&gt;
 git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You probably also want to use an fso branch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 git checkout -b fso/milestone5.5 origin/fso/milestone5.5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For further information on Git, see [http://git-scm.com The Git Homepage].&lt;br /&gt;
&lt;br /&gt;
Also, please explore the directory structure of the OpenEmbedded build tree. Take a few moments to inspect the different types of BitBake files (.bbclass, .bb, .inc, etc). This helps one to become familiar with recipe syntax and the inheritance system. Of particular note, please read the file 'local.conf.sample'. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 org.openembedded.dev&lt;br /&gt;
 |-- classes&lt;br /&gt;
 |   |-- rootfs_ipk.bbclass&lt;br /&gt;
 |   `-- xorg-module.bbclass&lt;br /&gt;
 |-- conf&lt;br /&gt;
 |   `-- local.conf.sample&lt;br /&gt;
 |   |-- distro&lt;br /&gt;
 |   |   `-- angstrom-2008.1.conf&lt;br /&gt;
 |   |-- machine&lt;br /&gt;
 |   |   |-- om-gta01.conf&lt;br /&gt;
 |   |   `-- om-gta02.conf&lt;br /&gt;
 `-- packages&lt;br /&gt;
     |-- tangogps&lt;br /&gt;
     |   |-- tangogps.inc&lt;br /&gt;
     |   `-- tangogps_0.9.3.bb&lt;br /&gt;
     `-- images&lt;br /&gt;
         |-- console-image.bb&lt;br /&gt;
         |-- fso-console-image.bb&lt;br /&gt;
         |-- fso-image.bb&lt;br /&gt;
         |-- openmoko-image.bb&lt;br /&gt;
         |-- opie-image.bb&lt;br /&gt;
         `-- x11-image.bb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== local.conf ===&lt;br /&gt;
&lt;br /&gt;
If you explored local.conf.example, then you would be aware that there are some very important variables to be set like MACHINE, DISTRO, and BBFILES, among many others. This is done in a configuration file (local.conf) inside the build directory. &lt;br /&gt;
&lt;br /&gt;
'''Note:''' Using BitBake and OE for cross-compilation require that each target-distro combination is built in a separate directory, so that no version collisions occur. Concurrent builds may safely share the same DL_DIR though. This would suggest that a safe name for build directories is of the form ${OE_HOME}/build-${MACHINE}-${DISTRO}. Of course, if you don't plan on building for more than one machine-distro combination, then the naming of this directory is arbitrary. For the purpose of this example, we will use the convention ${OE_HOME}/build-${MACHINE} . &lt;br /&gt;
&lt;br /&gt;
Now, create the 'local.conf' configuration file. Notice that the CACHE and TMPDIR variables are neatly kept within the build directory while the DL_DIR variable is outside of the build directory, so that concurrent builds may reuse the same source packages. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 OE_HOME ?= &amp;quot;${HOME}/oe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 MACHINE = &amp;quot;om-gta02&amp;quot;&lt;br /&gt;
 DISTRO = &amp;quot;openmoko&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 DL_DIR = &amp;quot;${OE_HOME}/downloads&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 BBFILES := &amp;quot;${OE_HOME}/org.openembedded.dev/recipes/*/*.bb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 BBMASK = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 TMPDIR = &amp;quot;${OE_HOME}/build-${MACHINE}/tmp&amp;quot;&lt;br /&gt;
 CACHE = &amp;quot;${TMPDIR}/cache&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 IMAGE_FSTYPES = &amp;quot;jffs2 tar.gz&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 ENABLE_BINARY_LOCALE_GENERATION = &amp;quot;0&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The BBFILES variable is also of prime importance! It tells bitbake where to locate all available recipes for a build. The OpenEmbedded build environment is almost completely ready to go, with just one more minor step left.&lt;br /&gt;
&lt;br /&gt;
If you're not using a distro-provided makefile setup, and your site.conf (or local.conf) doesn't include the line&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SRCPV = &amp;quot;${@bb.fetch.get_srcrev(d)}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
then you may find bitbake complaining along the lines of&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ERROR: EOL while scanning string literal (&amp;lt;string&amp;gt;, line 1) while parsing .../openmoko/org.openembedded.dev/recipes/freesmartphone/frameworkd_git.bb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== setup-env ===&lt;br /&gt;
&lt;br /&gt;
For quick and easy initialization of the OpenEmbedded build environment, it is often suggested that the developer create a 'setup-env' script to source from the command line. This script can be called to initialize the most important of environment variables. Below is a very basic example of a setup-env script. &lt;br /&gt;
&lt;br /&gt;
setup-env for Bash users:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 [[ -z ${OE_HOME} ]] &amp;amp;&amp;amp; export OE_HOME=${HOME}/oe&lt;br /&gt;
 [[ -z ${MACHINE} ]] &amp;amp;&amp;amp; export MACHINE=om-gta02&lt;br /&gt;
 export BBPATH=${OE_HOME}/build-${MACHINE}:${OE_HOME}/org.openembedded.dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
setup-env for Tcsh users:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 [[ -z ${OE_HOME} ]] &amp;amp;&amp;amp; setenv OE_HOME ${HOME}/oe&lt;br /&gt;
 [[ -z ${MACHINE} ]] &amp;amp;&amp;amp; setenv MACHINE om-gta02&lt;br /&gt;
 setenv BBPATH ${OE_HOME}/build-${MACHINE}:${OE_HOME}/org.openembedded.dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To invoke the setup-env script in bash, run 'source setup-env'. In tcsh, run '. setup-env'.&lt;br /&gt;
&lt;br /&gt;
See the section entitled [http://wiki.openmoko.org/wiki/OpenEmbedded#BitBake_Overlays BitBake Overlays] for an example of a more complicated setup-env script.&lt;br /&gt;
&lt;br /&gt;
=== Testing the OE Build Environment ===&lt;br /&gt;
&lt;br /&gt;
That's it! Now you should be prepared to bake your first BitBake recipe. &lt;br /&gt;
&lt;br /&gt;
 bitbake helloworld&lt;br /&gt;
&lt;br /&gt;
=== Building an Image ===&lt;br /&gt;
&lt;br /&gt;
There are several full filesystem images which can be built directly with OpenEmbedded using a single command. These include openmoko-image, fso-image, and so on. The image definitions can be found under ${OE_HOME}/org.openembedded.dev/packages/images&lt;br /&gt;
&lt;br /&gt;
A good place to start is with &lt;br /&gt;
&lt;br /&gt;
 bitbake fso-image&lt;br /&gt;
&lt;br /&gt;
That concludes this introduction to BitBake and OpenEmbedded. Good luck!&lt;br /&gt;
&lt;br /&gt;
=== Other References ===&lt;br /&gt;
&lt;br /&gt;
Please feel free to refer to other online sources of information for [http://bitbake.berlios.de BitBake], [http://www.openembedded.org OpenEmbedded], and the [http://www.angstrom-distribution.org Angstrom Distribution] to name a few.&lt;br /&gt;
&lt;br /&gt;
== Broken Builds and Bug Reporting ==&lt;br /&gt;
&lt;br /&gt;
Using the org.openembedded.dev branch can often result in broken builds. For that reason, it is usually a good idea to limit synchronizing with the repository only after successfully building an image. Some may even want to archive the tree and build directory after an image is built.&lt;br /&gt;
&lt;br /&gt;
Now in the case that an image does not successfully build, it is not always necessarily a bug or a new bug. The problem might have to do with some conflicting software on the workstation, and it could be a bug that is already know and being fixed.&lt;br /&gt;
&lt;br /&gt;
Below are a few useful steps to follow when a build does not successfully complete:&lt;br /&gt;
&lt;br /&gt;
* Identify the package that failed to build&lt;br /&gt;
** Find a line near the bottom of your output that matches &amp;quot;ERROR: ... failed&amp;quot; or &amp;quot;NOTE: ... failed&amp;quot;. The name of the package should be contained in the '...'&lt;br /&gt;
* If there is a similar, more stable version in ${OE_HOME}/org.openembedded.dev/packages, then try to use that instead&lt;br /&gt;
** bitbake -c clean somepackage &amp;amp;&amp;amp; bitbake -b ${OE_HOME}/org.openembedded.dev/packages/somepackage/somepackage_0.1.bb&lt;br /&gt;
** add PREFERRED_VERSION_somepackage = &amp;quot;0.1&amp;quot; to local.conf&lt;br /&gt;
* Read the BitBake log, as well as config.log if it exists&lt;br /&gt;
** Find the log file. There should be a line near the bottom of your output that matches &amp;quot;ERROR: see log in ...&amp;quot;, where '...' contains the log file name. These are usually of the form log.do_compile.12345 or log.do_configure.12345, etc. &lt;br /&gt;
* Try to identify the root cause of the error&lt;br /&gt;
** In many cases, if one examines log.do_configure, only the error is reported, but not the cause of the error&lt;br /&gt;
** Most packages that build with autotools will also have a config.log file that contains the exact cause of the error&lt;br /&gt;
* If you can fix the error, and the error is local to your workstation, and not really a bug, then fix the error yourself.&lt;br /&gt;
* Otherwise, check the [http://bugs.openembedded.net OpenEmbedded Bugzilla] to see if the error is known.&lt;br /&gt;
* If a solution is already available, then try it out. If you can fix the error, then do so. If your solution is correct, please post all relevent patches to the [http://bugs.openembedded.net OpenEmbedded Bugzilla]&lt;br /&gt;
&lt;br /&gt;
=== Where to Report Bugs ===&lt;br /&gt;
&lt;br /&gt;
Authentic bugs should be reported to the [http://bugs.openembedded.net OpenEmbedded Bugzilla]&lt;br /&gt;
&lt;br /&gt;
== Tips &amp;amp; Tricks ==&lt;br /&gt;
&lt;br /&gt;
=== Setting the PREFERRED_VERSION for a package ===&lt;br /&gt;
&lt;br /&gt;
If a certain package is known to not build, and there is a less recent / more stable version of that package, then a good way to avoid repetitive encounters with known build failures is to use preferred versions of packages. &lt;br /&gt;
&lt;br /&gt;
For example, if building gcc-4.2.4 constantly failed, then it would be wise to edit local.conf and set PREFERRED_VERSION_gcc = &amp;quot;4.1.2&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Screen is Your Friend ===&lt;br /&gt;
&lt;br /&gt;
If you happen to be building all of your packages remotely on a server, using an ssh session, the session might occasionally be interrupted and the connection could be terminated. A similar event could occur if your X server suddenly craches. If in the process of building an image with bitbake, this means that the build process will terminate as well. &lt;br /&gt;
&lt;br /&gt;
In order to ensure that a build continues in the presence of communication failures, it is advisable to use the [http://www.gnu.org/software/screen GNU Screen] utility. Screen is also very useful when performing several concurrent OpenEmbedded builds for different machine-distro combinations.&lt;br /&gt;
&lt;br /&gt;
Screen installation varies with your OS and distribution.&lt;br /&gt;
&lt;br /&gt;
=== BitBake Overlays ===&lt;br /&gt;
&lt;br /&gt;
Bitbake overlays are useful for OpenEmbedded developers to eliminate bugs or package software without disturbiing the OpenEmbedded tree itself. Overlays are very similar in structure to the OpenEmbedded tree, but are usually only sparsely populated. Non-sparsely poplulated overlays are actually more closely related to separate development branches. Good convention would suggest to always name the overlay appropriately. &lt;br /&gt;
&lt;br /&gt;
Below is an example of two overlays, three build directories, a setup-env script, and a local.conf where the developer has multiple build targets as well as multiple BitBake overlays.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 oe&lt;br /&gt;
 |-- build-beagleboard&lt;br /&gt;
 |   |-- conf&lt;br /&gt;
 |   |   `-- local.conf&lt;br /&gt;
 |   `-- tmp&lt;br /&gt;
 |-- build-om-gta02&lt;br /&gt;
 |   |-- conf&lt;br /&gt;
 |   |   `-- local.conf&lt;br /&gt;
 |   `-- tmp&lt;br /&gt;
 |-- build-ts72xx&lt;br /&gt;
 |   |-- conf&lt;br /&gt;
 |   |   `-- local.conf&lt;br /&gt;
 |   `-- tmp&lt;br /&gt;
 |-- com.somecompany.dev&lt;br /&gt;
 |   |-- conf&lt;br /&gt;
 |   |   `-- machine&lt;br /&gt;
 |   `-- packages&lt;br /&gt;
 |       |-- images&lt;br /&gt;
 |       |   `-- console-image.bb&lt;br /&gt;
 |       `-- rxtx&lt;br /&gt;
 |           |-- files&lt;br /&gt;
 |           |-- rxtx-fixes-from-debian.patch&lt;br /&gt;
 |           `-- rxtx_2.1-7r2.bb&lt;br /&gt;
 |-- org.openembedded.dev&lt;br /&gt;
 |   |-- conf&lt;br /&gt;
 |   |   `-- machine&lt;br /&gt;
 |   `-- packages&lt;br /&gt;
 |       `-- images&lt;br /&gt;
 |-- org.openmoko.dev&lt;br /&gt;
 |   |-- conf&lt;br /&gt;
 |   |   `-- machine&lt;br /&gt;
 |   `-- packages&lt;br /&gt;
 |       `-- tangogps&lt;br /&gt;
 |           |-- tangogps.inc&lt;br /&gt;
 |           `-- tangogps_0.9.3.bb&lt;br /&gt;
 `-- setup-env&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example of the setup-env script with multiple overlays and multiple build targets is below. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 [[ -z ${OE_HOME} ]] &amp;amp;&amp;amp; export OE_HOME=${HOME}/oe&lt;br /&gt;
 [[ -z ${MACHINE} ]] &amp;amp;&amp;amp; export MACHINE=om-gta02&lt;br /&gt;
&lt;br /&gt;
 unset BBPATH&lt;br /&gt;
&lt;br /&gt;
 case &amp;quot;${MACHINE}&amp;quot; in&lt;br /&gt;
        &amp;quot;beagleboard&amp;quot; | &amp;quot;ts72xx&amp;quot; ) &lt;br /&gt;
                BBPATH=&amp;quot;${OE_HOME}/com.somecompany.dev&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
        &amp;quot;om-gta02&amp;quot;)&lt;br /&gt;
                BBPATH=&amp;quot;${OE_HOME}/org.openmoko.dev&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
        *)&lt;br /&gt;
                echo -e &amp;quot;error: unsupported machine&amp;quot;&lt;br /&gt;
                 exit -1&lt;br /&gt;
         ;;&lt;br /&gt;
 esac&lt;br /&gt;
&lt;br /&gt;
 export BBPATH=${BBPATH}:${OE_HOME}/build-${MACHINE}:${OE_HOME}/org.openembedded.dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the overlay-specific BBPATH entry ''precedes'' the default BBPATH entries.&lt;br /&gt;
&lt;br /&gt;
Next, observe the changes necessary for local.conf in order to use a specific overlay (in this case org.openmoko.dev).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 BBFILES := &amp;quot;${OE_HOME}/org.openembedded.dev/packages/*/*.bb&amp;quot;&lt;br /&gt;
 BBFILES += &amp;quot; ${OE_HOME}/org.openmoko.dev/packages/*/*.bb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 BBFILE_COLLECTIONS = &amp;quot;upstream moko&amp;quot;&lt;br /&gt;
 BBFILE_PATTERN_upstream = &amp;quot;${OE_HOME}/org.openembedded.dev&amp;quot;&lt;br /&gt;
 BBFILE_PRIORITY_upstream = &amp;quot;0&amp;quot;&lt;br /&gt;
 BBFILE_PATTERN_moko = &amp;quot;${OE_HOME}/org.openmoko.dev&amp;quot;&lt;br /&gt;
 BBFILE_PRIORITY_moko = &amp;quot;1&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order for the overlay to be detected by BitBake, the above variables need to be defined in the local.conf file. It is possible to include more than one overlay. For each overlay, add a separate  BBFILES += statement, an entry in BBFILE_COLLECTIONS, a BBFILE_PATTERN, and BBFILE_PRIORITY. Remember to include at least one space (' ') between each BBFILES entry.&lt;br /&gt;
&lt;br /&gt;
=== Useful BitBake Commands ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 # list all of the tasks defined for a given package_name&lt;br /&gt;
 bitbake -c listtasks &amp;lt;package_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # clean the work directory for a specific package&lt;br /&gt;
 bitbake -c clean &amp;lt;package_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # build a specific recipe&lt;br /&gt;
 bitbake -b &amp;lt;path/to/some/recipe.bb&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # if files or variables not found debug with&lt;br /&gt;
 bitbake -D -D -D&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Developer]]&lt;br /&gt;
[[Category:System Developers]]&lt;/div&gt;</summary>
		<author><name>TonyGarnockJones</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/OpenEmbedded</id>
		<title>OpenEmbedded</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/OpenEmbedded"/>
				<updated>2009-05-13T20:06:23Z</updated>
		
		<summary type="html">&lt;p&gt;TonyGarnockJones: /* local.conf */ It's recipes, these days, not packages&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|OpenEmbedded}}&lt;br /&gt;
&lt;br /&gt;
Openmoko, our distribution, is built using OpenEmbedded.  OpenEmbedded will:&lt;br /&gt;
&lt;br /&gt;
* Generate (cross-compile) software packages for multiple embedded targets.&lt;br /&gt;
* Handle different hardware architectures, and support multiple releases across those architectures. &lt;br /&gt;
&lt;br /&gt;
For more information please see the [http://www.openembedded.org/ Open Embedded] website.&lt;br /&gt;
&lt;br /&gt;
== Building the Openmoko Distribution with OpenEmbedded ==&lt;br /&gt;
&lt;br /&gt;
'''Note:''' If you are an application developer, you probably do not want to build OpenEmbedded from scratch. For compiling simple applications with few library dependencies (including boot-loader and kernel), consider using our prebuilt [[Toolchain]]. For more complex applications with many library dependencies, download a prebuilt [[OpenEmbedded Torrent]]. &lt;br /&gt;
&lt;br /&gt;
Building Openmoko from scratch is a time-, cpu- and diskspace-consuming process which should only be done if you are a system integrator and want to customize your Openmoko distribution.&lt;br /&gt;
&lt;br /&gt;
=== Simplified Instructions: MokoMakefile ===&lt;br /&gt;
&lt;br /&gt;
For beginners who wish to customize their Openmoko distribution, the facility called [[MokoMakefile]] simplifies building OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
=== Quick Start: OpenEmbedded Torrent ===&lt;br /&gt;
&lt;br /&gt;
If you are a system developer and would like to get up-to-speed as quickly as possible, then download an [[OpenEmbedded Torrent]].&lt;br /&gt;
&lt;br /&gt;
== From Scratch: OpenEmbedded ==&lt;br /&gt;
&lt;br /&gt;
Beginner Openmoko developers who would prefer to have full control over their OpenEmbedded build environment should follow the instructions below.&lt;br /&gt;
&lt;br /&gt;
=== Preparations ===&lt;br /&gt;
&lt;br /&gt;
Several prerequisite software components are necessary in order to have a fully functional OpenEmbedded build environment. However, setup and installation varies depending on the operating system installed on your workstation. The [http://wiki.openembedded.net/index.php OpenEmbedded Wiki] provides [http://wiki.openembedded.net/index.php/OEandYourDistro setup instructions] for FreeBSD, Mac OS X, and most major Linux distributions, of course.&lt;br /&gt;
&lt;br /&gt;
For OpenEmbedded installation instructions please refer to [http://wiki.openembedded.net/index.php/OEandYourDistro OEandYourDistro]. &lt;br /&gt;
&lt;br /&gt;
=== ${OE_HOME} ===&lt;br /&gt;
&lt;br /&gt;
Assuming that you have installed all prerequisite software, you are now ready to create a directory for all of your OpenEmbedded (OE) related work. We will refer to OE_HOME in a generic way, but for argument's sake, assume that it is equal to ${HOME}/oe. You should expect ${OE_HOME} to grow tremendously in size, up to approximately 8GB or larger in some cases. Also be aware, that a full OE build could require several hours of constant building, which may inhibit the performance of your computer while performing other tasks. Replace ${HOME}/oe with your preferred location.&lt;br /&gt;
&lt;br /&gt;
For Bash users:&lt;br /&gt;
 export OE_HOME=${HOME}/oe&lt;br /&gt;
&lt;br /&gt;
For Tcsh users:&lt;br /&gt;
 setenv OE_HOME ${HOME}/oe&lt;br /&gt;
&lt;br /&gt;
Next, run 'mkdir -p ${OE_HOME}' to create the directory. &lt;br /&gt;
&lt;br /&gt;
=== Synchronizing OpenEmbedded With Git ===&lt;br /&gt;
&lt;br /&gt;
Just like any tree, OpenEmbedded has several branches. In this case they are called 'development branches'. Some noteworthy ones include org.openembedded.dev (the default) and org.openembedded.stable . &lt;br /&gt;
&lt;br /&gt;
To syncronize the OpenEmbedded tree, run&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 git clone git://git.openembedded.net/openembedded ${OE_HOME}/org.openembedded.dev &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that last argument could be any directory name (git will create the directory if it doesn't exist). Sticking to 'good convention', the directory name was chosen to reflect the default development branch, org.openembedded.dev . See the [http://wiki.openembedded.net/index.php/GitPhraseBook OE GitPhraseBook] for more info on checking out different branches. &lt;br /&gt;
&lt;br /&gt;
To update the tree, run&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 cd ${OE_HOME}/org.openembedded.dev&lt;br /&gt;
 git pull&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You probably also want to use an fso branch&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 git checkout -b fso/milestone5.5 origin/fso/milestone5.5&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For further information on Git, see [http://git-scm.com The Git Homepage].&lt;br /&gt;
&lt;br /&gt;
Also, please explore the directory structure of the OpenEmbedded build tree. Take a few moments to inspect the different types of BitBake files (.bbclass, .bb, .inc, etc). This helps one to become familiar with recipe syntax and the inheritance system. Of particular note, please read the file 'local.conf.sample'. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 org.openembedded.dev&lt;br /&gt;
 |-- classes&lt;br /&gt;
 |   |-- rootfs_ipk.bbclass&lt;br /&gt;
 |   `-- xorg-module.bbclass&lt;br /&gt;
 |-- conf&lt;br /&gt;
 |   `-- local.conf.sample&lt;br /&gt;
 |   |-- distro&lt;br /&gt;
 |   |   `-- angstrom-2008.1.conf&lt;br /&gt;
 |   |-- machine&lt;br /&gt;
 |   |   |-- om-gta01.conf&lt;br /&gt;
 |   |   `-- om-gta02.conf&lt;br /&gt;
 `-- packages&lt;br /&gt;
     |-- tangogps&lt;br /&gt;
     |   |-- tangogps.inc&lt;br /&gt;
     |   `-- tangogps_0.9.3.bb&lt;br /&gt;
     `-- images&lt;br /&gt;
         |-- console-image.bb&lt;br /&gt;
         |-- fso-console-image.bb&lt;br /&gt;
         |-- fso-image.bb&lt;br /&gt;
         |-- openmoko-image.bb&lt;br /&gt;
         |-- opie-image.bb&lt;br /&gt;
         `-- x11-image.bb&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== local.conf ===&lt;br /&gt;
&lt;br /&gt;
If you explored local.conf.example, then you would be aware that there are some very important variables to be set like MACHINE, DISTRO, and BBFILES, among many others. This is done in a configuration file (local.conf) inside the build directory. &lt;br /&gt;
&lt;br /&gt;
'''Note:''' Using BitBake and OE for cross-compilation require that each target-distro combination is built in a separate directory, so that no version collisions occur. Concurrent builds may safely share the same DL_DIR though. This would suggest that a safe name for build directories is of the form ${OE_HOME}/build-${MACHINE}-${DISTRO}. Of course, if you don't plan on building for more than one machine-distro combination, then the naming of this directory is arbitrary. For the purpose of this example, we will use the convention ${OE_HOME}/build-${MACHINE} . &lt;br /&gt;
&lt;br /&gt;
Now, create the 'local.conf' configuration file. Notice that the CACHE and TMPDIR variables are neatly kept within the build directory while the DL_DIR variable is outside of the build directory, so that concurrent builds may reuse the same source packages. &lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 OE_HOME ?= &amp;quot;${HOME}/oe&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 MACHINE = &amp;quot;om-gta02&amp;quot;&lt;br /&gt;
 DISTRO = &amp;quot;openmoko&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 DL_DIR = &amp;quot;${OE_HOME}/downloads&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 BBFILES := &amp;quot;${OE_HOME}/org.openembedded.dev/recipes/*/*.bb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 BBMASK = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 TMPDIR = &amp;quot;${OE_HOME}/build-${MACHINE}/tmp&amp;quot;&lt;br /&gt;
 CACHE = &amp;quot;${TMPDIR}/cache&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 IMAGE_FSTYPES = &amp;quot;jffs2 tar.gz&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 ENABLE_BINARY_LOCALE_GENERATION = &amp;quot;0&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The BBFILES variable is also of prime importance! It tells bitbake where to locate all available recipes for a build. The OpenEmbedded build environment is almost completely ready to go, with just one more minor step left.&lt;br /&gt;
&lt;br /&gt;
=== setup-env ===&lt;br /&gt;
&lt;br /&gt;
For quick and easy initialization of the OpenEmbedded build environment, it is often suggested that the developer create a 'setup-env' script to source from the command line. This script can be called to initialize the most important of environment variables. Below is a very basic example of a setup-env script. &lt;br /&gt;
&lt;br /&gt;
setup-env for Bash users:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 [[ -z ${OE_HOME} ]] &amp;amp;&amp;amp; export OE_HOME=${HOME}/oe&lt;br /&gt;
 [[ -z ${MACHINE} ]] &amp;amp;&amp;amp; export MACHINE=om-gta02&lt;br /&gt;
 export BBPATH=${OE_HOME}/build-${MACHINE}:${OE_HOME}/org.openembedded.dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
setup-env for Tcsh users:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 [[ -z ${OE_HOME} ]] &amp;amp;&amp;amp; setenv OE_HOME ${HOME}/oe&lt;br /&gt;
 [[ -z ${MACHINE} ]] &amp;amp;&amp;amp; setenv MACHINE om-gta02&lt;br /&gt;
 setenv BBPATH ${OE_HOME}/build-${MACHINE}:${OE_HOME}/org.openembedded.dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To invoke the setup-env script in bash, run 'source setup-env'. In tcsh, run '. setup-env'.&lt;br /&gt;
&lt;br /&gt;
See the section entitled [http://wiki.openmoko.org/wiki/OpenEmbedded#BitBake_Overlays BitBake Overlays] for an example of a more complicated setup-env script.&lt;br /&gt;
&lt;br /&gt;
=== Testing the OE Build Environment ===&lt;br /&gt;
&lt;br /&gt;
That's it! Now you should be prepared to bake your first BitBake recipe. &lt;br /&gt;
&lt;br /&gt;
 bitbake helloworld&lt;br /&gt;
&lt;br /&gt;
=== Building an Image ===&lt;br /&gt;
&lt;br /&gt;
There are several full filesystem images which can be built directly with OpenEmbedded using a single command. These include openmoko-image, fso-image, and so on. The image definitions can be found under ${OE_HOME}/org.openembedded.dev/packages/images&lt;br /&gt;
&lt;br /&gt;
A good place to start is with &lt;br /&gt;
&lt;br /&gt;
 bitbake fso-image&lt;br /&gt;
&lt;br /&gt;
That concludes this introduction to BitBake and OpenEmbedded. Good luck!&lt;br /&gt;
&lt;br /&gt;
=== Other References ===&lt;br /&gt;
&lt;br /&gt;
Please feel free to refer to other online sources of information for [http://bitbake.berlios.de BitBake], [http://www.openembedded.org OpenEmbedded], and the [http://www.angstrom-distribution.org Angstrom Distribution] to name a few.&lt;br /&gt;
&lt;br /&gt;
== Broken Builds and Bug Reporting ==&lt;br /&gt;
&lt;br /&gt;
Using the org.openembedded.dev branch can often result in broken builds. For that reason, it is usually a good idea to limit synchronizing with the repository only after successfully building an image. Some may even want to archive the tree and build directory after an image is built.&lt;br /&gt;
&lt;br /&gt;
Now in the case that an image does not successfully build, it is not always necessarily a bug or a new bug. The problem might have to do with some conflicting software on the workstation, and it could be a bug that is already know and being fixed.&lt;br /&gt;
&lt;br /&gt;
Below are a few useful steps to follow when a build does not successfully complete:&lt;br /&gt;
&lt;br /&gt;
* Identify the package that failed to build&lt;br /&gt;
** Find a line near the bottom of your output that matches &amp;quot;ERROR: ... failed&amp;quot; or &amp;quot;NOTE: ... failed&amp;quot;. The name of the package should be contained in the '...'&lt;br /&gt;
* If there is a similar, more stable version in ${OE_HOME}/org.openembedded.dev/packages, then try to use that instead&lt;br /&gt;
** bitbake -c clean somepackage &amp;amp;&amp;amp; bitbake -b ${OE_HOME}/org.openembedded.dev/packages/somepackage/somepackage_0.1.bb&lt;br /&gt;
** add PREFERRED_VERSION_somepackage = &amp;quot;0.1&amp;quot; to local.conf&lt;br /&gt;
* Read the BitBake log, as well as config.log if it exists&lt;br /&gt;
** Find the log file. There should be a line near the bottom of your output that matches &amp;quot;ERROR: see log in ...&amp;quot;, where '...' contains the log file name. These are usually of the form log.do_compile.12345 or log.do_configure.12345, etc. &lt;br /&gt;
* Try to identify the root cause of the error&lt;br /&gt;
** In many cases, if one examines log.do_configure, only the error is reported, but not the cause of the error&lt;br /&gt;
** Most packages that build with autotools will also have a config.log file that contains the exact cause of the error&lt;br /&gt;
* If you can fix the error, and the error is local to your workstation, and not really a bug, then fix the error yourself.&lt;br /&gt;
* Otherwise, check the [http://bugs.openembedded.net OpenEmbedded Bugzilla] to see if the error is known.&lt;br /&gt;
* If a solution is already available, then try it out. If you can fix the error, then do so. If your solution is correct, please post all relevent patches to the [http://bugs.openembedded.net OpenEmbedded Bugzilla]&lt;br /&gt;
&lt;br /&gt;
=== Where to Report Bugs ===&lt;br /&gt;
&lt;br /&gt;
Authentic bugs should be reported to the [http://bugs.openembedded.net OpenEmbedded Bugzilla]&lt;br /&gt;
&lt;br /&gt;
== Tips &amp;amp; Tricks ==&lt;br /&gt;
&lt;br /&gt;
=== Setting the PREFERRED_VERSION for a package ===&lt;br /&gt;
&lt;br /&gt;
If a certain package is known to not build, and there is a less recent / more stable version of that package, then a good way to avoid repetitive encounters with known build failures is to use preferred versions of packages. &lt;br /&gt;
&lt;br /&gt;
For example, if building gcc-4.2.4 constantly failed, then it would be wise to edit local.conf and set PREFERRED_VERSION_gcc = &amp;quot;4.1.2&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Screen is Your Friend ===&lt;br /&gt;
&lt;br /&gt;
If you happen to be building all of your packages remotely on a server, using an ssh session, the session might occasionally be interrupted and the connection could be terminated. A similar event could occur if your X server suddenly craches. If in the process of building an image with bitbake, this means that the build process will terminate as well. &lt;br /&gt;
&lt;br /&gt;
In order to ensure that a build continues in the presence of communication failures, it is advisable to use the [http://www.gnu.org/software/screen GNU Screen] utility. Screen is also very useful when performing several concurrent OpenEmbedded builds for different machine-distro combinations.&lt;br /&gt;
&lt;br /&gt;
Screen installation varies with your OS and distribution.&lt;br /&gt;
&lt;br /&gt;
=== BitBake Overlays ===&lt;br /&gt;
&lt;br /&gt;
Bitbake overlays are useful for OpenEmbedded developers to eliminate bugs or package software without disturbiing the OpenEmbedded tree itself. Overlays are very similar in structure to the OpenEmbedded tree, but are usually only sparsely populated. Non-sparsely poplulated overlays are actually more closely related to separate development branches. Good convention would suggest to always name the overlay appropriately. &lt;br /&gt;
&lt;br /&gt;
Below is an example of two overlays, three build directories, a setup-env script, and a local.conf where the developer has multiple build targets as well as multiple BitBake overlays.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 oe&lt;br /&gt;
 |-- build-beagleboard&lt;br /&gt;
 |   |-- conf&lt;br /&gt;
 |   |   `-- local.conf&lt;br /&gt;
 |   `-- tmp&lt;br /&gt;
 |-- build-om-gta02&lt;br /&gt;
 |   |-- conf&lt;br /&gt;
 |   |   `-- local.conf&lt;br /&gt;
 |   `-- tmp&lt;br /&gt;
 |-- build-ts72xx&lt;br /&gt;
 |   |-- conf&lt;br /&gt;
 |   |   `-- local.conf&lt;br /&gt;
 |   `-- tmp&lt;br /&gt;
 |-- com.somecompany.dev&lt;br /&gt;
 |   |-- conf&lt;br /&gt;
 |   |   `-- machine&lt;br /&gt;
 |   `-- packages&lt;br /&gt;
 |       |-- images&lt;br /&gt;
 |       |   `-- console-image.bb&lt;br /&gt;
 |       `-- rxtx&lt;br /&gt;
 |           |-- files&lt;br /&gt;
 |           |-- rxtx-fixes-from-debian.patch&lt;br /&gt;
 |           `-- rxtx_2.1-7r2.bb&lt;br /&gt;
 |-- org.openembedded.dev&lt;br /&gt;
 |   |-- conf&lt;br /&gt;
 |   |   `-- machine&lt;br /&gt;
 |   `-- packages&lt;br /&gt;
 |       `-- images&lt;br /&gt;
 |-- org.openmoko.dev&lt;br /&gt;
 |   |-- conf&lt;br /&gt;
 |   |   `-- machine&lt;br /&gt;
 |   `-- packages&lt;br /&gt;
 |       `-- tangogps&lt;br /&gt;
 |           |-- tangogps.inc&lt;br /&gt;
 |           `-- tangogps_0.9.3.bb&lt;br /&gt;
 `-- setup-env&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
An example of the setup-env script with multiple overlays and multiple build targets is below. &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 [[ -z ${OE_HOME} ]] &amp;amp;&amp;amp; export OE_HOME=${HOME}/oe&lt;br /&gt;
 [[ -z ${MACHINE} ]] &amp;amp;&amp;amp; export MACHINE=om-gta02&lt;br /&gt;
&lt;br /&gt;
 unset BBPATH&lt;br /&gt;
&lt;br /&gt;
 case &amp;quot;${MACHINE}&amp;quot; in&lt;br /&gt;
        &amp;quot;beagleboard&amp;quot; | &amp;quot;ts72xx&amp;quot; ) &lt;br /&gt;
                BBPATH=&amp;quot;${OE_HOME}/com.somecompany.dev&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
        &amp;quot;om-gta02&amp;quot;)&lt;br /&gt;
                BBPATH=&amp;quot;${OE_HOME}/org.openmoko.dev&amp;quot;&lt;br /&gt;
        ;;&lt;br /&gt;
        *)&lt;br /&gt;
                echo -e &amp;quot;error: unsupported machine&amp;quot;&lt;br /&gt;
                 exit -1&lt;br /&gt;
         ;;&lt;br /&gt;
 esac&lt;br /&gt;
&lt;br /&gt;
 export BBPATH=${BBPATH}:${OE_HOME}/build-${MACHINE}:${OE_HOME}/org.openembedded.dev&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the overlay-specific BBPATH entry ''precedes'' the default BBPATH entries.&lt;br /&gt;
&lt;br /&gt;
Next, observe the changes necessary for local.conf in order to use a specific overlay (in this case org.openmoko.dev).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 ...&lt;br /&gt;
 BBFILES := &amp;quot;${OE_HOME}/org.openembedded.dev/packages/*/*.bb&amp;quot;&lt;br /&gt;
 BBFILES += &amp;quot; ${OE_HOME}/org.openmoko.dev/packages/*/*.bb&amp;quot;&lt;br /&gt;
&lt;br /&gt;
 BBFILE_COLLECTIONS = &amp;quot;upstream moko&amp;quot;&lt;br /&gt;
 BBFILE_PATTERN_upstream = &amp;quot;${OE_HOME}/org.openembedded.dev&amp;quot;&lt;br /&gt;
 BBFILE_PRIORITY_upstream = &amp;quot;0&amp;quot;&lt;br /&gt;
 BBFILE_PATTERN_moko = &amp;quot;${OE_HOME}/org.openmoko.dev&amp;quot;&lt;br /&gt;
 BBFILE_PRIORITY_moko = &amp;quot;1&amp;quot;&lt;br /&gt;
 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In order for the overlay to be detected by BitBake, the above variables need to be defined in the local.conf file. It is possible to include more than one overlay. For each overlay, add a separate  BBFILES += statement, an entry in BBFILE_COLLECTIONS, a BBFILE_PATTERN, and BBFILE_PRIORITY. Remember to include at least one space (' ') between each BBFILES entry.&lt;br /&gt;
&lt;br /&gt;
=== Useful BitBake Commands ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 # list all of the tasks defined for a given package_name&lt;br /&gt;
 bitbake -c listtasks &amp;lt;package_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # clean the work directory for a specific package&lt;br /&gt;
 bitbake -c clean &amp;lt;package_name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # build a specific recipe&lt;br /&gt;
 bitbake -b &amp;lt;path/to/some/recipe.bb&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 # if files or variables not found debug with&lt;br /&gt;
 bitbake -D -D -D&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Developer]]&lt;br /&gt;
[[Category:System Developers]]&lt;/div&gt;</summary>
		<author><name>TonyGarnockJones</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:TonyGarnockJones</id>
		<title>User:TonyGarnockJones</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:TonyGarnockJones"/>
				<updated>2008-01-29T00:18:21Z</updated>
		
		<summary type="html">&lt;p&gt;TonyGarnockJones: /* Status */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tony Garnock-Jones, tonyg@lshift.net.&lt;br /&gt;
&lt;br /&gt;
I own a phase-1 Neo1973.&lt;br /&gt;
&lt;br /&gt;
== Erlang Userland ==&lt;br /&gt;
&lt;br /&gt;
I'm running Erlang with GTK and serial-port extensions on my phone, using it as an openmoko userland replacement (for gsmd/dialer/addressbook etc.).&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;darcs get http://www.eighty-twenty.org/~tonyg/Darcs/erlang-oe/&amp;quot; for bitbake scripts for building erlang, erlang-gtknode and erlang-serial ipkg packages&lt;br /&gt;
* &amp;quot;darcs get http://www.eighty-twenty.org/~tonyg/Darcs/erlang-serial/&amp;quot; to track the serial-port erlang interface program&lt;br /&gt;
* &amp;quot;darcs get http://www.eighty-twenty.org/~tonyg/Darcs/erlang-openmoko/&amp;quot; to track my userland (gsmd/dialer etc) code&lt;br /&gt;
&lt;br /&gt;
A few screenshots, not that the GUI is worth anything - the value of the approach is in the lower-level &amp;quot;model&amp;quot;/business-logic part (the gsmd/neod equivalent): http://eighty-twenty.org/~tonyg/erlang-openmoko-screenshots/&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
&lt;br /&gt;
See the [http://www.eighty-twenty.org/~tonyg/Darcs/erlang-openmoko/README README] for the current status, TODO and bugs. Currently 2090 non-blank, non-comment lines of code.&lt;br /&gt;
&lt;br /&gt;
Core (non-UI):&lt;br /&gt;
&lt;br /&gt;
* Clean(ish) API for scripting phone functionality (in Erlang)&lt;br /&gt;
* Takes calls, makes calls, reliably enough for me to use as an everyday phone&lt;br /&gt;
* Sends, receives, archives SMSes&lt;br /&gt;
* DTMF send support during a call&lt;br /&gt;
* Battery and charge-state monitoring&lt;br /&gt;
* Detects when you might be connected to a dumb charger (no UI for forcing fast charge yet)&lt;br /&gt;
* Powers GSM modem off when the phone is shut down&lt;br /&gt;
* About 4-5 hours of battery life when idle - this will improve as general GTA01 power management improves&lt;br /&gt;
&lt;br /&gt;
Non-GUI user interface:&lt;br /&gt;
&lt;br /&gt;
* Plays an mp3/ogg file and vibrates when ringing&lt;br /&gt;
* Vibrates on SMS receive&lt;br /&gt;
* Switches ALSA profiles between in-call state (gsmhandset)/idle state (stereoout)&lt;br /&gt;
* Press &amp;quot;power&amp;quot; to activate screen lock; press &amp;quot;aux&amp;quot; to release screen lock&lt;br /&gt;
&lt;br /&gt;
GUI user interface:&lt;br /&gt;
&lt;br /&gt;
* Really, really, really ugly.&lt;br /&gt;
* Dims screen on user inactivity&lt;br /&gt;
* Blanks screen and locks touchscreen on further inactivity&lt;br /&gt;
* Very basic addressbook&lt;br /&gt;
* Very basic SMS compose/display facility (no T9 yet)&lt;br /&gt;
* Very basic dialer&lt;br /&gt;
&lt;br /&gt;
== gsmhandset.state echoes your own voice ==&lt;br /&gt;
&lt;br /&gt;
I've a tentative fix for this - here's the patch against gsmhandset.state. The alsamixer setting is labelled &amp;quot;Bypass&amp;quot; in the UI, and it's way over to the right, just after the &amp;quot;Amp ...&amp;quot; settings and just before &amp;quot;DAI Mode&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--- old/gsmhandset.state	2008-01-28 12:29:47.000000000 +0000&lt;br /&gt;
+++ new/gsmhandset.state	2008-01-28 12:29:23.000000000 +0000&lt;br /&gt;
@@ -55,8 +55,8 @@&lt;br /&gt;
 		comment.range '0 - 7'&lt;br /&gt;
 		iface MIXER&lt;br /&gt;
 		name 'Bypass Playback Volume'&lt;br /&gt;
-		value.0 5&lt;br /&gt;
-		value.1 5&lt;br /&gt;
+		value.0 0&lt;br /&gt;
+		value.1 0&lt;br /&gt;
 	}&lt;br /&gt;
 	control.7 {&lt;br /&gt;
 		comment.access 'read write'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>TonyGarnockJones</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:TonyGarnockJones</id>
		<title>User:TonyGarnockJones</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:TonyGarnockJones"/>
				<updated>2008-01-29T00:13:26Z</updated>
		
		<summary type="html">&lt;p&gt;TonyGarnockJones: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tony Garnock-Jones, tonyg@lshift.net.&lt;br /&gt;
&lt;br /&gt;
I own a phase-1 Neo1973.&lt;br /&gt;
&lt;br /&gt;
== Erlang Userland ==&lt;br /&gt;
&lt;br /&gt;
I'm running Erlang with GTK and serial-port extensions on my phone, using it as an openmoko userland replacement (for gsmd/dialer/addressbook etc.).&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;darcs get http://www.eighty-twenty.org/~tonyg/Darcs/erlang-oe/&amp;quot; for bitbake scripts for building erlang, erlang-gtknode and erlang-serial ipkg packages&lt;br /&gt;
* &amp;quot;darcs get http://www.eighty-twenty.org/~tonyg/Darcs/erlang-serial/&amp;quot; to track the serial-port erlang interface program&lt;br /&gt;
* &amp;quot;darcs get http://www.eighty-twenty.org/~tonyg/Darcs/erlang-openmoko/&amp;quot; to track my userland (gsmd/dialer etc) code&lt;br /&gt;
&lt;br /&gt;
A few screenshots, not that the GUI is worth anything - the value of the approach is in the lower-level &amp;quot;model&amp;quot;/business-logic part (the gsmd/neod equivalent): http://eighty-twenty.org/~tonyg/erlang-openmoko-screenshots/&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
&lt;br /&gt;
See the [http://www.eighty-twenty.org/~tonyg/Darcs/erlang-openmoko/README README] for the current status, TODO and bugs. Currently 2090 non-blank, non-comment lines of code.&lt;br /&gt;
&lt;br /&gt;
Core (non-GUI):&lt;br /&gt;
&lt;br /&gt;
* Clean(ish) API for scripting phone functionality (in Erlang)&lt;br /&gt;
* Takes calls, makes calls, reliably enough for me to use as an everyday phone&lt;br /&gt;
* Sends, receives, archives SMSes&lt;br /&gt;
* DTMF send support during a call&lt;br /&gt;
* Battery and charge-state monitoring&lt;br /&gt;
* Detects when you might be connected to a dumb charger (no UI for forcing fast charge yet)&lt;br /&gt;
* Powers GSM modem off when the phone is shut down&lt;br /&gt;
* About 4-5 hours of battery life when idle - this will improve as general GTA01 power management improves&lt;br /&gt;
&lt;br /&gt;
Non-GUI user interface:&lt;br /&gt;
&lt;br /&gt;
* Plays an mp3/ogg file and vibrates when ringing&lt;br /&gt;
* Vibrates on SMS receive&lt;br /&gt;
* Switches ALSA profiles between in-call state (gsmhandset)/idle state (stereoout)&lt;br /&gt;
* Press &amp;quot;power&amp;quot; to activate screen lock; press &amp;quot;aux&amp;quot; to release screen lock&lt;br /&gt;
&lt;br /&gt;
GUI user interface:&lt;br /&gt;
&lt;br /&gt;
* Really, really, really ugly.&lt;br /&gt;
* Dims screen on user inactivity&lt;br /&gt;
* Blanks screen and locks touchscreen on further inactivity&lt;br /&gt;
* Very basic addressbook&lt;br /&gt;
* Very basic SMS compose/display facility (no T9 yet)&lt;br /&gt;
* Very basic dialer&lt;br /&gt;
&lt;br /&gt;
== gsmhandset.state echoes your own voice ==&lt;br /&gt;
&lt;br /&gt;
I've a tentative fix for this - here's the patch against gsmhandset.state. The alsamixer setting is labelled &amp;quot;Bypass&amp;quot; in the UI, and it's way over to the right, just after the &amp;quot;Amp ...&amp;quot; settings and just before &amp;quot;DAI Mode&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--- old/gsmhandset.state	2008-01-28 12:29:47.000000000 +0000&lt;br /&gt;
+++ new/gsmhandset.state	2008-01-28 12:29:23.000000000 +0000&lt;br /&gt;
@@ -55,8 +55,8 @@&lt;br /&gt;
 		comment.range '0 - 7'&lt;br /&gt;
 		iface MIXER&lt;br /&gt;
 		name 'Bypass Playback Volume'&lt;br /&gt;
-		value.0 5&lt;br /&gt;
-		value.1 5&lt;br /&gt;
+		value.0 0&lt;br /&gt;
+		value.1 0&lt;br /&gt;
 	}&lt;br /&gt;
 	control.7 {&lt;br /&gt;
 		comment.access 'read write'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>TonyGarnockJones</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Openmoko_Local_Groups:_London</id>
		<title>Openmoko Local Groups: London</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Openmoko_Local_Groups:_London"/>
				<updated>2008-01-28T16:04:27Z</updated>
		
		<summary type="html">&lt;p&gt;TonyGarnockJones: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to OpenMoko London!&lt;br /&gt;
&lt;br /&gt;
Beer and Neo anyone?&lt;br /&gt;
&lt;br /&gt;
{|border=1&lt;br /&gt;
!Name (IRC nick)&lt;br /&gt;
!Skills&lt;br /&gt;
!Interest&lt;br /&gt;
!Location&lt;br /&gt;
!Device owned&lt;br /&gt;
|-&lt;br /&gt;
|[[User:jptmoore|John Moore]]&lt;br /&gt;
|C/Scheme&lt;br /&gt;
|Application development&lt;br /&gt;
|Pinner&lt;br /&gt;
|[[Image: Moko.jpg|center]]&lt;br /&gt;
|-&lt;br /&gt;
|Alex&lt;br /&gt;
|Java,Perl,Python&lt;br /&gt;
|User &amp;amp; developer&lt;br /&gt;
|Hampshire&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Phlash|Phil Ashby]]&lt;br /&gt;
|C/C++/Java /Embedded/Hardware&lt;br /&gt;
|Kernel &amp;amp; Application development&lt;br /&gt;
|Felixstowe&lt;br /&gt;
|[[Image: Moko.jpg|center]]&lt;br /&gt;
|-&lt;br /&gt;
|John Cass&lt;br /&gt;
|Java,C&lt;br /&gt;
|User &amp;amp; developer&lt;br /&gt;
|London&lt;br /&gt;
|[[Image: Moko.jpg|center]]&lt;br /&gt;
|-&lt;br /&gt;
|[[User:TonyGarnockJones|Tony Garnock-Jones]] (tonyg)&lt;br /&gt;
|C, assembly, Erlang, Scheme, ML, Haskell, Smalltalk, ...&lt;br /&gt;
|User &amp;amp; developer&lt;br /&gt;
|London&lt;br /&gt;
|[[Image: Moko.jpg|center]]&lt;br /&gt;
|-&lt;br /&gt;
|[[User:ThomasWood|Thomas Wood/OpenedHand]]&lt;br /&gt;
|C, GTK+ developer&lt;br /&gt;
|User &amp;amp; developer&lt;br /&gt;
|London&lt;br /&gt;
|[[Image: Moko.jpg|center]] [[Image: MokoBox.jpg|center]] + GTA02&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Stephmw|Steph Meslin-Weber]]&lt;br /&gt;
|Java (J2ME), C, User Experience, Interface prototyping&lt;br /&gt;
|User, developer and general busybody&lt;br /&gt;
|London&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Key:&lt;br /&gt;
 [[Image: Moko.jpg]] = GTA01&lt;br /&gt;
 [[Image: MokoBox.jpg]] = Debug board&lt;br /&gt;
&lt;br /&gt;
See [[Talk:OpenMoko_Local_Groups:_London|discussion]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>TonyGarnockJones</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:TonyGarnockJones</id>
		<title>User:TonyGarnockJones</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:TonyGarnockJones"/>
				<updated>2008-01-28T12:39:02Z</updated>
		
		<summary type="html">&lt;p&gt;TonyGarnockJones: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tony Garnock-Jones, tonyg@lshift.net.&lt;br /&gt;
&lt;br /&gt;
I own a phase-1 Neo1973.&lt;br /&gt;
&lt;br /&gt;
I'm running Erlang with GTK and serial-port extensions on my phone, using it as an openmoko userland replacement (for gsmd/dialer/addressbook etc.).&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;darcs get http://www.eighty-twenty.org/~tonyg/Darcs/erlang-oe/&amp;quot; for bitbake scripts for building erlang, erlang-gtknode and erlang-serial ipkg packages&lt;br /&gt;
* &amp;quot;darcs get http://www.eighty-twenty.org/~tonyg/Darcs/erlang-serial/&amp;quot; to track the serial-port erlang interface program&lt;br /&gt;
* &amp;quot;darcs get http://www.eighty-twenty.org/~tonyg/Darcs/erlang-openmoko/&amp;quot; to track my userland (gsmd/dialer etc) code&lt;br /&gt;
&lt;br /&gt;
A few screenshots, not that the GUI is worth anything - the value of the approach is in the lower-level &amp;quot;model&amp;quot;/business-logic part (the gsmd/neod equivalent): http://eighty-twenty.org/~tonyg/erlang-openmoko-screenshots/&lt;br /&gt;
&lt;br /&gt;
== gsmhandset.state echoes your own voice ==&lt;br /&gt;
&lt;br /&gt;
I've a tentative fix for this - here's the patch against gsmhandset.state. The alsamixer setting is labelled &amp;quot;Bypass&amp;quot; in the UI, and it's way over to the right, just after the &amp;quot;Amp ...&amp;quot; settings and just before &amp;quot;DAI Mode&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
--- old/gsmhandset.state	2008-01-28 12:29:47.000000000 +0000&lt;br /&gt;
+++ new/gsmhandset.state	2008-01-28 12:29:23.000000000 +0000&lt;br /&gt;
@@ -55,8 +55,8 @@&lt;br /&gt;
 		comment.range '0 - 7'&lt;br /&gt;
 		iface MIXER&lt;br /&gt;
 		name 'Bypass Playback Volume'&lt;br /&gt;
-		value.0 5&lt;br /&gt;
-		value.1 5&lt;br /&gt;
+		value.0 0&lt;br /&gt;
+		value.1 0&lt;br /&gt;
 	}&lt;br /&gt;
 	control.7 {&lt;br /&gt;
 		comment.access 'read write'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>TonyGarnockJones</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:TonyGarnockJones</id>
		<title>User:TonyGarnockJones</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:TonyGarnockJones"/>
				<updated>2007-12-07T15:22:00Z</updated>
		
		<summary type="html">&lt;p&gt;TonyGarnockJones: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tony Garnock-Jones, tonyg@lshift.net.&lt;br /&gt;
&lt;br /&gt;
I own a phase-1 Neo1973.&lt;br /&gt;
&lt;br /&gt;
I'm running Erlang with GTK and serial-port extensions on my phone, using it as an openmoko userland replacement (for gsmd/dialer/addressbook etc.).&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;darcs get http://www.eighty-twenty.org/~tonyg/Darcs/erlang-oe/&amp;quot; for bitbake scripts for building erlang, erlang-gtknode and erlang-serial ipkg packages&lt;br /&gt;
* &amp;quot;darcs get http://www.eighty-twenty.org/~tonyg/Darcs/erlang-serial/&amp;quot; to track the serial-port erlang interface program&lt;br /&gt;
* &amp;quot;darcs get http://www.eighty-twenty.org/~tonyg/Darcs/erlang-openmoko/&amp;quot; to track my userland (gsmd/dialer etc) code&lt;br /&gt;
&lt;br /&gt;
A few screenshots, not that the GUI is worth anything - the value of the approach is in the lower-level &amp;quot;model&amp;quot;/business-logic part (the gsmd/neod equivalent): http://eighty-twenty.org/~tonyg/erlang-openmoko-screenshots/&lt;/div&gt;</summary>
		<author><name>TonyGarnockJones</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Hardware:AT_Commands</id>
		<title>Hardware:AT Commands</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Hardware:AT_Commands"/>
				<updated>2007-12-06T13:16:48Z</updated>
		
		<summary type="html">&lt;p&gt;TonyGarnockJones: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The protocol used to access the [[GSM]] chip is part of the GSM standard.&lt;br /&gt;
&lt;br /&gt;
Harald wrote on 2007-01-31 on the list http://lists.openmoko.org/pipermail/community/2007-January/002708.html&lt;br /&gt;
&amp;quot;The chipset supports all of the mandatory [http://www.ctiforum.com/standard/standard/etsi/0707.pdf ETSI GSM TS 07.07] commands (use&lt;br /&gt;
http://pda.etsi.org/pda/queryform.asp to get it), plus some of the&lt;br /&gt;
optional ones. This GSM standard even has a command that lists the list of available&lt;br /&gt;
commands (AT+CLAC).&amp;quot;&lt;br /&gt;
&lt;br /&gt;
On [[OpenMoko]], the commands should be used via [[gsmd]].&lt;br /&gt;
&lt;br /&gt;
See also:&lt;br /&gt;
&lt;br /&gt;
* http://wiki.openezx.org/AT_commands&lt;br /&gt;
* http://www.3gpp.org/ftp/Specs/latest/Rel-7/27_series/27007-740.zip contains 27.007, &amp;quot;AT command set for User Equipment (UE)&amp;quot;&lt;br /&gt;
* http://www.3gpp.org/ftp/Specs/latest/Rel-7/27_series/27005-700.zip contains 27.005, &amp;quot;Use of Data Terminal Equipment - Data Circuit terminating Equipment (DTE - DCE) interface for Short Message Service (SMS) and Cell Broadcast Service (CBS)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
German Link for AT explainations: http://www.nobbi.com/atgsm.htm&lt;br /&gt;
&lt;br /&gt;
= On the Neo1973 =&lt;br /&gt;
&lt;br /&gt;
== Uncommented List of AT Commands ==&lt;br /&gt;
(AT+CLAC) on the Neo1973 gives this list:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
AT+CACM&lt;br /&gt;
AT+CAMM&lt;br /&gt;
AT+CAOC&lt;br /&gt;
AT+CBC&lt;br /&gt;
AT+CBST&lt;br /&gt;
AT+CCFC&lt;br /&gt;
AT+CCUG&lt;br /&gt;
AT+CCWA&lt;br /&gt;
AT+CCWE&lt;br /&gt;
AT+CEER&lt;br /&gt;
AT+CFUN&lt;br /&gt;
AT+CGACT&lt;br /&gt;
AT+CGANS&lt;br /&gt;
AT+CGATT&lt;br /&gt;
AT+CGAUTO&lt;br /&gt;
AT+CGCLASS&lt;br /&gt;
AT+CGDATA&lt;br /&gt;
AT+CGDCONT&lt;br /&gt;
AT+CGEREP&lt;br /&gt;
AT+CGMI&lt;br /&gt;
AT+CGMM&lt;br /&gt;
AT+CGMR&lt;br /&gt;
AT+CGPADDR&lt;br /&gt;
AT+CGQMIN&lt;br /&gt;
AT+CGQREQ&lt;br /&gt;
AT+CGREG&lt;br /&gt;
AT+CGSMS&lt;br /&gt;
AT+CGSN&lt;br /&gt;
AT+CHLD&lt;br /&gt;
AT+CHUP&lt;br /&gt;
AT+CIMI&lt;br /&gt;
AT+CLAC&lt;br /&gt;
AT+CLAE&lt;br /&gt;
AT+CLAN&lt;br /&gt;
AT+CLCC&lt;br /&gt;
AT+CLCK&lt;br /&gt;
AT+CLIP&lt;br /&gt;
AT+CDIP&lt;br /&gt;
AT+CLIR&lt;br /&gt;
AT+CLVL&lt;br /&gt;
AT+CMEE&lt;br /&gt;
AT+CMGC&lt;br /&gt;
AT+CMGD&lt;br /&gt;
AT+CMGF&lt;br /&gt;
AT+CMGL&lt;br /&gt;
AT+CMGR&lt;br /&gt;
AT+CMGS&lt;br /&gt;
AT+CMGW&lt;br /&gt;
AT+CMOD&lt;br /&gt;
AT+CMSS&lt;br /&gt;
AT+CMMS&lt;br /&gt;
AT+CMUT&lt;br /&gt;
AT+CMUX&lt;br /&gt;
AT+CNMA&lt;br /&gt;
AT+CNMI&lt;br /&gt;
AT+CNUM&lt;br /&gt;
AT+COLP&lt;br /&gt;
AT+COPN&lt;br /&gt;
AT+COPS&lt;br /&gt;
AT+CPAS&lt;br /&gt;
AT+CPBF&lt;br /&gt;
AT+CPBR&lt;br /&gt;
AT+CPBS&lt;br /&gt;
AT+CPBW&lt;br /&gt;
AT+CPIN&lt;br /&gt;
AT+CPMS&lt;br /&gt;
AT+CPOL&lt;br /&gt;
AT+CPUC&lt;br /&gt;
AT+CPWD&lt;br /&gt;
AT+CR&lt;br /&gt;
AT+CRC&lt;br /&gt;
AT+CREG&lt;br /&gt;
AT+CRES&lt;br /&gt;
AT+CRLP&lt;br /&gt;
AT+CRSL&lt;br /&gt;
AT+CRSM&lt;br /&gt;
AT+CSAS&lt;br /&gt;
AT+CSCA&lt;br /&gt;
AT+CSCB&lt;br /&gt;
AT+CSCS&lt;br /&gt;
AT+CSDH&lt;br /&gt;
AT+CSIM&lt;br /&gt;
AT+CSMP&lt;br /&gt;
AT+CSMS&lt;br /&gt;
AT+CSNS&lt;br /&gt;
AT+CSQ&lt;br /&gt;
AT%CSQ&lt;br /&gt;
AT+CSSN&lt;br /&gt;
AT+CSTA&lt;br /&gt;
AT+CSVM&lt;br /&gt;
AT+CTFR&lt;br /&gt;
AT+CUSD&lt;br /&gt;
AT+DR&lt;br /&gt;
AT+FAP&lt;br /&gt;
AT+FBO&lt;br /&gt;
AT+FBS&lt;br /&gt;
AT+FBU&lt;br /&gt;
AT+FCC&lt;br /&gt;
AT+FCLASS&lt;br /&gt;
AT+FCQ&lt;br /&gt;
AT+FCR&lt;br /&gt;
AT+FCS&lt;br /&gt;
AT+FCT&lt;br /&gt;
AT+FDR&lt;br /&gt;
AT+FDT&lt;br /&gt;
AT+FEA&lt;br /&gt;
AT+FFC&lt;br /&gt;
AT+FHS&lt;br /&gt;
AT+FIE&lt;br /&gt;
AT+FIP&lt;br /&gt;
AT+FIS&lt;br /&gt;
AT+FIT&lt;br /&gt;
AT+FKS&lt;br /&gt;
AT+FLI&lt;br /&gt;
AT+FLO&lt;br /&gt;
AT+FLP&lt;br /&gt;
AT+FMI&lt;br /&gt;
AT+FMM&lt;br /&gt;
AT+FMR&lt;br /&gt;
AT+FMS&lt;br /&gt;
AT+FND&lt;br /&gt;
AT+FNR&lt;br /&gt;
AT+FNS&lt;br /&gt;
AT+FPA&lt;br /&gt;
AT+FPI&lt;br /&gt;
AT+FPS&lt;br /&gt;
AT+FPW&lt;br /&gt;
AT+FRQ&lt;br /&gt;
AT+FSA&lt;br /&gt;
AT+FSP&lt;br /&gt;
AT+GCAP&lt;br /&gt;
AT+GCI&lt;br /&gt;
AT+GMI&lt;br /&gt;
AT+GMM&lt;br /&gt;
AT+GMR&lt;br /&gt;
AT+GSN&lt;br /&gt;
AT+ICF&lt;br /&gt;
AT+IFC&lt;br /&gt;
AT+ILRR&lt;br /&gt;
AT+IPR&lt;br /&gt;
AT+VTS&lt;br /&gt;
AT+WS46&lt;br /&gt;
AT%ALS&lt;br /&gt;
AT%ATR&lt;br /&gt;
AT%BAND&lt;br /&gt;
AT%CACM&lt;br /&gt;
AT%CAOC&lt;br /&gt;
AT%CCBS&lt;br /&gt;
AT%STDR&lt;br /&gt;
AT%CGAATT&lt;br /&gt;
AT%CGMM&lt;br /&gt;
AT%CGREG&lt;br /&gt;
AT%CNAP&lt;br /&gt;
AT%CPI&lt;br /&gt;
AT%COLR&lt;br /&gt;
AT%CPRIM&lt;br /&gt;
AT%CTV&lt;br /&gt;
AT%CUNS&lt;br /&gt;
AT%NRG&lt;br /&gt;
AT%SATC&lt;br /&gt;
AT%SATE&lt;br /&gt;
AT%SATR&lt;br /&gt;
AT%SATT&lt;br /&gt;
AT%SNCNT&lt;br /&gt;
AT%VER&lt;br /&gt;
AT%CGCLASS&lt;br /&gt;
AT%CGPCO&lt;br /&gt;
AT%CGPPP&lt;br /&gt;
AT%EM&lt;br /&gt;
AT%EMET&lt;br /&gt;
AT%EMETS&lt;br /&gt;
AT%CBHZ&lt;br /&gt;
AT%CPHS&lt;br /&gt;
AT%CPNUMS&lt;br /&gt;
AT%CPALS&lt;br /&gt;
AT%CPVWI&lt;br /&gt;
AT%CPOPN&lt;br /&gt;
AT%CPCFU&lt;br /&gt;
AT%CPINF&lt;br /&gt;
AT%CPMB&lt;br /&gt;
AT%CPRI&lt;br /&gt;
AT%DATA&lt;br /&gt;
AT%DINF&lt;br /&gt;
AT%CLCC&lt;br /&gt;
AT%DBGINFO&lt;br /&gt;
AT%VTS&lt;br /&gt;
AT%CHPL&lt;br /&gt;
AT%CREG&lt;br /&gt;
AT+CTZR&lt;br /&gt;
AT+CTZU&lt;br /&gt;
AT%CTZV&lt;br /&gt;
AT%CNIV&lt;br /&gt;
AT%PVRF&lt;br /&gt;
AT%CWUP&lt;br /&gt;
AT%DAR&lt;br /&gt;
AT+CIND&lt;br /&gt;
AT+CMER&lt;br /&gt;
AT%CSCN&lt;br /&gt;
AT%RDL&lt;br /&gt;
AT%RDLB&lt;br /&gt;
AT%CSTAT&lt;br /&gt;
AT%CPRSM&lt;br /&gt;
AT%CHLD&lt;br /&gt;
AT%SIMIND&lt;br /&gt;
AT%SECP&lt;br /&gt;
AT%SECS&lt;br /&gt;
AT%CSSN&lt;br /&gt;
AT+CCLK&lt;br /&gt;
AT%CSSD&lt;br /&gt;
AT%COPS&lt;br /&gt;
AT%CPMBW&lt;br /&gt;
AT%CUST&lt;br /&gt;
AT%SATCC&lt;br /&gt;
AT%COPN&lt;br /&gt;
AT%CGEREP&lt;br /&gt;
AT%CUSCFG&lt;br /&gt;
AT%CUSDR&lt;br /&gt;
AT%CPBS&lt;br /&gt;
AT%PBCF&lt;br /&gt;
AT%SIMEF&lt;br /&gt;
AT%EFRSLT&lt;br /&gt;
AT%CMGMDU&lt;br /&gt;
AT%CMGL&lt;br /&gt;
AT%CMGR&lt;br /&gt;
ATA&lt;br /&gt;
ATB&lt;br /&gt;
AT&amp;amp;C&lt;br /&gt;
ATD&lt;br /&gt;
AT&amp;amp;D&lt;br /&gt;
ATE&lt;br /&gt;
ATF&lt;br /&gt;
AT&amp;amp;F&lt;br /&gt;
ATH&lt;br /&gt;
ATI&lt;br /&gt;
AT&amp;amp;K&lt;br /&gt;
ATL&lt;br /&gt;
ATM&lt;br /&gt;
ATO&lt;br /&gt;
ATP&lt;br /&gt;
ATQ&lt;br /&gt;
ATS&lt;br /&gt;
ATT&lt;br /&gt;
ATV&lt;br /&gt;
ATW&lt;br /&gt;
AT&amp;amp;W&lt;br /&gt;
ATX&lt;br /&gt;
ATZ&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Results of AT Commands ==&lt;br /&gt;
&lt;br /&gt;
Taken from &amp;quot;3rd Generation Partnership Project; Technical Specification Group Core Network and Terminals; AT command set for User Equipment (UE) (Release 7)&amp;quot; - 3GPP TS 27.007 V7.2.0 (2006-09)&lt;br /&gt;
&lt;br /&gt;
== Section 5, General Commands ==&lt;br /&gt;
&lt;br /&gt;
Request manufacturer identification +CGMI&lt;br /&gt;
&lt;br /&gt;
 AT+CGMI&lt;br /&gt;
 &amp;lt;manufacturer&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
&lt;br /&gt;
Request model identification +CGMM&lt;br /&gt;
&lt;br /&gt;
 AT+CGMM&lt;br /&gt;
 &amp;lt;model&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
&lt;br /&gt;
Request revision identification +CGMR&lt;br /&gt;
&lt;br /&gt;
 AT+CGMR&lt;br /&gt;
 &amp;lt;revision&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
&lt;br /&gt;
Request product serial number identification +CGSN&lt;br /&gt;
&lt;br /&gt;
 AT+CGSN&lt;br /&gt;
 &amp;lt;serial number&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
&lt;br /&gt;
Select TE character set +CSCS&lt;br /&gt;
&lt;br /&gt;
 AT+CSCS?&lt;br /&gt;
 +CSCS: &amp;quot;IRA&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
&lt;br /&gt;
 AT+CSCS=?&lt;br /&gt;
 +CSCS: &amp;quot;GSM&amp;quot;,&amp;quot;IRA&amp;quot;,&amp;quot;PCCP437&amp;quot;,&amp;quot;PCDN&amp;quot;,&amp;quot;8859-1&amp;quot;,&amp;quot;HEX&amp;quot;,&amp;quot;UCS2&amp;quot;&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
&lt;br /&gt;
Request international mobile subscriber identity +CIMI&lt;br /&gt;
&lt;br /&gt;
 AT+CIMI&lt;br /&gt;
 *************** (I'm not giving you my IMSI!)&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
&lt;br /&gt;
Request subscriber number +CNUM&lt;br /&gt;
&lt;br /&gt;
 AT+CNUM&lt;br /&gt;
 +CNUM: ,&amp;quot;0123456789&amp;quot;,122&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
&lt;br /&gt;
Multiplexing mode +CMUX &lt;br /&gt;
&lt;br /&gt;
 AT+CMUX?&lt;br /&gt;
 ERROR&lt;br /&gt;
 AT+CMUX=?&lt;br /&gt;
 +CMUX: (1),(0),(1-5),(10-100),(1-255),(0-100),(2-255),(1-255),(1-7)&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
&lt;br /&gt;
PCCA STD 101 [17] select wireless network +WS46&lt;br /&gt;
&lt;br /&gt;
 AT+WS46=?&lt;br /&gt;
 +WS46: (12)&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
&lt;br /&gt;
== Section 6, Call control commands and methods ==&lt;br /&gt;
&lt;br /&gt;
Select type of address +CSTA&lt;br /&gt;
&lt;br /&gt;
 AT+CSTA?&lt;br /&gt;
 +CSTA: 129&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
 AT+CSTA=?&lt;br /&gt;
 +CSTA: (129,145)&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
&lt;br /&gt;
Call mode +CMOD&lt;br /&gt;
&lt;br /&gt;
 AT+CMOD=?&lt;br /&gt;
 +CMOD: (0-3)&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
&lt;br /&gt;
Select bearer service type +CBST&lt;br /&gt;
&lt;br /&gt;
 AT+CBST?&lt;br /&gt;
 +CBST: 7,0,1&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
 AT+CBST=?&lt;br /&gt;
 +CBST: (0-7,12,14,65,66,68,70,71,75),(0),(0-3)&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
&lt;br /&gt;
Radio link protocol +CRLP&lt;br /&gt;
&lt;br /&gt;
 AT+CRLP?&lt;br /&gt;
 +CRLP: 61,61,48,6&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
 AT+CRLP=?&lt;br /&gt;
 +CRLP: (0-61),(0-61),(39-255),(1-255)&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
&lt;br /&gt;
Service reporting control +CR&lt;br /&gt;
&lt;br /&gt;
 AT+CR?&lt;br /&gt;
 +CR: 0&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
 AT+CR=?&lt;br /&gt;
 +CR: (0,1)&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
&lt;br /&gt;
Extended error report +CEER&lt;br /&gt;
&lt;br /&gt;
 AT+CEER&lt;br /&gt;
 +CEER: 0,0,5,16,normal call clearing&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
&lt;br /&gt;
Cellular result codes +CRC&lt;br /&gt;
&lt;br /&gt;
 AT+CRC=1&lt;br /&gt;
 OK&lt;br /&gt;
 &lt;br /&gt;
 +CRING: VOICE&lt;br /&gt;
&lt;br /&gt;
Single numbering scheme +CSNS&lt;br /&gt;
&lt;br /&gt;
 AT+CSNS=?&lt;br /&gt;
 +CSNS: (0-7)&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
&lt;br /&gt;
== Section 7, Network service related commands ==&lt;br /&gt;
&lt;br /&gt;
7.2	Network registration +CREG&lt;br /&gt;
&lt;br /&gt;
 AT+CREG?&lt;br /&gt;
 +CREG: 0,0&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
 AT+CREG=?&lt;br /&gt;
 +CREG: (0-2)&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
&lt;br /&gt;
7.3	PLMN selection +COPS&lt;br /&gt;
&lt;br /&gt;
 AT+CREG=1&lt;br /&gt;
 OK&lt;br /&gt;
 &lt;br /&gt;
 AT+COPS=0&lt;br /&gt;
 OK&lt;br /&gt;
 &lt;br /&gt;
 +CREG: 2&lt;br /&gt;
 &lt;br /&gt;
 +CREG: 1&lt;br /&gt;
&lt;br /&gt;
== Section 8, Mobile Termination control and status commands ==&lt;br /&gt;
&lt;br /&gt;
8.1	Phone activity status +CPAS&lt;br /&gt;
&lt;br /&gt;
 AT+CPAS&lt;br /&gt;
 +CPAS: 0&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
 AT+CPAS=?&lt;br /&gt;
 +CPAS: (0-5)&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
&lt;br /&gt;
8.2	Set phone functionality +CFUN&lt;br /&gt;
&lt;br /&gt;
 AT+CFUN?&lt;br /&gt;
 +CFUN: 1&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
 AT+CFUN=?&lt;br /&gt;
 +CFUN: (0,1,4),(0)&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
&lt;br /&gt;
8.4	Battery charge +CBC&lt;br /&gt;
&lt;br /&gt;
 AT+CBC&lt;br /&gt;
 +CBC: 0,0&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
 AT+CBC=?&lt;br /&gt;
 +CBC: (0-3),(0-100)&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous ==&lt;br /&gt;
&lt;br /&gt;
 AT+CPAS&lt;br /&gt;
 +CPAS: 5&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
&lt;br /&gt;
 AT+CPAS?&lt;br /&gt;
 ERROR&lt;br /&gt;
 AT+CPAS=?&lt;br /&gt;
 +CPAS: (0-5)&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
&lt;br /&gt;
 AT%BAND?&lt;br /&gt;
 %BAND: 0&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
 AT%BAND=?&lt;br /&gt;
 %BAND: (0-1),(1-31)&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
&lt;br /&gt;
 AT+CSSN?&lt;br /&gt;
 +CSSN: 0,0&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
 AT+CSSN=?&lt;br /&gt;
 +CSSN: (0,1),(0,1)&lt;br /&gt;
 &lt;br /&gt;
 OK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Neo1973 Hardware]]&lt;/div&gt;</summary>
		<author><name>TonyGarnockJones</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Openmoko_Local_Groups:_London</id>
		<title>Openmoko Local Groups: London</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Openmoko_Local_Groups:_London"/>
				<updated>2007-12-05T16:43:13Z</updated>
		
		<summary type="html">&lt;p&gt;TonyGarnockJones: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to OpenMoko London!&lt;br /&gt;
&lt;br /&gt;
Beer and Neo anyone?&lt;br /&gt;
&lt;br /&gt;
{|border=1&lt;br /&gt;
!Name&lt;br /&gt;
!Skills&lt;br /&gt;
!Interest&lt;br /&gt;
!Location&lt;br /&gt;
!Device owned&lt;br /&gt;
|-&lt;br /&gt;
|[[User:jptmoore|John Moore]]&lt;br /&gt;
|C/Scheme&lt;br /&gt;
|Application development&lt;br /&gt;
|Pinner&lt;br /&gt;
|[[Image: Moko.jpg|center]]&lt;br /&gt;
|-&lt;br /&gt;
|Alex&lt;br /&gt;
|Java,Perl,Python&lt;br /&gt;
|User &amp;amp; developer&lt;br /&gt;
|Hampshire&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Phlash|Phil Ashby]]&lt;br /&gt;
|C/C++/Java /Embedded/Hardware&lt;br /&gt;
|Kernel &amp;amp; Application development&lt;br /&gt;
|Felixstowe&lt;br /&gt;
|[[Image: Moko.jpg|center]]&lt;br /&gt;
|-&lt;br /&gt;
|John Cass&lt;br /&gt;
|Java,C&lt;br /&gt;
|User &amp;amp; developer&lt;br /&gt;
|London&lt;br /&gt;
|[[Image: Moko.jpg|center]]&lt;br /&gt;
|-&lt;br /&gt;
|[[User:TonyGarnockJones|Tony Garnock-Jones]]&lt;br /&gt;
|C, assembly, Erlang, Scheme, ML, Haskell, Smalltalk, ...&lt;br /&gt;
|User &amp;amp; developer&lt;br /&gt;
|London&lt;br /&gt;
|[[Image: Moko.jpg|center]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See [[Talk:OpenMoko_Local_Groups:_London|discussion]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>TonyGarnockJones</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:TonyGarnockJones</id>
		<title>User:TonyGarnockJones</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:TonyGarnockJones"/>
				<updated>2007-12-05T16:41:26Z</updated>
		
		<summary type="html">&lt;p&gt;TonyGarnockJones: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tony Garnock-Jones, tonyg@lshift.net.&lt;br /&gt;
&lt;br /&gt;
I own a phase-1 Neo1973.&lt;br /&gt;
&lt;br /&gt;
I'm running Erlang with GTK and serial-port extensions on my phone, using it as an openmoko userland replacement (for gsmd/dialer/addressbook etc.).&lt;br /&gt;
&lt;br /&gt;
* &amp;quot;darcs get http://www.eighty-twenty.org/~tonyg/Darcs/erlang-oe/&amp;quot; for bitbake scripts for building erlang, erlang-gtknode and erlang-serial ipkg packages&lt;br /&gt;
* &amp;quot;darcs get http://www.eighty-twenty.org/~tonyg/Darcs/erlang-serial/&amp;quot; to track the serial-port erlang interface program&lt;br /&gt;
* &amp;quot;darcs get http://www.eighty-twenty.org/~tonyg/Darcs/erlang-openmoko/&amp;quot; to track my userland (gsmd/dialer etc) code&lt;/div&gt;</summary>
		<author><name>TonyGarnockJones</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:TonyGarnockJones</id>
		<title>User:TonyGarnockJones</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:TonyGarnockJones"/>
				<updated>2007-12-05T16:37:53Z</updated>
		
		<summary type="html">&lt;p&gt;TonyGarnockJones: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Tony Garnock-Jones, tonyg@lshift.net.&lt;br /&gt;
&lt;br /&gt;
I own a phase-1 Neo1973.&lt;br /&gt;
&lt;br /&gt;
I'm running Erlang with GTK and serial-port extensions on my phone, using it as an openmoko userland replacement (for gsmd/dialer/addressbook etc.).&lt;/div&gt;</summary>
		<author><name>TonyGarnockJones</name></author>	</entry>

	</feed>