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

	<entry>
		<id>http://wiki.openmoko.org/wiki/User_talk:ScaredyCat</id>
		<title>User talk:ScaredyCat</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User_talk:ScaredyCat"/>
				<updated>2008-06-04T16:18:32Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* GSM AT Command Reference */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== GSM AT Command Reference ===&lt;br /&gt;
&lt;br /&gt;
[http://buildhost.automated.it/ My Stuff] and [http://blog.automated.it/ My blog]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
'1.1 - Oct.2001&lt;br /&gt;
'&lt;br /&gt;
'According to ITU-T V.25ter (07/97):&lt;br /&gt;
'only the commands which effect GSM/UMTS 6.1.8 ISO system global object identification&lt;br /&gt;
&lt;br /&gt;
AT+GOI&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'6.1.9 Overall capabilities of TA&lt;br /&gt;
AT+GCAP&lt;br /&gt;
+GCAP: +FCLASS, +CGSM, +DS&lt;br /&gt;
&lt;br /&gt;
'6.1.10 Selects the country of installation&lt;br /&gt;
AT+GCI=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'6.2.10 Fixed TE data rate&lt;br /&gt;
AT+IPR=?&lt;br /&gt;
+IPR: (0,300,1200,2400,4800,9600,14400,19200,28800,38400,57600,115200,230400,460800)&lt;br /&gt;
&lt;br /&gt;
AT+IPR?&lt;br /&gt;
+IPR: 0&lt;br /&gt;
&lt;br /&gt;
'6.2.11 Character framing&lt;br /&gt;
AT+ICF=?&lt;br /&gt;
+ICF: (0-6),(0-3)&lt;br /&gt;
&lt;br /&gt;
AT+ICF?&lt;br /&gt;
+ICF: 3,3&lt;br /&gt;
&lt;br /&gt;
'6.2.12 Flow control&lt;br /&gt;
AT+IFC=?&lt;br /&gt;
+IFC: (0-3),(0-2)&lt;br /&gt;
&lt;br /&gt;
AT+IFC?&lt;br /&gt;
+IFC: 2,2&lt;br /&gt;
&lt;br /&gt;
'6.2.13 Data rate&lt;br /&gt;
AT+ILRR=?&lt;br /&gt;
+ILRR: (0,1)&lt;br /&gt;
&lt;br /&gt;
AT+ILRR?&lt;br /&gt;
+ILRR: 0&lt;br /&gt;
&lt;br /&gt;
'&lt;br /&gt;
'According to TIA IS-101:&lt;br /&gt;
'only one command which effect GSM/UMTS used here&lt;br /&gt;
'C.2.1 Select mode&lt;br /&gt;
AT+FCLASS=?&lt;br /&gt;
0,1,2&lt;br /&gt;
&lt;br /&gt;
'&lt;br /&gt;
'According to PCCA STD-101:&lt;br /&gt;
'Select wireless network&lt;br /&gt;
AT+WS46=?&lt;br /&gt;
+WS46: (12,240)&lt;br /&gt;
&lt;br /&gt;
AT+WS46?&lt;br /&gt;
+WS46: 12&lt;br /&gt;
&lt;br /&gt;
'&lt;br /&gt;
'According to 3GPP TS 27.007 version 4.2.0:&lt;br /&gt;
'5.1 Request manufacturer identification&lt;br /&gt;
AT+GMI&lt;br /&gt;
Ericsson&lt;br /&gt;
&lt;br /&gt;
AT+CGMI&lt;br /&gt;
ERICSSON&lt;br /&gt;
&lt;br /&gt;
'5.2 Request model identification&lt;br /&gt;
AT+GMM&lt;br /&gt;
T39&lt;br /&gt;
&lt;br /&gt;
AT+CGMM&lt;br /&gt;
1130102-BVT39m&lt;br /&gt;
&lt;br /&gt;
'5.3 Request revision identification&lt;br /&gt;
AT+GMR&lt;br /&gt;
R2M         prgCXC125147_TAE&lt;br /&gt;
&lt;br /&gt;
AT+CGMR&lt;br /&gt;
R2M         CXC125268&lt;br /&gt;
&lt;br /&gt;
'5.4 Request product serial number identification&lt;br /&gt;
'not used here, for privacy reasons&lt;br /&gt;
AT+CGSN=?&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
'5.5 Select TE character set&lt;br /&gt;
AT+CSCS=?&lt;br /&gt;
+CSCS: (&amp;quot;GSM&amp;quot;,&amp;quot;IRA&amp;quot;,&amp;quot;8859-1&amp;quot;,&amp;quot;ERICSSON&amp;quot;,&amp;quot;UTF-8&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
AT+CSCS?&lt;br /&gt;
+CSCS: &amp;quot;GSM&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'5.6 Request international mobile subscriber identity&lt;br /&gt;
'not used here, for privacy reasons&lt;br /&gt;
AT+CIMI=?&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
'5.7 Multiplexing mode&lt;br /&gt;
AT+CMUX=?&lt;br /&gt;
+CMUX: (0),(0),(1-7),(31),(10),(3),(30),(10),(1-7)&lt;br /&gt;
&lt;br /&gt;
AT+CMUX?&lt;br /&gt;
+CMUX: 0,0,1,31,10,3,30,10,2&lt;br /&gt;
&lt;br /&gt;
'6.1 Select type of address&lt;br /&gt;
AT+CSTA=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
AT+CSTA?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'6.4 Call mode&lt;br /&gt;
AT+CMOD=?&lt;br /&gt;
+CMOD: (0-1)&lt;br /&gt;
&lt;br /&gt;
AT+CMOD?&lt;br /&gt;
+CMOD: 0&lt;br /&gt;
&lt;br /&gt;
'6.5 Hangup call&lt;br /&gt;
AT+CHUP=?&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
'6.7 Select bearer service type&lt;br /&gt;
AT+CBST=?&lt;br /&gt;
+CBST: (0,4,6-7,12,14-16,68,70-71,75,79-83),(0),(1)&lt;br /&gt;
&lt;br /&gt;
AT+CBST?&lt;br /&gt;
+CBST: 0,0,1&lt;br /&gt;
&lt;br /&gt;
'6.8 Radio link protocol&lt;br /&gt;
AT+CRLP=?&lt;br /&gt;
+CRLP: (0-61),(0-61),(38-100),(0-255),(0,1)&lt;br /&gt;
+CRLP: (0-496),(0-496),(38-100),(0-255),(2),(3-10)&lt;br /&gt;
&lt;br /&gt;
AT+CRLP?&lt;br /&gt;
+CRLP: 61,61,48,6,0&lt;br /&gt;
+CRLP: 120,120,48,6,2,3&lt;br /&gt;
&lt;br /&gt;
'6.9 Service reporting control&lt;br /&gt;
AT+CR=?&lt;br /&gt;
+CR: (0,1)&lt;br /&gt;
&lt;br /&gt;
AT+CR?&lt;br /&gt;
+CR: 0&lt;br /&gt;
&lt;br /&gt;
'6.10 Extended error report&lt;br /&gt;
AT+CEER=?&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
'6.11 Cellular result codes&lt;br /&gt;
AT+CRC=?&lt;br /&gt;
+CRC: (0,1)&lt;br /&gt;
&lt;br /&gt;
AT+CRC?&lt;br /&gt;
+CRC: 0&lt;br /&gt;
&lt;br /&gt;
'6.12 HSCSD device parameters&lt;br /&gt;
AT+CHSD=?&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
AT+CHSD&lt;br /&gt;
+CHSD: 2,2,1,3,12&lt;br /&gt;
&lt;br /&gt;
'6.13 HSCSD transparent call configuration&lt;br /&gt;
AT+CHST=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
AT+CHST?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'6.14 HSCSD non-transparent call configuration&lt;br /&gt;
AT+CHSN=?&lt;br /&gt;
+CHSN: (0-4),(0-2),(0-2),(4,8,12)&lt;br /&gt;
&lt;br /&gt;
AT+CHSN?&lt;br /&gt;
+CHSN: 1,1,0,4&lt;br /&gt;
&lt;br /&gt;
'6.15 HSCSD current call parameters&lt;br /&gt;
AT+CHSC=?&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
AT+CHSC?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'6.16 HSCSD parameters report&lt;br /&gt;
AT+CHSR=?&lt;br /&gt;
+CHSR: (0,1)&lt;br /&gt;
&lt;br /&gt;
AT+CHSR?&lt;br /&gt;
+CHSR: 0&lt;br /&gt;
&lt;br /&gt;
'6.17 HSCSD automatic user initiated upgrading&lt;br /&gt;
AT+CHSU=?&lt;br /&gt;
+CHSU: (0,1)&lt;br /&gt;
&lt;br /&gt;
AT+CHSU?&lt;br /&gt;
+CHSU: 0&lt;br /&gt;
&lt;br /&gt;
'6.18 HSCSD non-transparent asymmetry configuration&lt;br /&gt;
AT+CHSA=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
AT+CHSA?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'6.19 Single numbering scheme&lt;br /&gt;
AT+CSNS=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
AT+CSNS?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'6.20 Voice Hangup Control&lt;br /&gt;
AT+CVHU=?&lt;br /&gt;
+CVHU: (0-2)&lt;br /&gt;
&lt;br /&gt;
AT+CVHU?&lt;br /&gt;
+CVHU: 2&lt;br /&gt;
&lt;br /&gt;
'6.21 V.120 rate adaption protocol&lt;br /&gt;
AT+CV120=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
AT+CV120?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'6.22 Settings date format&lt;br /&gt;
AT+CSDF=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
AT+CSDF?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'6.23 Silence Command&lt;br /&gt;
AT+CSIL=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
AT+CSIL?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'6.24 Settings time format&lt;br /&gt;
AT+CSTF=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
AT+CSTF?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'7.1 Subscriber number&lt;br /&gt;
'not used here, for privacy reasons&lt;br /&gt;
AT+CNUM=?&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
'7.2 Network registration&lt;br /&gt;
'not used here, for privacy reasons&lt;br /&gt;
AT+CREG=?&lt;br /&gt;
+CREG: (0-1)&lt;br /&gt;
&lt;br /&gt;
'7.3 Operator selection&lt;br /&gt;
'not used here, for speed reasons&lt;br /&gt;
AT+COPS?&lt;br /&gt;
+COPS: 0,0,&amp;quot;E-PLUS&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'7.4 Facility lock&lt;br /&gt;
AT+CLCK=?&lt;br /&gt;
+CLCK: (&amp;quot;CS&amp;quot;,&amp;quot;PS&amp;quot;,&amp;quot;SC&amp;quot;,&amp;quot;P2&amp;quot;,&amp;quot;AO&amp;quot;,&amp;quot;OI&amp;quot;,&amp;quot;OX&amp;quot;,&amp;quot;AI&amp;quot;,&amp;quot;IR&amp;quot;,&amp;quot;AB&amp;quot;,&amp;quot;AG&amp;quot;,&amp;quot;AC&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
'7.5 Change password&lt;br /&gt;
AT+CPWD=?&lt;br /&gt;
+CPWD: (&amp;quot;PS&amp;quot;,8),(&amp;quot;SC&amp;quot;,8),(&amp;quot;P2&amp;quot;,8),(&amp;quot;AO&amp;quot;,8),(&amp;quot;OI&amp;quot;,8),(&amp;quot;OX&amp;quot;,8),(&amp;quot;AI&amp;quot;,8),(&amp;quot;IR&amp;quot;,8),(&amp;quot;AB&amp;quot;,8),(&amp;quot;AG&amp;quot;,8),(&amp;quot;AC&amp;quot;,8)&lt;br /&gt;
&lt;br /&gt;
'7.6 Calling line identification presentation&lt;br /&gt;
AT+CLIP=?&lt;br /&gt;
+CLIP: (0-1)&lt;br /&gt;
&lt;br /&gt;
'7.7 Calling line identification restriction&lt;br /&gt;
AT+CLIR=?&lt;br /&gt;
+CLIR: (0-2)&lt;br /&gt;
&lt;br /&gt;
'7.8 Connected line identification presentation&lt;br /&gt;
AT+COLP=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'7.9 Called line identification presentation&lt;br /&gt;
AT+CDIP=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'7.10 Closed user group&lt;br /&gt;
AT+CCUG=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'7.11 Call forwarding number and conditions&lt;br /&gt;
AT+CCFC=?&lt;br /&gt;
+CCFC: (0-5)&lt;br /&gt;
&lt;br /&gt;
'7.12 Call waiting&lt;br /&gt;
AT+CCWA=?&lt;br /&gt;
+CCWA: (0-1)&lt;br /&gt;
&lt;br /&gt;
AT+CCWA?&lt;br /&gt;
+CCWA: 0&lt;br /&gt;
&lt;br /&gt;
'7.13 Call related supplementary services&lt;br /&gt;
AT+CHLD=?&lt;br /&gt;
+CHLD: (0-4,11-16,21-26)&lt;br /&gt;
&lt;br /&gt;
'7.14 Call deflection&lt;br /&gt;
AT+CTFR=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'7.15 Unstructured supplementary service data&lt;br /&gt;
AT+CUSD=?&lt;br /&gt;
+CUSD: (0-1)&lt;br /&gt;
&lt;br /&gt;
AT+CUSD?&lt;br /&gt;
+CUSD: 0&lt;br /&gt;
&lt;br /&gt;
'7.16 Advice of Charge&lt;br /&gt;
AT+CAOC=?&lt;br /&gt;
+CAOC: (0)&lt;br /&gt;
&lt;br /&gt;
AT+CAOC?&lt;br /&gt;
+CME ERROR: 4&lt;br /&gt;
&lt;br /&gt;
'7.17 Supplementary service notifications&lt;br /&gt;
AT+CSSN=?&lt;br /&gt;
+CSSN: (0-1),(0-1)&lt;br /&gt;
&lt;br /&gt;
AT+CSSN?&lt;br /&gt;
+CSSN: 0,0&lt;br /&gt;
&lt;br /&gt;
'7.18 List current calls&lt;br /&gt;
'not used here, for privacy reasons&lt;br /&gt;
AT+CLCC=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'7.19 Preferred operator list&lt;br /&gt;
'not used here, for privacy reasons&lt;br /&gt;
AT+CPOL=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'7.20 Selection of preferred operator list&lt;br /&gt;
AT+CPLS=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
AT+CPLS?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'7.21 Read operator names&lt;br /&gt;
'not used here, for privacy reasons&lt;br /&gt;
AT+COPN=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'7.22 eMLPP Priority Registration and Interrogation&lt;br /&gt;
'not used here, for privacy reasons&lt;br /&gt;
AT+CAEMLPP=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'7.23 eMLPP subscriptions&lt;br /&gt;
AT+CPPS=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'7.24 Fast call setup conditions&lt;br /&gt;
'not used here, for privacy reasons&lt;br /&gt;
AT+CFCS=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'7.25 Automatic answer for eMLPP Service&lt;br /&gt;
'not used here, for privacy reasons&lt;br /&gt;
AT+CAAP=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'7.26 User to User Signalling Service 1&lt;br /&gt;
AT+CUUS1=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
AT+CUUS1?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'8.1 Phone activity status&lt;br /&gt;
AT+CPAS=?&lt;br /&gt;
+CPAS: (0,3,4,129,130,131)&lt;br /&gt;
&lt;br /&gt;
'8.2 Set phone functionality&lt;br /&gt;
AT+CFUN=?&lt;br /&gt;
+CFUN: (0-1)&lt;br /&gt;
&lt;br /&gt;
AT+CFUN?&lt;br /&gt;
+CFUN: 1&lt;br /&gt;
&lt;br /&gt;
'8.3 Enter PIN&lt;br /&gt;
AT+CPIN?&lt;br /&gt;
+CPIN: READY&lt;br /&gt;
&lt;br /&gt;
'8.4 Battery charge&lt;br /&gt;
AT+CBC=?&lt;br /&gt;
+CBC: (0-2),(0-100)&lt;br /&gt;
&lt;br /&gt;
'8.5 Signal quality&lt;br /&gt;
AT+CSQ=?&lt;br /&gt;
+CSQ: (0-31,99),(0-7,99)&lt;br /&gt;
&lt;br /&gt;
'8.6 Mobile Equipment control mode&lt;br /&gt;
AT+CMEC=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
AT+CMEC?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'8.7 Keypad control&lt;br /&gt;
AT+CKPD=?&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
'8.8 Display control&lt;br /&gt;
AT+CDIS=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'8.9 Indicator control&lt;br /&gt;
AT+CIND=?&lt;br /&gt;
+CIND: (&amp;quot;battchg&amp;quot;,(0-5)),(&amp;quot;signal&amp;quot;,(0-5)),(&amp;quot;batterywarning&amp;quot;,(0-1)),(&amp;quot;chargerconnected&amp;quot;,(0-1)),(&amp;quot;service&amp;quot;,(0-1)),(&amp;quot;sounder&amp;quot;,(0-1)),(&amp;quot;message&amp;quot;,(0-1)),(&amp;quot;call&amp;quot;,(0-1)),(&amp;quot;roam&amp;quot;,(0-1)),(&amp;quot;smsfull&amp;quot;,(0-1))&lt;br /&gt;
&lt;br /&gt;
'8.10 Mobile Equipment event reporting&lt;br /&gt;
AT+CMER=?&lt;br /&gt;
+CMER: (0,3),(0,2),0,(0-1),0&lt;br /&gt;
&lt;br /&gt;
AT+CMER?&lt;br /&gt;
+CMER: 0,0,0,0,0&lt;br /&gt;
&lt;br /&gt;
'8.11 Select phonebook memory storage&lt;br /&gt;
AT+CPBS=?&lt;br /&gt;
+CPBS: (&amp;quot;ME&amp;quot;,&amp;quot;SM&amp;quot;,&amp;quot;DC&amp;quot;,&amp;quot;FD&amp;quot;,&amp;quot;MC&amp;quot;,&amp;quot;MV&amp;quot;,&amp;quot;RC&amp;quot;,&amp;quot;HP&amp;quot;,&amp;quot;BC&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
AT+CPBS?&lt;br /&gt;
+CPBS: &amp;quot;SM&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'8.12 Read phonebook entries&lt;br /&gt;
AT+CPBR=?&lt;br /&gt;
+CPBR: (1-100),80,17&lt;br /&gt;
&lt;br /&gt;
AT+CPBR?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'8.13 Find phonebook entries&lt;br /&gt;
AT+CPBF=?&lt;br /&gt;
+CPBF: 80,17&lt;br /&gt;
&lt;br /&gt;
'8.14 Write phonebook entry&lt;br /&gt;
AT+CPBW=?&lt;br /&gt;
+CPBW: (1-100),80,(128-255),17&lt;br /&gt;
&lt;br /&gt;
'8.15 Clock&lt;br /&gt;
AT+CCLK=?&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
AT+CCLK?&lt;br /&gt;
+CCLK: &amp;quot;01/10/27,16:00:45+04&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'8.16 Alarm&lt;br /&gt;
AT+CALA=?&lt;br /&gt;
+CALA: (1-2),(),(),(13),()&lt;br /&gt;
&lt;br /&gt;
AT+CALA?&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
'8.17 Generic SIM access&lt;br /&gt;
AT+CSIM=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'8.18 Restricted SIM access&lt;br /&gt;
AT+CRSM=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'8.19 Secure control command&lt;br /&gt;
AT+CSCC=?&lt;br /&gt;
+CSCC: (1-2),(199)&lt;br /&gt;
&lt;br /&gt;
'8.20 Alert sound mode&lt;br /&gt;
AT+CALM=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
AT+CALM?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'8.21 Ringer sound level&lt;br /&gt;
AT+CRSL=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'8.22 Vibrator mode&lt;br /&gt;
AT+CVIB=?&lt;br /&gt;
+CVIB: (0-1,16)&lt;br /&gt;
&lt;br /&gt;
'8.23 Loudspeaker volume level&lt;br /&gt;
AT+CLVL=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'8.24 Mute control&lt;br /&gt;
AT+CMUT=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'8.25 Accumulated call meter&lt;br /&gt;
AT+CACM=?&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
'8.26 Accumulated call meter maximum&lt;br /&gt;
AT+CAMM=?&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
'8.27 Price per unit and currency table&lt;br /&gt;
AT+CPUC=?&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
'8.28 Call Meter maximum event&lt;br /&gt;
AT+CCWE=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'8.29 Power class&lt;br /&gt;
AT+CPWC=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
AT+CPWC?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'8.30 Set Language&lt;br /&gt;
AT+CLAN=?&lt;br /&gt;
+CLAN: &amp;quot;de&amp;quot;,&amp;quot;en&amp;quot;,&amp;quot;fr&amp;quot;,&amp;quot;it&amp;quot;,&amp;quot;AUTO&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'8.31 Language Event&lt;br /&gt;
AT+CLAE=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
AT+CLAE?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'8.32 Set Greeting Text&lt;br /&gt;
AT+CSGT=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'8.33 Set Voice Mail Number&lt;br /&gt;
AT+CSVM=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'8.34 Ring Melody Playback&lt;br /&gt;
AT+CRMP=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'8.35 Master Reset&lt;br /&gt;
AT+CMAR=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'8.36 List all available AT commands&lt;br /&gt;
AT+CLAC&lt;br /&gt;
&amp;amp;F&lt;br /&gt;
*&lt;br /&gt;
*EACS&lt;br /&gt;
*EAID&lt;br /&gt;
*EALR&lt;br /&gt;
*EALS&lt;br /&gt;
*EAM&lt;br /&gt;
*EAMS&lt;br /&gt;
*EAPM&lt;br /&gt;
*EAPN&lt;br /&gt;
*EAPP&lt;br /&gt;
*EAPS&lt;br /&gt;
*EARS&lt;br /&gt;
*EASM&lt;br /&gt;
*EASY&lt;br /&gt;
*EBCA&lt;br /&gt;
*ECAM&lt;br /&gt;
*ECAR&lt;br /&gt;
*ECAS&lt;br /&gt;
*ECAW&lt;br /&gt;
*ECBP&lt;br /&gt;
*ECMW&lt;br /&gt;
*ECSP&lt;br /&gt;
*ECUR&lt;br /&gt;
*EDIF&lt;br /&gt;
*EDIS&lt;br /&gt;
*EDST&lt;br /&gt;
*EENL&lt;br /&gt;
*EFOS&lt;br /&gt;
*EGIR&lt;br /&gt;
*EINA&lt;br /&gt;
*EIPS&lt;br /&gt;
*EKSE&lt;br /&gt;
*EKSP&lt;br /&gt;
*EKSR&lt;br /&gt;
*ELAM&lt;br /&gt;
*ELAN&lt;br /&gt;
*ELIN&lt;br /&gt;
*EMAR&lt;br /&gt;
*EMIC&lt;br /&gt;
*EMIR&lt;br /&gt;
*EMLR&lt;br /&gt;
*EMWS&lt;br /&gt;
*ENAD&lt;br /&gt;
*EPED&lt;br /&gt;
*EPEE&lt;br /&gt;
*EPEW&lt;br /&gt;
*EPHD&lt;br /&gt;
*EPNR&lt;br /&gt;
*EPNW&lt;br /&gt;
*EPRR&lt;br /&gt;
*EPRW&lt;br /&gt;
*EQVL&lt;br /&gt;
*ERIL&lt;br /&gt;
*ERIN&lt;br /&gt;
*ERIP&lt;br /&gt;
*ESAG&lt;br /&gt;
*ESAM&lt;br /&gt;
*ESBL&lt;br /&gt;
*ESCG&lt;br /&gt;
*ESCN&lt;br /&gt;
*ESDF&lt;br /&gt;
*ESDG&lt;br /&gt;
*ESDI&lt;br /&gt;
*ESGR&lt;br /&gt;
*ESIL&lt;br /&gt;
*ESKL&lt;br /&gt;
*ESKS&lt;br /&gt;
*ESLN&lt;br /&gt;
*ESMA&lt;br /&gt;
*ESMM&lt;br /&gt;
*ESNU&lt;br /&gt;
*ESOM&lt;br /&gt;
*ESTF&lt;br /&gt;
*ESTL&lt;br /&gt;
*ESVM&lt;br /&gt;
*ESZS&lt;br /&gt;
*ETCH&lt;br /&gt;
*ETXT&lt;br /&gt;
*EVA&lt;br /&gt;
*EVAA&lt;br /&gt;
*EVD&lt;br /&gt;
*EVH&lt;br /&gt;
*EWBA&lt;br /&gt;
*EWBR&lt;br /&gt;
*EWCG&lt;br /&gt;
*EWCT&lt;br /&gt;
*EWDT&lt;br /&gt;
*EWHP&lt;br /&gt;
*EWIL&lt;br /&gt;
*EWLI&lt;br /&gt;
*EWPB&lt;br /&gt;
*EWPN&lt;br /&gt;
*EWPR&lt;br /&gt;
*EWSA&lt;br /&gt;
*EWSG&lt;br /&gt;
*EXVC&lt;br /&gt;
*EYDO&lt;br /&gt;
*EYPI&lt;br /&gt;
*EYRE&lt;br /&gt;
*EYRR&lt;br /&gt;
*EYRV&lt;br /&gt;
+CACM&lt;br /&gt;
+CALA&lt;br /&gt;
+CALD&lt;br /&gt;
+CAMM&lt;br /&gt;
+CAOC&lt;br /&gt;
+CAPD&lt;br /&gt;
+CBC&lt;br /&gt;
+CBST&lt;br /&gt;
+CCFC&lt;br /&gt;
+CCLK&lt;br /&gt;
+CCWA&lt;br /&gt;
+CFUN&lt;br /&gt;
+CGMI&lt;br /&gt;
+CGMM&lt;br /&gt;
+CGMR&lt;br /&gt;
+CGSMS&lt;br /&gt;
+CGSN&lt;br /&gt;
+CHLD&lt;br /&gt;
+CHSC&lt;br /&gt;
+CHSD&lt;br /&gt;
+CHSN&lt;br /&gt;
+CHUP&lt;br /&gt;
+CIMI&lt;br /&gt;
+CIND&lt;br /&gt;
+CKPD&lt;br /&gt;
+CLAC&lt;br /&gt;
+CLAN&lt;br /&gt;
+CLCK&lt;br /&gt;
+CLIP&lt;br /&gt;
+CLIR&lt;br /&gt;
+CMEE&lt;br /&gt;
+CMER&lt;br /&gt;
+CMGC&lt;br /&gt;
+CMGD&lt;br /&gt;
+CMGF&lt;br /&gt;
+CMGL&lt;br /&gt;
+CMGR&lt;br /&gt;
+CMGS&lt;br /&gt;
+CMGW&lt;br /&gt;
+CMOD&lt;br /&gt;
+CMSS&lt;br /&gt;
+CNMI&lt;br /&gt;
+CNUM&lt;br /&gt;
+COPS&lt;br /&gt;
+CPAS&lt;br /&gt;
+CPBF&lt;br /&gt;
+CPBR&lt;br /&gt;
+CPBS&lt;br /&gt;
+CPBW&lt;br /&gt;
+CPIN&lt;br /&gt;
+CPMS&lt;br /&gt;
+CPUC&lt;br /&gt;
+CPWD&lt;br /&gt;
+CRC&lt;br /&gt;
+CREG&lt;br /&gt;
+CRES&lt;br /&gt;
+CSAS&lt;br /&gt;
+CSCA&lt;br /&gt;
+CSCB&lt;br /&gt;
+CSCC&lt;br /&gt;
+CSCS&lt;br /&gt;
+CSMS&lt;br /&gt;
+CSQ&lt;br /&gt;
+CSSN&lt;br /&gt;
+CTZU&lt;br /&gt;
+CUSD&lt;br /&gt;
+CVIB&lt;br /&gt;
+VTS&lt;br /&gt;
+WS46&lt;br /&gt;
A&lt;br /&gt;
D&lt;br /&gt;
H&lt;br /&gt;
L&lt;br /&gt;
Q&lt;br /&gt;
S3&lt;br /&gt;
S4&lt;br /&gt;
S5&lt;br /&gt;
V&lt;br /&gt;
Z&lt;br /&gt;
/&lt;br /&gt;
&amp;amp;C&lt;br /&gt;
&amp;amp;D&lt;br /&gt;
&amp;amp;F&lt;br /&gt;
&amp;amp;W&lt;br /&gt;
*&lt;br /&gt;
*EINA&lt;br /&gt;
*EOBEX&lt;br /&gt;
*ESIR&lt;br /&gt;
+CEER&lt;br /&gt;
+CGACT&lt;br /&gt;
+CGATT&lt;br /&gt;
+CGDATA&lt;br /&gt;
+CGDATA&lt;br /&gt;
+CGDCONT&lt;br /&gt;
+CGEREP&lt;br /&gt;
+CGPADDR&lt;br /&gt;
+CGPADDR&lt;br /&gt;
+CGQMIN&lt;br /&gt;
+CGQREQ&lt;br /&gt;
+CGREG&lt;br /&gt;
+CHSR&lt;br /&gt;
+CHSU&lt;br /&gt;
+CHUP&lt;br /&gt;
+CHUP&lt;br /&gt;
+CLAC&lt;br /&gt;
+CMEE&lt;br /&gt;
+CMUX&lt;br /&gt;
+CR&lt;br /&gt;
+CRC&lt;br /&gt;
+CRLP&lt;br /&gt;
+CVHU&lt;br /&gt;
+DR&lt;br /&gt;
+DS&lt;br /&gt;
+FAA&lt;br /&gt;
+FBADLIN&lt;br /&gt;
+FBADMUL&lt;br /&gt;
+FBOR&lt;br /&gt;
+FBUG&lt;br /&gt;
+FCIG&lt;br /&gt;
+FCLASS&lt;br /&gt;
+FCQ&lt;br /&gt;
+FCR&lt;br /&gt;
+FDCC&lt;br /&gt;
+FDFFC&lt;br /&gt;
+FDIS&lt;br /&gt;
+FDR&lt;br /&gt;
+FDT&lt;br /&gt;
+FDT&lt;br /&gt;
+FECM&lt;br /&gt;
+FET&lt;br /&gt;
+FK&lt;br /&gt;
+FLID&lt;br /&gt;
+FLNFC&lt;br /&gt;
+FLPL&lt;br /&gt;
+FMDL?&lt;br /&gt;
+FMFR?&lt;br /&gt;
+FMI?&lt;br /&gt;
+FMINSP&lt;br /&gt;
+FMM?&lt;br /&gt;
+FMR?&lt;br /&gt;
+FPHCTO&lt;br /&gt;
+FPTS&lt;br /&gt;
+FRBC&lt;br /&gt;
+FREL&lt;br /&gt;
+FREV?&lt;br /&gt;
+FRH&lt;br /&gt;
+FRH&lt;br /&gt;
+FRM&lt;br /&gt;
+FRM&lt;br /&gt;
+FRS&lt;br /&gt;
+FRS&lt;br /&gt;
+FSPL&lt;br /&gt;
+FTBC&lt;br /&gt;
+FTH&lt;br /&gt;
+FTH&lt;br /&gt;
+FTM&lt;br /&gt;
+FTM&lt;br /&gt;
+FTS&lt;br /&gt;
+FTS&lt;br /&gt;
+FVRFC&lt;br /&gt;
+FWDFC&lt;br /&gt;
+GCAP&lt;br /&gt;
+GMI&lt;br /&gt;
+GMM&lt;br /&gt;
+GMR&lt;br /&gt;
+ICF&lt;br /&gt;
+IFC&lt;br /&gt;
+ILRR&lt;br /&gt;
+IPR&lt;br /&gt;
A&lt;br /&gt;
D&lt;br /&gt;
E&lt;br /&gt;
H&lt;br /&gt;
I&lt;br /&gt;
L&lt;br /&gt;
M&lt;br /&gt;
O&lt;br /&gt;
P&lt;br /&gt;
Q&lt;br /&gt;
S0&lt;br /&gt;
S10&lt;br /&gt;
S2&lt;br /&gt;
S3&lt;br /&gt;
S4&lt;br /&gt;
S5&lt;br /&gt;
S6&lt;br /&gt;
S7&lt;br /&gt;
S8&lt;br /&gt;
T&lt;br /&gt;
V&lt;br /&gt;
X&lt;br /&gt;
Z&lt;br /&gt;
&lt;br /&gt;
'8.37 Delete alarm&lt;br /&gt;
AT+CALD=?&lt;br /&gt;
+CALD: (1-2)&lt;br /&gt;
&lt;br /&gt;
'8.38 Postpone or dismiss an alarm&lt;br /&gt;
AT+CAPD=?&lt;br /&gt;
+CAPD: (0,540)&lt;br /&gt;
&lt;br /&gt;
'8.39 Automatic Time Zone Update&lt;br /&gt;
AT+CTZU=?&lt;br /&gt;
+CTZU: (0-1)&lt;br /&gt;
&lt;br /&gt;
AT+CTZU?&lt;br /&gt;
+CTZU: 0&lt;br /&gt;
&lt;br /&gt;
'8.40 Time Zone Reporting&lt;br /&gt;
AT+CTZR=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
AT+CTZR?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'8.41 Enter protocol mode&lt;br /&gt;
AT+CPROT=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'9.1 Report Mobile Equipment error&lt;br /&gt;
AT+CMEE=?&lt;br /&gt;
+CMEE: (0-2)&lt;br /&gt;
&lt;br /&gt;
'10.1.1 Define PDP Context&lt;br /&gt;
AT+CGDCONT=?&lt;br /&gt;
+CGDCONT:(1-10),(&amp;quot;IP&amp;quot;),,,(0-1),(0-1)&lt;br /&gt;
&lt;br /&gt;
'10.1.2 Define Secondary PDP Context&lt;br /&gt;
AT+CGDSCONT=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'10.1.3 Traffic Flow Template&lt;br /&gt;
AT+CGTFT=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'10.1.4 Quality of Service Profile (Requested)&lt;br /&gt;
AT+CGQREQ=?&lt;br /&gt;
+CGQREQ: (1-10),(0-3),(0-4),(0-5),(0-5),(0-18,31)&lt;br /&gt;
&lt;br /&gt;
'10.1.5 Quality of Service Profile (Minimum acceptable)&lt;br /&gt;
AT+CGQMIN=?&lt;br /&gt;
+CGQMIN: (1-10),(0-3),(0-4),(0-5),(0-5),(0-18,31)&lt;br /&gt;
&lt;br /&gt;
'10.1.6 3G Quality of Service Profile (Requested)&lt;br /&gt;
AT+CGEQREQ=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'10.1.7 3G Quality of Service Profile (Minimum acceptable)&lt;br /&gt;
AT+CGEQMIN=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'10.1.8 3G Quality of Service Profile (Negotiated)&lt;br /&gt;
AT+CGEQNEG=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'10.1.9 PS attach or detach&lt;br /&gt;
AT+CGATT=?&lt;br /&gt;
+CGATT: (0,1)&lt;br /&gt;
&lt;br /&gt;
'10.1.10 PDP context activate or deactivate&lt;br /&gt;
AT+CGACT=?&lt;br /&gt;
+CGACT: (0,1)&lt;br /&gt;
&lt;br /&gt;
'10.1.11 PDP Context Modify&lt;br /&gt;
AT+CGCMOD=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'10.1.12 Enter data state&lt;br /&gt;
AT+CGDATA=?&lt;br /&gt;
+CGDATA:(&amp;quot;PPP&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
'10.1.13 Configure local Octet Stream PAD parameters&lt;br /&gt;
AT+CGCLOSP=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'10.1.14 Show PDP address&lt;br /&gt;
AT+CGPADDR=?&lt;br /&gt;
+CGPADDR: (1,2)&lt;br /&gt;
&lt;br /&gt;
'10.1.15 Automatic response to a network request for PDP context activation&lt;br /&gt;
AT+CGAUTO=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'10.1.16 Manual response to a network request for PDP context activation&lt;br /&gt;
AT+CGANS=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'10.1.17 GPRS mobile station class&lt;br /&gt;
AT+CGCLASS=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
AT+CGCLASS?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'10.1.12 Configure local triple-X PAD parameters&lt;br /&gt;
AT+CGCLPAD=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'10.1.18 Packet Domain event reporting&lt;br /&gt;
AT+CGEREP=?&lt;br /&gt;
+CGEREP: (0,1),(0)&lt;br /&gt;
&lt;br /&gt;
'10.1.19 GPRS network registration status&lt;br /&gt;
AT+CGREG=?&lt;br /&gt;
+CGREG: (0-2)&lt;br /&gt;
&lt;br /&gt;
'10.1.20 Select service for MO SMS messages&lt;br /&gt;
AT+CGSMS=?&lt;br /&gt;
+CGSMS: (2,3)&lt;br /&gt;
&lt;br /&gt;
'11.1.1 Accept an incoming Voice Group or Voice Broadcast Call&lt;br /&gt;
AT+CAJOIN=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'11.1.2 Reject an incoming Voice Group or Voice Broadcast Call&lt;br /&gt;
AT+CAREJ=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'11.1.3 Leave an ongoing Voice Group or Voice Broadcast Call&lt;br /&gt;
AT+CAHLD=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'11.1.4 Talker Access for Voice Group Call&lt;br /&gt;
AT+CAPTT=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'11.1.5 Voice Group Call Uplink Status Presentation&lt;br /&gt;
AT+CAULEV=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'11.1.6 List current Voice Group and Voice Broadcast Calls&lt;br /&gt;
AT+CALCC=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'11.1.7 Voice Group or Voice Broadcast Call State Attribute Presentation&lt;br /&gt;
AT+CACSP=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'11.1.8 NCH Support Indication&lt;br /&gt;
AT+CANCHEV=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'11.1.9 Originator to Dispatcher Information&lt;br /&gt;
AT+COTDI=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
AT+COTDI?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'11.3.1 VGCS subscriptions and GId status&lt;br /&gt;
AT+CGCS=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
AT+CGCS?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'11.3.2 VBS subscriptions and GId status&lt;br /&gt;
AT+CBCS=?&lt;br /&gt;
+CBC: 0,69&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
AT+CBCS?&lt;br /&gt;
+CBC: 0,69&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'&lt;br /&gt;
'According to 3GPP TS 27.005 version 4.0.0:&lt;br /&gt;
'3.2.1 Select Message Service&lt;br /&gt;
AT+CSMS=?&lt;br /&gt;
+CSMS: (0)&lt;br /&gt;
&lt;br /&gt;
AT+CSMS?&lt;br /&gt;
+CSMS: 0, 1, 1, 1&lt;br /&gt;
&lt;br /&gt;
'3.2.2 Preferred Message Storage&lt;br /&gt;
AT+CPMS=?&lt;br /&gt;
+CPMS: (&amp;quot;ME&amp;quot;,&amp;quot;SM&amp;quot;),(&amp;quot;ME&amp;quot;,&amp;quot;SM&amp;quot;),(&amp;quot;ME&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
AT+CPMS?&lt;br /&gt;
+CPMS: &amp;quot;SM&amp;quot;,0,12,&amp;quot;SM&amp;quot;,0,12,&amp;quot;ME&amp;quot;,9,40&lt;br /&gt;
&lt;br /&gt;
'3.2.3 Message Format&lt;br /&gt;
AT+CMGF=?&lt;br /&gt;
+CMGF: (0)&lt;br /&gt;
&lt;br /&gt;
AT+CMGF?&lt;br /&gt;
+CMGF: 0&lt;br /&gt;
&lt;br /&gt;
'3.2.4 Enter SMS Block Mode Protocol&lt;br /&gt;
AT+CESP=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'3.3.1 Service Centre Address&lt;br /&gt;
AT+CSCA=?&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
'3.3.2 Set Text Mode Parameters&lt;br /&gt;
AT+CSMP=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
AT+CSMP?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'3.3.3 Show Text Mode Parameters&lt;br /&gt;
AT+CSDH=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
AT+CSDH?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'3.3.4 Select Cell Broadcast Message Types&lt;br /&gt;
AT+CSCB=?&lt;br /&gt;
+CSCB: (0)&lt;br /&gt;
&lt;br /&gt;
AT+CSCB?&lt;br /&gt;
+CSCB: 0,&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
'3.3.5 Save Settings&lt;br /&gt;
AT+CSAS=?&lt;br /&gt;
+CSAS: (0-4)&lt;br /&gt;
&lt;br /&gt;
'3.3.6 Restore Settings&lt;br /&gt;
AT+CRES=?&lt;br /&gt;
+CRES: (0-4)&lt;br /&gt;
&lt;br /&gt;
'3.4.1 New Message Indications to TE&lt;br /&gt;
AT+CNMI=?&lt;br /&gt;
+CNMI: (3),(0,1,3),(0,2),(0),(0)&lt;br /&gt;
&lt;br /&gt;
AT+CNMI?&lt;br /&gt;
+CNMI: 3,0,0,0,0&lt;br /&gt;
&lt;br /&gt;
'3.5.4 Delete Message&lt;br /&gt;
AT+CMGD=?&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
'3.5.6 More Messages to Send&lt;br /&gt;
AT+CMMS=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'&lt;br /&gt;
'SMS Text mode&lt;br /&gt;
AT+CMGF=1&lt;br /&gt;
+CMS ERROR: 303&lt;br /&gt;
&lt;br /&gt;
'3.4.2 List Messages&lt;br /&gt;
AT+CMGL=?&lt;br /&gt;
AT +CMGF=1&lt;br /&gt;
+CMS ERROR: 303&lt;br /&gt;
&lt;br /&gt;
'3.4.3 Read Message&lt;br /&gt;
AT+CMGR=?&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
'3.4.4 New Message Acknowledgement to ME/TA&lt;br /&gt;
AT+CNMA=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'3.5.1 Send Message&lt;br /&gt;
AT+CMGS=?&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
'3.5.2 Send Message from Storage&lt;br /&gt;
AT+CMSS=?&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
'3.5.3 Write Message to Memory&lt;br /&gt;
AT+CMGW=?&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
'3.5.5 Send Command&lt;br /&gt;
AT+CMGC=?&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
'&lt;br /&gt;
'SMS PDU mode&lt;br /&gt;
AT+CMGF=0&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
'4.1 List Messages&lt;br /&gt;
AT+CMGL=?&lt;br /&gt;
+CMGL: (0-4)&lt;br /&gt;
&lt;br /&gt;
'4.2 Read Message&lt;br /&gt;
AT+CMGR=?&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
'4.3 Send Message&lt;br /&gt;
AT+CMGS=?&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
'4.4 Write Message to Memory&lt;br /&gt;
AT+CMGW=?&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
'4.5 Send Command&lt;br /&gt;
AT+CMGC=?&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
'4.6 New Message Acknowledgement to ME/TA&lt;br /&gt;
AT+CNMA=?&lt;br /&gt;
ERROR&lt;br /&gt;
&lt;br /&gt;
'4.7 Send Message from Storage&lt;br /&gt;
AT+CMSS=?&lt;br /&gt;
OK&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Group_sales</id>
		<title>Group sales</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Group_sales"/>
				<updated>2008-04-20T14:15:16Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* [http://wiki.openmoko.org/wiki/Talk:GroupSales#The_Netherlands The Netherlands] */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style='float:right'&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Australia ==&lt;br /&gt;
=== Western Australia ===&lt;br /&gt;
==== Perth ====&lt;br /&gt;
&lt;br /&gt;
* Fred Janon mailto:fjanon@yahoo.com&lt;br /&gt;
&lt;br /&gt;
=== Victoria ===&lt;br /&gt;
==== Melbourne ====&lt;br /&gt;
Status: 4/10&lt;br /&gt;
&lt;br /&gt;
* 4x Dennis Wollersheim, mailto: dewoller (at) gmail (dot) com&lt;br /&gt;
&lt;br /&gt;
=== ACT ===&lt;br /&gt;
==== Canberra ====&lt;br /&gt;
Status: 1/10&lt;br /&gt;
&lt;br /&gt;
* J Dinale [http://wiki.openmoko.org/wiki/Special:Emailuser/Noledil Contact me here]&lt;br /&gt;
&lt;br /&gt;
=== Queensland ===&lt;br /&gt;
==== Brisbane ====&lt;br /&gt;
Status: 2/10 (possibly 20)&lt;br /&gt;
&lt;br /&gt;
* Nick Devereaux [http://wiki.openmoko.org/wiki/Special:Emailuser/Monkeypanic Contact me here]&lt;br /&gt;
* Matt Gallagher [http://wiki.openmoko.org/wiki/Special:Emailuser/mattg Contact me here]&lt;br /&gt;
&lt;br /&gt;
== Austria ==&lt;br /&gt;
I don't think that we reach the 10 phones in a city, so maybe we can handle it like the Italians. Order the phones in the most requested city and ship it to the other ones from there.&lt;br /&gt;
&lt;br /&gt;
=== Salzburg ===&lt;br /&gt;
Status: 1/10&lt;br /&gt;
&lt;br /&gt;
* D. Kepplinger [http://wiki.openmoko.org/wiki/Special:Emailuser/Wedge Contact me here]&lt;br /&gt;
=== Wien ===&lt;br /&gt;
Status: 1/10&lt;br /&gt;
* M. Greifeneder [http://wiki.openmoko.org/wiki/Special:Emailuser/mikegr Contact me here]&lt;br /&gt;
=== Styria ===&lt;br /&gt;
==== Graz ====&lt;br /&gt;
Status: 1/10&lt;br /&gt;
&lt;br /&gt;
* F Hackenberger [http://wiki.openmoko.org/wiki/Special:Emailuser/Deadman66 Contact me here]&lt;br /&gt;
&lt;br /&gt;
== Belgium ==&lt;br /&gt;
=== Flanders ===&lt;br /&gt;
==== Brussel/Aalst/Gent/Brugge ====&lt;br /&gt;
Status 4/10&lt;br /&gt;
* Yorick, mailto: yorick DOT matthys AT gmail DOT com&lt;br /&gt;
* 2x Dolfje [http://wiki.openmoko.org/wiki/Special:Emailuser/Dolfje Contact me here]&lt;br /&gt;
* XVens, mailto: xavier DOT vens AT gmail DOT com&lt;br /&gt;
ps: Dolfje can bring freerunners to Brugge if needed&lt;br /&gt;
&lt;br /&gt;
==== Antwerp ====&lt;br /&gt;
Status 4/10&lt;br /&gt;
&lt;br /&gt;
* michielv [http://wiki.openmoko.org/wiki/Special:Emailuser/Michielv Contact me here]&lt;br /&gt;
* Peter N [http://wiki.openmoko.org/wiki/Special:Emailuser/Bubsy Contact me here]&lt;br /&gt;
* Ivo [http://wiki.openmoko.org/wiki/Special:Emailuser/Ivo Contact me here]&lt;br /&gt;
* Peter Leemans, mailto: peter AT x-tend DOT be&lt;br /&gt;
&lt;br /&gt;
== Bulgaria ==&lt;br /&gt;
=== Sofia ===&lt;br /&gt;
==== Sofia ====&lt;br /&gt;
Status : 2/10&lt;br /&gt;
&lt;br /&gt;
* Dimitar Staykov, mailto:meditache@gmail.com&lt;br /&gt;
* Vernim, [http://wiki.openmoko.org/wiki/Special:Emailuser/Vernim Contact]&lt;br /&gt;
&lt;br /&gt;
== Canada ==&lt;br /&gt;
=== Ontario/Quebec ===&lt;br /&gt;
==== GTA (Toronto) ====&lt;br /&gt;
Status : 2/10&lt;br /&gt;
&lt;br /&gt;
* Gerald A [http://wiki.openmoko.org/wiki/Special:Emailuser/Historybuff Contact me here]&lt;br /&gt;
* MattC, mailto: quirkz AT gmail&lt;br /&gt;
&lt;br /&gt;
== Denmark ==&lt;br /&gt;
If we do not reach a total large enough, Denmark **is** a very small place - surely we could figure out a way of getting them to find their way 'round the country :)&lt;br /&gt;
&lt;br /&gt;
=== Jutland ===&lt;br /&gt;
==== Aalborg ====&lt;br /&gt;
Status: 2/10&lt;br /&gt;
&lt;br /&gt;
* Dan Leinir Turthra Jensen &amp;lt;br /&amp;gt; mailto:admin@leinir.dk &amp;lt;br /&amp;gt; [[User:Leinir]]&lt;br /&gt;
* Fabian Olesen &amp;lt;br /&amp;gt; mailto:firewalkerx@gmail.com&lt;br /&gt;
&lt;br /&gt;
=== Fyn ===&lt;br /&gt;
Status: 1/10&lt;br /&gt;
&lt;br /&gt;
* [[User:EsbenDamgaard]]&lt;br /&gt;
&lt;br /&gt;
=== Sjælland ===&lt;br /&gt;
==== Copenhagen ====&lt;br /&gt;
Status: 2/10&lt;br /&gt;
&lt;br /&gt;
* [[User:Fursund]]&lt;br /&gt;
* [[User:Rasmusjensen]]&lt;br /&gt;
&lt;br /&gt;
== Finland ==&lt;br /&gt;
=== Uusimaa ===&lt;br /&gt;
==== Helsinki (Full)====&lt;br /&gt;
Status : 10/10&lt;br /&gt;
&lt;br /&gt;
* Mikko Rauhala x2 [mailto:mjr@iki.fi mjr@iki.fi]&lt;br /&gt;
* Aleksi Hankalahti &amp;lt;br /&amp;gt; [mailto:aleksi.hankalahti@iki.fi aleksi.hankalahti@iki.fi]&lt;br /&gt;
* Seppo Hätönen &amp;lt;br /&amp;gt; [mailto:karrde@iki.fi karrde@iki.fi]&lt;br /&gt;
* Arttu Sund &amp;lt;br /&amp;gt; [mailto:thearttu@gmail.com thearttu@gmail.com]&lt;br /&gt;
* Ville-Pekka Vainio &amp;lt;br /&amp;gt; vpivaini AT cs.helsinki.fi&lt;br /&gt;
* Heikki Hallamaa &amp;lt;br /&amp;gt; [mailto:heikki.hallamaa@iki.fi heikki.hallamaa@iki.fi]&lt;br /&gt;
* Tomi Jylhä-Ollila &amp;lt;br /&amp;gt; tomi.jylha-ollila@helsinki.fi&lt;br /&gt;
* Richard Braakman&lt;br /&gt;
* Timo Jyrinki &amp;lt;br /&amp;gt; [mailto:timo.jyrinki@iki.fi timo.jyrinki@iki.fi]&lt;br /&gt;
&lt;br /&gt;
==== Helsinki ====&lt;br /&gt;
Status : 4/10&lt;br /&gt;
&lt;br /&gt;
* |[[User:Piksi]]&lt;br /&gt;
* Risto H. Kurppa &amp;lt;br /&amp;gt; risto AT kurppa DOT fi&lt;br /&gt;
* Aapo Rantalainen &amp;lt;br /&amp;gt; aapo DOT rantalainen AT gmail DOT com&lt;br /&gt;
* Matti Laakso &amp;lt;br /&amp;gt; matti DOT laakso AT kotiposti DOT net&lt;br /&gt;
&lt;br /&gt;
=== Varsinais-Suomi ===&lt;br /&gt;
==== Turku ====&lt;br /&gt;
Status : 1/10&lt;br /&gt;
&lt;br /&gt;
* Teemu Välimäki &amp;lt;br /&amp;gt; [mailto:teemu.valimaki@iki.fi teemu.valimaki@iki.fi]&lt;br /&gt;
&lt;br /&gt;
== France ==&lt;br /&gt;
=== Bretagne ===&lt;br /&gt;
==== Brest ====&lt;br /&gt;
Status : 1/10&lt;br /&gt;
&lt;br /&gt;
* StevenLeRoux [mailto:steven@pourri.fr steven@pourri.fr] Jabber_Id:Steven@jabber.fr&lt;br /&gt;
* Acheteur potentiel #2&lt;br /&gt;
&lt;br /&gt;
==== Rennes ====&lt;br /&gt;
Status : 2/10&lt;br /&gt;
&lt;br /&gt;
* Cédric DUFOUIL (openmoko at tsleg point com)&lt;br /&gt;
* Acheteur potentiel #2&lt;br /&gt;
* Yves MAHE (ymahe at zindep dot com)&lt;br /&gt;
&lt;br /&gt;
=== Ile de france ===&lt;br /&gt;
==== Paris ====&lt;br /&gt;
Status : 8/10&lt;br /&gt;
&lt;br /&gt;
* StevenLeRoux&lt;br /&gt;
* [[User:Phyce|Phyce]]&lt;br /&gt;
* Yann SLADEK&lt;br /&gt;
* [[User:Wilk|Wilk]] [http://wiki.openmoko.org/wiki/Special:Emailuser/Wilk Contact me here]&lt;br /&gt;
* Jonathan Magano (jonathanmm[AT]free[DOT]fr)&lt;br /&gt;
* Benjamin Renard (bn8[AT]zionetrix.net)&lt;br /&gt;
* [[User:OlivierBerger|OlivierBerger]]&lt;br /&gt;
* [[User:BartGS|BartGS]] [http://wiki.openmoko.org/wiki/Special:Emailuser/BartGS Contact me here]&lt;br /&gt;
&lt;br /&gt;
You may also see :&lt;br /&gt;
http://bearstech.com/openmoko/register&lt;br /&gt;
&lt;br /&gt;
=== Pays de la Loire ===&lt;br /&gt;
==== La Roche sur Yon ====&lt;br /&gt;
Status : 1/10&lt;br /&gt;
&lt;br /&gt;
* [http://wiki.openmoko.org/wiki/Special:Emailuser/Vtouchar Vincent Touchard] (I may soon move to Bretagne/Brest)&lt;br /&gt;
&lt;br /&gt;
== Germany ==&lt;br /&gt;
=== Sachsen-Anhalt ===&lt;br /&gt;
==== Stendal (evtl. Magdeburg) ====&lt;br /&gt;
Status 1/10&lt;br /&gt;
&lt;br /&gt;
* Fabian Off [http://wiki.openmoko.org/wiki/Special:Emailuser/Fabian2de Contact me here]&lt;br /&gt;
&lt;br /&gt;
=== Hamburg ===&lt;br /&gt;
==== Hamburg ====&lt;br /&gt;
Status 2/10&lt;br /&gt;
&lt;br /&gt;
* Jan [http://wiki.openmoko.org/wiki/Special:Emailuser/Jan07 Contact me here]&lt;br /&gt;
* Varacanero [http://wiki.openmoko.org/wiki/Special:Emailuser/varacanero Contact me here]&lt;br /&gt;
&lt;br /&gt;
=== NRW ===&lt;br /&gt;
==== Bielefeld ====&lt;br /&gt;
Status 3/10&lt;br /&gt;
&lt;br /&gt;
* David, infos on my [[User:Raven|user page]], or you can [[Special:Emailuser/Raven|contact me here]]&lt;br /&gt;
* Sebastian, infos on my [[User:Seppi|user page]], or you can [[Special:Emailuser/Seppi|contact me here]]&lt;br /&gt;
* Dackel, infos on my [[User:Killerdackel|user page]], or you can [[Special:Emailuser/Killerdackel|contact me here]]&lt;br /&gt;
&lt;br /&gt;
==== Aachen ====&lt;br /&gt;
Status 1/10&lt;br /&gt;
* Henrik, infos on my [[User:Henrikz|user page]], or you can [[Special:Emailuser/Henrikz|contact me here]]&lt;br /&gt;
&lt;br /&gt;
=== Baden-Württemberg ===&lt;br /&gt;
==== Karlsruhe ====&lt;br /&gt;
&lt;br /&gt;
Status 2/10&lt;br /&gt;
&lt;br /&gt;
* 2 for André (one for me and one for a friend), you can [[Special:Emailuser/Spacemarine|contact me here]]&lt;br /&gt;
&lt;br /&gt;
== Italy == &lt;br /&gt;
If we don't reach the 10 phones limit in each city, maybe we could place an order in the &amp;quot;most requested city&amp;quot;, and from shipping to other buyers. We'll have anyway a good discount although the &amp;quot;double-shipping&amp;quot;. ([http://thread.gmane.org/gmane.comp.handhelds.openmoko.community/10937/focus=10981 Read here for reference]).&lt;br /&gt;
&lt;br /&gt;
=== Toscana ===&lt;br /&gt;
==== Firenze ====&lt;br /&gt;
Status 2/10&lt;br /&gt;
&lt;br /&gt;
* [[User:Treviño|Marco Trevisan (Treviño)]] - [http://blog.3v1n0.net/contatti-trevino/ Contacts here]&lt;br /&gt;
* [[User:Niccolo|Niccolo Rigacci]] - ''niccolo [AT] rigacci.org''&lt;br /&gt;
&lt;br /&gt;
=== Lombardia ===&lt;br /&gt;
&lt;br /&gt;
==== Milano ====&lt;br /&gt;
Status 5/10&lt;br /&gt;
&lt;br /&gt;
* Marco Crociani - [http://wiki.openmoko.org/wiki/Special:Emailuser/Tyrael Contacts here]&lt;br /&gt;
* Marcello Gorla&lt;br /&gt;
* Maxxer [mailto:maxxer@yetopen.it maxxer@yetopen.it] (Lecco)&lt;br /&gt;
* Pietro Montorfano [mailto:monto84@gmail.com monto84@gmail.com] (from como)&lt;br /&gt;
* Gianluigi Belli - [http://wiki.openmoko.org/wiki/Special:Emailuser/Pulciux Contacts here]&lt;br /&gt;
&lt;br /&gt;
=== Trentino-Alto Adige ===&lt;br /&gt;
==== Trento (Padova too :)) ====&lt;br /&gt;
Status 1/10&lt;br /&gt;
&lt;br /&gt;
* Andrea Debortoli &amp;lt;br/&amp;gt; (debortoland AT gmail DOT com)&lt;br /&gt;
&lt;br /&gt;
=== Veneto ===&lt;br /&gt;
==== Verona ====&lt;br /&gt;
&lt;br /&gt;
* Persegat [mailto:persegat@alice.it persegat@alice.it]&amp;lt;br/&amp;gt;[[User:Pecce|Pecce]]&lt;br /&gt;
&lt;br /&gt;
=== Puglia ===&lt;br /&gt;
==== Lecce ====&lt;br /&gt;
Status : 1/10&lt;br /&gt;
&lt;br /&gt;
* [[User:Morpheus90|Morpheus90]] [mailto:ugopiemontese@rudiaelinux.com ugopiemontese@rudiaelinux.com]&lt;br /&gt;
==== Bari ====&lt;br /&gt;
Status : 2/10&lt;br /&gt;
&lt;br /&gt;
* [[User:Fradeve11|Fradeve11]] [mailto:fradeve@ubuntu-it.org fradeve@ubuntu-it.org]&lt;br /&gt;
&lt;br /&gt;
== [http://wiki.openmoko.org/wiki/Talk:GroupSales#The_Netherlands The Netherlands] ==&lt;br /&gt;
(Discuss this group sale on the [http://wiki.openmoko.org/wiki/Talk:GroupSales#The_Netherlands talk page])&lt;br /&gt;
&lt;br /&gt;
* Christ van Willegen 1/10 [[User:ChristW]]&lt;br /&gt;
* Marijn Kruisselbrink 1 [[Special:Emailuser/User:mkruisselbrink|Contact]]&lt;br /&gt;
* Andy Powell 1/10 [[Special:Emailuser/User:ScaredyCat|Contact]]&lt;br /&gt;
* Arjan Veenstra 1/10 [[User:AVee]] [[Special:Emailuser/User:AVee|Contact]]&lt;br /&gt;
* Jan de Haan 1/10 [[User:Jan de Haan]] [[Special:Emailuser/User:Jan de Haan|Contact]]&lt;br /&gt;
* Eric Smith 1/10 [[User:Eric Smith]]&lt;br /&gt;
* André Disselhorst 1/10 [[User:A.dre]] [[Special:Emailuser/User:A.dre|Contact]]&lt;br /&gt;
=== Noord-Brabant ===&lt;br /&gt;
&lt;br /&gt;
==== Bergen op Zoom ====&lt;br /&gt;
* [[User:Madjo|Marcel de Jong]] 1/10 [[Special:Emailuser/User:Madjo|Contact]]&lt;br /&gt;
&lt;br /&gt;
=== Overijssel ===&lt;br /&gt;
&lt;br /&gt;
==== Hengelo ====&lt;br /&gt;
* Sander Hoentjen 1/10 [[Special:Emailuser/User:Tjikkun|Contact]]&lt;br /&gt;
&lt;br /&gt;
=== Utrecht ===&lt;br /&gt;
&lt;br /&gt;
==== Utrecht ====&lt;br /&gt;
* Eric Spierings 1/10 [[Special:Emailuser/User:ericsp|Contact]]&lt;br /&gt;
* Peter van de Werken 1/10 [[Special:Emailuser/User:PWerken|Contact]]&lt;br /&gt;
&lt;br /&gt;
=== Status ===&lt;br /&gt;
11/10&lt;br /&gt;
&lt;br /&gt;
== New Zealand ==&lt;br /&gt;
=== Auckland ===&lt;br /&gt;
==== Auckland ====&lt;br /&gt;
&lt;br /&gt;
* Rob Paulson 1/10 &amp;lt;br /&amp;gt; [[User:Myfanwy]] &amp;lt;br /&amp;gt; Simon Wells [[User:Swel024]]&lt;br /&gt;
&lt;br /&gt;
== Norway ==&lt;br /&gt;
=== Nordland ===&lt;br /&gt;
==== Bodø ====&lt;br /&gt;
Status 2/10&lt;br /&gt;
&lt;br /&gt;
* [[User:AlecTBM|Alexander Frøyseth]] [mailto:alexander.froyseth@gmail.com alexander.froyseth@gmail.com]&lt;br /&gt;
* Ole Marius&lt;br /&gt;
* Stian Vading&lt;br /&gt;
=== Rogaland ===&lt;br /&gt;
Status 1/10&lt;br /&gt;
&lt;br /&gt;
*[[User:Dalaker|Tore Dalaker]] [mailto:tore@dalaker.com tore@dalaker.com]&lt;br /&gt;
&lt;br /&gt;
=== Sør-Trøndelag ===&lt;br /&gt;
==== Trondheim ====&lt;br /&gt;
Status 8/10&lt;br /&gt;
&lt;br /&gt;
*[[User:andy000|Andreas Kalvå]] [mailto:andy@samfundet.no andy@samfundet.no]&lt;br /&gt;
Send mail om du er interessert.&lt;br /&gt;
&lt;br /&gt;
=== Østlandet ===&lt;br /&gt;
==== Oslo, Akershus, Buskerud, Vestfold ====&lt;br /&gt;
Status 16/20&lt;br /&gt;
&lt;br /&gt;
* [[User:Ixian|Heikki Sørum]] [mailto:heikkis@matnat.uio.no] &amp;lt;br/&amp;gt; Interessert? mail meg.&lt;br /&gt;
* [[User:Bobkare|Knut Arne Bjørndal]] [mailto:bob@cakebox.net]&lt;br /&gt;
&lt;br /&gt;
== Poland ==&lt;br /&gt;
=== dolnośląskie ===&lt;br /&gt;
==== Wrocław ====&lt;br /&gt;
&lt;br /&gt;
* Special group buy site: https://www.kumulator.pl/show/group/35&lt;br /&gt;
&lt;br /&gt;
== Portugal ==&lt;br /&gt;
=== Aveiro ===&lt;br /&gt;
==== Aveiro ====&lt;br /&gt;
Status : 2/10&lt;br /&gt;
&lt;br /&gt;
* [[User:Ruben|Ruben Mendes]]&lt;br /&gt;
* [[User:kuyky|Tiago Saraiva]] &amp;lt;br /&amp;gt; [mailto:destructhor88@gmail.pt]&lt;br /&gt;
&lt;br /&gt;
== Sweden ==&lt;br /&gt;
If insufficient number of people, orders could be merged and remailed perhaps&lt;br /&gt;
&lt;br /&gt;
=== Svealand ===&lt;br /&gt;
==== Stockholm ====&lt;br /&gt;
Status : 2/10&lt;br /&gt;
&lt;br /&gt;
* Erland Lewin &amp;lt;br /&amp;gt; mailto:erland@lewin.nu&lt;br /&gt;
* Simon Kågström &amp;lt;br /&amp;gt; mailto:simon.kagstrom@gmail.com&lt;br /&gt;
* Ingvaldur Sigurjonsson &amp;lt;br /&amp;gt; mailto:ingi@ultimalabor.se&lt;br /&gt;
&lt;br /&gt;
==== Örebro ====&lt;br /&gt;
Status : 1/10&lt;br /&gt;
&lt;br /&gt;
* Anders Petersson &amp;lt;br /&amp;gt; [mailto:demitar@worldforge.org demitar@worldforge.org]&lt;br /&gt;
&lt;br /&gt;
=== Norrland ===&lt;br /&gt;
==== Umeå ====&lt;br /&gt;
Status : 1/10&lt;br /&gt;
&lt;br /&gt;
* [[User:Zash|Zash]] [[Special:Emailuser/Zash|Contact]]&lt;br /&gt;
&lt;br /&gt;
== Switzerland ==&lt;br /&gt;
==== Zurich ====&lt;br /&gt;
Status : 9/10&lt;br /&gt;
&lt;br /&gt;
* Simon Wenner &amp;lt;br /&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/Nowic Contact]&lt;br /&gt;
* Simon Schreiber &amp;lt;br /&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/Magbeat Contact]&lt;br /&gt;
* Markus Huggler &amp;lt;br /&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/Magbeat Contact]&lt;br /&gt;
* Andre Timmermann &amp;lt;br /&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/darktim Contact]&lt;br /&gt;
* Raffael Schmid &amp;lt;br /&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/darktim Contact]&lt;br /&gt;
* Pascal Weller &amp;lt;br /&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/darktim Contact]&lt;br /&gt;
* Nick Zbinden &amp;lt;br /&amp;gt; [mailto:nickik@gmx.ch]&lt;br /&gt;
* Marcel Wirth &amp;lt;br /&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/Skarhand Contact]&lt;br /&gt;
* Marcel Lütolf &amp;lt;br /&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/NeRo Contact]&lt;br /&gt;
&lt;br /&gt;
== Spain ==&lt;br /&gt;
=== Madrid ===&lt;br /&gt;
==== Madrid ====&lt;br /&gt;
Status : 1/10&lt;br /&gt;
&lt;br /&gt;
* Rafael Campos &amp;lt;br /&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/Methril Contact]&lt;br /&gt;
&lt;br /&gt;
=== Zaragoza ===&lt;br /&gt;
==== Zaragoza ====&lt;br /&gt;
Status : 1/10&lt;br /&gt;
&lt;br /&gt;
* Alejandro R. Mosteo &amp;lt;br /&amp;gt; alejandro AT mosteo · com&lt;br /&gt;
&lt;br /&gt;
=== Barcelona ===&lt;br /&gt;
==== Barcelona ====&lt;br /&gt;
Status : 1/10&lt;br /&gt;
&lt;br /&gt;
* José Luis Pérez &amp;lt;br/&amp;gt;[[Special:Emailuser/jluis|Contact]]&lt;br /&gt;
&lt;br /&gt;
== USA ==&lt;br /&gt;
=== Colorado ===&lt;br /&gt;
==== Denver ====&lt;br /&gt;
Status: 7/10&lt;br /&gt;
* Shawn Sullivan &amp;lt;br /&amp;gt; [[mailto:shelbydz87@yahoo.com shelbydz87@yahoo.com]]&lt;br /&gt;
* Peter Abplanalp &amp;lt;br /&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/alderion Contact]&lt;br /&gt;
&lt;br /&gt;
=== Southern California ===&lt;br /&gt;
==== Los Angeles ====&lt;br /&gt;
Status: 2/10&lt;br /&gt;
&lt;br /&gt;
* Ian Douglas &amp;lt;br /&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/Iandouglas Contact me here]&lt;br /&gt;
* Matthew &amp;lt;br /&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/Wetmoko Contact]&lt;br /&gt;
&lt;br /&gt;
=== Texas ===&lt;br /&gt;
==== Austin ====&lt;br /&gt;
* Dale Schumacher &amp;lt;br /&amp;gt; [[Special:Emailuser/dalnefre|Contact]]&lt;br /&gt;
&lt;br /&gt;
=== Mid-Atlantic ===&lt;br /&gt;
==== Virginia====&lt;br /&gt;
===== Richmond (1/10)=====&lt;br /&gt;
* Philippe Gerard &amp;lt;br/&amp;gt;[[Special:Emailuser/feydreva|Contact]]&lt;br /&gt;
&lt;br /&gt;
==== New York ====&lt;br /&gt;
Status: 2/10&lt;br /&gt;
&lt;br /&gt;
* Bert Hartmann &amp;lt;br /&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/BertHartm Contact me here]&lt;br /&gt;
* Michael Cole mailto:mjcole137@gmail.com &amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== UK ==&lt;br /&gt;
=== London ===&lt;br /&gt;
==== London ====&lt;br /&gt;
Status : 5/10&lt;br /&gt;
&lt;br /&gt;
* Juergen Schinker &amp;lt;br /&amp;gt; mailto:ba1020@homie.homelinux.net&lt;br /&gt;
* Tim Coggins (actually in Oxford)&amp;lt;br /&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/Sonicated Contact]&lt;br /&gt;
* David Pottage (actually in Reading)&amp;lt;br /&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/chrestomanci Contact]&lt;br /&gt;
* aled &amp;lt;br /&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/aled Contact]&lt;br /&gt;
* Bin Zong (actually in Birmingham)&amp;lt;br /&amp;gt;  [mailto:hunter_00zb@hotmail.com]&lt;br /&gt;
&lt;br /&gt;
== Latvia ==&lt;br /&gt;
=== Riga ===&lt;br /&gt;
==== Riga ====&lt;br /&gt;
Status : 1/10&lt;br /&gt;
* [[User:VRGhost]]&lt;br /&gt;
[[Category:Information| ]]&lt;br /&gt;
[[Category:community| ]]&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Group_sales</id>
		<title>Group sales</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Group_sales"/>
				<updated>2008-04-18T14:22:41Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* The Netherlands */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Australia ==&lt;br /&gt;
=== Western Australia ===&lt;br /&gt;
==== Perth ====&lt;br /&gt;
&lt;br /&gt;
* Fred Janon mailto:fjanon@yahoo.com&lt;br /&gt;
&lt;br /&gt;
=== Victoria ===&lt;br /&gt;
==== Melbourne ====&lt;br /&gt;
Status: 4/10&lt;br /&gt;
&lt;br /&gt;
* Dennis Wollersheim dewoller (at) gmail (dot) com &amp;lt;br&amp;gt; 4x&lt;br /&gt;
&lt;br /&gt;
=== ACT ===&lt;br /&gt;
==== Canberra ====&lt;br /&gt;
Status: 1/10&lt;br /&gt;
&lt;br /&gt;
* J Dinale [http://wiki.openmoko.org/wiki/Special:Emailuser/Noledil Contact me here]&lt;br /&gt;
&lt;br /&gt;
=== Queensland ===&lt;br /&gt;
==== Brisbane ====&lt;br /&gt;
Status: 2/10 (possibly 20)&lt;br /&gt;
&lt;br /&gt;
* Nick Devereaux [http://wiki.openmoko.org/wiki/Special:Emailuser/Monkeypanic Contact me here]&lt;br /&gt;
&lt;br /&gt;
== Austria ==&lt;br /&gt;
=== Wien ===&lt;br /&gt;
* M. Greifeneder [http://wiki.openmoko.org/wiki/Special:Emailuser/mikegr Contact me here]&lt;br /&gt;
=== Styria ===&lt;br /&gt;
==== Graz ====&lt;br /&gt;
Status: 2/10&lt;br /&gt;
&lt;br /&gt;
* F Hackenberger [http://wiki.openmoko.org/wiki/Special:Emailuser/Deadman66 Contact me here]&lt;br /&gt;
* D. Kepplinger [http://wiki.openmoko.org/wiki/Special:Emailuser/Wedge Contact me here]&lt;br /&gt;
&lt;br /&gt;
== Belgium ==&lt;br /&gt;
=== Flanders ===&lt;br /&gt;
==== Brussel/Aalst/Gent/Brugge ====&lt;br /&gt;
Status 3/10&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;ps:Dolfje can bring freerunners to Brugge if needed&lt;br /&gt;
&lt;br /&gt;
* Yorick mailto: yorick DOT matthys AT gmail DOT com&lt;br /&gt;
* 2x Dolfje &amp;lt;br/&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/Dolfje Contact me here]&lt;br /&gt;
&lt;br /&gt;
==== Antwerp ====&lt;br /&gt;
Status 4/10&lt;br /&gt;
&lt;br /&gt;
* michielv &amp;lt;br/&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/Michielv Contact me here]&lt;br /&gt;
* Peter N &amp;lt;br /&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/Bubsy Contact me here]&lt;br /&gt;
* Ivo &amp;lt;br /&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/Ivo Contact me here]&lt;br /&gt;
* Peter Leemans &amp;lt;br /&amp;gt; mailto: peter AT x-tend DOT be&lt;br /&gt;
&lt;br /&gt;
== Bulgaria ==&lt;br /&gt;
=== Sofia ===&lt;br /&gt;
==== Sofia ====&lt;br /&gt;
Status : 2/10&lt;br /&gt;
&lt;br /&gt;
* Dimitar Staykov &amp;lt;br /&amp;gt; meditache@gmail.com&lt;br /&gt;
* Vernim &amp;lt;br /&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/Vernim Contact]&lt;br /&gt;
&lt;br /&gt;
== Canada ==&lt;br /&gt;
=== Ontario/Quebec ===&lt;br /&gt;
==== GTA (Toronto) ====&lt;br /&gt;
Status : 2/10&lt;br /&gt;
&lt;br /&gt;
* Gerald A &amp;lt;br /&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/Historybuff Contact me here]&lt;br /&gt;
* MattC &amp;lt;br /&amp;gt; quirkz AT gmail&lt;br /&gt;
&lt;br /&gt;
== Denmark ==&lt;br /&gt;
If we do not reach a total large enough, Denmark **is** a very small place - surely we could figure out a way of getting them to find their way 'round the country :)&lt;br /&gt;
&lt;br /&gt;
=== Jutland ===&lt;br /&gt;
==== Aalborg ====&lt;br /&gt;
Status: 2/10&lt;br /&gt;
&lt;br /&gt;
* Dan Leinir Turthra Jensen &amp;lt;br /&amp;gt; mailto:admin@leinir.dk &amp;lt;br /&amp;gt; [[User:Leinir]]&lt;br /&gt;
* Fabian Olesen &amp;lt;br /&amp;gt; mailto:firewalkerx@gmail.com&lt;br /&gt;
&lt;br /&gt;
=== Fyn ===&lt;br /&gt;
Status: 1/10&lt;br /&gt;
&lt;br /&gt;
* [[User:EsbenDamgaard]]&lt;br /&gt;
&lt;br /&gt;
=== Sjælland ===&lt;br /&gt;
==== Copenhagen ====&lt;br /&gt;
Status: 1/10&lt;br /&gt;
&lt;br /&gt;
* [[User:Fursund]]&lt;br /&gt;
&lt;br /&gt;
== Finland ==&lt;br /&gt;
=== Uusimaa ===&lt;br /&gt;
==== Helsinki (Full)====&lt;br /&gt;
Status : 10/10&lt;br /&gt;
&lt;br /&gt;
* Mikko Rauhala x2 [mailto:mjr@iki.fi mjr@iki.fi]&lt;br /&gt;
* Aleksi Hankalahti &amp;lt;br /&amp;gt; [mailto:aleksi.hankalahti@iki.fi aleksi.hankalahti@iki.fi]&lt;br /&gt;
* Seppo Hätönen &amp;lt;br /&amp;gt; [mailto:karrde@iki.fi karrde@iki.fi]&lt;br /&gt;
* Arttu Sund &amp;lt;br /&amp;gt; [mailto:thearttu@gmail.com thearttu@gmail.com]&lt;br /&gt;
* Ville-Pekka Vainio &amp;lt;br /&amp;gt; vpivaini AT cs.helsinki.fi&lt;br /&gt;
* Heikki Hallamaa &amp;lt;br /&amp;gt; [mailto:heikki.hallamaa@iki.fi heikki.hallamaa@iki.fi]&lt;br /&gt;
* Tomi Jylhä-Ollila &amp;lt;br /&amp;gt; tomi.jylha-ollila@helsinki.fi&lt;br /&gt;
* Richard Braakman&lt;br /&gt;
* Timo Jyrinki &amp;lt;br /&amp;gt; [mailto:timo.jyrinki@iki.fi timo.jyrinki@iki.fi]&lt;br /&gt;
&lt;br /&gt;
==== Helsinki ====&lt;br /&gt;
Status : 4/10&lt;br /&gt;
&lt;br /&gt;
* |[[User:Piksi]]&lt;br /&gt;
* Risto H. Kurppa &amp;lt;br /&amp;gt; risto AT kurppa DOT fi&lt;br /&gt;
* Aapo Rantalainen &amp;lt;br /&amp;gt; aapo DOT rantalainen AT gmail DOT com&lt;br /&gt;
* Matti Laakso &amp;lt;br /&amp;gt; matti DOT laakso AT kotiposti DOT net&lt;br /&gt;
&lt;br /&gt;
=== Varsinais-Suomi ===&lt;br /&gt;
==== Turku ====&lt;br /&gt;
Status : 1/10&lt;br /&gt;
&lt;br /&gt;
* Teemu Välimäki &amp;lt;br /&amp;gt; [mailto:teemu.valimaki@iki.fi teemu.valimaki@iki.fi]&lt;br /&gt;
&lt;br /&gt;
== France ==&lt;br /&gt;
=== Bretagne ===&lt;br /&gt;
==== Brest ====&lt;br /&gt;
Status : 1/10&lt;br /&gt;
&lt;br /&gt;
* StevenLeRoux [mailto:steven@pourri.fr steven@pourri.fr] Jabber_Id:Steven@jabber.fr&lt;br /&gt;
* Acheteur potentiel #2&lt;br /&gt;
&lt;br /&gt;
==== Rennes ====&lt;br /&gt;
Status : 1/10&lt;br /&gt;
&lt;br /&gt;
* Cédric DUFOUIL (openmoko at tsleg point com)&lt;br /&gt;
* Acheteur potentiel #2&lt;br /&gt;
&lt;br /&gt;
=== Ile de france ===&lt;br /&gt;
==== Paris ====&lt;br /&gt;
Status : 9/10&lt;br /&gt;
&lt;br /&gt;
* StevenLeRoux&lt;br /&gt;
* [[User:Phyce|Phyce]]&lt;br /&gt;
* Yann SLADEK&lt;br /&gt;
* [[User:Wilk|Wilk]] [http://wiki.openmoko.org/wiki/Special:Emailuser/Wilk Contact me here]&lt;br /&gt;
* Charles Clément (caratorn at gmail dot com)&lt;br /&gt;
* Jonathan Magano (jonathanmm[AT]free[DOT]fr)&lt;br /&gt;
* Benjamin Renard (bn8[AT]zionetrix.net)&lt;br /&gt;
* [[User:OlivierBerger|OlivierBerger]]&lt;br /&gt;
* [[User:BartGS|BartGS]] [http://wiki.openmoko.org/wiki/Special:Emailuser/BartGS Contact me here]&lt;br /&gt;
&lt;br /&gt;
You may also see :&lt;br /&gt;
http://bearstech.com/openmoko/register&lt;br /&gt;
&lt;br /&gt;
=== Pays de la Loire ===&lt;br /&gt;
==== La Roche sur Yon ====&lt;br /&gt;
Status : 1/10&lt;br /&gt;
&lt;br /&gt;
* [http://wiki.openmoko.org/wiki/Special:Emailuser/Vtouchar Vincent Touchard] (I may soon move to Bretagne/Brest)&lt;br /&gt;
&lt;br /&gt;
== Germany ==&lt;br /&gt;
=== Sachsen-Anhalt ===&lt;br /&gt;
==== Stendal (evtl. Magdeburg) ====&lt;br /&gt;
Status 1/10&lt;br /&gt;
&lt;br /&gt;
* Fabian Off [http://wiki.openmoko.org/wiki/Special:Emailuser/Fabian2de Contact me here]&lt;br /&gt;
&lt;br /&gt;
=== Hamburg ===&lt;br /&gt;
==== Hamburg ====&lt;br /&gt;
Status 1/10&lt;br /&gt;
&lt;br /&gt;
* Jan [http://wiki.openmoko.org/wiki/Special:Emailuser/Jan07 Contact me here]&lt;br /&gt;
&lt;br /&gt;
=== NRW ===&lt;br /&gt;
==== Bielefeld ====&lt;br /&gt;
Status 3/10&lt;br /&gt;
&lt;br /&gt;
* David, infos on my [[User:Raven|user page]], or you can [[Special:Emailuser/Raven|contact me here]]&lt;br /&gt;
* Sebastian, infos on my [[User:Seppi|user page]], or you can [[Special:Emailuser/Seppi|contact me here]]&lt;br /&gt;
* Dackel, infos on my [[User:Killerdackel|user page]], or you can [[Special:Emailuser/Killerdackel|contact me here]]&lt;br /&gt;
&lt;br /&gt;
== Italy == &lt;br /&gt;
If we don't reach the 10 phones in each city, maybe we could place an order in the &amp;quot;most requested city&amp;quot;, and from shipping to other buyers. We'll have anyway a good discount although the &amp;quot;double-shipping&amp;quot;. ([http://thread.gmane.org/gmane.comp.handhelds.openmoko.community/10937/focus=10981 Read here for reference]).&lt;br /&gt;
&lt;br /&gt;
=== Toscana ===&lt;br /&gt;
==== Firenze ====&lt;br /&gt;
Status 2/10&lt;br /&gt;
&lt;br /&gt;
* Marco Trevisan &amp;lt;br/&amp;gt; [http://blog.3v1n0.net/contatti-trevino/ Contacts here]&lt;br /&gt;
* [[User:Niccolo|Niccolo]] 11:13, 18 April 2008 (CEST)&lt;br /&gt;
&lt;br /&gt;
=== Lombardia ===&lt;br /&gt;
&lt;br /&gt;
==== Milano ====&lt;br /&gt;
Status 5/10&lt;br /&gt;
&lt;br /&gt;
* Marco Crociani &amp;lt;br/&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/Tyrael Contacts here]&lt;br /&gt;
* Marcello Gorla&lt;br /&gt;
* Maxxer [mailto:maxxer@yetopen.it maxxer@yetopen.it] (Lecco)&lt;br /&gt;
* Pietro Montorfano [mailto:monto84@gmail.com monto84@gmail.com] (from como)&lt;br /&gt;
* Gianluigi Belli [http://wiki.openmoko.org/wiki/Special:Emailuser/Pulciux Contacts here]&lt;br /&gt;
&lt;br /&gt;
=== Trentino-Alto Adige ===&lt;br /&gt;
==== Trento (Padova too :)) ====&lt;br /&gt;
Status 1/10&lt;br /&gt;
&lt;br /&gt;
* Andrea Debortoli &amp;lt;br/&amp;gt; (debortoland AT gmail DOT com)&lt;br /&gt;
&lt;br /&gt;
=== Veneto ===&lt;br /&gt;
==== Verona ====&lt;br /&gt;
&lt;br /&gt;
* Persegat [mailto:persegat@alice.it persegat@alice.it]&amp;lt;br/&amp;gt;[[User:Pecce|Pecce]]&lt;br /&gt;
&lt;br /&gt;
=== Puglia ===&lt;br /&gt;
==== Lecce ====&lt;br /&gt;
Status : 1/10&lt;br /&gt;
&lt;br /&gt;
* [[User:Morpheus90|Morpheus90]] [mailto:ugopiemontese@rudiaelinux.com ugopiemontese@rudiaelinux.com]&lt;br /&gt;
==== Bari ====&lt;br /&gt;
Status : 2/10&lt;br /&gt;
&lt;br /&gt;
* [[User:Fradeve11|Fradeve11]] [mailto:fradeve@ubuntu-it.org fradeve@ubuntu-it.org]&lt;br /&gt;
&lt;br /&gt;
== The Netherlands ==&lt;br /&gt;
&lt;br /&gt;
* Marcel de Jong 1/10 [[User:madjo]]&lt;br /&gt;
* Christ van Willegen 1/10 [[User:ChristW]]&lt;br /&gt;
* Peter van de Werken 3/10 [[Special:Emailuser/User:PWerken|Contact]]&lt;br /&gt;
* Marijn Kruisselbrink 1 [[Special:Emailuser/User:mkruisselbrink|Contact]]&lt;br /&gt;
* Eric Spierings 1/10 [[User:ericsp]]&lt;br /&gt;
* Andy Powell 1/10 [[User:ScaredyCat]]&lt;br /&gt;
=== Overijssel ===&lt;br /&gt;
==== Hengelo ====&lt;br /&gt;
* Sander Hoentjen 4/10 [[Special:Emailuser/User:Tjikkun|Contact]]&lt;br /&gt;
==== Status ====&lt;br /&gt;
12/20&lt;br /&gt;
&lt;br /&gt;
== New Zealand ==&lt;br /&gt;
=== Auckland ===&lt;br /&gt;
==== Auckland ====&lt;br /&gt;
&lt;br /&gt;
* Rob Paulson 1/10 &amp;lt;br /&amp;gt; [[User:Myfanwy]]&lt;br /&gt;
&lt;br /&gt;
== Norway ==&lt;br /&gt;
=== Nordland ===&lt;br /&gt;
==== Bodø ====&lt;br /&gt;
Status 3/10&lt;br /&gt;
&lt;br /&gt;
* [[User:AlecTBM|Alexander Frøyseth]] [mailto:alexander.froyseth@gmail.com alexander.froyseth@gmail.com]&lt;br /&gt;
* Ole Marius&lt;br /&gt;
* Marius Andersen&lt;br /&gt;
&lt;br /&gt;
=== Østlandet ===&lt;br /&gt;
==== Oslo&amp;amp;Akershus ====&lt;br /&gt;
Status 11/20&lt;br /&gt;
&lt;br /&gt;
* [[User:Ixian|Heikki Sørum]] [mailto:heikkis@matnat.uio.no] &amp;lt;br/&amp;gt; Interessert? mail meg.&lt;br /&gt;
* [[User:Bobkare|Knut Arne Bjørndal]] [mailto:bob@cakebox.net]&lt;br /&gt;
&lt;br /&gt;
== Poland ==&lt;br /&gt;
=== dolnośląskie ===&lt;br /&gt;
==== Wrocław ====&lt;br /&gt;
&lt;br /&gt;
* Special group buy site: https://www.kumulator.pl/show/group/35&lt;br /&gt;
&lt;br /&gt;
== Portugal ==&lt;br /&gt;
=== Aveiro ===&lt;br /&gt;
==== Aveiro ====&lt;br /&gt;
Status : 2/10&lt;br /&gt;
&lt;br /&gt;
* Ruben Mendes&lt;br /&gt;
* [[User:kuyky|Tiago Saraiva]] &amp;lt;br /&amp;gt; [mailto:destructhor88@gmail.pt]&lt;br /&gt;
&lt;br /&gt;
== Sweden ==&lt;br /&gt;
If insufficient number of people, orders could be merged and remailed perhaps&lt;br /&gt;
&lt;br /&gt;
=== Svealand ===&lt;br /&gt;
==== Stockholm ====&lt;br /&gt;
Status : 2/10&lt;br /&gt;
&lt;br /&gt;
* Erland Lewin &amp;lt;br /&amp;gt; mailto:erland@lewin.nu&lt;br /&gt;
* Simon Kågström &amp;lt;br /&amp;gt; mailto:simon.kagstrom@gmail.com&lt;br /&gt;
&lt;br /&gt;
==== Örebro ====&lt;br /&gt;
Status : 1/10&lt;br /&gt;
&lt;br /&gt;
* Anders Petersson &amp;lt;br /&amp;gt; [mailto:demitar@worldforge.org demitar@worldforge.org]&lt;br /&gt;
&lt;br /&gt;
=== Norrland ===&lt;br /&gt;
==== Umeå ====&lt;br /&gt;
Status : 1/10&lt;br /&gt;
&lt;br /&gt;
* [[User:Zash|Zash]] [[Special:Emailuser/Zash|Contact]]&lt;br /&gt;
&lt;br /&gt;
== Switzerland ==&lt;br /&gt;
=== Zurich ===&lt;br /&gt;
==== Zurich ====&lt;br /&gt;
Status : 7/10&lt;br /&gt;
&lt;br /&gt;
* Simon Wenner &amp;lt;br /&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/Nowic Contact]&lt;br /&gt;
* Simon Schreiber &amp;lt;br /&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/Magbeat Contact]&lt;br /&gt;
* Markus Huggler &amp;lt;br /&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/Magbeat Contact]&lt;br /&gt;
* Andre Timmermann &amp;lt;br /&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/darktim Contact]&lt;br /&gt;
* Raffael Schmid &amp;lt;br /&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/darktim Contact]&lt;br /&gt;
* Pascal Weller &amp;lt;br /&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/darktim Contact]&lt;br /&gt;
* Nick Zbinden &amp;lt;br /&amp;gt; [mailto:nickik@gmx.ch]&lt;br /&gt;
&lt;br /&gt;
== Spain ==&lt;br /&gt;
=== Madrid ===&lt;br /&gt;
==== Madrid ====&lt;br /&gt;
Status : 1/10&lt;br /&gt;
&lt;br /&gt;
* Rafael Campos &amp;lt;br /&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/Methril Contact]&lt;br /&gt;
&lt;br /&gt;
=== Zaragoza ===&lt;br /&gt;
==== Zaragoza ====&lt;br /&gt;
Status : 1/10&lt;br /&gt;
&lt;br /&gt;
* Alejandro R. Mosteo &amp;lt;br /&amp;gt; alejandro AT mosteo · com&lt;br /&gt;
&lt;br /&gt;
=== Barcelona ===&lt;br /&gt;
==== Barcelona ====&lt;br /&gt;
Status : 1/10&lt;br /&gt;
&lt;br /&gt;
* José Luis Pérez &amp;lt;br/&amp;gt;[[Special:Emailuser/jluis|Contact]]&lt;br /&gt;
&lt;br /&gt;
== USA ==&lt;br /&gt;
=== Colorado ===&lt;br /&gt;
==== Denver ====&lt;br /&gt;
Status: 7/10&lt;br /&gt;
* Shawn Sullivan &amp;lt;br /&amp;gt; [[mailto:shelbydz87@yahoo.com shelbydz87@yahoo.com]]&lt;br /&gt;
* Peter Abplanalp &amp;lt;br /&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/alderion Contact]&lt;br /&gt;
&lt;br /&gt;
=== Southern California ===&lt;br /&gt;
==== Los Angeles ====&lt;br /&gt;
Status: 2/10&lt;br /&gt;
&lt;br /&gt;
* Ian Douglas &amp;lt;br /&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/Iandouglas Contact me here]&lt;br /&gt;
* Matthew &amp;lt;br /&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/Wetmoko Contact]&lt;br /&gt;
&lt;br /&gt;
=== Mid-Atlantic ===&lt;br /&gt;
==== Virginia====&lt;br /&gt;
===== Richmond =====&lt;br /&gt;
* Philippe Gerard &amp;lt;br/&amp;gt;[[Special:Emailuser/feydreva|Contact]]&lt;br /&gt;
==== New York ====&lt;br /&gt;
Status: 1/10&lt;br /&gt;
&lt;br /&gt;
* Bert Hartmann &amp;lt;br /&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/BertHartm Contact me here]&lt;br /&gt;
&lt;br /&gt;
== UK ==&lt;br /&gt;
=== London ===&lt;br /&gt;
==== London ====&lt;br /&gt;
Status : 5/10&lt;br /&gt;
&lt;br /&gt;
* Juergen Schinker &amp;lt;br /&amp;gt; mailto:ba1020@homie.homelinux.net&lt;br /&gt;
* Tim Coggins (actually in Oxford)&amp;lt;br /&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/Sonicated Contact]&lt;br /&gt;
* David Pottage (actually in Reading)&amp;lt;br /&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/chrestomanci Contact]&lt;br /&gt;
* aled &amp;lt;br /&amp;gt; [http://wiki.openmoko.org/wiki/Special:Emailuser/aled Contact]&lt;br /&gt;
* Bin Zong (actually in Birmingham)&amp;lt;br /&amp;gt;  [mailto:hunter_00zb@hotmail.com]&lt;br /&gt;
&lt;br /&gt;
== Latvia ==&lt;br /&gt;
=== Riga ===&lt;br /&gt;
==== Riga ====&lt;br /&gt;
* [[User:VRGhost]]&lt;br /&gt;
[[Category:Information| ]]&lt;br /&gt;
[[Category:community| ]]&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Main_Page</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Main_Page"/>
				<updated>2008-04-16T13:53:05Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* minor phrase mod */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|Main_Page}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
__NOEDITSECTION__&lt;br /&gt;
__NOTOC__&lt;br /&gt;
{| cellspacing=&amp;quot;4&amp;quot; cellpadding=&amp;quot;0&amp;quot; style=&amp;quot;padding: 2%; margin:0em 0em 1em 0em; border:1px solid #c8bbbf; background:#ECE5B6; width:100%&amp;quot; &lt;br /&gt;
| &amp;lt;big&amp;gt;'''Welcome to the [[Openmoko]]&amp;amp;trade; public Wiki'''&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Image:GTA02.gif |200px|right|frontside]]&lt;br /&gt;
Openmoko&amp;amp;trade; is an [http://en.wikipedia.org/wiki/Open_source Open Source] project under[[License| GPL and LGPL license]]. The aim of Openmoko is to build the world's first free mobile platform which runs a full X server and can therefore run most X applications.  You can install any [[Openmoko]] software over the whole range of [[OpenMoko-supported hardware|supported phones]], and if you upgrade your phone, you won't lose that software. Bugs fixed on any phone are fixed on all. &lt;br /&gt;
&lt;br /&gt;
The [[Neo1973 | Neo 1973 (GTA01)]] from [[FIC]] is the first of many phones that Openmoko may be used on.  It has now sold out (Feb 08) as you can see at the [https://direct.openmoko.com/ Openmoko Online Shop].  [[Neo FreeRunner  | Neo FreeRunner (GTA02)]] the new generation Openmoko mobile phone is not yet available - press [[Neo FreeRunner GTA02 Hardware| here]] to get more hardware information.   Otherwise, scroll down this page for info on the development status , or you can add your nickname to those interested buying the Neo FreeRunner at [[Buying_Interest_List|Buying Interest List]]. &lt;br /&gt;
The [[Openmoko]] project is a community that anyone can join, to help design their ideal phone. Please join us in collaborating on the Openmoko project through any of the [[Development resources | project resources]] including this Openmoko wiki. Please see the [[Help:Contents | wiki editing help]] page for information on making contributions to this wiki. A [[Meet the Core Team | core team]] of developers funded by FIC, Inc. leads the project.&lt;br /&gt;
&lt;br /&gt;
To the novice,  can start by use  [[introduction]] page ,  [[Introduction#Photos|photos]],  [[Introduction#Videos|videos]]  and [[Openmoko Wiki Official Index Page]],  to take the overview of Openmoko and  wiki.      Moreover, the usual [[FAQ | Frequently Asked Questions]] (FAQ)  and [http://lists.openmoko.org/mailman/listinfo/| mailing list] pages might be helpful. Developers may find the [[ChangeLog | change log]] an important resource.  &lt;br /&gt;
&lt;br /&gt;
{{warning|'''The Openmoko GUI applications are not suitable for end users yet.''' They are still in beta. Do not expect to always and reliably make and receive calls from the Openmoko GUI. Thanks to the openness of the FIC Neo1973 hardware, there is also an alternative to the Openmoko GUI: Qtopia 4.3.x is released under GPL and is at the edge of being usable for daily phone use.}}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; width=100%&lt;br /&gt;
! width=100% colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#C8B560;border-left:5px solid white;border-right:5px solid white;border-top:5px solid white;&amp;quot; | Latest status&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;TOP&amp;quot; width=&amp;quot;50%&amp;quot; style=&amp;quot;background:#FAF8CC;border-left:5px solid white;border-bottom:5px solid white;&amp;quot; | &lt;br /&gt;
* The latest Qtopia snapshot can now be successfully used to make and receive calls, to send and receive SMS and use Contacts for both. However, if you do not enable suspend, one battery will only last 3-5 hours, but in suspend, incoming calls do not wake up Qtopia! See [[Qtopia on Neo 1973]] for instructions.&lt;br /&gt;
|valign=&amp;quot;TOP&amp;quot; width=&amp;quot;50%&amp;quot; style=&amp;quot;background:#FAF8CC;border-right:5px solid white;border-bottom:5px solid white;&amp;quot; | &lt;br /&gt;
* The [http://buildhost.openmoko.org/daily/neo1973/deploy/glibc/images/neo1973/ latest build] can make and receive calls most of the time. Power management (suspend, standby time) are still experiencing problems. Reviews of the daily snapshot build are [[Snapshot_review|here]] and the recommended kernel and root image from the review will always be available [http://downloads.openmoko.org/recommended/ here]. Note that the recommended set is not always the latest, but is the most stable, reliable, and functional.&lt;br /&gt;
* For the latest status updates, see [[Community_Updates|Community Updates]]&lt;br /&gt;
* To get the overview of Openmoko Wiki, see [[Openmoko Wiki Official Index Page]].&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; width=100%&lt;br /&gt;
! width=100% colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#ADA96E;border-left:5px solid white;border-right:5px solid white;border-top:5px solid white;&amp;quot; | What's Your Interest?&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;TOP&amp;quot; width=&amp;quot;50%&amp;quot; style=&amp;quot;background:#FAF8CC;border-left:5px solid white;border-bottom:5px solid white;&amp;quot; | &lt;br /&gt;
* [[Basic End-user]] - Information for end users who want basic functionality and no surprises&lt;br /&gt;
* [[Advanced End-user]] - Information for advanced end-users who want advanced and experimental functionality but who are not programmers&lt;br /&gt;
* [[Business Development]] - Exchange of commercial opportunities for promoting widespread end-user acceptance.&lt;br /&gt;
|valign=&amp;quot;TOP&amp;quot; width=&amp;quot;50%&amp;quot; style=&amp;quot;background:#FAF8CC;border-right:5px solid white;border-bottom:5px solid white;&amp;quot; | &lt;br /&gt;
* [[Application Developer]] - Information for application developers, including ideas and specifications for applications, and tools to build them&lt;br /&gt;
* [[System Developer]] - Information for system developers, including bootloader, kernel, and libraries&lt;br /&gt;
* [[Hardware Developer]] - Information for hardware developers, including hardware specs and debug board&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; width=100%&lt;br /&gt;
! width=100% colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#C9BE62;border-left:5px solid white;border-right:5px solid white;border-top:5px solid white;&amp;quot; | System Specs&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;TOP&amp;quot; width=&amp;quot;50%&amp;quot; style=&amp;quot;background:#FAF8CC;border-left:5px solid white;border-bottom:5px solid white;&amp;quot; | &lt;br /&gt;
* [[Neo1973_hardware|Neo 1973 (GTA01)]] - Specs of original Neo 1973 (GTA01) Hardware&lt;br /&gt;
* [[Neo_FreeRunner_GTA02_Hardware|Neo FreeRunner (GTA02)]] - Specs of Neo FreeRunner (GTA02) Hardware&lt;br /&gt;
|valign=&amp;quot;TOP&amp;quot; width=&amp;quot;50%&amp;quot; style=&amp;quot;background:#FAF8CC;border-right:5px solid white;border-bottom:5px solid white;&amp;quot; | &lt;br /&gt;
* [[Openmoko Core Applications]] - Applications included in the core build of Openmoko&lt;br /&gt;
* [[Openmoko Community Applications]] - Featured downloadable applications from the Openmoko community&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; width=100%&lt;br /&gt;
! width=33% style=&amp;quot;background:#ff9900;border-left:5px solid white;border-right:5px solid white;border-top:5px solid white;&amp;quot; | General&lt;br /&gt;
! width=33% style=&amp;quot;background:#ff6633;border-left:5px solid white;border-right:5px solid white;border-top:5px solid white;&amp;quot; | Developer Guides&lt;br /&gt;
! width=33% style=&amp;quot;background:#cc3333;border-left:5px solid white;border-right:5px solid white;border-top:5px solid white;&amp;quot; | Developer Reference Documentation&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;TOP&amp;quot; style=&amp;quot;background:#F4F4F4;border-left:5px solid white;border-right:5px solid white;border-bottom:5px solid white;&amp;quot; |&lt;br /&gt;
* [[Development resources | Project Resources]] - Provides a centralized location of all resources such as [[Development resources#Mailing_Lists|mailing lists]], [[Development resources#IRC | IRC]], and other software development oriented resources.&lt;br /&gt;
 &lt;br /&gt;
* [[Current events]] - Information on both past and future events where FIC or Openmoko had or will have a presence.&lt;br /&gt;
* [http://forums.makeopensource.com/ Unofficial Openmoko Forums] - Everyone is invited to collaborate with Openmoko users and developers on the forums.&lt;br /&gt;
* Most of the documentation and Wiki assumes you are using Linux; here are some notes for users of [[Other OSes]].&lt;br /&gt;
* [[MacOS_X|Mac OS X]] - Information specific for those who use Mac OS X&lt;br /&gt;
* [[OpenLab]] - A physical area where Openmoko can interact with FOSS community&lt;br /&gt;
&lt;br /&gt;
'''Administrative + Organizational'''&lt;br /&gt;
* [[Shipping Notes]] - Information to help FIC figure out how to ship products to you, and how much it might cost.&lt;br /&gt;
* [[My Account]] - Ideas for what sort of account-based services FIC should provide with the phone.&lt;br /&gt;
* [[Hear Me FIC]] - Information to help FIC know what the community wants.&lt;br /&gt;
* [[Listen Up Community]] - Community's To-Do-List&lt;br /&gt;
* [[Wiki Issues]] - problems/requests regarding this Wiki&lt;br /&gt;
&lt;br /&gt;
|valign=&amp;quot;TOP&amp;quot; style=&amp;quot;background:#F4F4F4;border-left:5px solid white;border-right:5px solid white;border-bottom:5px solid white;&amp;quot; | &lt;br /&gt;
* [[Getting Started with your Neo1973]]&lt;br /&gt;
* [[installation_guide|A guide for flashing and emulating the openmoko software]] &lt;br /&gt;
** [[Flashing_openmoko|Flashing Neo1973 with the kernel, the root filesystem and optionally u-boot.]]&lt;br /&gt;
** [[MokoMakefile|Building Openmoko using the MokoMakefile]]&lt;br /&gt;
** [[Application Development Crash Course]] -A very basic how-to for the new people. &lt;br /&gt;
** [[OpenMoko2007.2|Building Openmoko 2007.2]]&lt;br /&gt;
** [[Building Openmoko 2007.1 from scratch]]&lt;br /&gt;
*** [[Building a hello world application]]&lt;br /&gt;
*** Old [[Building Openmoko from scratch (pre-BBT)|Building Openmoko from scratch (pre-BBT)]]&lt;br /&gt;
** [[Running Openmoko on PC]]&lt;br /&gt;
*** [[Host-based development with Xoo and Xephyr|Getting Openmoko working on host with Xoo]]&lt;br /&gt;
*** [[Getting OpenMoko working on host with Xephyr|Getting Openmoko working on host with Xephyr]]&lt;br /&gt;
*** [[How to run OpenMoko Apps on PC|How to run Openmoko Apps on PC]]&lt;br /&gt;
*** [[Openmoko under QEMU]]&lt;br /&gt;
*** [[Test Openmoko Emulation with chroot image|Test Openmoko Emulation with a Prebuilt chroot Image]]&lt;br /&gt;
* [[Migration to bad block tolerant builds]]&lt;br /&gt;
* [[Booting from SD]]&lt;br /&gt;
* [[DailyBuiltImages|Getting daily built images]]&lt;br /&gt;
&lt;br /&gt;
|valign=&amp;quot;TOP&amp;quot; style=&amp;quot;background:#F4F4F4;border-left:5px solid white;border-right:5px solid white;border-bottom:5px solid white;&amp;quot;| &lt;br /&gt;
'''Hardware Reference Documentation'''&lt;br /&gt;
* All [[:Category:Hardware|Hardware]] related documentation and specifications are found on the [[:Category:Hardware|Hardware page]].&lt;br /&gt;
* The [[Neo1973 Hardware]] page provides an overview of the hardware components used by the [[:Category:Neo1973 Hardware|Neo1973 hardware platform]]. PCB photographs are also included. A [[Disassembling Neo1973 | photo disassembly story]] may be an interesting starting place.&lt;br /&gt;
* [[:Category:Neo1973 Hardware Debugging | Neo1973 Hardware Debugging]] is assisted with the [[Debug Board | Neo1973 debug board]].   A page discussing [[Connecting Neo1973 with Debug Board v2 | debug board and Neo1973 configurations]] is also provided.&lt;br /&gt;
&lt;br /&gt;
'''Software Reference Documentation'''&lt;br /&gt;
* Architectural&lt;br /&gt;
** [[OpenmokoFramework]] - The Openmoko Application Framework&lt;br /&gt;
* [[Neo1973 host software]]&lt;br /&gt;
* Device Software&lt;br /&gt;
** Low-Level&lt;br /&gt;
*** [[u-boot]] - The bootloader we use, including documentation for our modifications&lt;br /&gt;
*** [[kernel]] - The Linux kernel we use, including documentation for our modifications&lt;br /&gt;
** Userspace&lt;br /&gt;
*** [[binary compatibility]]&lt;br /&gt;
*** [[gsmd]] - the GSM daemon managing the GSM Modem&lt;br /&gt;
*** [[gpsd]] - the AGPS (Assisted GPS) daemon&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; width=100%&lt;br /&gt;
! width=33% style=&amp;quot;background:#99ccff;border-left:5px solid white;border-right:5px solid white;border-top:5px solid white;&amp;quot; | Openmoko-specific Development&lt;br /&gt;
! width=33% style=&amp;quot;background:#B3DDF4;border-left:5px solid white;border-right:5px solid white;border-top:5px solid white;&amp;quot; | Openmoko Miscellaneous Development&lt;br /&gt;
! width=33% style=&amp;quot;background:#00ccff;border-left:5px solid white;border-right:5px solid white;border-top:5px solid white;&amp;quot; | Miscellaneous&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;TOP&amp;quot; style=&amp;quot;background:#F4f4f4;border-left:5px solid white;border-right:5px solid white;border-bottom:5px solid white;&amp;quot; | &lt;br /&gt;
* [[Roadmap]] - Roadmap for further Openmoko development&lt;br /&gt;
* [[OpenEmbedded]] - The distribution-building framework&lt;br /&gt;
* [[Toolchain]] - The toolchain we use for compilation&lt;br /&gt;
* [[Openmoko]] - The Openmoko distribution&lt;br /&gt;
** [[Openmoko2007]] - The first intended release of it&lt;br /&gt;
** [[Openmoko2007.2]] - An improved release with more formalized style guidelines.&lt;br /&gt;
** [[Userspace root image]]&lt;br /&gt;
* [[Test Plans]] - How we test our phones&lt;br /&gt;
* [[Prototypes]] - Tracking prototypes&lt;br /&gt;
* [[GSM network registration]] - Tracking network registration status in the world&lt;br /&gt;
&lt;br /&gt;
'''User Interface Related'''&lt;br /&gt;
* [[GUI Style Guidelines]] -- New for [[Openmoko2007.2]]&lt;br /&gt;
* [[Look &amp;amp; Feel]]&lt;br /&gt;
** [[Artwork]]&lt;br /&gt;
* [[Applications|Application Roadmap]]&lt;br /&gt;
* [[Widgets]]&lt;br /&gt;
** [[Widget Inheritance Graph]]&lt;br /&gt;
* [[Application UI Design Recommendations]]&lt;br /&gt;
&lt;br /&gt;
|valign=&amp;quot;TOP&amp;quot; style=&amp;quot;background:#F4f4f4;border-left:5px solid white;border-right:5px solid white;border-bottom:5px solid white;&amp;quot; |&lt;br /&gt;
* [[Thesis work]] &lt;br /&gt;
* [[Freshman todo]]&lt;br /&gt;
* [[Templates]]&lt;br /&gt;
* [[PIM Storage]]&lt;br /&gt;
* [[Coding Guidelines]]&lt;br /&gt;
* [[OpenMoko#Setting_up_an_OpenMoko_SDK|How to setup the Openmoko SDK]]&lt;br /&gt;
* Alternative distributions for [[Neo1973]] GTA01: [[Angstrom on Neo1973]], [http://pokylinux.org Poky] [http://www.usome.com](instructions needed!)&lt;br /&gt;
* [[License]] - How we license our code&lt;br /&gt;
* [[Development resources]] - Describes resources for developers (lists, svn, ...)&lt;br /&gt;
* [[Neo1973 Phase 0]] - Information for Phase 0 device owners&lt;br /&gt;
* [[Wishlist:Neo1973 P0 Review]] - Impressions of the Phase 0 hardware device, also the Phase 0 FAQ&lt;br /&gt;
* [[Neo1973 Phase 1]] - Information for Phase 1 device owners&lt;br /&gt;
* [[Wishlist:Neo1973 P1 Review]] - Impressions of the Phase 1 hardware device&lt;br /&gt;
* [[External Feeds]] - List of feeds from people blogging about Openmoko&lt;br /&gt;
&lt;br /&gt;
|valign=&amp;quot;TOP&amp;quot; style=&amp;quot;background:#F4f4f4;border-left:5px solid white;border-right:5px solid white;border-bottom:5px solid white;&amp;quot; | &lt;br /&gt;
* [[WiFi support in Openmoko]]&lt;br /&gt;
* [[Neo1973 and Windows]]&lt;br /&gt;
* [[Press Coverage]] - What the press says about the Openmoko project&lt;br /&gt;
* [[mFAQ]] - The Openmoko Misinformation FAQ ('''mFAQ''') - What the press '''''incorrectly''''' says about the Openmoko project&lt;br /&gt;
* [[Openmoko Core Applications]] - Applications (GUI based) currently included in the main/core build of Openmoko &lt;br /&gt;
* [[Wish List]]s: [[Wish List - Hardware|Hardware]], [[Wishlist:BuiltInScriptingLanguage|Scripting Languages]], [[Wish List - OpenMoko Ringtones and Sounds|ringtones and sounds]]&lt;br /&gt;
* [[Media Content]] - What types of media on the device can we use (that is non-software)?&lt;br /&gt;
* [[Testimonials]] - How did you get to Openmoko?&lt;br /&gt;
* [[Buying Interest List]] - (Not official and not a pre-order page) Have you put money aside for Neo1973? Put your nick here.&lt;br /&gt;
* Comparison with the [[iPhone]]&lt;br /&gt;
* [[Translation]] of Openmoko&lt;br /&gt;
* Project applications for Google's [[Summer of code]]&lt;br /&gt;
* Purchase Openmoko [[SWAG]] T-Shirts!&lt;br /&gt;
* The Openmoko [[Trademark Policy]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The members of the Openmoko community would like to thank FIC Inc. for their continued leadership of the Openmoko project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;bottom&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Information| ]]&lt;br /&gt;
[[Category:Categories| ]]&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Users_Repositories</id>
		<title>Users Repositories</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Users_Repositories"/>
				<updated>2008-03-19T20:42:24Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* fix wrong dir for scaredycat.conf */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Repositories ===&lt;br /&gt;
here you can find prebuilt kernels and root file systems.&lt;br /&gt;
&lt;br /&gt;
* '''Official downloads'''&lt;br /&gt;
:* Recent/latest builds&lt;br /&gt;
::* OM2007.2 &lt;br /&gt;
:::http://buildhost.openmoko.org/OM2007.2/tmp/deploy/glibc/images/neo1973/?C=M;O=D&lt;br /&gt;
::* OM2007.1 (Obsolete)&lt;br /&gt;
:::http://buildhost.openmoko.org/OM2007.1/tmp/deploy/images/?C=M;O=D&lt;br /&gt;
&lt;br /&gt;
:* Snapshots [http://downloads.openmoko.org/snapshots/]&lt;br /&gt;
::* 2007.11 - the latest (2nd Dec) snapshot ([http://lists.openmoko.org/pipermail/community/2007-December/011980.html from Mickey])&lt;br /&gt;
:::http://downloads.openmoko.org/snapshots/2007.11/images/&lt;br /&gt;
::* 2007.08 snapshot, as announced by Sean on August 19&lt;br /&gt;
:::http://downloads.openmoko.org/snapshots/2007.08/images/&lt;br /&gt;
&lt;br /&gt;
:* Daily &lt;br /&gt;
::* Unstable Daily-builds&lt;br /&gt;
:::http://buildhost.openmoko.org/daily/neo1973/deploy/glibc/images/neo1973/?C=M;O=D&lt;br /&gt;
* '''Unofficial builds'''&lt;br /&gt;
:* '''[[User:ChooseOpen|ChooseOpen]]'''&lt;br /&gt;
::http://chooseopen.com:81/openmoko/build/2007.2/?M=D&lt;br /&gt;
::http://chooseopen.com:81/openmoko/build/qtopia/?M=D (Qtopia)&lt;br /&gt;
&lt;br /&gt;
:* '''[[User:ScaredyCat|ScaredyCat]]'''&lt;br /&gt;
::http://buildhost.automated.it/OM2007.2/?M=D&lt;br /&gt;
&lt;br /&gt;
::ScaredyCat also has a ipkg repository for 2007.2 where e.g. gpe-filemanager and a lot more (e.g. ntpd) can be installed from. On the Neo do:&lt;br /&gt;
&lt;br /&gt;
 cd /etc/ipkg&lt;br /&gt;
 wget http://buildhost.automated.it/scaredycat.conf &lt;br /&gt;
 ipkg update&lt;br /&gt;
 ipkg install gpe-filemanager&lt;br /&gt;
 ipkg install gpe-timesheet&lt;br /&gt;
 ipkg install gpe-todo&lt;br /&gt;
 ipkg install mysql&lt;br /&gt;
 ipkg install mtpaint&lt;br /&gt;
 ipkg install sqlite&lt;br /&gt;
 ipkg install ntp&lt;br /&gt;
 #(you get the idea)&lt;br /&gt;
 /etc/init.d/xserver-nodm restart    # to make the new applications appear in the menu&lt;br /&gt;
&lt;br /&gt;
:* '''mwester''' unofficial builds&lt;br /&gt;
::http://moko.mwester.net/&lt;br /&gt;
&lt;br /&gt;
:* - (2007.2)&lt;br /&gt;
::http://www.totalueberwachung.de/~alphaone/openmoko-build/glibc/images/fic-gta01/?C=M;O=D&lt;br /&gt;
&lt;br /&gt;
:* '''celtune''' unofficial builds&lt;br /&gt;
::http://celtune.morb-design.com/images/fic-gta01/?C=M;O=D&lt;br /&gt;
::http://celtune.morb-design.com/ipk/&lt;br /&gt;
::Celtune offers Standard-Builds (.jffs2, .tar, .bin, .ipk) and several special-images with additional packages (e.g. monster-images,navigation-images,...)&lt;br /&gt;
::For more info take a look at http://celtune.morb-design.com/images/fic-gta01/1-NEWS-WARNING-INFO &lt;br /&gt;
&lt;br /&gt;
 cd /etc/ipkg &amp;amp;&amp;amp; wget http://celtune.morb-design.com/celtune.conf&lt;br /&gt;
&lt;br /&gt;
If you want to add a link, it would be nice to enforce a standard format of these feeds so that they can be browsed automatically.&lt;br /&gt;
&lt;br /&gt;
=== Angstrom Repository ===&lt;br /&gt;
If there's a package you need that is missing from the feeds listed above you can search the Angstrom repo [http://www.angstrom-distribution.org/repo/ here].&lt;br /&gt;
&lt;br /&gt;
To add the unstable Angstrom feed, update your /etc/ipkg/base-feeds.conf to include a line:&lt;br /&gt;
&lt;br /&gt;
 src/gz base http://www.angstrom-distribution.org/unstable/feed/armv4t/base/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:OpenMoko]]&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/GSM_network_registration</id>
		<title>GSM network registration</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/GSM_network_registration"/>
				<updated>2008-03-18T10:36:14Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* Results table */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;We'd like to know the real network registration status by our NEO devices in the world.  Please provide some information about your NEO status!  The question list as below:&lt;br /&gt;
&lt;br /&gt;
== Instructions ==&lt;br /&gt;
&lt;br /&gt;
1. What NEO device you are using? GTA01 or GTA02&lt;br /&gt;
&lt;br /&gt;
2. Where is your location and what is your network provider? eg. T-Mobile, San Francisco in USA&lt;br /&gt;
&lt;br /&gt;
3. When you boot the NEO, how long it takes to register the network? eg. in normal case, it should be able to register to a network in 1~2 minutes immediately.&lt;br /&gt;
&lt;br /&gt;
4. What is your GSM firmware version? you can get this number by an AT command. Using SSH to your NEO, then type this command:&lt;br /&gt;
[http://wiki.openmoko.org/wiki/USB_Networking How to use SSH] [http://wiki.openmoko.org/wiki/Gsmd  How to use libgsmd-tool]&lt;br /&gt;
root@fic-gta02:~# libgsmd-tool -m atcmd&lt;br /&gt;
 AT+CGMR&lt;br /&gt;
 STR=`AT+CGMR'&lt;br /&gt;
 RSTR=`+CGMR: &amp;quot;HW: GTA02BV5, GSM: gsm_ac_gp_fd_pu_em_cph_ds_vc_cal35_ri_36_amd8_ts0-Moko6&amp;quot;'&lt;br /&gt;
&lt;br /&gt;
5. What is your IMEI code? by this AT command like previous steps.&lt;br /&gt;
 AT+CGSN&lt;br /&gt;
 STR=`AT+CGSN' &lt;br /&gt;
 RSTR=`+CGSN: 000000000000000'&lt;br /&gt;
&lt;br /&gt;
6. if NEO takes over 3 minutes to register to the network or it just re-register to the network again and again. Please attach your gsm log file ('/tmp/gsm.log') to our bugzilla, we already created a bug for [http://bugzilla.openmoko.org/cgi-bin/bugzilla/show_bug.cgi?id=1024 this issue].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Results table ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
|  Owner    ||   Location   |||   Network Provider || How/When purchased SIM card || Device   || GSM firmware ||   IMEI  ||   Status ||   GSM log&lt;br /&gt;
|-&lt;br /&gt;
| [[User:MichaelShiloh]] || San Francisco, CA, USA ||T-Mobile|| with phone, &amp;gt; 2years ||GTA01||Moko6||YES||just fine||no&lt;br /&gt;
|-&lt;br /&gt;
| [[User:MichaelShiloh]] || San Francisco, CA, USA ||AT&amp;amp;T|| with phone, 8/28/07 ||GTA01||Moko6||YES||takes several minutes to register, home network rejects, CME error 32, reregisters continuously||no&lt;br /&gt;
|-&lt;br /&gt;
| [[User:MichaelShiloh]] || San Francisco, CA, USA ||AT&amp;amp;T|| replacement for one received with phone, 3/17/08 ||GTA01||Moko6||YES||preliminary test: registers promptly to home network. Will test in various locations and report back.||no&lt;br /&gt;
|-&lt;br /&gt;
| [[User:MichaelShiloh]] || San Francisco, CA, USA ||AT&amp;amp;T|| prepaid, no phone, 3/13/08 ||GTA01||Moko6||YES||just fine in some locations, but in others it takes several minutes to register and reregisters continuously. however, always better than card that came with phone||no&lt;br /&gt;
|-&lt;br /&gt;
| [[User:SpeedEvil]] || Fife, Scotland, UK||T-Mobile|| ||GTA01||Moko1||YES||Just fine||no&lt;br /&gt;
|-&lt;br /&gt;
| [mailto:erin_yueh@openmoko.com  Erin Yueh]   ||   Taipei, Taiwan    ||   TW mobile     || ||    GTA02BV5  ||  Moko6   ||   NO   ||   Normal, can register to the network immediately||   no&lt;br /&gt;
|-&lt;br /&gt;
| [mailto:marcus.bauer@gmail.com  Marcus Bauer]   ||   Nice, France    || Orange     || ||   GTA01Bv4 ||  Moko4   ||   YES   ||   Registers immediately and stays registered for ~10 minutes before the re-registering loop starts once per minute||   [http://bugzilla.openmoko.org/cgi-bin/bugzilla/attachment.cgi?id=554&amp;amp;action=view log]&lt;br /&gt;
|-&lt;br /&gt;
| [mailto:ahvenas@gmail.com  Henrik Pihl]   ||   Kuressaare, Estonia    || Elisa     || ||    GTA01Bv4  ||  Moko4   ||   YES   ||   Normal, can register to the network immediately, but starts reconnecting to the network in the first minutes.||   [http://bugzilla.openmoko.org/cgi-bin/bugzilla/attachment.cgi?id=555&amp;amp;action=view log]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:MarcinHrwJuszkiewicz | Marcin 'Hrw' Juszkiewicz]]   ||   Poznań, Poland    ||   Era (Heyah)     || prepaid, bought in October 2007, never charged, expired ||    GTA01Bv4  ||  phase0 phone (red PCB) with old GSM firmware   ||   YES   ||   Card expired, home network rejects it with CME Error 32 (emergency calls only), system displays &amp;quot;Registering...&amp;quot; for several minutes. ||   NO&lt;br /&gt;
|-&lt;br /&gt;
| [[User:MarcinHrwJuszkiewicz | Marcin 'Hrw' Juszkiewicz]]   ||   Poznań, Poland    ||   PlusGSM     || prepaid, several years old, not charged ||    GTA01Bv4  ||  phase0 phone (red PCB) with old GSM firmware   ||   YES   ||   Registered after entering PIN. Normal work after register. ||   NO&lt;br /&gt;
|-&lt;br /&gt;
| [mailto:plr@udgaard.com Peter Rasmussen]   ||   Copenhagen Denmark    || DK Sonofon     || ||    GTA01Bv4  ||  Moko1   ||   YES   ||   Registered immediatly after entering PIN. Works after that. No /tmp/gsm.log appears ||   NO&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Kevin_Dean | Kevin Dean]]   ||   Washington DC Metro Area, USA    || T-Mobile     || ||    GTA01Bv4  ||  Moko1   ||   YES   ||   Normal, can register to the network immediately, no PIN needed||   [http://www.monochromementality.com/data/files/logs/openmoko/2008-03-17/gsm.log.edited Log (Replaced my wife's # with 9991231122)]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:Dennis_Wollersheim | Dennis Wollersheim]]   ||   Melbourne, Australia ||   Telstra     || ||    GTA01Bv4  ||  Moko4   ||   Yes   ||   Registers quickly, reregisters every 30 seconds or so||   [http://bugzilla.openmoko.org/cgi-bin/bugzilla/attachment.cgi?id=556&amp;amp;action=view  gsm log]&lt;br /&gt;
|-&lt;br /&gt;
| [[User:thomasg | Thomas Gstädtner]]   ||   Nuremberg, Germany   || T-Mobile (Ericsson RBS2206, GSM900) || 2004 || GTA01Bv4 || Moko 1 || Yes || Registers nearby immediately, w/ PIN or w/o || NO&lt;br /&gt;
|-&lt;br /&gt;
| [[User:emdete | emdete]]   ||   Duesseldorf, Germany   || vodafone d2 || 200x || GTA01Bv4 || Moko 1 || Yes || No problems || No&lt;br /&gt;
|-&lt;br /&gt;
| [[User:emdete | emdete]]   ||   Duesseldorf, Germany   || vodafone d2 || 200x || GTA02 || Moko 6 || No || Does not register, pin entry works, net scan also. || No&lt;br /&gt;
|-&lt;br /&gt;
| [[User:emdete | emdete]]   ||   Duesseldorf, Germany   || e-plus || 200x || GTA02 (same as above) || Moko 6 || No || No problems || No&lt;br /&gt;
|-&lt;br /&gt;
| [[User:ScaredyCat | ScaredyCat]]   ||   Ipswich, UK   || Virgin || 2007 || GTA01 || Moko 1 || Yes || No problems || No&lt;br /&gt;
|-&lt;br /&gt;
| [[User:ScaredyCat | ScaredyCat]]   ||   Lelystad, Netherlands   || Virgin (Roaming on T-Mobile NL) || 2007 || GTA01 || Moko 1 || Yes || No problems || No&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]]&lt;br /&gt;
[[Category:GSM]]&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Manually_using_GPRS</id>
		<title>Manually using GPRS</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Manually_using_GPRS"/>
				<updated>2008-03-08T14:51:33Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* Some APN names for reference */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;You need to have [[GSM]] parts already initialized, with modem logged in to the network, for this to work. It is best to test it by doing test call. The GPRS connection is made using the PPP protocol to a server identified by an &amp;quot;APN&amp;quot; at the network operator. &lt;br /&gt;
&lt;br /&gt;
The program that implements PPP on Linux is [[pppd]], which we need to configure and run to get a connection. When that is working, we can configure pppd to wait until it's needed before it connects, and to disconnect if the connection becomes idle. Further, we can start pppd in the background during the boot process.&lt;br /&gt;
&lt;br /&gt;
== Configuring pppd for manual connections ==&lt;br /&gt;
&lt;br /&gt;
You'll need /etc/ppp/peers/gprs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/dev/ttySAC0 115200&lt;br /&gt;
connect /etc/ppp/gprs-connect-chat&lt;br /&gt;
crtscts &lt;br /&gt;
lock&lt;br /&gt;
hide-password&lt;br /&gt;
defaultroute&lt;br /&gt;
usepeerdns&lt;br /&gt;
disconnect /etc/ppp/gprs-disconnect-chat&lt;br /&gt;
holdoff 3&lt;br /&gt;
ipcp-accept-local&lt;br /&gt;
lcp-echo-failure 8&lt;br /&gt;
lcp-echo-interval 3&lt;br /&gt;
noauth&lt;br /&gt;
noipdefault&lt;br /&gt;
novj&lt;br /&gt;
novjccomp&lt;br /&gt;
replacedefaultroute&lt;br /&gt;
persist&lt;br /&gt;
lcp-echo-interval 3&lt;br /&gt;
lcp-echo-failure 12&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This options where mentioned before with that strange comment. Mine worked fine for me without those.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# very long timeouts (unwise?)&lt;br /&gt;
lcp-echo-interval 300&lt;br /&gt;
lcp-echo-failure 40000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depending on the APN, you may need password authentication using CHAP or PAP. You can add the following default line for &amp;quot;password-less&amp;quot; connections:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# client        server  secret                  IP addresses&lt;br /&gt;
*               *       &amp;quot;&amp;quot;                      *&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For CHAP, lines in /etc/ppp/chap-secrets are used. For PAP, the lines are in /etc/ppp/pap-secrets. The client should match the &amp;quot;user&amp;quot; option in pppd the config file (below). You can use * to mean any here, but the option user &amp;quot;&amp;quot; doesn't mean empty!&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Secrets for authentication using CHAP&lt;br /&gt;
# client        server  secret                  IP addresses&lt;br /&gt;
&amp;quot;user&amp;quot;         *       &amp;quot;password&amp;quot;                  *  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this you need the following options in /etc/ppp/peers/gprs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# username to use for authentication, should match &amp;quot;client&amp;quot; in /etc/ppp/{chap,pap}-secrets&lt;br /&gt;
user &amp;quot;user&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And you'll need /etc/ppp/gprs-connect-chat (needs &amp;quot;chmod +x&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
exec chat -v\&lt;br /&gt;
	ABORT BUSY\&lt;br /&gt;
	ABORT DELAYED\&lt;br /&gt;
	ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
	ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
	ABORT VOICE\&lt;br /&gt;
	ABORT ERROR\&lt;br /&gt;
	ABORT RINGING\&lt;br /&gt;
	TIMEOUT 3\&lt;br /&gt;
	&amp;quot;&amp;quot; ATZ\&lt;br /&gt;
	OK-\\k\\k\\k\\d+++ATH-OK ATE1\&lt;br /&gt;
	OK AT+CFUN=0\&lt;br /&gt;
	OK \\dAT+CFUN=1\&lt;br /&gt;
	ERROR AT+CPIN\?\&lt;br /&gt;
	&amp;quot;+CPIN: READY-AT+CPIN=\&amp;quot;2222\&amp;quot;-OK&amp;quot; AT\&lt;br /&gt;
	TIMEOUT 60\&lt;br /&gt;
	OK AT+COPS\&lt;br /&gt;
	OK AT+CGDCONT=1,\&amp;quot;IP\&amp;quot;,\&amp;quot;internet\&amp;quot;\&lt;br /&gt;
	OK ATD*99#\&lt;br /&gt;
	CONNECT \d\c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need to adjust the APN name &amp;quot;internet&amp;quot; in at+cgdcont line to match what your network operator provides. See below in the table &amp;quot;Some APN names for reference&amp;quot; for the right settings for your operator.&lt;br /&gt;
&lt;br /&gt;
Also good to have is /etc/ppp/gprs-disconnect-chat (needs &amp;quot;chmod +x&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
/usr/sbin/chat -v\&lt;br /&gt;
	ABORT OK\&lt;br /&gt;
	ABORT BUSY\&lt;br /&gt;
	ABORT DELAYED\&lt;br /&gt;
	ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
	ABORT &amp;quot;NO CARRIER&amp;quot;\&lt;br /&gt;
	ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
	ABORT VOICE\&lt;br /&gt;
	ABORT ERROR\&lt;br /&gt;
	ABORT RINGING\&lt;br /&gt;
	TIMEOUT 12\&lt;br /&gt;
	&amp;quot;&amp;quot; \\k\\k\\k\\d+++ATH\&lt;br /&gt;
	&amp;quot;NO CARRIER-AT-OK&amp;quot; &amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You need a proper /etc/resolv.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln -sf /var/run/resolv.conf /etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If needed put your nameserver for usb-net into /var/run/resolv.conf, not in /etc.&lt;br /&gt;
&lt;br /&gt;
=== Required fixes ===&lt;br /&gt;
&lt;br /&gt;
The image does not set a correct resolv.conf. i do so with an &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo  nameserver 192.168.0.201 &amp;gt; /var/run/resolv.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in the right place. because a post-up in /etc/network/interfaces is not supported i do that in /etc/network/if-up.d/08setupdns&lt;br /&gt;
&lt;br /&gt;
another problem is pppd's /etc/ppp/ip-down.d/92removedns which does not properly remove the link when shuting down ppp. my fix is this script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
ACTUALCONF=/var/run/resolv.conf&lt;br /&gt;
PPPCONF=/var/run/ppp/resolv.conf&lt;br /&gt;
if [ -f $PPPCONF ] ; then&lt;br /&gt;
        if [ -f $ACTUALCONF ] ; then&lt;br /&gt;
                if [ ! -h $ACTUALCONF -o ! &amp;quot;`readlink $ACTUALCONF 2&amp;gt;&amp;amp;1`&amp;quot; = &amp;quot;$PPPCONF&amp;quot; ] ; then&lt;br /&gt;
                        mv $ACTUALCONF $ACTUALCONF.ppporig&lt;br /&gt;
                fi&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        ln -sf $PPPCONF $ACTUALCONF&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting pppd ===&lt;br /&gt;
&lt;br /&gt;
Then, after initializing GSM, you should be able to initialize GPRS by `pppd call gprs`. Good luck!&lt;br /&gt;
&lt;br /&gt;
To dial in - and get verbose output on the terminal - use pppd&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pppd debug nodetach call gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The config above will establish a 'persist'ant link over gprs. The battery will run low in less than an hour. See an example for an on-demand config below.&lt;br /&gt;
&lt;br /&gt;
=== Some APN names for reference ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Country&lt;br /&gt;
! Carrier&lt;br /&gt;
! Plan&lt;br /&gt;
! APN&lt;br /&gt;
! user/password if required&lt;br /&gt;
! Working pppd scripts&lt;br /&gt;
|-&lt;br /&gt;
| Estonia || EMT || Any, behind NAT || internet.emt.ee || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Saunalahti || Any || internet.saunalahti || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Sonera   || Any, behind NAT || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Sonera   || Any, public IP  || prointernet || ||&lt;br /&gt;
|-&lt;br /&gt;
| France || SFR || 10.x.x.x? || websfr || || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || SFR || 10.x.x.x? || wapsfr&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;|| || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || Orange || ??? || orange.fr || || under tests&lt;br /&gt;
|-&lt;br /&gt;
| Germany || E-Plus || BASE (and others?) || internet.eplus.de || eplus gprs ||&lt;br /&gt;
|-&lt;br /&gt;
| Germany || T-Mobile ||  || internet.t-mobile || ||&lt;br /&gt;
|-&lt;br /&gt;
| Germany || Vodafone || Any, behind NAT || web.vodafone.de || ||&lt;br /&gt;
|-&lt;br /&gt;
| Norway || Netcom || Any || internet.netcom.no || ||&lt;br /&gt;
|-&lt;br /&gt;
| Switzerland || Swisscom || e.g. Natel Basic Liberty, behind NAT || gprs.swisscom.ch || ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || T-Mobile|| || general.t-mobile.uk || ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || Virgin || || goto.virginmobile.uk || user ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || [http://www.filesaveas.com/gprs.html other providers] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || Cingular (AT&amp;amp;T) || Less than full internet || wap.cingular || ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || T-mobile || Anything less than full internet || wap.voicestream.com || ||&lt;br /&gt;
|- &lt;br /&gt;
| USA || T-mobile || Regular internet plan || internet2.voicestream.com || || [[T-Mobile pppd scripts]]&lt;br /&gt;
|- &lt;br /&gt;
| USA || T-mobile || &amp;quot;VPN&amp;quot; internet plan || internet3.voicestream.com || ||&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[1] connected through a WAP proxy (slower, but the only way to access Vodafone live! and SFR portal)&lt;br /&gt;
&lt;br /&gt;
== Starting pppd automatically ==&lt;br /&gt;
&lt;br /&gt;
Once you have finished debugging your gprs-connect-chat and gprs options files, you may wish to automatically connect whenever needed and hang up when finished.  Make sure you understand the impact of this change to your carrier plan billing.  This is not recommended unless you have a large-use or unlimited data plan.  These scripts do NOT prompt you before connecting.&lt;br /&gt;
&lt;br /&gt;
=== On-demand connection settings ===&lt;br /&gt;
&lt;br /&gt;
Additional settings are needed if you want the actual connection to be up only while there is traffic. In the 'gprs' file above, insert the following, making sure 'nodetach' is commented out.  If 'nodetach' is on, the boot process will stop when it starts pppd. Also remove the option 'persist' mentioned above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Wait until needed before connecting&lt;br /&gt;
demand&lt;br /&gt;
&lt;br /&gt;
# Disconnect if idle for given amount of seconds&lt;br /&gt;
idle 20&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Start on boot (method 1) ===&lt;br /&gt;
&lt;br /&gt;
Add the following definition to /etc/network/interfaces:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auto ppp0&lt;br /&gt;
iface ppp0 inet ppp&lt;br /&gt;
        provider gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That should be it. Now you can use 'ifup ppp0' and 'ifdown ppp0' manually too.&lt;br /&gt;
&lt;br /&gt;
=== Start on boot (method 2) ===&lt;br /&gt;
&lt;br /&gt;
Create the following file as /etc/ppp/ppp_on_boot (needs chmod +x).  The /etc/init.d/ppp script will call it to set up the daemon.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
#&lt;br /&gt;
#   Rename this file to ppp_on_boot and pppd will be fired up as&lt;br /&gt;
#   soon as the system comes up, connecting to `provider'.&lt;br /&gt;
#&lt;br /&gt;
#   If you also make this file executable, and replace the first line&lt;br /&gt;
#   with just &amp;quot;#!/bin/sh&amp;quot;, the commands below will be executed instead.&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# The location of the ppp daemon itself (shouldn't need to be changed)&lt;br /&gt;
PPPD=/usr/sbin/pppd&lt;br /&gt;
&lt;br /&gt;
# The default provider to connect to&lt;br /&gt;
$PPPD call gprs&lt;br /&gt;
&lt;br /&gt;
# Additional connections, which would just use settings from&lt;br /&gt;
# /etc/ppp/options.&amp;lt;tty&amp;gt;&lt;br /&gt;
#$PPPD ttyS0&lt;br /&gt;
#$PPPD ttyS1&lt;br /&gt;
#$PPPD ttyS2&lt;br /&gt;
#$PPPD ttyS3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, you need to add the /etc/init.d/ppp script to the init process by creating symbolic links from the appropriate directories.  I chose the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/rc0.d/K25ppp&lt;br /&gt;
/etc/rc1.d/K45ppp&lt;br /&gt;
/etc/rc2.d/S45ppp&lt;br /&gt;
/etc/rc3.d/S45ppp&lt;br /&gt;
/etc/rc4.d/S45ppp&lt;br /&gt;
/etc/rc5.d/S45ppp&lt;br /&gt;
/etc/rc6.d/K25ppp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[pppd]]&lt;br /&gt;
* [[Manually using GSM]]&lt;br /&gt;
* [[Manually using Bluetooth]]&lt;br /&gt;
&lt;br /&gt;
{{Languages|Manually_using_GPRS}}&lt;br /&gt;
[[Category:Documentation]]&lt;br /&gt;
[[Category:Developer software]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Manually_using_GPRS</id>
		<title>Manually using GPRS</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Manually_using_GPRS"/>
				<updated>2008-03-08T14:50:27Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* added Virgin APN */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;You need to have [[GSM]] parts already initialized, with modem logged in to the network, for this to work. It is best to test it by doing test call. The GPRS connection is made using the PPP protocol to a server identified by an &amp;quot;APN&amp;quot; at the network operator. &lt;br /&gt;
&lt;br /&gt;
The program that implements PPP on Linux is [[pppd]], which we need to configure and run to get a connection. When that is working, we can configure pppd to wait until it's needed before it connects, and to disconnect if the connection becomes idle. Further, we can start pppd in the background during the boot process.&lt;br /&gt;
&lt;br /&gt;
== Configuring pppd for manual connections ==&lt;br /&gt;
&lt;br /&gt;
You'll need /etc/ppp/peers/gprs:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/dev/ttySAC0 115200&lt;br /&gt;
connect /etc/ppp/gprs-connect-chat&lt;br /&gt;
crtscts &lt;br /&gt;
lock&lt;br /&gt;
hide-password&lt;br /&gt;
defaultroute&lt;br /&gt;
usepeerdns&lt;br /&gt;
disconnect /etc/ppp/gprs-disconnect-chat&lt;br /&gt;
holdoff 3&lt;br /&gt;
ipcp-accept-local&lt;br /&gt;
lcp-echo-failure 8&lt;br /&gt;
lcp-echo-interval 3&lt;br /&gt;
noauth&lt;br /&gt;
noipdefault&lt;br /&gt;
novj&lt;br /&gt;
novjccomp&lt;br /&gt;
replacedefaultroute&lt;br /&gt;
persist&lt;br /&gt;
lcp-echo-interval 3&lt;br /&gt;
lcp-echo-failure 12&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This options where mentioned before with that strange comment. Mine worked fine for me without those.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# very long timeouts (unwise?)&lt;br /&gt;
lcp-echo-interval 300&lt;br /&gt;
lcp-echo-failure 40000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Depending on the APN, you may need password authentication using CHAP or PAP. You can add the following default line for &amp;quot;password-less&amp;quot; connections:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# client        server  secret                  IP addresses&lt;br /&gt;
*               *       &amp;quot;&amp;quot;                      *&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For CHAP, lines in /etc/ppp/chap-secrets are used. For PAP, the lines are in /etc/ppp/pap-secrets. The client should match the &amp;quot;user&amp;quot; option in pppd the config file (below). You can use * to mean any here, but the option user &amp;quot;&amp;quot; doesn't mean empty!&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# Secrets for authentication using CHAP&lt;br /&gt;
# client        server  secret                  IP addresses&lt;br /&gt;
&amp;quot;user&amp;quot;         *       &amp;quot;password&amp;quot;                  *  &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For this you need the following options in /etc/ppp/peers/gprs:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
# username to use for authentication, should match &amp;quot;client&amp;quot; in /etc/ppp/{chap,pap}-secrets&lt;br /&gt;
user &amp;quot;user&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And you'll need /etc/ppp/gprs-connect-chat (needs &amp;quot;chmod +x&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
exec chat -v\&lt;br /&gt;
	ABORT BUSY\&lt;br /&gt;
	ABORT DELAYED\&lt;br /&gt;
	ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
	ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
	ABORT VOICE\&lt;br /&gt;
	ABORT ERROR\&lt;br /&gt;
	ABORT RINGING\&lt;br /&gt;
	TIMEOUT 3\&lt;br /&gt;
	&amp;quot;&amp;quot; ATZ\&lt;br /&gt;
	OK-\\k\\k\\k\\d+++ATH-OK ATE1\&lt;br /&gt;
	OK AT+CFUN=0\&lt;br /&gt;
	OK \\dAT+CFUN=1\&lt;br /&gt;
	ERROR AT+CPIN\?\&lt;br /&gt;
	&amp;quot;+CPIN: READY-AT+CPIN=\&amp;quot;2222\&amp;quot;-OK&amp;quot; AT\&lt;br /&gt;
	TIMEOUT 60\&lt;br /&gt;
	OK AT+COPS\&lt;br /&gt;
	OK AT+CGDCONT=1,\&amp;quot;IP\&amp;quot;,\&amp;quot;internet\&amp;quot;\&lt;br /&gt;
	OK ATD*99#\&lt;br /&gt;
	CONNECT \d\c&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You will need to adjust the APN name &amp;quot;internet&amp;quot; in at+cgdcont line to match what your network operator provides. See below in the table &amp;quot;Some APN names for reference&amp;quot; for the right settings for your operator.&lt;br /&gt;
&lt;br /&gt;
Also good to have is /etc/ppp/gprs-disconnect-chat (needs &amp;quot;chmod +x&amp;quot;):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh -e&lt;br /&gt;
/usr/sbin/chat -v\&lt;br /&gt;
	ABORT OK\&lt;br /&gt;
	ABORT BUSY\&lt;br /&gt;
	ABORT DELAYED\&lt;br /&gt;
	ABORT &amp;quot;NO ANSWER&amp;quot;\&lt;br /&gt;
	ABORT &amp;quot;NO CARRIER&amp;quot;\&lt;br /&gt;
	ABORT &amp;quot;NO DIALTONE&amp;quot;\&lt;br /&gt;
	ABORT VOICE\&lt;br /&gt;
	ABORT ERROR\&lt;br /&gt;
	ABORT RINGING\&lt;br /&gt;
	TIMEOUT 12\&lt;br /&gt;
	&amp;quot;&amp;quot; \\k\\k\\k\\d+++ATH\&lt;br /&gt;
	&amp;quot;NO CARRIER-AT-OK&amp;quot; &amp;quot;&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You need a proper /etc/resolv.conf:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ln -sf /var/run/resolv.conf /etc&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If needed put your nameserver for usb-net into /var/run/resolv.conf, not in /etc.&lt;br /&gt;
&lt;br /&gt;
=== Required fixes ===&lt;br /&gt;
&lt;br /&gt;
The image does not set a correct resolv.conf. i do so with an &lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo  nameserver 192.168.0.201 &amp;gt; /var/run/resolv.conf&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
in the right place. because a post-up in /etc/network/interfaces is not supported i do that in /etc/network/if-up.d/08setupdns&lt;br /&gt;
&lt;br /&gt;
another problem is pppd's /etc/ppp/ip-down.d/92removedns which does not properly remove the link when shuting down ppp. my fix is this script:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
ACTUALCONF=/var/run/resolv.conf&lt;br /&gt;
PPPCONF=/var/run/ppp/resolv.conf&lt;br /&gt;
if [ -f $PPPCONF ] ; then&lt;br /&gt;
        if [ -f $ACTUALCONF ] ; then&lt;br /&gt;
                if [ ! -h $ACTUALCONF -o ! &amp;quot;`readlink $ACTUALCONF 2&amp;gt;&amp;amp;1`&amp;quot; = &amp;quot;$PPPCONF&amp;quot; ] ; then&lt;br /&gt;
                        mv $ACTUALCONF $ACTUALCONF.ppporig&lt;br /&gt;
                fi&lt;br /&gt;
        fi&lt;br /&gt;
&lt;br /&gt;
        ln -sf $PPPCONF $ACTUALCONF&lt;br /&gt;
fi&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Starting pppd ===&lt;br /&gt;
&lt;br /&gt;
Then, after initializing GSM, you should be able to initialize GPRS by `pppd call gprs`. Good luck!&lt;br /&gt;
&lt;br /&gt;
To dial in - and get verbose output on the terminal - use pppd&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
pppd debug nodetach call gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The config above will establish a 'persist'ant link over gprs. The battery will run low in less than an hour. See an example for an on-demand config below.&lt;br /&gt;
&lt;br /&gt;
=== Some APN names for reference ===&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Country&lt;br /&gt;
! Carrier&lt;br /&gt;
! Plan&lt;br /&gt;
! APN&lt;br /&gt;
! user/password if required&lt;br /&gt;
! Working pppd scripts&lt;br /&gt;
|-&lt;br /&gt;
| Estonia || EMT || Any, behind NAT || internet.emt.ee || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Saunalahti || Any || internet.saunalahti || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Sonera   || Any, behind NAT || internet || ||&lt;br /&gt;
|-&lt;br /&gt;
| Finland || Sonera   || Any, public IP  || prointernet || ||&lt;br /&gt;
|-&lt;br /&gt;
| France || SFR || 10.x.x.x? || websfr || || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || SFR || 10.x.x.x? || wapsfr&amp;lt;sup&amp;gt;[1]&amp;lt;/sup&amp;gt;|| || under tests&lt;br /&gt;
|-&lt;br /&gt;
| France || Orange || ??? || orange.fr || || under tests&lt;br /&gt;
|-&lt;br /&gt;
| Germany || E-Plus || BASE (and others?) || internet.eplus.de || eplus gprs ||&lt;br /&gt;
|-&lt;br /&gt;
| Germany || T-Mobile ||  || internet.t-mobile || ||&lt;br /&gt;
|-&lt;br /&gt;
| Germany || Vodafone || Any, behind NAT || web.vodafone.de || ||&lt;br /&gt;
|-&lt;br /&gt;
| Norway || Netcom || Any || internet.netcom.no || ||&lt;br /&gt;
|-&lt;br /&gt;
| Switzerland || Swisscom || e.g. Natel Basic Liberty, behind NAT || gprs.swisscom.ch || ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || T-Mobile|| || general.t-mobile.uk || ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || Virgin || || goto.virginmobile.uk || ||&lt;br /&gt;
|-&lt;br /&gt;
| UK || [http://www.filesaveas.com/gprs.html other providers] || || || ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || Cingular (AT&amp;amp;T) || Less than full internet || wap.cingular || ||&lt;br /&gt;
|-&lt;br /&gt;
| USA || T-mobile || Anything less than full internet || wap.voicestream.com || ||&lt;br /&gt;
|- &lt;br /&gt;
| USA || T-mobile || Regular internet plan || internet2.voicestream.com || || [[T-Mobile pppd scripts]]&lt;br /&gt;
|- &lt;br /&gt;
| USA || T-mobile || &amp;quot;VPN&amp;quot; internet plan || internet3.voicestream.com || ||&lt;br /&gt;
|- &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[1] connected through a WAP proxy (slower, but the only way to access Vodafone live! and SFR portal)&lt;br /&gt;
&lt;br /&gt;
== Starting pppd automatically ==&lt;br /&gt;
&lt;br /&gt;
Once you have finished debugging your gprs-connect-chat and gprs options files, you may wish to automatically connect whenever needed and hang up when finished.  Make sure you understand the impact of this change to your carrier plan billing.  This is not recommended unless you have a large-use or unlimited data plan.  These scripts do NOT prompt you before connecting.&lt;br /&gt;
&lt;br /&gt;
=== On-demand connection settings ===&lt;br /&gt;
&lt;br /&gt;
Additional settings are needed if you want the actual connection to be up only while there is traffic. In the 'gprs' file above, insert the following, making sure 'nodetach' is commented out.  If 'nodetach' is on, the boot process will stop when it starts pppd. Also remove the option 'persist' mentioned above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Wait until needed before connecting&lt;br /&gt;
demand&lt;br /&gt;
&lt;br /&gt;
# Disconnect if idle for given amount of seconds&lt;br /&gt;
idle 20&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Start on boot (method 1) ===&lt;br /&gt;
&lt;br /&gt;
Add the following definition to /etc/network/interfaces:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
auto ppp0&lt;br /&gt;
iface ppp0 inet ppp&lt;br /&gt;
        provider gprs&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That should be it. Now you can use 'ifup ppp0' and 'ifdown ppp0' manually too.&lt;br /&gt;
&lt;br /&gt;
=== Start on boot (method 2) ===&lt;br /&gt;
&lt;br /&gt;
Create the following file as /etc/ppp/ppp_on_boot (needs chmod +x).  The /etc/init.d/ppp script will call it to set up the daemon.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
#&lt;br /&gt;
#   Rename this file to ppp_on_boot and pppd will be fired up as&lt;br /&gt;
#   soon as the system comes up, connecting to `provider'.&lt;br /&gt;
#&lt;br /&gt;
#   If you also make this file executable, and replace the first line&lt;br /&gt;
#   with just &amp;quot;#!/bin/sh&amp;quot;, the commands below will be executed instead.&lt;br /&gt;
#&lt;br /&gt;
&lt;br /&gt;
# The location of the ppp daemon itself (shouldn't need to be changed)&lt;br /&gt;
PPPD=/usr/sbin/pppd&lt;br /&gt;
&lt;br /&gt;
# The default provider to connect to&lt;br /&gt;
$PPPD call gprs&lt;br /&gt;
&lt;br /&gt;
# Additional connections, which would just use settings from&lt;br /&gt;
# /etc/ppp/options.&amp;lt;tty&amp;gt;&lt;br /&gt;
#$PPPD ttyS0&lt;br /&gt;
#$PPPD ttyS1&lt;br /&gt;
#$PPPD ttyS2&lt;br /&gt;
#$PPPD ttyS3&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Finally, you need to add the /etc/init.d/ppp script to the init process by creating symbolic links from the appropriate directories.  I chose the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
/etc/rc0.d/K25ppp&lt;br /&gt;
/etc/rc1.d/K45ppp&lt;br /&gt;
/etc/rc2.d/S45ppp&lt;br /&gt;
/etc/rc3.d/S45ppp&lt;br /&gt;
/etc/rc4.d/S45ppp&lt;br /&gt;
/etc/rc5.d/S45ppp&lt;br /&gt;
/etc/rc6.d/K25ppp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
* [[pppd]]&lt;br /&gt;
* [[Manually using GSM]]&lt;br /&gt;
* [[Manually using Bluetooth]]&lt;br /&gt;
&lt;br /&gt;
{{Languages|Manually_using_GPRS}}&lt;br /&gt;
[[Category:Documentation]]&lt;br /&gt;
[[Category:Developer software]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Java</id>
		<title>Java</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Java"/>
				<updated>2008-02-29T17:16:18Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* Typical Java programmers, can't even count... */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
There are three main types of Java platforms that can be made available on OpenMoko devices such as the Neo1973.&lt;br /&gt;
* Java Standard Edition (J2SE)&lt;br /&gt;
* Java Micro Edition (J2ME)&lt;br /&gt;
* Hybrid Solutions&lt;br /&gt;
&lt;br /&gt;
=== Java Standard Edition (J2SE) ===&lt;br /&gt;
&lt;br /&gt;
This is the incarnation of the desktop version of Sun's Java platform. The majority of its codebase was recently opensourced under the GPL+exception license; the closed bits are quickly being replaced by unencumbered alternatives.&lt;br /&gt;
&lt;br /&gt;
When people talk of Java applications, they're usually referring to software targetted to this platform. Application memory footprints on desktop applications usually include the VM and base libraries into account, rather than just the application itself (this isn't the case in J2ME).&lt;br /&gt;
&lt;br /&gt;
=== Java Micro Edition (J2ME) ===&lt;br /&gt;
&lt;br /&gt;
This is the 'lite' edition of the Java platform. Modular and optimised for embedded devices, this platform provides a much more restricted set of language and library features.&lt;br /&gt;
&lt;br /&gt;
J2ME applications are usually referred to as MIDlets (Sun's name for these applications).&lt;br /&gt;
&lt;br /&gt;
When talking about games, and mobile phone games in general, people are normally referring to this platform. J2ME games and applications are expected to function within the strict memory capabilities of the corresponding platform (application descriptors allow the runtime environment to know for which they are intended).&lt;br /&gt;
&lt;br /&gt;
Memory footprints of MIDlets written for J2ME are typically quoted exclusive of the VM or base libraries - this is because they are often delivered to Java-enabled devices over the network. Footprint sizes average 10-64KB, with recent devices supporting up to 1MB MIDlets.&lt;br /&gt;
&lt;br /&gt;
MIDlet are delivered as two files:&lt;br /&gt;
* a .jad MIDlet metadata descriptor&lt;br /&gt;
* a .jar MIDlet container, containing executable bytecode and any required resources&lt;br /&gt;
&lt;br /&gt;
=== Hybrid Solutions ===&lt;br /&gt;
&lt;br /&gt;
Other approaches include mixing and matching J2SE and J2ME in various ways. Standard methods include providing a compatibility layer on top of J2SE (like [http://www.microemu.org/ microemu]) to allow it to run J2ME and expanding J2ME to provide more J2SE features.&lt;br /&gt;
&lt;br /&gt;
Another possible approach would be to have every application compiled to native with gcj when installed and then run without a JVM, with a much faster startup. This may be risky and needs a specialized installer.&lt;br /&gt;
&lt;br /&gt;
== Implementations ==&lt;br /&gt;
&lt;br /&gt;
=== J2SE implementations ===&lt;br /&gt;
* [http://www.cacaojvm.org/ Cacao] is a Java Virtual Machine (JVM) which uses Just-In-Time (JIT) compilation to execute Java methods natively.&lt;br /&gt;
* [http://jamvm.sourceforge.net/ JamVM] is a JVM with a very small footprint (&amp;lt;160k).&lt;br /&gt;
* [http://en.wikipedia.org/wiki/Icedtea Icedtea] is basically OpenJDK with some improvements&lt;br /&gt;
&lt;br /&gt;
=== J2ME implementations ===&lt;br /&gt;
* [https://phoneme.dev.java.net/ PhoneME] is basically the code base of Sun's commercial Java ME implementation without those components that Sun can't --or won't-- release to the open source community. It is licensed under GPL2. There are actually two versions of PhoneME:&lt;br /&gt;
*;PhoneME Feature: is an implementation of the CLDC (Connected Limited Device Configuration) and MIDP2 (Mobile Information Device Profile) as is common on feature phones (e.g. 'normal', non-smart phones).&lt;br /&gt;
*;PhoneME Advanced: is an implementation of the more complex CDC (Connected Device Configuration), designed for more advanced handsets.&lt;br /&gt;
* [http://midpath.thenesis.org MIDPath] is a Java library which provides a MIDP2 implementation and can be used together with the CLDC version of the Cacao to provide an alternative implementation of CLDC/MIDP.&lt;br /&gt;
* [http://www.microemu.org/ Microemu]: a J2ME emulator that runs on top of J2SE. If the overhead is small enough, it should be the 'cheapest' solution.&lt;br /&gt;
&lt;br /&gt;
== Status on OpenMoko ==&lt;br /&gt;
[http://java-pkg.projects.openmoko.org/ Java-pkg] is a [http://projects.openmoko.org/ projects.openmoko.org] [http://projects.openmoko.org/projects/java-pkg/ project] whose aim it is to &amp;quot;Get Java going on OpenMoko, and once it's running, maintain it. There are two sub-projects, one for JME and one for JSE. Priority is currently given to JME CDC profile.&amp;quot; There is currently a work-in-progress recipe for PhoneME Advanced in their SVN, which doesn't fully build, as well as a working recipe for PhoneME Feature, which only works directly on the Neo1973 framebuffer (e.g. you'll have to stop Xfbdev).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://www.jalimo.org Jalimo] is a project, to feature the integration of free Java-like implementations for free platforms. They already have [http://www.jalimo.org/wiki/doku.php?id=packages#openmoko_2007.2 packages for Openmoko 2007.2], covering Cacao, GNU Classpath (with Swing support), SWT and the java-gnome bindings, which allows writing GTK+ applications in Java. Build recipes are part of OpenEmbedded and maintained therein.&lt;br /&gt;
&lt;br /&gt;
== Licensing ==&lt;br /&gt;
&lt;br /&gt;
=== VM Licensing ===&lt;br /&gt;
&lt;br /&gt;
=== MIDlet Licensing ===&lt;br /&gt;
&lt;br /&gt;
== Links ==&lt;br /&gt;
&lt;br /&gt;
Google should be your first port of call for most things Java as it would be impossible to give a comprehensive list of all the useful information out there. That being said, below is a selected list of further information resources.&lt;br /&gt;
&lt;br /&gt;
=== J2SE Links ===&lt;br /&gt;
&lt;br /&gt;
In 2006/7 Sun [http://www.deviceforge.com/news/NS9280947932.html acquired the assets of Savaje], which included a port of J2SE to ARM Linux. This was used to build the &amp;quot;JavaFX&amp;quot; modules and, in fact, it runs on the Neo1973 already. They used it to show JavaFX at the JavaOne 2007: http://java.sun.com/javaone/sf/media_shell.jsp?id=193609 See also http://blogs.sun.com/jonathan/entry/when_not_where&lt;br /&gt;
&lt;br /&gt;
=== J2ME Links ===&lt;br /&gt;
&lt;br /&gt;
[[Category:Software]]&lt;br /&gt;
[[Category:Applications]]&lt;br /&gt;
[[Category:Developer software]]&lt;br /&gt;
[[Category:Unimplemented]]&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Building_a_hello_world_application</id>
		<title>Building a hello world application</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Building_a_hello_world_application"/>
				<updated>2008-02-09T08:17:53Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* corrected export line  - make it match what is used in the compile */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Preparation ===&lt;br /&gt;
This guide assumes that you have performed the steps in [[Building_OpenMoko_from_scratch]]&lt;br /&gt;
&lt;br /&gt;
=== The commandline program ===&lt;br /&gt;
Store the following more or less standard hello world code in hello.c&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 int main()&lt;br /&gt;
 {&lt;br /&gt;
   printf (&amp;quot;Hello World\n&amp;quot;);&lt;br /&gt;
   return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
=== Compiling it the ''wrong'' / easy way ===&lt;br /&gt;
Assuming your current working directory is '''/home/moko''', and that you stored the code in '''/home/moko/hello.c''' it should now be possible to compile the application using&lt;br /&gt;
 ./build/tmp/cross/arm-linux/bin/gcc -o hello hello.c&lt;br /&gt;
&lt;br /&gt;
==== Testing it ====&lt;br /&gt;
Assuming you have followed [[OpenMoko_under_QEMU#Setting_up_USB_connection|Setting up USB connection]] and you have a working network connection to either a qemu Neo or a real Neo.&lt;br /&gt;
 scp hello root@192.168.0.202:/tmp/&lt;br /&gt;
 ssh root@192.168.0.202 /tmp/hello&lt;br /&gt;
This sequence of commands ought to give you a nice ''Hello World'', btw. the default root password is blank, just press return.&lt;br /&gt;
&lt;br /&gt;
=== GDK the Wrong / Easy Way ===&lt;br /&gt;
Building a GDK application the wrong way is slightly more complex, but is still fun to try.  It requires using pkg-config to specify including and linking with the ARM header files and libraries.&lt;br /&gt;
&lt;br /&gt;
Given the following program as main.c:&lt;br /&gt;
&lt;br /&gt;
 #include &amp;lt;gtk/gtk.h&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 gchar *hello = &amp;quot;Howdy&amp;quot;;&lt;br /&gt;
 gchar *world = &amp;quot;World&amp;quot;;&lt;br /&gt;
 GtkWidget *label;&lt;br /&gt;
 gchar *labeltext;&lt;br /&gt;
 &lt;br /&gt;
 void buttoncb(GtkWidget *widget, gpointer data)&lt;br /&gt;
 {&lt;br /&gt;
 if (labeltext == hello)&lt;br /&gt;
    {&lt;br /&gt;
    labeltext = world;&lt;br /&gt;
    gtk_label_set_text(GTK_LABEL(label), labeltext);&lt;br /&gt;
    }&lt;br /&gt;
 else if (labeltext == world)&lt;br /&gt;
    gtk_main_quit();&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 int main(int argc, char *argv[])&lt;br /&gt;
 {&lt;br /&gt;
 GtkWidget *window;&lt;br /&gt;
 GtkWidget *button;&lt;br /&gt;
 &lt;br /&gt;
 gtk_init(&amp;amp;argc, &amp;amp;argv);&lt;br /&gt;
 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);&lt;br /&gt;
 button = gtk_button_new();&lt;br /&gt;
 labeltext = hello;&lt;br /&gt;
 label = gtk_label_new(labeltext);&lt;br /&gt;
 gtk_container_add(GTK_CONTAINER(button), label);&lt;br /&gt;
 g_signal_connect(G_OBJECT(button), &amp;quot;clicked&amp;quot;, G_CALLBACK(buttoncb), NULL);&lt;br /&gt;
 gtk_container_add(GTK_CONTAINER(window), button);&lt;br /&gt;
 gtk_widget_show_all(window);&lt;br /&gt;
 gtk_main();&lt;br /&gt;
 &lt;br /&gt;
 return 0;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
You must first point pkg-config to the proper directory:&lt;br /&gt;
&lt;br /&gt;
 export PKG_CONFIG_PATH=/home/username/moko/build/tmp/staging/arm-linux/lib/pkgconfig&lt;br /&gt;
&lt;br /&gt;
And set up an environment variable to make things easier:&lt;br /&gt;
&lt;br /&gt;
 export OMDIR=/home/username/moko&lt;br /&gt;
&lt;br /&gt;
The compile/link line is rather long - you will only want to do this once before you decide to create a shell script or make file:&lt;br /&gt;
&lt;br /&gt;
 $OMDIR/build/tmp/cross/arm-angstrom-linux-gnueabi/bin/gcc -L $OMDIR/build/tmp/staging/arm-angstrom-linux-gnueabi/lib/ \&lt;br /&gt;
                    -Wl, rpath-link, $OMDIR/build/tmp/staging/arm-angstrom-linux-gnueabi/lib/ -Wl, -O1 -g -o hw main.c \&lt;br /&gt;
                    '$OMDIR/build/tmp/staging/i686-linux/bin/pkg-config --cflags --libs openmoko-libs gtk+-2.0'&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Then copy and run as in the original hello world command line program above.&lt;br /&gt;
&lt;br /&gt;
===== Why was it the ''wrong'' way? =====&lt;br /&gt;
OpenMoko uses [[http://www.openembedded.org/ OpenEmbedded]] and they use bitbake when building stuff, but at least you now know that you can cross compile for OpenMoko.&lt;br /&gt;
&lt;br /&gt;
=== Compiling it using bitbake ===&lt;br /&gt;
If you set your enviroment (I created a small script to do this, you could also add it to you .bashrc)&lt;br /&gt;
 export OMDIR=/home/username/moko&lt;br /&gt;
 export BBPATH=$OMDIR/build:$OMDIR/openmoko/trunk/oe:$OMDIR/openembedded&lt;br /&gt;
You should be capable of&lt;br /&gt;
 cd $OMDIR/build&lt;br /&gt;
 bitbake nano&lt;br /&gt;
This should auto-magically fetch the recipe for baking nano and baking it. This results in some ipk packages being created in $OMDIR/build/tmp/deploy/ipk/armv4t/ &lt;br /&gt;
''According to [[http://www.openembedded.org/wiki/UsefulTargets UsefulTargets | OpenEmbedded]] there is a helloworld target, however on my machine it fails with 'ERROR: Nothing provides dependency helloworld' ''&amp;lt;br&amp;gt;&lt;br /&gt;
While this hasn't brought us closer to actually baking a helloworld it demonstrates what we should eventually be capable of doing for our new and revolutionary software for OpenMoko. &lt;br /&gt;
==== An OpenEmbedded guide to creating a hello world ====&lt;br /&gt;
OpenEmbedded has a nice [[http://www.openembedded.org/user-manual&amp;amp;dpage=recipes_examples Wiki page]] on creating a hello world, I highly recommend it.&lt;br /&gt;
&lt;br /&gt;
==== Creating an ipk package ====&lt;br /&gt;
To be written ''(Perhaps this is done by the  do_install() function)''&lt;br /&gt;
&lt;br /&gt;
{{Languages|Building_a_hello_world_application}}&lt;br /&gt;
[[Category:Software]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Talk:Problems_of_typical_%22closed%22_phones</id>
		<title>Talk:Problems of typical &quot;closed&quot; phones</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Talk:Problems_of_typical_%22closed%22_phones"/>
				<updated>2008-02-03T20:33:46Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* Clarification please */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Can you clarify please, many of the points you make are carrier issues not handset issues. Are you speaking from a US perspective, your initial reasons suggest this. If so please bear in mind that this is a worldwide device. &lt;br /&gt;
&lt;br /&gt;
Many carrier will forbid the use of voip software regardless of wether you can run it on your phone or not, if they catch you using it they'll cut you off - the GTA01/02 are not going to help you there at all.&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Problems_of_typical_%22closed%22_phones</id>
		<title>Problems of typical &quot;closed&quot; phones</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Problems_of_typical_%22closed%22_phones"/>
				<updated>2008-02-03T20:22:28Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* Removed 'unlocking is illegal' - it might be where you are from but not round here and most other countries */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a list of &amp;quot;locked&amp;quot; features on &amp;quot;closed&amp;quot; mobile phones listed by members of the Openmoko community.     Buying an [[Openmoko]] phone will free you from these problems!&lt;br /&gt;
&lt;br /&gt;
 {| border=&amp;quot;1&amp;quot;&lt;br /&gt;
 !Manufacturer / Model / Operating System / Operator&lt;br /&gt;
 !Locked feature&lt;br /&gt;
 !Comments&lt;br /&gt;
 |-&lt;br /&gt;
 |Many / Many / Many / Many&lt;br /&gt;
 |Handset will only operate with SIM registered to a particular operator&lt;br /&gt;
 |Can be &amp;quot;unlocked&amp;quot; but takes some effort or a small fee to someone providing this service.&lt;br /&gt;
 |-&lt;br /&gt;
 |O2 / Orbit / Windows Mobile 6 / O2&lt;br /&gt;
 |Handset includes GPS but I bought the cheaper tarrif and this does not come with gps software.   GPS capability has been locked by the operator and i cannot use it even with free applications like Google Maps for mobile which can use cell tower interpolation or GPS to provide location info&lt;br /&gt;
 | O2 orbit = HTC Touch (i think)&lt;br /&gt;
 |-&lt;br /&gt;
 |Many / Many / Many / Many&lt;br /&gt;
 |Operators do not allow an Internet Messaging application to be installed that could use GPRS (for those with cheap data plans) or Wifi to communicate with others.    This is presumably because they are scared of losing SMS revenue.&lt;br /&gt;
 |&lt;br /&gt;
 |-&lt;br /&gt;
 |Many / Many / Many / Many&lt;br /&gt;
 |VOIP software to allow phone calls over the IP network is not allowed onto &amp;quot;closed&amp;quot; phones by most operators.   &lt;br /&gt;
 |Cheap phone calls to other VOIP enabled people are denied to you at locations where you have WiFi available&lt;br /&gt;
 |-&lt;br /&gt;
 |Please add your example here&lt;br /&gt;
 |Your locked feature here&lt;br /&gt;
 |Your comments here&lt;br /&gt;
 |-&lt;br /&gt;
 |Please add your example here&lt;br /&gt;
 |Your locked feature here&lt;br /&gt;
 |Your comments here&lt;br /&gt;
 |-&lt;br /&gt;
 |Please add your example here&lt;br /&gt;
 |Your locked feature here&lt;br /&gt;
 |Your comments here&lt;br /&gt;
 |-&lt;br /&gt;
 |Please add your example here&lt;br /&gt;
 |Your locked feature here&lt;br /&gt;
 |Your comments here&lt;br /&gt;
 |-&lt;br /&gt;
 |Please add your example here&lt;br /&gt;
 |Your locked feature here&lt;br /&gt;
 |Your comments here&lt;br /&gt;
 |-&lt;br /&gt;
 |Please add your example here&lt;br /&gt;
 |Your locked feature here&lt;br /&gt;
 |Your comments here&lt;br /&gt;
 |-&lt;br /&gt;
 |Please add your example here&lt;br /&gt;
 |Your locked feature here&lt;br /&gt;
 |Your comments here&lt;br /&gt;
 |-&lt;br /&gt;
 |Please add your example here&lt;br /&gt;
 |Your locked feature here&lt;br /&gt;
 |Your comments here&lt;br /&gt;
 |-&lt;br /&gt;
 |Please add your example here&lt;br /&gt;
 |Your locked feature here&lt;br /&gt;
 |Your comments here&lt;br /&gt;
 |-&lt;br /&gt;
 |Please add your example here&lt;br /&gt;
 |Your locked feature here&lt;br /&gt;
 |Your comments here&lt;br /&gt;
 |-&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{{Languages|Neo1973: GTA01Bv4 versus GTA02 comparison}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Neo1973 Phase 1 related]]&lt;br /&gt;
[[Category:Neo1973 Phase 2 related]]&lt;br /&gt;
[[Category:Information]]&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Booting_the_Neo_FreeRunner_from_SD_via_U-Boot</id>
		<title>Booting the Neo FreeRunner from SD via U-Boot</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Booting_the_Neo_FreeRunner_from_SD_via_U-Boot"/>
				<updated>2007-11-12T09:03:42Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* note about bad uboots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Here are the steps described to boot your system from an SD card.&lt;br /&gt;
&lt;br /&gt;
{| cellspacing=&amp;quot;5&amp;quot; cellpadding=&amp;quot;0&amp;quot; style=&amp;quot;padding: 2%; margin:0em 0em 1em 0em; border:1px solid #F9D163; background:#FCE9B4; width:100%&amp;quot; &lt;br /&gt;
| &lt;br /&gt;
Newer versions of u-boot don't work properly for booting from SD card. [http://buildhost.automated.it/u-boot-good-for-sd-boot-r13_0_2632_0.bin This one works], but as ever be careful when flashing u-boot as you can brick your device. &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Step 1: Change your kernel settings ===&lt;br /&gt;
&lt;br /&gt;
Kernel building is supposed to be done through OpenEmbedded. If you use the MokoMakefile open up $OMDIR/openmoko/trunk/oe/packages/linux/linux-gta01/defconfig-2.6.21.6-fic-gta01. If you are building OM-2007.2 open $OEDIR/openembedded/packages/linux/linux-openmoko/defconfig-2.6.22.5-fic-gta01. (''Note that the kernel version may change in future versions.'')&lt;br /&gt;
&lt;br /&gt;
Now find the line saying:&lt;br /&gt;
&lt;br /&gt;
 CONFIG_MMC_S3C=m&lt;br /&gt;
&lt;br /&gt;
and change it to:&lt;br /&gt;
&lt;br /&gt;
 CONFIG_MMC_S3C=y&lt;br /&gt;
&lt;br /&gt;
If you want to use an ext2 file system on the SD, also find the line saying:&lt;br /&gt;
&lt;br /&gt;
 CONFIG_EXT2_FS=m&lt;br /&gt;
&lt;br /&gt;
and change it to:&lt;br /&gt;
&lt;br /&gt;
 CONFIG_EXT2_FS=y&lt;br /&gt;
&lt;br /&gt;
If you're using MokoMakfile, you can clean out your last kernel build (forcing a new build) by running:&lt;br /&gt;
&lt;br /&gt;
 make clean-package-linux-openmoko&lt;br /&gt;
&lt;br /&gt;
=== Step 2: Building a tarfile distribution ===&lt;br /&gt;
&lt;br /&gt;
If you are building OM-2007.2 you need to add &amp;quot;tar&amp;quot; to the image types in your ''local.conf'':&lt;br /&gt;
&lt;br /&gt;
 IMAGE_FSTYPES = &amp;quot;jffs2 tar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
After building a new image by issuing ''bitbake openmoko-devel-image'' (or ''make openmoko-devel-image'' if you are using MokoMakefile) there will be a ''OpenMoko-....tar'' in the deploy directory. &lt;br /&gt;
&lt;br /&gt;
=== Step 3: Populate SD card ===&lt;br /&gt;
&lt;br /&gt;
Format partition 1 as ext3 (or better ext2 if enabled, see above). Mount your SD card somewhere and put your image on it:&lt;br /&gt;
&lt;br /&gt;
 mount /dev/sda1 /mnt/moko&lt;br /&gt;
 tar -C /mnt/moko/ -xvf openmoko-devel-image-fic-gta01-20070313022035.rootfs.tar&lt;br /&gt;
&lt;br /&gt;
Now we also want the kernel on there. In OM-2007.2 the last built kernel gets a special soft-link. Therefore you can copy it by doing:&lt;br /&gt;
 cp uImage-fic-gta01-latest.bin /mnt/moko/boot/uImage&lt;br /&gt;
&lt;br /&gt;
=== Step 3: Add uboot boot entry ===&lt;br /&gt;
&lt;br /&gt;
On my Phase-1 Neo the boot menu entry existed already. If yours is missing it follow those instructions: Start uboot in bootmenu mode (= hold AUX while powering on) and add the following entry via serial console: (See  [[Bootloader]] section on how to access an bootloader).&lt;br /&gt;
&lt;br /&gt;
 GTA01Bv4 # setenv menu_4 Boot from SD: setenv bootargs root=/dev/mmcblk0p1 rootdelay=5 console=ttySAC0,115200 console=tty0 loglevel=8 \${mtdparts}\; mmcinit\; ext2load mmc 0 0x32000000 /boot/\${sd_image_name}\; bootm 0x32000000&lt;br /&gt;
 GTA01Bv4 # setenv sd_image_name uImage&lt;br /&gt;
 GTA01Bv4 # saveenv&lt;br /&gt;
&lt;br /&gt;
You can now easily boot a different kernel by changing the variable sd_image_name to the new name.&lt;br /&gt;
&lt;br /&gt;
=== Step 4: Boot into the new system ===&lt;br /&gt;
&lt;br /&gt;
Power off your device, insert the SD card and boot into the boot menu. You should have an entry called &amp;quot;Boot from SD&amp;quot; which does exactly that. :-)&lt;br /&gt;
&lt;br /&gt;
== Installing without removing your SD card ==&lt;br /&gt;
&lt;br /&gt;
Being the lazy person that I am, at one point I tried copying an image over to the micro SD card while still in my phone. This didn't work so well, primarily due to [http://bugzilla.openmoko.org/cgi-bin/bugzilla/show_bug.cgi?id=677 bug 677]. &lt;br /&gt;
&lt;br /&gt;
Now that this bug has been resolved, the process becomes relatively simple:&lt;br /&gt;
&lt;br /&gt;
* Boot to your internal flash partition (not the SD card.) Make sure you're running a release that includes the fix to bug 677!&lt;br /&gt;
* Plug in your USB and set up [USB Networking].&lt;br /&gt;
* Clean off your currently installed microSD card and install the new image:&lt;br /&gt;
 ssh root@192.168.0.202 &amp;quot;rm -rf /media/card/*&amp;quot;&lt;br /&gt;
 cat openmoko-devel-image-fic-gta01-20070313022035.rootfs.tar | ssh root@192.168.0.202 tar -C /media/card -xv&lt;br /&gt;
 scp uImage-fic-gta01-latest.bin root@192.168.0.202:/media/card/boot/uImage&lt;br /&gt;
&lt;br /&gt;
== Boot from SDHC ==&lt;br /&gt;
&lt;br /&gt;
As SDHC is currently not supported in u-boot you can't use the Booting from SD guide.&lt;br /&gt;
But there's a kind of workaround that is a good option to have at least your rootfs on the microSDHC:&lt;br /&gt;
&lt;br /&gt;
First you can follow Step 1 to get an kernel-image with mmc- and ext2-support. But instead of copying the image to the rootfs you will have to flash it to the Neo's internal NAND-Flash (using [[Dfu-util]]).&lt;br /&gt;
Now you can continue with Step 2 (like mentioned before you do not have to copy your uImage to the rootfs) and follow the instructions to Step 3.&lt;br /&gt;
Instead of the setenv commands in Step 3 you have to enter the following:&lt;br /&gt;
&lt;br /&gt;
 GTA01Bv4 # setenv menu_5 Boot from SDHC: setenv  bootargs root=/dev/mmcblk0p1 console=tty0 loglevel=8 rootdelay=5 neo1973-nand:0x00040000(u-boot),0x00004000(u-boot_env),0x00200000(kernel),0x000a0000(splash)\; nand read.e 0x32000000 kernel\; bootm 0x32000000&lt;br /&gt;
 GTA01Bv4 # saveenv&lt;br /&gt;
&lt;br /&gt;
And that's it!&lt;br /&gt;
Now you can use the newly created menu option &amp;quot;Boot from SDHC&amp;quot; to boot the internal kernel, using the root-filesystem on the microSDHC.&lt;br /&gt;
&lt;br /&gt;
=== Autoboot from SDHC ===&lt;br /&gt;
&lt;br /&gt;
Maybe you want to Boot automatically from SDHC: &lt;br /&gt;
Set a new Bootmenu Entry for booting from NAND first&lt;br /&gt;
&lt;br /&gt;
 GTA01Bv4 # setenv menu_6 Boot from NAND: setenv bootargs ${bootargs_base} \${mtdparts}\; nand read.e 0x32000000 kernel\; bootm 0x32000000&lt;br /&gt;
 GTA01Bv4 # saveenv&lt;br /&gt;
&lt;br /&gt;
then Power-off, and enter the Bootmenu to test the new Entry.If you can boot from NAND, shutdown, enter Boot menu, connect to bootloader and set the (auto)bootcmd for boot from SDHC:&lt;br /&gt;
&lt;br /&gt;
 GTA01Bv4 # setenv bootcmd setenv bootargs root=/dev/mmcblk0p1 rootdelay=10 console=tty0 loglevel=8 neo1973-nand:0x00040000(u-boot),0x00004000(u-boot_env),0x00200000(kernel),0x000a0000(splash)\; nand read.e 0x32000000 kernel\; bootm 0x32000000 &lt;br /&gt;
 GTA01Bv4 # saveenv&lt;br /&gt;
&lt;br /&gt;
Now you boot from SDHC everytime you press the Power-Button or reboot and if you like to boot from NAND -just use the bootmenu.&lt;br /&gt;
&lt;br /&gt;
{{Languages|Booting_from_SD}}&lt;br /&gt;
[[Category:Software]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/MokoMakefile</id>
		<title>MokoMakefile</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/MokoMakefile"/>
				<updated>2007-11-07T10:53:17Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* correct typo in blond moment */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;MokoMakefile is a Makefile which saves lots of work when setting up an OpenMoko build environment.&lt;br /&gt;
By automating the setup process of a new OpenMoko build environment, it provides an environment which is configured the same for all the existing developers and should therefore be preferred over manual procedures or individual setup procedures.&lt;br /&gt;
It brings the same repeatability to build environment creation and maintenance as that which the BitBake scripts bring to [[OpenEmbedded]] ease and standardize the process of building OpenEmbedded.&lt;br /&gt;
&lt;br /&gt;
Unlike the manual process described at [[Building OpenMoko from scratch]], MokoMakefile does not install anything into your system (it can and should be started as normal user).&lt;br /&gt;
MokoMakefile is a wrapper around all that to make it easy to set up and maintain a development environment that fully complies with the setup instructions published by OpenMoko.&lt;br /&gt;
&lt;br /&gt;
MokoMakefile is developed by [[User:RodWhitby|Rod Whitby]] - it is not an official product of OpenMoko (although I would be happy for them to pick it up and use it internally).  If there is any discrepancy between the [[OpenMoko2007.2#How_to_build|official OpenMoko build instructions]], and the operation of the MokoMakefile, then you should consider the official instructions to be correct.&lt;br /&gt;
&lt;br /&gt;
The MokoMakefile is able to build either OM-2007.1 or OM-2007.2 images.  The core team chooses the default, but you can select one or the other at the top of the Makefile.&lt;br /&gt;
&lt;br /&gt;
MokoMakefile also builds the QEMU-based neu1973 emulator as part of the build process and has make targets to install the  OpenMoko images into it and run it. These commands can also be used without downloading and building the whole OpenMoko OpenEmbedded distribution. This part is described in [[Using QEMU with MokoMakefile]].&lt;br /&gt;
&lt;br /&gt;
== Requirements for building OpenMoko ==&lt;br /&gt;
Independent on whether MokoMakefile or a manual process is used to setup an OpenMoko build environment, there are several requirements which must be fullfilled in order for the OpenMoko build to succeed:&lt;br /&gt;
&lt;br /&gt;
* RAM: The build host needs to have at least 512MB of RAM, and about the same amount of swap. Some packages built by OpenEmbedded like busybox are built by compiling all source files into one binary which causes gcc to grow beyond 300MB of size and no part of this memory may be on swap for the compile to finish in predictable time. For busybox, this can be turned off, but turning this off means that busybox will not as well optimized by gcc.&lt;br /&gt;
&lt;br /&gt;
* Disk space: You need about 12 GB of available disk space for the OpenMoko build to succeed (see below for a tip on how to reduce this).&lt;br /&gt;
&lt;br /&gt;
* Time: The initial build takes at least 5 hours (on 2GHz core2duo without multiprocessor optimization) and may take several days on slower machines.&lt;br /&gt;
&lt;br /&gt;
=== Required software ===&lt;br /&gt;
The version control system used by OpenEmbedded is [http://monotone.ca monotone], it is not downloaded and installed by MokoMakefile. If your distribution does not provide a package, you can download and install a static binary from http://monotone.ca&lt;br /&gt;
&lt;br /&gt;
Some distribution specific hints on preparing your build host for building OpenEmbedded are on   http://www.openembedded.org/wiki/OEandYourDistro but they may be outdated, incomplete and do not cover everything which OpenMoko needs to build.&lt;br /&gt;
&lt;br /&gt;
A good guide is [[Building OpenMoko from scratch#Build host prerequisites|the section on build host prerequisites]] in [[Building OpenMoko from scratch]]&lt;br /&gt;
&lt;br /&gt;
If you forgot anything which OE needs itself, OE will tell you shortly after you start building, but it does not check build dependices of OpenMoko, so you either have to install them before starting or install them after the build failed. OpenEmbedded will continue where it stopped when you restart the build afterwards.&lt;br /&gt;
&lt;br /&gt;
==== Package requirements by distribution ====&lt;br /&gt;
Your distribution needs to provide these commands in order for OpenEmbedded to start building:&lt;br /&gt;
 subversion texi2html texinfo help2man&lt;br /&gt;
&lt;br /&gt;
OpenMoko needs the development packages (with header files, development libraries and tools) in order to finish building:&lt;br /&gt;
 ncurses zlib (or libz) OpenSSL GTK++&lt;br /&gt;
&lt;br /&gt;
Because there are bugs in the interaction of QEMU and GCC-4, you'll need a copy of gcc-3.x installed as well.&lt;br /&gt;
&lt;br /&gt;
===== Debian / Ubuntu =====&lt;br /&gt;
  apt-get install subversion monotone build-essential help2man&lt;br /&gt;
    diffstat texi2html texinfo cvs gawk&lt;br /&gt;
  apt-get install libncurses5-dev libz-dev libssl-dev libgtk2.0-dev&lt;br /&gt;
  # To prevent errors in host validation&lt;br /&gt;
  apt-get install ca-certificates&lt;br /&gt;
  # For OpenMoko 2007.2 using BitBake-1.8.8:&lt;br /&gt;
  apt-get install python-pysqlite2 sqlite3 sqlite3-doc python-pysqlite2-dbg&lt;br /&gt;
  # For building faster&lt;br /&gt;
  apt-get install quilt python-psyco&lt;br /&gt;
  # For qemu, install a second compiler for bug avoidance; MokoMakefile knows to look for it.&lt;br /&gt;
  apt-get install gcc-3.4 g++-3.4&lt;br /&gt;
&lt;br /&gt;
===== SuSE =====&lt;br /&gt;
For building OpenMoko on 10.3, you need&lt;br /&gt;
 gcc-c++ ncurses-devel zlib-devel libopenssl-devel gtk2-devel subversion texinfo help2man [http://download.opensuse.org/repositories/devel:/tools:/scm/openSUSE_Factory/repodata/repoview/Development.Tools.group.html monotone]&lt;br /&gt;
10.1 and 10.2: same packages as 10.3, but install &amp;lt;code&amp;gt;openssl-devel&amp;lt;/code&amp;gt; instead of libopenssl-devel. Use monotone for [http://download.opensuse.org/repositories/devel:/tools:/scm/openSUSE_10.2/repodata/repoview/Development.Tools.group.html 10.2] or [http://download.opensuse.org/repositories/devel:/tools:/scm/SUSE_Linux_10.1/repodata/repoview/Development.Tools.group.html 10.1]&lt;br /&gt;
&lt;br /&gt;
==== For all distributions ====&lt;br /&gt;
As the QEMU-based neo1973 emulator is also built as part of the build process started by MokoMakefile, so you need gcc-3.3 and other packages for building QEMU installed. See [[Using QEMU with MokoMakefile#Build requirements|the build requirements section]] in [[Using QEMU with MokoMakefile]] for information on the required software.&lt;br /&gt;
&lt;br /&gt;
== Building OpenMoko with MokoMakefile ==&lt;br /&gt;
&lt;br /&gt;
1 - Create your $OMDIR directory (note that you can change ~/moko to any directory you like):&lt;br /&gt;
   mkdir ~/moko ; cd ~/moko&lt;br /&gt;
2 - Grab MokoMakefile:&lt;br /&gt;
   wget http://www.rwhitby.net/files/openmoko/Makefile&lt;br /&gt;
&lt;br /&gt;
If that doesn't work, try &lt;br /&gt;
&lt;br /&gt;
   wget http://svn.nslu2-linux.org/svnroot/mokomakefile/trunk/Makefile&lt;br /&gt;
&lt;br /&gt;
   note: If you want to compile for the old version 2007.1 instead of the new&lt;br /&gt;
         version edit the top of the Makefile. Edit the lines at the top to &lt;br /&gt;
         look like this:&lt;br /&gt;
             OPENMOKO_GENERATION = 2007.1&lt;br /&gt;
             #OPENMOKO_GENERATION = 2007.2&lt;br /&gt;
&lt;br /&gt;
{{note|For building 2007.2, MokoMakefile uses BitBake 1.8.8 which requires python-sqlite2 and sqlite-3.3 or later. Users of SUSE Linux 10.1 can update to [http://download.opensuse.org/pub/opensuse/distribution/10.2/repo/oss/suse/i586/sqlite-3.3.8-14.i586.rpm the version of openSUSE 10.2]}}&lt;br /&gt;
&lt;br /&gt;
3 - Set up the environment:&lt;br /&gt;
   make setup&lt;br /&gt;
4 - Start building. Before starting a lengthy make process, check the Tips section below for how to make Make multicore aware. You may want to modify the build/conf/local.conf file for your target (emulation/chroot) environment:&lt;br /&gt;
   make openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
This will set up the recommended directory structure as described in [[Building OpenMoko from scratch]], will download all the required software (from the right places with the right versions), and will immediately start building an image.&lt;br /&gt;
&lt;br /&gt;
Once you have done this, you can choose to continue using the MokoMakefile to initiate your subsequent builds, or you can go into the build directory and run bitbake commands manually.  The choice is yours.&lt;br /&gt;
&lt;br /&gt;
==Updating the environment==&lt;br /&gt;
For easy maintenance of your build environment the following commands are available.&lt;br /&gt;
&lt;br /&gt;
1 - To update the MokoMakefile to the latest version:&lt;br /&gt;
   make update-makefile &lt;br /&gt;
&lt;br /&gt;
2 - To make sure that any recent changes to the build directory structure have been applied:&lt;br /&gt;
   make setup &lt;br /&gt;
&lt;br /&gt;
3 - To update the OpenMoko repository checkout and the MokoMakefile patches to the latest version:&lt;br /&gt;
   make update&lt;br /&gt;
&lt;br /&gt;
A quick way to rebuild a new image with the latest updates:&lt;br /&gt;
   make update-makefile &amp;amp;&amp;amp; make setup update openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
==Build issues==&lt;br /&gt;
First, make sure that the problem is reproducible after running&lt;br /&gt;
&lt;br /&gt;
 make update-makefile &amp;amp;&amp;amp; make setup &amp;amp;&amp;amp; make update&lt;br /&gt;
&lt;br /&gt;
then run&lt;br /&gt;
&lt;br /&gt;
 make clean-package-&amp;lt;foo&amp;gt;&lt;br /&gt;
&lt;br /&gt;
(where you replace &amp;lt;foo&amp;gt; with the name of the package which is failing)&lt;br /&gt;
&lt;br /&gt;
and finally&lt;br /&gt;
&lt;br /&gt;
 make openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
If you can get the error to occur three times in a row after running that sequence of commands (including the update and setup steps) three times, then feel free to report it to rwhitby in #openmoko on [http://wiki.openmoko.org/wiki/Development_resources#IRC IRC].&lt;br /&gt;
&lt;br /&gt;
===Known MokoMakefile errors ===&lt;br /&gt;
If you experience the following after changing from OM-2007.1 to OM-2007.2:&lt;br /&gt;
&lt;br /&gt;
 Patch bitbake-1.6.6-om3.patch does not apply (enforce with -f)&lt;br /&gt;
&lt;br /&gt;
then type &amp;quot;make clobber-patches&amp;quot; to fix it.  There was a period of 24 hours when there was a bug in the MokoMakefile which causes this problem.  Once the patches have been clobbered, they will re-download and the problem will not reoccur.&lt;br /&gt;
&lt;br /&gt;
===Fixes for distribution/environment-specific or isolated issues===&lt;br /&gt;
&lt;br /&gt;
Work-arounds for temporary or isolated problems can be found and should be added to the [[Talk:MokoMakefile|Discussion page]] which is associated with this page.  As they are fixed, they will be removed from that page.&lt;br /&gt;
&lt;br /&gt;
==Tips==&lt;br /&gt;
*You can reduce the amount of consumed disk space significantly by adding&lt;br /&gt;
   INHERIT += &amp;quot;rm_work&amp;quot;&lt;br /&gt;
in your local.conf (e.g. ~/moko/build/conf/local.conf). This will remove the contents of each build/tmp/work/*/&amp;lt;package&amp;gt; directory after the corresponding package builds correctly. As of 10/16/07, this appears to be present in local.conf by default.&lt;br /&gt;
&lt;br /&gt;
*If you an encounter an error with monotone similar to the following:&lt;br /&gt;
   mtn: misuse: database /home/''username''/moko/OE.mtn is laid out according to an old schema&lt;br /&gt;
Then you need to upgrade OE.mtn  Use the following command while in ~/moko:&lt;br /&gt;
   # mtn --db OE.mtn db migrate&lt;br /&gt;
&lt;br /&gt;
*If a certain package does not build due to corrupted download or some such try to remove the sources and rebuild it.&lt;br /&gt;
 rm sources/&amp;lt;package&amp;gt;*&lt;br /&gt;
 cd build&lt;br /&gt;
 . ../setup-env&lt;br /&gt;
 bitbake -crebuild &amp;lt;package&amp;gt;&lt;br /&gt;
after that your build might just work again.&lt;br /&gt;
&lt;br /&gt;
*For people with multiple CPU's (or dual-core ones) this small patch might be useful to build things faster.&lt;br /&gt;
Edit the local.conf and add the following lines:&lt;br /&gt;
 PARALLEL_MAKE = &amp;quot;-j 4&amp;quot;&lt;br /&gt;
 BB_NUMBER_THREADS = &amp;quot;4&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Change the PARALLEL_MAKE and BB_NUMBER_THREADS values to something that suits better if it chokes your machine.&lt;br /&gt;
&lt;br /&gt;
*For amd64 host users you need the patch from http://bugs.openembedded.org/show_bug.cgi?id=1765 to build db3-native&lt;br /&gt;
&lt;br /&gt;
* If you encounter an error related with the qemu-native package and not compiling for the qemu, you can edit the build/conf/local.conf file and add ENABLE_BINARY_LOCALE_GENERATION = &amp;quot;0&amp;quot; line to avoid the error.&lt;br /&gt;
&lt;br /&gt;
* To prevent building tons of locales, add a line like this to local.conf:&lt;br /&gt;
 GLIBC_GENERATE_LOCALES = &amp;quot;en_US.UTF-8 nl_NL.UTF-8&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* To not build any binary locales at all, add this to local.conf:&lt;br /&gt;
 ENABLE_BINARY_LOCALE_GENERATION = &amp;quot;0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* If you want to rebuild the package indexes (for instance, after compiling a new version of a package) without building &amp;lt;code&amp;gt;openmoko-devel-image&amp;lt;/code&amp;gt;, run &amp;lt;code&amp;gt;make build-package-package-index&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Developing with MokoMakefile==&lt;br /&gt;
&lt;br /&gt;
{{note|If using MokoMakefile with OM2007.2 then references to $OMDIR/openmoko should be replaced with $OMDIR/openembedded.  Also references to tmp/work/armv4t-linux should be replaced with tmp/work/fic-gta01-angstrom-linux-gnueabi}}&lt;br /&gt;
&lt;br /&gt;
For the following explanations $OMDIR is the directory where there Makefile puts all the stuff.&lt;br /&gt;
&lt;br /&gt;
To make in-tree changes and have them built and used by qemu:&lt;br /&gt;
&lt;br /&gt;
  cd $OMDIR/openmoko&lt;br /&gt;
  quilt new descriptive-patch-name.patch&lt;br /&gt;
  quilt add trunk/src/name-of-file-to-change # do this for every file you are about to modify&lt;br /&gt;
  ...make the changes...&lt;br /&gt;
  quilt refresh # this creates a file in $OMDIR/patches/openmoko-HEAD/ and updates the quilt series file there&lt;br /&gt;
&lt;br /&gt;
Note: Do '''NOT''' use absolute paths as this confuses quilt and will get you a diff of the file against /dev/null!&lt;br /&gt;
&lt;br /&gt;
To build the changes and have them used by qemu:&lt;br /&gt;
&lt;br /&gt;
  make build-qemu&lt;br /&gt;
  make flash-qemu-local&lt;br /&gt;
  make run-qemu&lt;br /&gt;
&lt;br /&gt;
If you want to modify applications instead of the openmoko toolchain, this is what you have to do (example: openmoko-messages):&lt;br /&gt;
&lt;br /&gt;
  cd $OMDIR/build&lt;br /&gt;
  . ../setup-env&lt;br /&gt;
  bitbake -c unpack openmoko-messages&lt;br /&gt;
  cd ../build/tmp/work/armv4t-linux/openmoko-messages-0.0.1+svnnow-r2_2276/openmoko-messages/&lt;br /&gt;
  ...make the changes...&lt;br /&gt;
  cd -&lt;br /&gt;
  bitbake openmoko-messages&lt;br /&gt;
&lt;br /&gt;
Then continue with MokoMakefile usage.&lt;br /&gt;
&lt;br /&gt;
If you want to add an application to your openmoko distribution, do this:&lt;br /&gt;
All file edits should be done using quilt as described above. That way a patch can easily be submitted to the openmoko project.&lt;br /&gt;
First, create a directory that will correspond to your package and edit a '''.bb''' file in there:&lt;br /&gt;
  cd $OMDIR/openmoko/&lt;br /&gt;
  quilt new mycoolpackage.patch&lt;br /&gt;
  mkdir trunk/oe/packages/mycoolpackage&lt;br /&gt;
  quilt add trunk/oe/packages/mycoolpackage/mycoolpackage_1.bb&lt;br /&gt;
  quilt edit trunk/oe/packages/mycoolpackage/mycoolpackage_1.bb&lt;br /&gt;
&lt;br /&gt;
The file should have the following content:&lt;br /&gt;
  DESCRIPTION = &amp;quot;This is a cool package&amp;quot;&lt;br /&gt;
  SECTION = &amp;quot;username/mycoolpackage&amp;quot;&lt;br /&gt;
  PV = &amp;quot;1&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  inherit autotools&lt;br /&gt;
  &lt;br /&gt;
  SRC_URI = &amp;quot;http://www.example.com/download/mycoolpackage-1.tar.gz&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Explanation:&lt;br /&gt;
* DESCRIPTION - Just a short text explaining the package&lt;br /&gt;
* SECTION - I have no clue, but I'll use username/mycoolpackage for now&lt;br /&gt;
* PV - Package Version&lt;br /&gt;
* inherit autotools - The package can be compiled by './configure &amp;amp;&amp;amp; make &amp;amp;&amp;amp; make install' so we tell MokoMakefile to do it this way.&lt;br /&gt;
* SRC_URI = ... - This is the download location of the package source. It's imperative that the tar.gz contains a directory called '''packagename-packageversion''' (in this case: mycoolpackage-1) so that MokoMakefile can find it automatically or the build will fail.&lt;br /&gt;
&lt;br /&gt;
This is not all. We also need to tell MokoMakfile that it needs to build and include the package in the image. To do this, do&lt;br /&gt;
  $OMDIR/openmoko# quilt edit trunk/oe/packages/tasks/task-openmoko.bb&lt;br /&gt;
Here, increase the value '''PR''' by one and add '''mycoolpackage \''' (with the backslash!) just before the line reading '''#  update-alternatives \'''.&lt;br /&gt;
&lt;br /&gt;
Now run&lt;br /&gt;
  quilt refresh&lt;br /&gt;
  cd ..&lt;br /&gt;
  make update openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
And if everything's alright you should now have an OpenMoko image to flash to your phone or run in qemu as described above.&lt;br /&gt;
&lt;br /&gt;
=== Hello World application ===&lt;br /&gt;
&lt;br /&gt;
There is a [http://wiki.openmoko.org/wiki/Building_a_hello_world_application Hello World!] tutorial available too.&lt;br /&gt;
&lt;br /&gt;
==Testimonials==&lt;br /&gt;
MokoMakefile is recommended by 4 out of 4 new developers on #openmoko, with testimonials such as &amp;quot;For some reason last night I couldn't get my manual install of everything to work (bb complained about my bbpath I think) ... but with your makefile, it works great!&amp;quot;, &amp;quot;MokoMakefile rocks!&amp;quot;, and &amp;quot;Wow this build system is nice - it just seems more polished than my gumstix toolchain buildroot system&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Project page:&lt;br /&gt;
http://mokomakefile.projects.openmoko.org/&lt;br /&gt;
&lt;br /&gt;
{{Languages|MokoMakefile}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Host_OS_Tips</id>
		<title>Host OS Tips</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Host_OS_Tips"/>
				<updated>2007-10-19T09:03:12Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* Start a page for OS specific stuff */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;With a variety of linux distributions come a myriad of differences. Below are some quirks you may find when building, flashing or talking to your neo 1973 &lt;br /&gt;
&lt;br /&gt;
== OpenSuSE 10.2 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== u-boot ===&lt;br /&gt;
&lt;br /&gt;
When booting the new1973 in u-boot mode '''/dev/ttyACM0''' may not appear automatically. You may have to:&lt;br /&gt;
&lt;br /&gt;
 # modprobe cdc_acm&lt;br /&gt;
&lt;br /&gt;
before hand. Conversely cdc_ether seems to work automatically without any issues.&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

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

	<entry>
		<id>http://wiki.openmoko.org/wiki/Qtopia_on_Neo1973</id>
		<title>Qtopia on Neo1973</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Qtopia_on_Neo1973"/>
				<updated>2007-09-28T13:48:03Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* Where to get  it source code */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Where to get  it ==&lt;br /&gt;
You can get everything you need [http://www.qtopia.net/modules/devices/openmoko.php from here]. Currently the flash tarball has the 2.6.21 openmoko kernel and a Qtopia phone edition jffs2 flash&lt;br /&gt;
image cross-compiled for the Neo. &lt;br /&gt;
&lt;br /&gt;
If you want to build qtopia for yourself you can download the [ftp://ftp.trolltech.com/qtopia/tech-preview/ technical preview] or [ftp://ftp.trolltech.com/qtopia/snapshots/ snapshots]&lt;br /&gt;
&lt;br /&gt;
It appears you must clear the flash chunks first (if you have not updated your uboot.  If you have, you may skip this step). Get into uboot console [http://wiki.openmoko.org/wiki/Uboot#Accessing_the_bootloader_prompt] and enter &lt;br /&gt;
&lt;br /&gt;
 # nand erase kernel&lt;br /&gt;
 # nand erase rootfs&lt;br /&gt;
&lt;br /&gt;
Download and use dfu-util as normal [http://wiki.openmoko.org/wiki/Flashing_openmoko] and the ip address and cidr are the same as the openmoko build (192.168.0.202/24) :D - Simple, Eh?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Most things seem to work out of the box, however you may need to use the following command to get audio:&lt;br /&gt;
&lt;br /&gt;
 # alsactl -f /etc/alsa/gsmhandset.state restore&lt;br /&gt;
 Or put this command in /etc/init.d/qpe line 64&lt;br /&gt;
&lt;br /&gt;
Do not switch themes.  Only the default theme is usable.  For example, once you switch themes, the lock feature continues to work, but only if you unlock using the smallest # keypad in the world.&lt;br /&gt;
&lt;br /&gt;
Suspend support is very flaky.  The neo often shuts off from a suspend state.  It will not wake from suspend for an incoming call or text message (someone try setting an alarm and report results here).  To turn suspend off (this will of course use the batteries very quickly), hit the down arrow next to the suspend setting in the power management until it says &amp;quot;Off&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
When using the virtual keyboard, do a quick flick up or down over the keyboard to access numbers/symbols/capitals.&lt;br /&gt;
&lt;br /&gt;
In summary, Qtopia on the Neo1973 is much closer to being ready than OpenMoko as of this writing.  However, sound and suspend support prevent it from being at all useful as a cell phone (as a landline that doesn't ring but instead vibrates, it works ok).&lt;br /&gt;
&lt;br /&gt;
== Screenshots ==&lt;br /&gt;
&lt;br /&gt;
Here are some screenshots of Qtopia runing on a Neo 1973. Personally I find it very impressive...&lt;br /&gt;
&lt;br /&gt;
[[Image:Qtopia001.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Qtopia002.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Qtopia003.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Qtopia004.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Qtopia005.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Qtopia006.png]]&lt;br /&gt;
&lt;br /&gt;
== Videos ==&lt;br /&gt;
&lt;br /&gt;
 http://www.youtube.com/watch?v=YW5q8SpY7t4&lt;br /&gt;
 http://www.youtube.com/watch?v=iOG_mtSEMgs&lt;br /&gt;
&lt;br /&gt;
For full size videos, 346 MiB:&lt;br /&gt;
&lt;br /&gt;
 http://linuxtracker.org/download.php?id=4613&amp;amp;name=qt_on_neo1973_videos.torrent&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Neo1973_compatible_cellphone_providers</id>
		<title>Neo1973 compatible cellphone providers</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Neo1973_compatible_cellphone_providers"/>
				<updated>2007-09-20T19:31:09Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* United Kingdom  - Virgin mobile*/&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|align=right&lt;br /&gt;
  |__TOC__&lt;br /&gt;
  |}&lt;br /&gt;
The Neo1973 uses quad-band [[GSM]] (850/900/1800/1900 MHz) so any GSM provider in the world should be compatible. In general, when you are looking for a mobile solution in your region, you would need to be aware of:&lt;br /&gt;
* the ''network coverage'' of available providers&lt;br /&gt;
* different ''tariffs'' of these providers&lt;br /&gt;
and choose the one that is right for you. If you haven't had any experience with GSM coverage in your area, you may want to inquire locally from the available providers and people you know that may already have experienced GSM at your location. You may also want to subscribe to our mailing list. If you have doubts about the coverage for your area, you may want to borrow a GSM phone or buy an inexpensive one so that you can get a feel for how the Neo1973 will work in your area. You can help keep your cost down by using a prepaid card for your testing.&lt;br /&gt;
&lt;br /&gt;
Here is some information on Prepaid GSM cards:&lt;br /&gt;
* [http://www.prepaidgsm.net/ PrePaidGSM - worldwide overview about GSM prepaid offers]&lt;br /&gt;
Think twice before choosing a tariff with long duration contracts (more than 12 months), because prices for the GPRS data tariffs are ''likely'' to lower in many countries. Also, long duration contracts are mostly combined with hardware (ie: free or steeply discounted phone with a 24 or 36 month contract). It will be worth your while to shop around for competing offers from the different providers in your area.&lt;br /&gt;
&lt;br /&gt;
We chose the GSM network format for the Neo1973 because GSM is in use by more countries than any other mobile phone standard. As a result, you will have better coverage with the Neo1973, and we felt that it was the best choice for our OpenMoko devices. When the Neo1973 is successful, and we believe that it will be, we will be developing new devices that we will be bringing to market. They will be running OpenMoko and supporting additional mobile phone network standards as well. So if GSM is not available in your area (ie: some areas in the USA), OpenMoko will be bringing other options to market in the future.&lt;br /&gt;
&lt;br /&gt;
Below is a list of Neo1973-compatible providers around the world. Please help by filling this out ''alphabetically'':&lt;br /&gt;
&lt;br /&gt;
There is also a [[Carriers]] page that should be merged with this section. &lt;br /&gt;
&lt;br /&gt;
==Argentina==&lt;br /&gt;
* [http://www.movistar.com.ar/ Movistar]&lt;br /&gt;
* [http://www.personal.com.ar/ Personal]&lt;br /&gt;
* [http://www.cti.com.ar/ CTI]&lt;br /&gt;
&lt;br /&gt;
== Belgium ==&lt;br /&gt;
* [http://www.proximus.be/ Proximus]&lt;br /&gt;
* [http://www.base.be/ Base]&lt;br /&gt;
* [http://www.mobistar.be/LanguageIndex.html Mobistar]&lt;br /&gt;
&lt;br /&gt;
== Canada ==&lt;br /&gt;
* [http://www.fido.ca/ Fido]&lt;br /&gt;
* [http://www.icewireless.ca/ IceWireless]&lt;br /&gt;
* [http://www.rogers.ca/ Rogers]&lt;br /&gt;
* [http://www.yak.ca/ Yak Communications]&lt;br /&gt;
&lt;br /&gt;
== China ==&lt;br /&gt;
* China Mobile&lt;br /&gt;
* China Unicom (CHINA UNICOM GSM)&lt;br /&gt;
&lt;br /&gt;
== Czech Republic ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.vodafone.cz/ Vodafone]&lt;br /&gt;
* [http://www.cz.o2.com/ o2]&lt;br /&gt;
* [http://www.t-mobile.cz/ T-mobile]&lt;br /&gt;
&lt;br /&gt;
== Denmark ==&lt;br /&gt;
* Sonofon ([http://www.sonofon.dk/english/index.shtml English] - [http://www.sonofon.dk/ Danish])&lt;br /&gt;
* TDC A/S ([http://tdc.com English] - [http://privat.tdc.dk/mobil/ Danish])&lt;br /&gt;
* Telia DK ([http://telia.dk/privat/produkter/mobil/ Danish])&lt;br /&gt;
&lt;br /&gt;
== Estonia ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.emt.ee/ EMT]&lt;br /&gt;
* [http://www.tele2.ee/ Tele2] - Very low rates for GPRS. You can get 3GB of bandwidth for 675EEK(~43€) per month.&lt;br /&gt;
* [http://www.elisa.ee/ Elisa] - With M-internet plan you get free access to Elisa wifi hotspots  &lt;br /&gt;
&lt;br /&gt;
== Finland ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.cubio.fi Cubio]&lt;br /&gt;
* [http://www.dnafinland.fi Dna] - Also a roaming network operator (Network operated under the name Dna Networks Ltd)&lt;br /&gt;
* [http://www.elisa.fi Elisa] - Also a roaming network operator.&lt;br /&gt;
* [http://www.go.fi Go mobile]&lt;br /&gt;
* [http://www.hesburger.fi/heseliittyma/ Hesburger] - Do you want sim card(s) with that?&lt;br /&gt;
* [http://www.kolumbus.fi Kolumbus] - Strangely they don't offer their website in English, but they're a part of the Elisa.&lt;br /&gt;
* [http://www.teliasonera.com Teliasonera] - Also a roaming network operator.&lt;br /&gt;
* [http://www.tele.fi Telefinland] - They haven't got an English site, but they're part of the Teliasonera.&lt;br /&gt;
* [http://www.gsm.aland.fi/ Ålands Mobiltelefon] - Only in the Åland Islands in the southwestern Finland. Also a roaming network operator.&lt;br /&gt;
&lt;br /&gt;
== France ==&lt;br /&gt;
&lt;br /&gt;
All:&lt;br /&gt;
* [http://www.sfr.fr SFR]&lt;br /&gt;
* [http://www.bouyguestelecom.fr/ Bouygues]&lt;br /&gt;
* [http://www.orange.fr Orange]&lt;br /&gt;
&lt;br /&gt;
== Germany ==&lt;br /&gt;
All: &lt;br /&gt;
* [http://www.vodafone.de/ Vodafone]&lt;br /&gt;
* [http://www.o2online.de/ o2]&lt;br /&gt;
* [http://www.eplus.de/ E-Plus]&lt;br /&gt;
* [http://www.t-mobile.de/ T-mobile]&lt;br /&gt;
== India ==&lt;br /&gt;
All GSM:&lt;br /&gt;
* [http://www.airtel.in/ Airtel]&lt;br /&gt;
* Vodafone&lt;br /&gt;
* [http://www.ideacellular.com/ Idea]&lt;br /&gt;
* Reliance GSM&lt;br /&gt;
* BPL Mobile&lt;br /&gt;
* Spice&lt;br /&gt;
* [http://www.bsnl.co.in/ BSNL]&lt;br /&gt;
* [http://www.hutch.in/ Hutch]&lt;br /&gt;
&lt;br /&gt;
== Japan ==&lt;br /&gt;
&lt;br /&gt;
According to the [http://www.gsmworld.com/roaming/gsminfo/cou_jp.shtml GSM-Association] there is no GSM in Japan, except for UMTS.&lt;br /&gt;
&lt;br /&gt;
== Latvia ==&lt;br /&gt;
* [http://www.lmt.lv/ LMT]&lt;br /&gt;
* [http://www.bite.lv/ Bitė]&lt;br /&gt;
* [http://www.tele2.lv/ Tele2]&lt;br /&gt;
&lt;br /&gt;
== Lithuania ==&lt;br /&gt;
* [http://www.omnitel.lt/ Omnitel]&lt;br /&gt;
* [http://www.bite.lt/ Bitė]&lt;br /&gt;
* [http://www.tele2.lt/ Tele2]&lt;br /&gt;
&lt;br /&gt;
== Netherlands ==&lt;br /&gt;
All.&lt;br /&gt;
* [http://www.vodafone.nl/ Vodafone]&lt;br /&gt;
* [http://www.telfort.nl/ Telfort]&lt;br /&gt;
* [http://www.orange.nl/ Orange]&lt;br /&gt;
* [http://www.t-mobile.nl/ T-mobile]&lt;br /&gt;
* [http://www.kpn.com/mobiel KPN]&lt;br /&gt;
* [http://www.hi.nl/ Hi]&lt;br /&gt;
(There are more)&lt;br /&gt;
&lt;br /&gt;
For a breakdown of SIM-only plans, go to [http://www.bellen.com/mobiel_overzicht/default.asp?taal=nl&amp;amp;land=nl&amp;amp;prgr=4 Bellen.com]&lt;br /&gt;
&lt;br /&gt;
== New Zealand ==&lt;br /&gt;
* [http://www.vodafone.co.nz/ Vodafone]&lt;br /&gt;
&lt;br /&gt;
== Norway ==&lt;br /&gt;
* [http://www.netcom.no/ NetCom] (GSM900/1800 &amp;amp; UMTS)&lt;br /&gt;
* [http://www.networknorway.no/ Network Norway] (GSM900)&lt;br /&gt;
* [http://www.telenormobil.no/ Telenor] (GSM900/1800 &amp;amp; UMTS)&lt;br /&gt;
&lt;br /&gt;
== Poland ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.eragsm.pl/ Era]&lt;br /&gt;
* [http://www.plusgsm.pl/ Plus]&lt;br /&gt;
* [http://www.orange.pl/ Orange] - europe wide provider&lt;br /&gt;
* [http://www.playmobile.pl/ Play]&lt;br /&gt;
&lt;br /&gt;
== Romania ==&lt;br /&gt;
 &lt;br /&gt;
* [http://www.vodafone.ro Vodafone] (226-01; GSM900)&lt;br /&gt;
* [http://www.orange.ro Orange] (226-10; GSM900)&lt;br /&gt;
* [http://www.cosmote.com Cosmote] (226-06; GSM1800)&lt;br /&gt;
&lt;br /&gt;
* [http://www.zapp.ro/ Zapp] is running CDMA (Qualcomm style) and as such it is incompatible with [[Neo1973]].&lt;br /&gt;
&lt;br /&gt;
== Russia ==&lt;br /&gt;
=== global ===&lt;br /&gt;
* [http://www.beeline.ru/ Билайн]/BeeLine (GSM900/1800)&lt;br /&gt;
* [http://megafon.ru/ МегаФон]/MegaFon (GSM900/1800)&lt;br /&gt;
* [http://www.mts.ru МТС]/MTS (GSM900/1800)&lt;br /&gt;
=== regional ===&lt;br /&gt;
* [http://www.smarts.ru/ СМАРТС]/SMARTS (GSM900/1800)&lt;br /&gt;
* [http://www.tele2.ru TELE2] (GSM900/1800)&lt;br /&gt;
* [http://www.u-tel.ru/ Ютел]/Utel (GSM900/1800)&lt;br /&gt;
* [http://www2.sibirtelecom.ru/857 Сибирьтелеком]/Sibirtelecom (GSM-900/1800)&lt;br /&gt;
* [http://www.ncc.nnov.ru/ НСС]/NSS (GSM900/1800)&lt;br /&gt;
* [http://www.bwc.ru/ Байкалвестком]/Baykalvestcom (GSM900/1800)&lt;br /&gt;
&lt;br /&gt;
== Slovak Republic ==&lt;br /&gt;
All:&lt;br /&gt;
* [http://www.orange.sk/ Orange]&lt;br /&gt;
* [http://www.sk.o2.com/ o2]&lt;br /&gt;
* [http://www.t-mobile.sk/ T-mobile]&lt;br /&gt;
&lt;br /&gt;
== South Africa ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.vodacom.co.za/ Vodacom]&lt;br /&gt;
* [http://www.mtn.co.za/ MTN]&lt;br /&gt;
* [http://www.cellc.co.za/ Cell C]&lt;br /&gt;
&lt;br /&gt;
== Spain ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.vodafone.es/ Vodafone]&lt;br /&gt;
* [http://www.movistar.es/ Movistar]&lt;br /&gt;
&lt;br /&gt;
== Sweden ==&lt;br /&gt;
&lt;br /&gt;
Operators with their own physical networks:&lt;br /&gt;
* [http://comviq.se/ Comviq/Tele2]&lt;br /&gt;
* [http://www.telia.se/ Telia]&lt;br /&gt;
* [http://www.tre.se/ 3]&lt;br /&gt;
* [http://www.telenor.se Telenor]&lt;br /&gt;
&lt;br /&gt;
Virtual Operators:&lt;br /&gt;
* [http://www.tangomini.se TangoMini]&lt;br /&gt;
* [http://www.halebop.se Halebop]&lt;br /&gt;
* [http://www.djuice.se Djuice]&lt;br /&gt;
&lt;br /&gt;
== Switzerland ==&lt;br /&gt;
(all)&lt;br /&gt;
* [http://www.swisscom-mobile.ch/ Swisscom Mobile]&lt;br /&gt;
* [http://www.sunrise.ch/ Sunrise]&lt;br /&gt;
* [http://www.orange.ch/ Orange]&lt;br /&gt;
&lt;br /&gt;
== Taiwan ==&lt;br /&gt;
&lt;br /&gt;
* Chunghwa Telecom&lt;br /&gt;
* Far EasTone Telecommunications Co Ltd&lt;br /&gt;
* KG Telecom&lt;br /&gt;
* MobiTai&lt;br /&gt;
* Taiwan Mobile Co.Ltd&lt;br /&gt;
&lt;br /&gt;
== Ukraine ==&lt;br /&gt;
* [http://www.umc.ua/ UMC] (including virtual [http://www.jeans.com.ua/ Jeans], [http://www.ekotel.com.ua/ Ecotel])&lt;br /&gt;
* [http://www.kyivstar.net/ Kyivstar] (including virtual [http://www.djuice.com.ua/ DJUICE], [http://mobilych.com.ua/ Mobilych])&lt;br /&gt;
* [http://www.life.com.ua/ life:)]&lt;br /&gt;
* [http://www.beeline.ua/ Beeline]&lt;br /&gt;
* [http://gsm.goldentele.com/ Golden Telecom]&lt;br /&gt;
* [http://www.privatmobile.com.ua/ PrivatMobile]&lt;br /&gt;
&lt;br /&gt;
== United Kingdom ==&lt;br /&gt;
* [http://www.virginmobile.com/vm/home.do Virgin Mobile]&lt;br /&gt;
* [http://www.vodafone.co.uk/ Vodafone]&lt;br /&gt;
* [http://www.o2.co.uk/ O2]&lt;br /&gt;
* [http://www.orange.co.uk/ Orange]&lt;br /&gt;
* [http://www.t-mobile.co.uk/ T-mobile]&lt;br /&gt;
* [http://www.three.co.uk/ 3] ''There is a rumour that 3 use technology that blocks detect  phones that are not capable of 3G from their 2G network.  If this rumour is true, then 3 would not really be compatible with the GSM-only Neo1973&lt;br /&gt;
&lt;br /&gt;
== United States ==&lt;br /&gt;
&lt;br /&gt;
* [[Carriers/ATT|AT&amp;amp;T]] - (Was Cingular) &lt;br /&gt;
* [[Carriers/CellularOne|Cellular One/Dobson Cellular]] - Their Prepaid Cellular page says it works with any GSM phone.  However according to Wikipedia [http://en.wikipedia.org/wiki/Dobson_Cellular] they are possibly being acquired by AT&amp;amp;T, so it's unknown whether they will stay GSM or not.&lt;br /&gt;
* [[Carriers/TMobile|T-Mobile]] - Works with Neo1973 using manual GSM commands w/prepaid SIM.&lt;br /&gt;
* Other (more local) GSM-network providers can be found at [http://www.gsmworld.com/roaming/gsminfo/cou_us.shtml GSMworld.com]&lt;br /&gt;
* [http://www.unicel.com/ UNICEL] - Has just been purchased by Verizon Wireless (Aug/1/07), they are planning on take down their GSM Network except to support roaming GSM customers. GSM customers will be transition to CDMA. :( &lt;br /&gt;
* Wikipedia has a list of providers and technologies [http://en.wikipedia.org/wiki/List_of_United_States_mobile_phone_companies here]. Only GSM networks are compatible with the Neo1973.&lt;br /&gt;
* [http://www.prepaidgsm.net/en/usa.html PrepaidGSM.net information about GSM prepaid cards in the USA]&lt;br /&gt;
&lt;br /&gt;
== Uruguay ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.ancel.com.uy/ Ancel] -&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Venezuela ==&lt;br /&gt;
&lt;br /&gt;
* [http://www.digitel.com.ve/ Digitel] - This works on the 900Mhz band.&lt;br /&gt;
* [http://www.movistar.com.ve/ Movistar] - Previously named Telcel. It is moving from CDMA to GSM, but currently all its new phones are GSM. They work on the 850 Mhz band.&lt;br /&gt;
&lt;br /&gt;
== Rest of World (Africa, Asia, Australia, Europe, South America) ==&lt;br /&gt;
&lt;br /&gt;
* almost all use GSM thus they are compatible&lt;br /&gt;
&lt;br /&gt;
(More info available at: [http://www.gsmworld.com/roaming/gsminfo/index.shtml GSMworld.com])&lt;br /&gt;
{{Languages|Neo1973_compatible_cellphone_providers}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Information]]&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Qtopia_on_Neo1973</id>
		<title>Qtopia on Neo1973</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Qtopia_on_Neo1973"/>
				<updated>2007-09-18T15:01:29Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* alsactl */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Where to get  it ==&lt;br /&gt;
&lt;br /&gt;
You can get everything you need [http://www.qtopia.net/modules/devices/openmoko.php from here] download and use dfu-util as normal :D - Simple, Eh?&lt;br /&gt;
&lt;br /&gt;
Most things seem to work out of the box, however you may need to use the following command to get audio:&lt;br /&gt;
&lt;br /&gt;
 # alsactl -f /etc/alsa/gsmhandset.state restore&lt;br /&gt;
&lt;br /&gt;
== Screenshots ==&lt;br /&gt;
&lt;br /&gt;
Here are some screenshots of Qtopia runing on a Neo 1973. Personally I find it very impressive...&lt;br /&gt;
&lt;br /&gt;
[[Image:Qtopia001.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Qtopia002.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Qtopia003.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Qtopia004.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Qtopia005.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Qtopia006.png]]&lt;br /&gt;
&lt;br /&gt;
== Videos ==&lt;br /&gt;
&lt;br /&gt;
 http://www.youtube.com/watch?v=YW5q8SpY7t4&lt;br /&gt;
 http://www.youtube.com/watch?v=iOG_mtSEMgs&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Qtopia_on_Neo1973</id>
		<title>Qtopia on Neo1973</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Qtopia_on_Neo1973"/>
				<updated>2007-09-18T14:28:14Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* Where to find the files */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Where to get  it ==&lt;br /&gt;
&lt;br /&gt;
You can get everything you need [http://www.qtopia.net/modules/devices/openmoko.php from here] download and use dfu-util as normal :D - Simple, Eh?&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Screenshots ==&lt;br /&gt;
&lt;br /&gt;
Here are some screenshots of Qtopia runing on a Neo 1973. Personally I find it very impressive...&lt;br /&gt;
&lt;br /&gt;
[[Image:Qtopia001.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Qtopia002.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Qtopia003.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Qtopia004.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Qtopia005.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Qtopia006.png]]&lt;br /&gt;
&lt;br /&gt;
== Videos ==&lt;br /&gt;
&lt;br /&gt;
 http://www.youtube.com/watch?v=YW5q8SpY7t4&lt;br /&gt;
 http://www.youtube.com/watch?v=iOG_mtSEMgs&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Qtopia_on_Neo1973</id>
		<title>Qtopia on Neo1973</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Qtopia_on_Neo1973"/>
				<updated>2007-09-18T10:13:37Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* Screenshots */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Screenshots ==&lt;br /&gt;
&lt;br /&gt;
Here are some screenshots of Qtopia runing on a Neo 1973. Personally I find it very impressive...&lt;br /&gt;
&lt;br /&gt;
[[Image:Qtopia001.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Qtopia002.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Qtopia003.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Qtopia004.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Qtopia005.png]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Qtopia006.png]]&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Qtopia_on_Neo1973</id>
		<title>Qtopia on Neo1973</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Qtopia_on_Neo1973"/>
				<updated>2007-09-18T10:09:16Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Screenshots ==&lt;br /&gt;
&lt;br /&gt;
Here are some screenshots of Qtopia runing on a Neo 1973. Personally I find it very impressive...&lt;br /&gt;
&lt;br /&gt;
[[Image:Qtopia001.png]][[Image:Qtopia002.png]][[Image:Qtopia003.png]][[Image:Qtopia004.png]][[Image:Qtopia005.png]][[Image:Qtopia006.png]]&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/File:Qtopia006.png</id>
		<title>File:Qtopia006.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/File:Qtopia006.png"/>
				<updated>2007-09-18T10:09:04Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/File:Qtopia005.png</id>
		<title>File:Qtopia005.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/File:Qtopia005.png"/>
				<updated>2007-09-18T10:08:37Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/File:Qtopia004.png</id>
		<title>File:Qtopia004.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/File:Qtopia004.png"/>
				<updated>2007-09-18T10:07:55Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Qtopia_on_Neo1973</id>
		<title>Qtopia on Neo1973</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Qtopia_on_Neo1973"/>
				<updated>2007-09-18T10:07:10Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Screenshots ==&lt;br /&gt;
&lt;br /&gt;
Here are some screenshots of Qtopia runing on a Neo 1973. Personally I find it very impressive...&lt;br /&gt;
&lt;br /&gt;
[[Image:Qtopia001.png]][[Image:Qtopia002.png]][[Image:Qtopia003.png]]&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/File:Qtopia003.png</id>
		<title>File:Qtopia003.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/File:Qtopia003.png"/>
				<updated>2007-09-18T10:06:47Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/File:Qtopia002.png</id>
		<title>File:Qtopia002.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/File:Qtopia002.png"/>
				<updated>2007-09-18T10:06:13Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/File:Qtopia001.png</id>
		<title>File:Qtopia001.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/File:Qtopia001.png"/>
				<updated>2007-09-18T10:04:05Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Qtopia_on_Neo1973</id>
		<title>Qtopia on Neo1973</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Qtopia_on_Neo1973"/>
				<updated>2007-09-18T10:03:22Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* qtopia on neo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Screenshots ==&lt;br /&gt;
&lt;br /&gt;
Here are some screenshots of Qtopia runing on a Neo 1973. Personally I find it very impressive...&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Customizing_the_Openmoko_Distribution</id>
		<title>Customizing the Openmoko Distribution</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Customizing_the_Openmoko_Distribution"/>
				<updated>2007-09-02T13:55:48Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* Creating your own images */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What's the goal? ==&lt;br /&gt;
&lt;br /&gt;
The goal of this page is to teach you how to take an application that you've coded (or the sample app) and properly get it included in your rootfs. This article is a bit of an aggregate page, it's going to take information from [[MokoMakefile]], [[User:CesarB/Using a local overlay|Using a local overlay]], [[Building a hello world application]], and [[Create a package from existing sources]]. So as you can see the goal is for it to be a very thorough introduction, and will take you from &amp;quot;Idea to Inclusion&amp;quot; of your application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Setting Up the OpenMoko Environment ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; &lt;br /&gt;
 |*If you already have the environment setup then it is imperative that you update your Makefile.&lt;br /&gt;
Do this by running:&lt;br /&gt;
&amp;lt;pre&amp;gt;make update-makefile&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This part of the tutorial is going to be pretty basic. I absolutely love [[MokoMakefile]], it's fantastic, the creator has done and continues to do a fantastic job with this. I see absolutely no reason not to use it I put my OpenMoko development directory in /home/bryce/mokodev/ and that works great for me. You can feel free to do the same or put it anywhere else in your user directory (or anywhere on your system if you're feeling daring and a little nutty).&lt;br /&gt;
&lt;br /&gt;
To get your environment setup please get it setup according to [[MokoMakefile]] however if you do have the build environment setup manually and you're sure you know what you're doing then feel free to go forward with this.&lt;br /&gt;
&lt;br /&gt;
== Setting Up a Local Overlay ==&lt;br /&gt;
If you're at the point for setting up a local overlay this means a couple things. First: You've had a brilliant idea for an application that you just need to have on the OpenMoko platform. Second: You realize that this killer app of yours needs to be done properly and you're not going to do anything silly like include it in the actual tree for the OpenMoko distro because it would probably end up just getting overwritten eventually, or you just realize that it's bad practice!&lt;br /&gt;
&lt;br /&gt;
If you're wondering why and what a local overlay is then let me take this time to explain it to you. A local overlay is where you, as a developer keep your local files in an OE style setup so that you can simply pull your updated code into the tree. You add your overlay tree into the bitbake setup so that when you call bitbake it will pull your own or your customized packages before going to the OE or OpenMoko trees.This keeps everything nice and organized for you and also allows you to build/rebuild/include you apps by using the [[MokoMakefile]]&lt;br /&gt;
&lt;br /&gt;
Thank you to [[User:CesarB]] for this part of the wiki.&lt;br /&gt;
&lt;br /&gt;
To create a local overlay:&lt;br /&gt;
&lt;br /&gt;
* Create a &amp;quot;local&amp;quot; directory and its subdirectories&lt;br /&gt;
&lt;br /&gt;
 mkdir local local/conf local/classes local/packages local/packages/images local/packages/tasks&lt;br /&gt;
&lt;br /&gt;
* Copy &amp;lt;code&amp;gt;site.conf&amp;lt;/code&amp;gt; from the openmoko tree to &amp;lt;code&amp;gt;local/conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cp build/conf/site.conf local/conf/site.conf&lt;br /&gt;
&lt;br /&gt;
* Edit the local/conf/site.conf you copied to add the new tree as a source for bitbake recipes.&lt;br /&gt;
&lt;br /&gt;
Change the current &amp;lt;code&amp;gt;BBFILES&amp;lt;/code&amp;gt; to look like this:&lt;br /&gt;
 BBFILES := &amp;quot;${OMDIR}/openembedded/packages/*/*.bb ${OMDIR}/oe/packages/*/*.bb ${OMDIR}/local/packages/*/*.bb&amp;quot;&lt;br /&gt;
Change your &amp;lt;code&amp;gt;BBFILE_COLLECTIONS&amp;lt;/code&amp;gt; line to look like this:&lt;br /&gt;
 BBFILE_COLLECTIONS = &amp;quot;upstream local overlay&amp;quot;&lt;br /&gt;
Add this line:&lt;br /&gt;
 BBFILE_PATTERN_overlay = &amp;quot;^${OMDIR}/local/&amp;quot;&lt;br /&gt;
Add this line:&lt;br /&gt;
 BBFILE_PRIORITY_overlay = &amp;quot;20&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;BBFILE_PRIORITY&amp;lt;/code&amp;gt; should be greater than all the other &amp;lt;code&amp;gt;BBFILE_PRIORITY&amp;lt;/code&amp;gt; variables on the same file.&lt;br /&gt;
&lt;br /&gt;
* Change your &amp;lt;code&amp;gt;BBPATH&amp;lt;/code&amp;gt; environment variable to add the new tree ''before'' the two others in your &amp;lt;code&amp;gt;setup-env&amp;lt;/code&amp;gt; file.&amp;lt;code&amp;gt;setup-env&amp;lt;/code&amp;gt; is created by [[MokoMakefile]] automatically and is located in your &amp;lt;code&amp;gt;${OMDIR}&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
 export BBPATH=&amp;quot;${OMDIR}/build:${OMDIR}/local:${OMDIR}/oe:${OMDIR}/openembedded&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Using Your New Local Overlay ==&lt;br /&gt;
&lt;br /&gt;
=== Changing files in conf/ ===&lt;br /&gt;
&lt;br /&gt;
To change a file in conf/, just copy the file to the overlay tree (preserving the directory structure) and edit it.&lt;br /&gt;
&lt;br /&gt;
=== Changing files in classes/ ===&lt;br /&gt;
&lt;br /&gt;
To change a file in classes/, just copy the file to the overlay tree and edit it.&lt;br /&gt;
&lt;br /&gt;
=== Changing packages ===&lt;br /&gt;
&lt;br /&gt;
Changing a package's recipe is a bit more complex. You have to copy over (or symlink) not only the .bb file for the package, but also ''all'' the files it includes with &amp;lt;code&amp;gt;require&amp;lt;/code&amp;gt;, and the &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt; directories (all directories referred to by &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt;, usually named either ''package''-''version'' or &amp;lt;code&amp;gt;files&amp;lt;/code&amp;gt;). If you forget one of them, the build will give an error (either when parsing the recipe in the case of &amp;lt;code&amp;gt;require&amp;lt;/code&amp;gt;, or when trying to build in the case of the &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt; directories).&lt;br /&gt;
&lt;br /&gt;
=== Adding a new package ===&lt;br /&gt;
&lt;br /&gt;
You can add a new package (or a recipe for a new version of a package) to the overlay tree simply by creating it on the overlay tree.&lt;br /&gt;
&lt;br /&gt;
=== Creating your own images ===&lt;br /&gt;
&lt;br /&gt;
To create you own images we'll use the base openmoko .bb files and modify them so suit. Where you see ''scaredycat'' replace this with something to identify your own images.&lt;br /&gt;
&lt;br /&gt;
edit local/packages/images/scaredycat-openmoko-devel-image.bb and paste this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require scaredycat-openmoko-image.bb&lt;br /&gt;
&lt;br /&gt;
IMAGE_INSTALL += &amp;quot;task-openmoko-debug&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then edit local/packages/images/scaredycat-openmoko-image.bb&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#------------------------------------------------------&lt;br /&gt;
# OpenMoko Image Recipe&lt;br /&gt;
#------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
export IMAGE_BASENAME = &amp;quot;${PN}&amp;quot;&lt;br /&gt;
export IMAGE_LINGUAS = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export PACKAGE_INSTALL = &amp;quot;\&lt;br /&gt;
  ${MACHINE_TASK_PROVIDER} \&lt;br /&gt;
  task-openmoko-linux \&lt;br /&gt;
  task-openmoko-net \&lt;br /&gt;
  task-openmoko-ui \&lt;br /&gt;
  task-openmoko-base \&lt;br /&gt;
  task-openmoko-phone \&lt;br /&gt;
  task-openmoko-games \&lt;br /&gt;
  task-openmoko-pim \&lt;br /&gt;
  task-openmoko-scaredycat \&lt;br /&gt;
  &amp;quot;&lt;br /&gt;
&lt;br /&gt;
DEPENDS = &amp;quot;\&lt;br /&gt;
  ${MACHINE_TASK_PROVIDER} \&lt;br /&gt;
  task-openmoko \&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
RDEPENDS = &amp;quot;${PACKAGE_INSTALL}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inherit image&lt;br /&gt;
&lt;br /&gt;
LICENSE = MIT&lt;br /&gt;
&lt;br /&gt;
ROOTFS_POSTPROCESS_COMMAND += 'date &amp;quot;+%m%d%H%M%Y&amp;quot; &amp;gt;${IMAGE_ROOTFS}/etc/timestamp'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
edit packages/tasks/task-openmoko-scaredycat.bb - this is where we put the things we want to include in our image, above and beyond the standard image. This example includes '''[http://wiki.openmoko.org/wiki/Scummvm scummvm]''' and '''[http://www.handhelds.org/moin/moin.cgi/kbdd kbdd]'''. If you modify this file, make sure you update the '''PR''' by incrementing the number each time.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;OpenMoko: Scaredycat Additions&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;openmoko/base&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;original&amp;quot;&lt;br /&gt;
PR = &amp;quot;r2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inherit task&lt;br /&gt;
&lt;br /&gt;
RDEPENDS_task-openmoko-scaredycat = &amp;quot;\&lt;br /&gt;
  scummvm \&lt;br /&gt;
  kbdd \&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Actually building your image ====&lt;br /&gt;
&lt;br /&gt;
To build you image, which will be located with your other images, do the following:&lt;br /&gt;
&lt;br /&gt;
 # cd build ; . ../setup-env ; bitbake scaredycat-openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
== Your First Application ==&lt;br /&gt;
&lt;br /&gt;
I know that I said I'd have a GDK application in here, however, I'd really like to get this whole course done first and have you guys starting to code instead of just looking at what I've written!&lt;br /&gt;
&lt;br /&gt;
This will be a very simple CLI hello world.&lt;br /&gt;
&lt;br /&gt;
=== Before We Code ===&lt;br /&gt;
&lt;br /&gt;
Like a good coder you want to make sure that you're not just doing things, but that you're doing them the right way! &lt;br /&gt;
&lt;br /&gt;
Now change directories into your &amp;lt;code&amp;gt;local/packages&amp;lt;/code&amp;gt; directory.The following commands expect you'll be in that directory so don't change unless you know what you're doing!&lt;br /&gt;
&lt;br /&gt;
You'll want to make a directory with the name of your application, and a subdirectory called files.&lt;br /&gt;
  mkdir myhelloworld myhelloworld/files&lt;br /&gt;
Now you'll want to create two files in the &amp;lt;code&amp;gt;files&amp;lt;/code&amp;gt; directory&lt;br /&gt;
  touch myhelloworld/files/README.txt myhelloworld/files/myhelloworld.c&lt;br /&gt;
And finally you'll want to create a bitbake file.&lt;br /&gt;
  touch myhelloworld/myhelloworld.bb&lt;br /&gt;
&lt;br /&gt;
Alrighty now all your necessary files are created so lets go over this real quick.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$HOME&lt;br /&gt;
 +- $OMDIR (contains the official openmoko tree)&lt;br /&gt;
 |  +- local/&lt;br /&gt;
 |     +- packages/&lt;br /&gt;
 |        +- myhelloworld/&lt;br /&gt;
 |           +- myhelloworld.bb&lt;br /&gt;
 |           +- files/&lt;br /&gt;
 |              +- myhelloworld.c&lt;br /&gt;
 |              +- README.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That should be your structure, if it's not you should go and fix it up.&lt;br /&gt;
=== Filling the Files ===&lt;br /&gt;
&lt;br /&gt;
So you've got your sample files all laid out now it's time to make them actually do something.&lt;br /&gt;
&lt;br /&gt;
myhelloworld.c&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char** argv)&lt;br /&gt;
{&lt;br /&gt;
        printf(&amp;quot;Ello Poppet!\n&amp;quot;);&lt;br /&gt;
        return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
README.txt&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This is a command line application. It prints a simple Hello World! To stdout.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
myhelloworld.bb&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;A killer hello world application&amp;quot;&lt;br /&gt;
AUTHOR = &amp;quot;Bryce Leo&amp;quot;&lt;br /&gt;
HOMEPAGE = &amp;quot;&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;console/applications&amp;quot;&lt;br /&gt;
PRIORITY = &amp;quot;optional&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;MIT&amp;quot;&lt;br /&gt;
#DEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RDEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RRECOMMENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RCONFLICTS = &amp;quot;&amp;quot;&lt;br /&gt;
#SRCDATE = &amp;quot;20070729&amp;quot;&lt;br /&gt;
#PV = &amp;quot;0.1&amp;quot;&lt;br /&gt;
#PR = &amp;quot;r0&amp;quot;&lt;br /&gt;
SRC_URI = &amp;quot;file://myhelloworld.c \&lt;br /&gt;
          file://README.txt &amp;quot;&lt;br /&gt;
&lt;br /&gt;
S = &amp;quot;${WORKDIR}/myhelloworld/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
do_compile() {&lt;br /&gt;
        ${CC} ${CFLAGS} ${LDFLAGS} ${WORKDIR}/myhelloworld.c -o myhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
do_install() {&lt;br /&gt;
        install -m 0755 -d ${D}${bindir} ${D}${docdir}/myhelloworld&lt;br /&gt;
        install -m 0755 ${S}/myhelloworld ${D}${bindir}&lt;br /&gt;
        install -m 0644 ${WORKDIR}/README.txt ${D}${docdir}/myhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Your First Compilation ===&lt;br /&gt;
&lt;br /&gt;
This is where the [[MokoMakefile]] comes in very very handy. Change to your ${OMDIR} directory, You'll know it by the fact that it is where &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt; resides.&lt;br /&gt;
 make build-package-myhelloworld&lt;br /&gt;
&lt;br /&gt;
(make sure you run make openmoko-devel-image at least once before building your own packages)&lt;br /&gt;
&lt;br /&gt;
This should all come back and not return any error messages, The output should end in something similar to&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NOTE: package myhelloworld-1.0: completed&lt;br /&gt;
NOTE: build 200707291926: completed&lt;br /&gt;
Build statistics:&lt;br /&gt;
  Attempted builds: 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that no errors were thrown we are happily done!&lt;br /&gt;
&lt;br /&gt;
== Adding Your Application to the Image ==&lt;br /&gt;
&lt;br /&gt;
So you've had an idea, you've setup the build environment, you've setup your local overlay, you've laid out your application tree, you've put code into those fantastic files of yours and now it compiles.There's only one thing left to do. Add that application to your image.&lt;br /&gt;
&lt;br /&gt;
Now lets go over in words and whys what we're about to do. First we need to make modify the &amp;lt;code&amp;gt;${OMDIR}/build/conf/local.conf&amp;lt;/code&amp;gt;. We add in the variable &amp;lt;code&amp;gt;DISTRO_EXTRA_RDEPENDS&amp;lt;/code&amp;gt; and set its value to include &amp;lt;code&amp;gt;myhelloworld&amp;lt;/code&amp;gt;. If you'd like to include other packages from your own overlay or the OM tree just add them inseparated by spaces. After this gets added as a dependency to build the Distro (in this case OpenMoko). Now we have to re-build the task-base package. This essentially just generates an ipk file that will &amp;quot;Merge machine and distro options to create a basic machine task/package.&amp;quot; It pretty much builds a file with a list of packages to be installed that are required for the distro to work correctly. So then you just go through and make &amp;lt;code&amp;gt;openmoko-devel-image, build-qemu, flash-qemu-local,&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;run-qemu&amp;lt;/code&amp;gt;. Then calibrate your stylus, head over to the terminal, and run your application!&lt;br /&gt;
&lt;br /&gt;
=== Modifying Your local.conf ===&lt;br /&gt;
Now, go into your build config directory &amp;lt;code&amp;gt;${OMDIR}/build/conf/&amp;lt;/code&amp;gt; and now you'll be editing &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
Add this line to you &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld&amp;quot;&lt;br /&gt;
With this line you can also include other applications from the OE tree. For instance my &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; looks like this.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MACHINE = &amp;quot;fic-gta01&amp;quot;&lt;br /&gt;
DISTRO = &amp;quot;openmoko&amp;quot;&lt;br /&gt;
BUILD_ARCH = &amp;quot;i686&amp;quot;&lt;br /&gt;
SRCDATE_eds-dbus = &amp;quot;now&amp;quot;&lt;br /&gt;
DISTRO_EXTRA_RDEPENDS += &amp;quot;lua dillo myhelloworld&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that you've fixed your &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; it's time to go through all the necessary tasks to add and re-build you image and have your sweet package included.&lt;br /&gt;
&lt;br /&gt;
=== Building ===&lt;br /&gt;
Now come the easy part thanks to [[MokoMakefile]]. &lt;br /&gt;
&lt;br /&gt;
  make rebuild-package-task-base&lt;br /&gt;
  make openmoko-devel-image&lt;br /&gt;
  make build-qemu&lt;br /&gt;
  make flash-qemu-local&lt;br /&gt;
&lt;br /&gt;
Now all you have to do is run qemu.&lt;br /&gt;
  make run-qemu&lt;br /&gt;
&lt;br /&gt;
From here after you calibrate your stylus, you click on the Menu in the top right, click down to terminal, then just run your program.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@fic-gta02:/$ myhelloworld&lt;br /&gt;
Ello Poppet!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Adding Python scripts as applications==&lt;br /&gt;
This is for adding python scripts/packages to the image for your own use.&lt;br /&gt;
===First steps===&lt;br /&gt;
First, you need to modify the &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; file as described above. You need to modify &lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld&amp;quot;&lt;br /&gt;
to&lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld python&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--[[User:Xkr47|xkr47]] 18:21, 11 August 2007 (CEST) Hmm surely the new line should be DISTRO_EXTRA_RDEPENDS += &amp;quot;pyhelloworld python&amp;quot; instead since the package we create below is pyhelloworld..&lt;br /&gt;
&lt;br /&gt;
This is because python is not included by default in the openmoko image. Or you can use &amp;lt;code&amp;gt;python-pygtk2&amp;lt;/code&amp;gt; if you wish.&lt;br /&gt;
&lt;br /&gt;
Next, you need to perform these actions from the &amp;lt;code&amp;gt;$OMDIR/local&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
  mkdir packages/pyhelloworld packages/pyhelloworld/files&lt;br /&gt;
&lt;br /&gt;
  touch packages/pyhelloworld/files/pyhello packages/pyhelloworld/README.txt&lt;br /&gt;
&lt;br /&gt;
  touch packages/pyhelloworld/pyhelloworld.bb&lt;br /&gt;
&lt;br /&gt;
===Filling in the files===&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;packages/pyhelloworld/files/pyhello&amp;lt;/code&amp;gt; to contain:&lt;br /&gt;
&amp;lt;pre&amp;gt;  &lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;hello world!&amp;quot;&lt;br /&gt;
print &amp;quot;shutting down now. Farewell oh cruel, cruel world!&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
Next up, is editing &amp;lt;code&amp;gt;packages/pyhelloworld/files/README.txt&amp;lt;/code&amp;gt; to say:&lt;br /&gt;
&lt;br /&gt;
  This is the most awesome helloworld application ever. Know why? It has SNAKES!&lt;br /&gt;
&lt;br /&gt;
Kidding aside, next is the all important &amp;lt;code&amp;gt; packages/pyhelloworld/pyhelloworld.bb:&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;A pythonic hello world application&amp;quot;&lt;br /&gt;
AUTHOR = &amp;quot;Tyler Laing&amp;quot;&lt;br /&gt;
HOMEPAGE = &amp;quot;&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;console/applications&amp;quot;&lt;br /&gt;
PRIORITY = &amp;quot;optional&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;MIT&amp;quot;&lt;br /&gt;
#DEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RDEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RRECOMMENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RCONFLICTS = &amp;quot;&amp;quot;&lt;br /&gt;
#SRCDATE = &amp;quot;20070729&amp;quot;&lt;br /&gt;
#PV = &amp;quot;0.1&amp;quot;&lt;br /&gt;
#PR = &amp;quot;r0&amp;quot;&lt;br /&gt;
SRC_URI = &amp;quot;file://pyhello \&lt;br /&gt;
          file://README.txt &amp;quot;&lt;br /&gt;
&lt;br /&gt;
S = &amp;quot;${WORKDIR}/pyhelloworld/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
do_install() {&lt;br /&gt;
        install -m 0755 -d ${D}${bindir} ${D}${docdir}/pyhelloworld&lt;br /&gt;
        install -m 0755 ${WORKDIR}/pyhello ${D}${bindir}&lt;br /&gt;
        install -m 0644 ${WORKDIR}/README.txt ${D}${docdir}/pyhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I'll explain each of the parts right here, for future reference.&lt;br /&gt;
&lt;br /&gt;
====Meanings of variables in .bb files====&lt;br /&gt;
&lt;br /&gt;
  $WORKDIR = $OMDIR/local/packages/&amp;lt;application directory&amp;gt;&lt;br /&gt;
  $bindir  = $OMDIR/build/tmp/work/armv4t-linux/&amp;lt;application directory&amp;gt;/image/usr/bin&lt;br /&gt;
  $docir   = $OMDIR/build/tmp/work/armv4t-linux/&amp;lt;application directory&amp;gt;/image/usr/share/doc&lt;br /&gt;
  $D       = $OMDIR/build/&lt;br /&gt;
&lt;br /&gt;
====Final steps====&lt;br /&gt;
Complete the last steps as per the above instructions, from the point of altering &amp;lt;code&amp;gt;DISTRO_EXTRA_RDEPENDS&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
And your done!&lt;br /&gt;
&lt;br /&gt;
[[Category:Applications]]&lt;br /&gt;
[[Category:OpenMoko]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Customizing_the_Openmoko_Distribution</id>
		<title>Customizing the Openmoko Distribution</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Customizing_the_Openmoko_Distribution"/>
				<updated>2007-08-29T21:41:30Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* Creating your own images */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What's the goal? ==&lt;br /&gt;
&lt;br /&gt;
The goal of this page is to teach you how to take an application that you've coded (or the sample app) and properly get it included in your rootfs. This article is a bit of an aggregate page, it's going to take information from [[MokoMakefile]], [[User:CesarB/Using a local overlay|Using a local overlay]], [[Building a hello world application]], and [[Create a package from existing sources]]. So as you can see the goal is for it to be a very thorough introduction, and will take you from &amp;quot;Idea to Inclusion&amp;quot; of your application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Setting Up the OpenMoko Environment ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; &lt;br /&gt;
 |*If you already have the environment setup then it is imperative that you update your Makefile.&lt;br /&gt;
Do this by running:&lt;br /&gt;
&amp;lt;pre&amp;gt;make update-makefile&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This part of the tutorial is going to be pretty basic. I absolutely love [[MokoMakefile]], it's fantastic, the creator has done and continues to do a fantastic job with this. I see absolutely no reason not to use it I put my OpenMoko development directory in /home/bryce/mokodev/ and that works great for me. You can feel free to do the same or put it anywhere else in your user directory (or anywhere on your system if you're feeling daring and a little nutty).&lt;br /&gt;
&lt;br /&gt;
To get your environment setup please get it setup according to [[MokoMakefile]] however if you do have the build environment setup manually and you're sure you know what you're doing then feel free to go forward with this.&lt;br /&gt;
&lt;br /&gt;
== Setting Up a Local Overlay ==&lt;br /&gt;
If you're at the point for setting up a local overlay this means a couple things. First: You've had a brilliant idea for an application that you just need to have on the OpenMoko platform. Second: You realize that this killer app of yours needs to be done properly and you're not going to do anything silly like include it in the actual tree for the OpenMoko distro because it would probably end up just getting overwritten eventually, or you just realize that it's bad practice!&lt;br /&gt;
&lt;br /&gt;
If you're wondering why and what a local overlay is then let me take this time to explain it to you. A local overlay is where you, as a developer keep your local files in an OE style setup so that you can simply pull your updated code into the tree. You add your overlay tree into the bitbake setup so that when you call bitbake it will pull your own or your customized packages before going to the OE or OpenMoko trees.This keeps everything nice and organized for you and also allows you to build/rebuild/include you apps by using the [[MokoMakefile]]&lt;br /&gt;
&lt;br /&gt;
Thank you to [[User:CesarB]] for this part of the wiki.&lt;br /&gt;
&lt;br /&gt;
To create a local overlay:&lt;br /&gt;
&lt;br /&gt;
* Create a &amp;quot;local&amp;quot; directory and its subdirectories&lt;br /&gt;
&lt;br /&gt;
 mkdir local local/conf local/classes local/packages local/packages/images local/packages/tasks&lt;br /&gt;
&lt;br /&gt;
* Copy &amp;lt;code&amp;gt;site.conf&amp;lt;/code&amp;gt; from the openmoko tree to &amp;lt;code&amp;gt;local/conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cp oe/conf/site.conf local/conf/site.conf&lt;br /&gt;
&lt;br /&gt;
* Edit the local/conf/site.conf you copied to add the new tree as a source for bitbake recipes.&lt;br /&gt;
&lt;br /&gt;
Change the current &amp;lt;code&amp;gt;BBFILES&amp;lt;/code&amp;gt; to look like this:&lt;br /&gt;
 BBFILES := &amp;quot;${OMDIR}/openembedded/packages/*/*.bb ${OMDIR}/oe/packages/*/*.bb ${OMDIR}/local/packages/*/*.bb&amp;quot;&lt;br /&gt;
Change your &amp;lt;code&amp;gt;BBFILE_COLLECTIONS&amp;lt;/code&amp;gt; line to look like this:&lt;br /&gt;
 BBFILE_COLLECTIONS = &amp;quot;upstream local overlay&amp;quot;&lt;br /&gt;
Add this line:&lt;br /&gt;
 BBFILE_PATTERN_overlay = &amp;quot;^${OMDIR}/local/&amp;quot;&lt;br /&gt;
Add this line:&lt;br /&gt;
 BBFILE_PRIORITY_overlay = &amp;quot;20&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;BBFILE_PRIORITY&amp;lt;/code&amp;gt; should be greater than all the other &amp;lt;code&amp;gt;BBFILE_PRIORITY&amp;lt;/code&amp;gt; variables on the same file.&lt;br /&gt;
&lt;br /&gt;
* Change your &amp;lt;code&amp;gt;BBPATH&amp;lt;/code&amp;gt; environment variable to add the new tree ''before'' the two others in your &amp;lt;code&amp;gt;setup-env&amp;lt;/code&amp;gt; file.&amp;lt;code&amp;gt;setup-env&amp;lt;/code&amp;gt; is created by [[MokoMakefile]] automatically and is located in your &amp;lt;code&amp;gt;${OMDIR}&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
 export BBPATH=&amp;quot;${OMDIR}/build:${OMDIR}/local:${OMDIR}/oe:${OMDIR}/openembedded&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Using Your New Local Overlay ==&lt;br /&gt;
&lt;br /&gt;
=== Changing files in conf/ ===&lt;br /&gt;
&lt;br /&gt;
To change a file in conf/, just copy the file to the overlay tree (preserving the directory structure) and edit it.&lt;br /&gt;
&lt;br /&gt;
=== Changing files in classes/ ===&lt;br /&gt;
&lt;br /&gt;
To change a file in classes/, just copy the file to the overlay tree and edit it.&lt;br /&gt;
&lt;br /&gt;
=== Changing packages ===&lt;br /&gt;
&lt;br /&gt;
Changing a package's recipe is a bit more complex. You have to copy over (or symlink) not only the .bb file for the package, but also ''all'' the files it includes with &amp;lt;code&amp;gt;require&amp;lt;/code&amp;gt;, and the &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt; directories (all directories referred to by &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt;, usually named either ''package''-''version'' or &amp;lt;code&amp;gt;files&amp;lt;/code&amp;gt;). If you forget one of them, the build will give an error (either when parsing the recipe in the case of &amp;lt;code&amp;gt;require&amp;lt;/code&amp;gt;, or when trying to build in the case of the &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt; directories).&lt;br /&gt;
&lt;br /&gt;
=== Adding a new package ===&lt;br /&gt;
&lt;br /&gt;
You can add a new package (or a recipe for a new version of a package) to the overlay tree simply by creating it on the overlay tree.&lt;br /&gt;
&lt;br /&gt;
=== Creating your own images ===&lt;br /&gt;
&lt;br /&gt;
To create you own images we'll use the base openmoko .bb files and modify them so suit. Where you see ''scaredycat'' replace this with something to identify your own images.&lt;br /&gt;
&lt;br /&gt;
edit local/packages/images/scaredycat-openmoko-devel-image.bb and paste this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require scaredycat-openmoko-image.bb&lt;br /&gt;
 &lt;br /&gt;
export PACKAGE_INSTALL += &amp;quot;\&lt;br /&gt;
  task-openmoko-debug \&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then edit local/packages/images/scaredycat-openmoko-image.bb&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#------------------------------------------------------&lt;br /&gt;
# OpenMoko Image Recipe&lt;br /&gt;
#------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
export IMAGE_BASENAME = &amp;quot;${PN}&amp;quot;&lt;br /&gt;
export IMAGE_LINGUAS = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export PACKAGE_INSTALL = &amp;quot;\&lt;br /&gt;
  ${MACHINE_TASK_PROVIDER} \&lt;br /&gt;
  task-openmoko-linux \&lt;br /&gt;
  task-openmoko-net \&lt;br /&gt;
  task-openmoko-ui \&lt;br /&gt;
  task-openmoko-base \&lt;br /&gt;
  task-openmoko-phone \&lt;br /&gt;
  task-openmoko-games \&lt;br /&gt;
  task-openmoko-pim \&lt;br /&gt;
  task-openmoko-scaredycat \&lt;br /&gt;
  &amp;quot;&lt;br /&gt;
&lt;br /&gt;
DEPENDS = &amp;quot;\&lt;br /&gt;
  ${MACHINE_TASK_PROVIDER} \&lt;br /&gt;
  task-openmoko \&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
RDEPENDS = &amp;quot;${PACKAGE_INSTALL}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inherit image&lt;br /&gt;
&lt;br /&gt;
LICENSE = MIT&lt;br /&gt;
&lt;br /&gt;
ROOTFS_POSTPROCESS_COMMAND += 'date &amp;quot;+%m%d%H%M%Y&amp;quot; &amp;gt;${IMAGE_ROOTFS}/etc/timestamp'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
edit packages/tasks/task-openmoko-scaredycat.bb - this is where we put the things we want to include in our image, above and beyond the standard image. This example includes '''[http://wiki.openmoko.org/wiki/Scummvm scummvm]''' and '''[http://www.handhelds.org/moin/moin.cgi/kbdd kbdd]'''. If you modify this file, make sure you update the '''PR''' by incrementing the number each time.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;OpenMoko: Scaredycat Additions&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;openmoko/base&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;original&amp;quot;&lt;br /&gt;
PR = &amp;quot;r2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inherit task&lt;br /&gt;
&lt;br /&gt;
RDEPENDS_task-openmoko-scaredycat = &amp;quot;\&lt;br /&gt;
  scummvm \&lt;br /&gt;
  kbdd \&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Actually building your image ====&lt;br /&gt;
&lt;br /&gt;
To build you image, which will be located with your other images, do the following:&lt;br /&gt;
&lt;br /&gt;
 # cd build ; . ../setup-env ; bitbake scaredycat-openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
== Your First Application ==&lt;br /&gt;
&lt;br /&gt;
I know that I said I'd have a GDK application in here, however, I'd really like to get this whole course done first and have you guys starting to code instead of just looking at what I've written!&lt;br /&gt;
&lt;br /&gt;
This will be a very simple CLI hello world.&lt;br /&gt;
&lt;br /&gt;
=== Before We Code ===&lt;br /&gt;
&lt;br /&gt;
Like a good coder you want to make sure that you're not just doing things, but that you're doing them the right way! &lt;br /&gt;
&lt;br /&gt;
Now change directories into your &amp;lt;code&amp;gt;local/packages&amp;lt;/code&amp;gt; directory.The following commands expect you'll be in that directory so don't change unless you know what you're doing!&lt;br /&gt;
&lt;br /&gt;
You'll want to make a directory with the name of your application, and a subdirectory called files.&lt;br /&gt;
  mkdir myhelloworld myhelloworld/files&lt;br /&gt;
Now you'll want to create two files in the &amp;lt;code&amp;gt;files&amp;lt;/code&amp;gt; directory&lt;br /&gt;
  touch myhelloworld/files/README.txt myhelloworld/files/myhelloworld.c&lt;br /&gt;
And finally you'll want to create a bitbake file.&lt;br /&gt;
  touch myhelloworld/myhelloworld.bb&lt;br /&gt;
&lt;br /&gt;
Alrighty now all your necessary files are created so lets go over this real quick.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$HOME&lt;br /&gt;
 +- $OMDIR (contains the official openmoko tree)&lt;br /&gt;
 |  +- local/&lt;br /&gt;
 |     +- packages/&lt;br /&gt;
 |        +- myhelloworld/&lt;br /&gt;
 |           +- myhelloworld.bb&lt;br /&gt;
 |           +- files/&lt;br /&gt;
 |              +- myhelloworld.c&lt;br /&gt;
 |              +- README.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That should be your structure, if it's not you should go and fix it up.&lt;br /&gt;
=== Filling the Files ===&lt;br /&gt;
&lt;br /&gt;
So you've got your sample files all laid out now it's time to make them actually do something.&lt;br /&gt;
&lt;br /&gt;
myhelloworld.c&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char** argv)&lt;br /&gt;
{&lt;br /&gt;
        printf(&amp;quot;Ello Poppet!\n&amp;quot;);&lt;br /&gt;
        return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
README.txt&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This is a command line application. It prints a simple Hello World! To stdout.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
myhelloworld.bb&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;A killer hello world application&amp;quot;&lt;br /&gt;
AUTHOR = &amp;quot;Bryce Leo&amp;quot;&lt;br /&gt;
HOMEPAGE = &amp;quot;&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;console/applications&amp;quot;&lt;br /&gt;
PRIORITY = &amp;quot;optional&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;MIT&amp;quot;&lt;br /&gt;
#DEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RDEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RRECOMMENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RCONFLICTS = &amp;quot;&amp;quot;&lt;br /&gt;
#SRCDATE = &amp;quot;20070729&amp;quot;&lt;br /&gt;
#PV = &amp;quot;0.1&amp;quot;&lt;br /&gt;
#PR = &amp;quot;r0&amp;quot;&lt;br /&gt;
SRC_URI = &amp;quot;file://myhelloworld.c \&lt;br /&gt;
          file://README.txt &amp;quot;&lt;br /&gt;
&lt;br /&gt;
S = &amp;quot;${WORKDIR}/myhelloworld/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
do_compile() {&lt;br /&gt;
        ${CC} ${CFLAGS} ${LDFLAGS} ${WORKDIR}/myhelloworld.c -o myhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
do_install() {&lt;br /&gt;
        install -m 0755 -d ${D}${bindir} ${D}${docdir}/myhelloworld&lt;br /&gt;
        install -m 0755 ${S}/myhelloworld ${D}${bindir}&lt;br /&gt;
        install -m 0644 ${WORKDIR}/README.txt ${D}${docdir}/myhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Your First Compilation ===&lt;br /&gt;
&lt;br /&gt;
This is where the [[MokoMakefile]] comes in very very handy. Change to your ${OMDIR} directory, You'll know it by the fact that it is where &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt; resides.&lt;br /&gt;
 make build-package-myhelloworld&lt;br /&gt;
&lt;br /&gt;
(make sure you run make openmoko-devel-image at least once before building your own packages)&lt;br /&gt;
&lt;br /&gt;
This should all come back and not return any error messages, The output should end in something similar to&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NOTE: package myhelloworld-1.0: completed&lt;br /&gt;
NOTE: build 200707291926: completed&lt;br /&gt;
Build statistics:&lt;br /&gt;
  Attempted builds: 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that no errors were thrown we are happily done!&lt;br /&gt;
&lt;br /&gt;
== Adding Your Application to the Image ==&lt;br /&gt;
&lt;br /&gt;
So you've had an idea, you've setup the build environment, you've setup your local overlay, you've laid out your application tree, you've put code into those fantastic files of yours and now it compiles.There's only one thing left to do. Add that application to your image.&lt;br /&gt;
&lt;br /&gt;
Now lets go over in words and whys what we're about to do. First we need to make modify the &amp;lt;code&amp;gt;${OMDIR}/build/conf/local.conf&amp;lt;/code&amp;gt;. We add in the variable &amp;lt;code&amp;gt;DISTRO_EXTRA_RDEPENDS&amp;lt;/code&amp;gt; and set its value to include &amp;lt;code&amp;gt;myhelloworld&amp;lt;/code&amp;gt;. If you'd like to include other packages from your own overlay or the OM tree just add them inseparated by spaces. After this gets added as a dependency to build the Distro (in this case OpenMoko). Now we have to re-build the task-base package. This essentially just generates an ipk file that will &amp;quot;Merge machine and distro options to create a basic machine task/package.&amp;quot; It pretty much builds a file with a list of packages to be installed that are required for the distro to work correctly. So then you just go through and make &amp;lt;code&amp;gt;openmoko-devel-image, build-qemu, flash-qemu-local,&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;run-qemu&amp;lt;/code&amp;gt;. Then calibrate your stylus, head over to the terminal, and run your application!&lt;br /&gt;
&lt;br /&gt;
=== Modifying Your local.conf ===&lt;br /&gt;
Now, go into your build config directory &amp;lt;code&amp;gt;${OMDIR}/build/conf/&amp;lt;/code&amp;gt; and now you'll be editing &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
Add this line to you &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld&amp;quot;&lt;br /&gt;
With this line you can also include other applications from the OE tree. For instance my &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; looks like this.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MACHINE = &amp;quot;fic-gta01&amp;quot;&lt;br /&gt;
DISTRO = &amp;quot;openmoko&amp;quot;&lt;br /&gt;
BUILD_ARCH = &amp;quot;i686&amp;quot;&lt;br /&gt;
SRCDATE_eds-dbus = &amp;quot;now&amp;quot;&lt;br /&gt;
DISTRO_EXTRA_RDEPENDS += &amp;quot;lua dillo myhelloworld&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that you've fixed your &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; it's time to go through all the necessary tasks to add and re-build you image and have your sweet package included.&lt;br /&gt;
&lt;br /&gt;
=== Building ===&lt;br /&gt;
Now come the easy part thanks to [[MokoMakefile]]. &lt;br /&gt;
&lt;br /&gt;
  make rebuild-package-task-base&lt;br /&gt;
  make openmoko-devel-image&lt;br /&gt;
  make build-qemu&lt;br /&gt;
  make flash-qemu-local&lt;br /&gt;
&lt;br /&gt;
Now all you have to do is run qemu.&lt;br /&gt;
  make run-qemu&lt;br /&gt;
&lt;br /&gt;
From here after you calibrate your stylus, you click on the Menu in the top right, click down to terminal, then just run your program.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@fic-gta02:/$ myhelloworld&lt;br /&gt;
Ello Poppet!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Adding Python scripts as applications==&lt;br /&gt;
This is for adding python scripts/packages to the image for your own use.&lt;br /&gt;
===First steps===&lt;br /&gt;
First, you need to modify the &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; file as described above. You need to modify &lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld&amp;quot;&lt;br /&gt;
to&lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld python&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--[[User:Xkr47|xkr47]] 18:21, 11 August 2007 (CEST) Hmm surely the new line should be DISTRO_EXTRA_RDEPENDS += &amp;quot;pyhelloworld python&amp;quot; instead since the package we create below is pyhelloworld..&lt;br /&gt;
&lt;br /&gt;
This is because python is not included by default in the openmoko image. Or you can use &amp;lt;code&amp;gt;python-pygtk2&amp;lt;/code&amp;gt; if you wish.&lt;br /&gt;
&lt;br /&gt;
Next, you need to perform these actions from the &amp;lt;code&amp;gt;$OMDIR/local&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
  mkdir packages/pyhelloworld packages/pyhelloworld/files&lt;br /&gt;
&lt;br /&gt;
  touch packages/pyhelloworld/files/pyhello packages/pyhelloworld/README.txt&lt;br /&gt;
&lt;br /&gt;
  touch packages/pyhelloworld/pyhelloworld.bb&lt;br /&gt;
&lt;br /&gt;
===Filling in the files===&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;packages/pyhelloworld/files/pyhello&amp;lt;/code&amp;gt; to contain:&lt;br /&gt;
&amp;lt;pre&amp;gt;  &lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;hello world!&amp;quot;&lt;br /&gt;
print &amp;quot;shutting down now. Farewell oh cruel, cruel world!&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
Next up, is editing &amp;lt;code&amp;gt;packages/pyhelloworld/files/README.txt&amp;lt;/code&amp;gt; to say:&lt;br /&gt;
&lt;br /&gt;
  This is the most awesome helloworld application ever. Know why? It has SNAKES!&lt;br /&gt;
&lt;br /&gt;
Kidding aside, next is the all important &amp;lt;code&amp;gt; packages/pyhelloworld/pyhelloworld.bb:&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;A pythonic hello world application&amp;quot;&lt;br /&gt;
AUTHOR = &amp;quot;Tyler Laing&amp;quot;&lt;br /&gt;
HOMEPAGE = &amp;quot;&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;console/applications&amp;quot;&lt;br /&gt;
PRIORITY = &amp;quot;optional&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;MIT&amp;quot;&lt;br /&gt;
#DEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RDEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RRECOMMENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RCONFLICTS = &amp;quot;&amp;quot;&lt;br /&gt;
#SRCDATE = &amp;quot;20070729&amp;quot;&lt;br /&gt;
#PV = &amp;quot;0.1&amp;quot;&lt;br /&gt;
#PR = &amp;quot;r0&amp;quot;&lt;br /&gt;
SRC_URI = &amp;quot;file://pyhello \&lt;br /&gt;
          file://README.txt &amp;quot;&lt;br /&gt;
&lt;br /&gt;
S = &amp;quot;${WORKDIR}/pyhelloworld/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
do_install() {&lt;br /&gt;
        install -m 0755 -d ${D}${bindir} ${D}${docdir}/pyhelloworld&lt;br /&gt;
        install -m 0755 ${WORKDIR}/pyhello ${D}${bindir}&lt;br /&gt;
        install -m 0644 ${WORKDIR}/README.txt ${D}${docdir}/pyhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I'll explain each of the parts right here, for future reference.&lt;br /&gt;
&lt;br /&gt;
====Meanings of variables in .bb files====&lt;br /&gt;
&lt;br /&gt;
  $WORKDIR = $OMDIR/local/packages/&amp;lt;application directory&amp;gt;&lt;br /&gt;
  $bindir  = $OMDIR/build/tmp/work/armv4t-linux/&amp;lt;application directory&amp;gt;/image/usr/bin&lt;br /&gt;
  $docir   = $OMDIR/build/tmp/work/armv4t-linux/&amp;lt;application directory&amp;gt;/image/usr/share/doc&lt;br /&gt;
  $D       = $OMDIR/build/&lt;br /&gt;
&lt;br /&gt;
====Final steps====&lt;br /&gt;
Complete the last steps as per the above instructions, from the point of altering &amp;lt;code&amp;gt;DISTRO_EXTRA_RDEPENDS&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
And your done!&lt;br /&gt;
&lt;br /&gt;
[[Category:Applications]]&lt;br /&gt;
[[Category:OpenMoko]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Customizing_the_Openmoko_Distribution</id>
		<title>Customizing the Openmoko Distribution</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Customizing_the_Openmoko_Distribution"/>
				<updated>2007-08-29T21:34:09Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* Creating your own images */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What's the goal? ==&lt;br /&gt;
&lt;br /&gt;
The goal of this page is to teach you how to take an application that you've coded (or the sample app) and properly get it included in your rootfs. This article is a bit of an aggregate page, it's going to take information from [[MokoMakefile]], [[User:CesarB/Using a local overlay|Using a local overlay]], [[Building a hello world application]], and [[Create a package from existing sources]]. So as you can see the goal is for it to be a very thorough introduction, and will take you from &amp;quot;Idea to Inclusion&amp;quot; of your application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Setting Up the OpenMoko Environment ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; &lt;br /&gt;
 |*If you already have the environment setup then it is imperative that you update your Makefile.&lt;br /&gt;
Do this by running:&lt;br /&gt;
&amp;lt;pre&amp;gt;make update-makefile&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This part of the tutorial is going to be pretty basic. I absolutely love [[MokoMakefile]], it's fantastic, the creator has done and continues to do a fantastic job with this. I see absolutely no reason not to use it I put my OpenMoko development directory in /home/bryce/mokodev/ and that works great for me. You can feel free to do the same or put it anywhere else in your user directory (or anywhere on your system if you're feeling daring and a little nutty).&lt;br /&gt;
&lt;br /&gt;
To get your environment setup please get it setup according to [[MokoMakefile]] however if you do have the build environment setup manually and you're sure you know what you're doing then feel free to go forward with this.&lt;br /&gt;
&lt;br /&gt;
== Setting Up a Local Overlay ==&lt;br /&gt;
If you're at the point for setting up a local overlay this means a couple things. First: You've had a brilliant idea for an application that you just need to have on the OpenMoko platform. Second: You realize that this killer app of yours needs to be done properly and you're not going to do anything silly like include it in the actual tree for the OpenMoko distro because it would probably end up just getting overwritten eventually, or you just realize that it's bad practice!&lt;br /&gt;
&lt;br /&gt;
If you're wondering why and what a local overlay is then let me take this time to explain it to you. A local overlay is where you, as a developer keep your local files in an OE style setup so that you can simply pull your updated code into the tree. You add your overlay tree into the bitbake setup so that when you call bitbake it will pull your own or your customized packages before going to the OE or OpenMoko trees.This keeps everything nice and organized for you and also allows you to build/rebuild/include you apps by using the [[MokoMakefile]]&lt;br /&gt;
&lt;br /&gt;
Thank you to [[User:CesarB]] for this part of the wiki.&lt;br /&gt;
&lt;br /&gt;
To create a local overlay:&lt;br /&gt;
&lt;br /&gt;
* Create a &amp;quot;local&amp;quot; directory and its subdirectories&lt;br /&gt;
&lt;br /&gt;
 mkdir local local/conf local/classes local/packages local/packages/images local/packages/tasks&lt;br /&gt;
&lt;br /&gt;
* Copy &amp;lt;code&amp;gt;site.conf&amp;lt;/code&amp;gt; from the openmoko tree to &amp;lt;code&amp;gt;local/conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cp oe/conf/site.conf local/conf/site.conf&lt;br /&gt;
&lt;br /&gt;
* Edit the local/conf/site.conf you copied to add the new tree as a source for bitbake recipes.&lt;br /&gt;
&lt;br /&gt;
Change the current &amp;lt;code&amp;gt;BBFILES&amp;lt;/code&amp;gt; to look like this:&lt;br /&gt;
 BBFILES := &amp;quot;${OMDIR}/openembedded/packages/*/*.bb ${OMDIR}/oe/packages/*/*.bb ${OMDIR}/local/packages/*/*.bb&amp;quot;&lt;br /&gt;
Change your &amp;lt;code&amp;gt;BBFILE_COLLECTIONS&amp;lt;/code&amp;gt; line to look like this:&lt;br /&gt;
 BBFILE_COLLECTIONS = &amp;quot;upstream local overlay&amp;quot;&lt;br /&gt;
Add this line:&lt;br /&gt;
 BBFILE_PATTERN_overlay = &amp;quot;^${OMDIR}/local/&amp;quot;&lt;br /&gt;
Add this line:&lt;br /&gt;
 BBFILE_PRIORITY_overlay = &amp;quot;20&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;BBFILE_PRIORITY&amp;lt;/code&amp;gt; should be greater than all the other &amp;lt;code&amp;gt;BBFILE_PRIORITY&amp;lt;/code&amp;gt; variables on the same file.&lt;br /&gt;
&lt;br /&gt;
* Change your &amp;lt;code&amp;gt;BBPATH&amp;lt;/code&amp;gt; environment variable to add the new tree ''before'' the two others in your &amp;lt;code&amp;gt;setup-env&amp;lt;/code&amp;gt; file.&amp;lt;code&amp;gt;setup-env&amp;lt;/code&amp;gt; is created by [[MokoMakefile]] automatically and is located in your &amp;lt;code&amp;gt;${OMDIR}&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
 export BBPATH=&amp;quot;${OMDIR}/build:${OMDIR}/local:${OMDIR}/oe:${OMDIR}/openembedded&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Using Your New Local Overlay ==&lt;br /&gt;
&lt;br /&gt;
=== Changing files in conf/ ===&lt;br /&gt;
&lt;br /&gt;
To change a file in conf/, just copy the file to the overlay tree (preserving the directory structure) and edit it.&lt;br /&gt;
&lt;br /&gt;
=== Changing files in classes/ ===&lt;br /&gt;
&lt;br /&gt;
To change a file in classes/, just copy the file to the overlay tree and edit it.&lt;br /&gt;
&lt;br /&gt;
=== Changing packages ===&lt;br /&gt;
&lt;br /&gt;
Changing a package's recipe is a bit more complex. You have to copy over (or symlink) not only the .bb file for the package, but also ''all'' the files it includes with &amp;lt;code&amp;gt;require&amp;lt;/code&amp;gt;, and the &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt; directories (all directories referred to by &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt;, usually named either ''package''-''version'' or &amp;lt;code&amp;gt;files&amp;lt;/code&amp;gt;). If you forget one of them, the build will give an error (either when parsing the recipe in the case of &amp;lt;code&amp;gt;require&amp;lt;/code&amp;gt;, or when trying to build in the case of the &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt; directories).&lt;br /&gt;
&lt;br /&gt;
=== Adding a new package ===&lt;br /&gt;
&lt;br /&gt;
You can add a new package (or a recipe for a new version of a package) to the overlay tree simply by creating it on the overlay tree.&lt;br /&gt;
&lt;br /&gt;
=== Creating your own images ===&lt;br /&gt;
&lt;br /&gt;
To create you own images we'll use the base openmoko .bb files and modify them so suit. Where you see ''scaredycat'' replace this with something to identify your own images.&lt;br /&gt;
&lt;br /&gt;
edit local/packages/images/scaredycat-openmoko-devel-image.bb and paste this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require scaredycat-openmoko-image.bb&lt;br /&gt;
 &lt;br /&gt;
export PACKAGE_INSTALL += &amp;quot;\&lt;br /&gt;
  task-openmoko-debug \&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then edit local/packages/images/scaredycat-openmoko-image.bb&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#------------------------------------------------------&lt;br /&gt;
# OpenMoko Image Recipe&lt;br /&gt;
#------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
export IMAGE_BASENAME = &amp;quot;${PN}&amp;quot;&lt;br /&gt;
export IMAGE_LINGUAS = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export PACKAGE_INSTALL = &amp;quot;\&lt;br /&gt;
  ${MACHINE_TASK_PROVIDER} \&lt;br /&gt;
  task-openmoko-linux \&lt;br /&gt;
  task-openmoko-net \&lt;br /&gt;
  task-openmoko-ui \&lt;br /&gt;
  task-openmoko-base \&lt;br /&gt;
  task-openmoko-phone \&lt;br /&gt;
  task-openmoko-games \&lt;br /&gt;
  task-openmoko-pim \&lt;br /&gt;
  task-openmoko-scaredycat \&lt;br /&gt;
  &amp;quot;&lt;br /&gt;
&lt;br /&gt;
DEPENDS = &amp;quot;\&lt;br /&gt;
  ${MACHINE_TASK_PROVIDER} \&lt;br /&gt;
  task-openmoko \&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
RDEPENDS = &amp;quot;${PACKAGE_INSTALL}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inherit image&lt;br /&gt;
&lt;br /&gt;
LICENSE = MIT&lt;br /&gt;
&lt;br /&gt;
ROOTFS_POSTPROCESS_COMMAND += 'date &amp;quot;+%m%d%H%M%Y&amp;quot; &amp;gt;${IMAGE_ROOTFS}/etc/timestamp'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
edit packages/tasks/task-openmoko-scaredycat.bb - this is where we put the things we want to include in our image, above and beyond the standard image. This example includes '''[http://wiki.openmoko.org/wiki/Scummvm scummvm]'''. If you modify this file, make sure you update the '''PR''' by incrementing the number each time.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;OpenMoko: Scaredycat Additions&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;openmoko/base&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;original&amp;quot;&lt;br /&gt;
PR = &amp;quot;r2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inherit task&lt;br /&gt;
&lt;br /&gt;
RDEPENDS_task-openmoko-scaredycat = &amp;quot;\&lt;br /&gt;
  scummvm \&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Actually building your image ====&lt;br /&gt;
&lt;br /&gt;
To build you image, which will be located with your other images, do the following:&lt;br /&gt;
&lt;br /&gt;
 # cd build ; . ../setup-env ; bitbake scaredycat-openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
== Your First Application ==&lt;br /&gt;
&lt;br /&gt;
I know that I said I'd have a GDK application in here, however, I'd really like to get this whole course done first and have you guys starting to code instead of just looking at what I've written!&lt;br /&gt;
&lt;br /&gt;
This will be a very simple CLI hello world.&lt;br /&gt;
&lt;br /&gt;
=== Before We Code ===&lt;br /&gt;
&lt;br /&gt;
Like a good coder you want to make sure that you're not just doing things, but that you're doing them the right way! &lt;br /&gt;
&lt;br /&gt;
Now change directories into your &amp;lt;code&amp;gt;local/packages&amp;lt;/code&amp;gt; directory.The following commands expect you'll be in that directory so don't change unless you know what you're doing!&lt;br /&gt;
&lt;br /&gt;
You'll want to make a directory with the name of your application, and a subdirectory called files.&lt;br /&gt;
  mkdir myhelloworld myhelloworld/files&lt;br /&gt;
Now you'll want to create two files in the &amp;lt;code&amp;gt;files&amp;lt;/code&amp;gt; directory&lt;br /&gt;
  touch myhelloworld/files/README.txt myhelloworld/files/myhelloworld.c&lt;br /&gt;
And finally you'll want to create a bitbake file.&lt;br /&gt;
  touch myhelloworld/myhelloworld.bb&lt;br /&gt;
&lt;br /&gt;
Alrighty now all your necessary files are created so lets go over this real quick.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$HOME&lt;br /&gt;
 +- $OMDIR (contains the official openmoko tree)&lt;br /&gt;
 |  +- local/&lt;br /&gt;
 |     +- packages/&lt;br /&gt;
 |        +- myhelloworld/&lt;br /&gt;
 |           +- myhelloworld.bb&lt;br /&gt;
 |           +- files/&lt;br /&gt;
 |              +- myhelloworld.c&lt;br /&gt;
 |              +- README.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That should be your structure, if it's not you should go and fix it up.&lt;br /&gt;
=== Filling the Files ===&lt;br /&gt;
&lt;br /&gt;
So you've got your sample files all laid out now it's time to make them actually do something.&lt;br /&gt;
&lt;br /&gt;
myhelloworld.c&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char** argv)&lt;br /&gt;
{&lt;br /&gt;
        printf(&amp;quot;Ello Poppet!\n&amp;quot;);&lt;br /&gt;
        return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
README.txt&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This is a command line application. It prints a simple Hello World! To stdout.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
myhelloworld.bb&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;A killer hello world application&amp;quot;&lt;br /&gt;
AUTHOR = &amp;quot;Bryce Leo&amp;quot;&lt;br /&gt;
HOMEPAGE = &amp;quot;&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;console/applications&amp;quot;&lt;br /&gt;
PRIORITY = &amp;quot;optional&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;MIT&amp;quot;&lt;br /&gt;
#DEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RDEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RRECOMMENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RCONFLICTS = &amp;quot;&amp;quot;&lt;br /&gt;
#SRCDATE = &amp;quot;20070729&amp;quot;&lt;br /&gt;
#PV = &amp;quot;0.1&amp;quot;&lt;br /&gt;
#PR = &amp;quot;r0&amp;quot;&lt;br /&gt;
SRC_URI = &amp;quot;file://myhelloworld.c \&lt;br /&gt;
          file://README.txt &amp;quot;&lt;br /&gt;
&lt;br /&gt;
S = &amp;quot;${WORKDIR}/myhelloworld/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
do_compile() {&lt;br /&gt;
        ${CC} ${CFLAGS} ${LDFLAGS} ${WORKDIR}/myhelloworld.c -o myhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
do_install() {&lt;br /&gt;
        install -m 0755 -d ${D}${bindir} ${D}${docdir}/myhelloworld&lt;br /&gt;
        install -m 0755 ${S}/myhelloworld ${D}${bindir}&lt;br /&gt;
        install -m 0644 ${WORKDIR}/README.txt ${D}${docdir}/myhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Your First Compilation ===&lt;br /&gt;
&lt;br /&gt;
This is where the [[MokoMakefile]] comes in very very handy. Change to your ${OMDIR} directory, You'll know it by the fact that it is where &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt; resides.&lt;br /&gt;
 make build-package-myhelloworld&lt;br /&gt;
&lt;br /&gt;
(make sure you run make openmoko-devel-image at least once before building your own packages)&lt;br /&gt;
&lt;br /&gt;
This should all come back and not return any error messages, The output should end in something similar to&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NOTE: package myhelloworld-1.0: completed&lt;br /&gt;
NOTE: build 200707291926: completed&lt;br /&gt;
Build statistics:&lt;br /&gt;
  Attempted builds: 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that no errors were thrown we are happily done!&lt;br /&gt;
&lt;br /&gt;
== Adding Your Application to the Image ==&lt;br /&gt;
&lt;br /&gt;
So you've had an idea, you've setup the build environment, you've setup your local overlay, you've laid out your application tree, you've put code into those fantastic files of yours and now it compiles.There's only one thing left to do. Add that application to your image.&lt;br /&gt;
&lt;br /&gt;
Now lets go over in words and whys what we're about to do. First we need to make modify the &amp;lt;code&amp;gt;${OMDIR}/build/conf/local.conf&amp;lt;/code&amp;gt;. We add in the variable &amp;lt;code&amp;gt;DISTRO_EXTRA_RDEPENDS&amp;lt;/code&amp;gt; and set its value to include &amp;lt;code&amp;gt;myhelloworld&amp;lt;/code&amp;gt;. If you'd like to include other packages from your own overlay or the OM tree just add them inseparated by spaces. After this gets added as a dependency to build the Distro (in this case OpenMoko). Now we have to re-build the task-base package. This essentially just generates an ipk file that will &amp;quot;Merge machine and distro options to create a basic machine task/package.&amp;quot; It pretty much builds a file with a list of packages to be installed that are required for the distro to work correctly. So then you just go through and make &amp;lt;code&amp;gt;openmoko-devel-image, build-qemu, flash-qemu-local,&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;run-qemu&amp;lt;/code&amp;gt;. Then calibrate your stylus, head over to the terminal, and run your application!&lt;br /&gt;
&lt;br /&gt;
=== Modifying Your local.conf ===&lt;br /&gt;
Now, go into your build config directory &amp;lt;code&amp;gt;${OMDIR}/build/conf/&amp;lt;/code&amp;gt; and now you'll be editing &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
Add this line to you &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld&amp;quot;&lt;br /&gt;
With this line you can also include other applications from the OE tree. For instance my &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; looks like this.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MACHINE = &amp;quot;fic-gta01&amp;quot;&lt;br /&gt;
DISTRO = &amp;quot;openmoko&amp;quot;&lt;br /&gt;
BUILD_ARCH = &amp;quot;i686&amp;quot;&lt;br /&gt;
SRCDATE_eds-dbus = &amp;quot;now&amp;quot;&lt;br /&gt;
DISTRO_EXTRA_RDEPENDS += &amp;quot;lua dillo myhelloworld&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that you've fixed your &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; it's time to go through all the necessary tasks to add and re-build you image and have your sweet package included.&lt;br /&gt;
&lt;br /&gt;
=== Building ===&lt;br /&gt;
Now come the easy part thanks to [[MokoMakefile]]. &lt;br /&gt;
&lt;br /&gt;
  make rebuild-package-task-base&lt;br /&gt;
  make openmoko-devel-image&lt;br /&gt;
  make build-qemu&lt;br /&gt;
  make flash-qemu-local&lt;br /&gt;
&lt;br /&gt;
Now all you have to do is run qemu.&lt;br /&gt;
  make run-qemu&lt;br /&gt;
&lt;br /&gt;
From here after you calibrate your stylus, you click on the Menu in the top right, click down to terminal, then just run your program.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@fic-gta02:/$ myhelloworld&lt;br /&gt;
Ello Poppet!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Adding Python scripts as applications==&lt;br /&gt;
This is for adding python scripts/packages to the image for your own use.&lt;br /&gt;
===First steps===&lt;br /&gt;
First, you need to modify the &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; file as described above. You need to modify &lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld&amp;quot;&lt;br /&gt;
to&lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld python&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--[[User:Xkr47|xkr47]] 18:21, 11 August 2007 (CEST) Hmm surely the new line should be DISTRO_EXTRA_RDEPENDS += &amp;quot;pyhelloworld python&amp;quot; instead since the package we create below is pyhelloworld..&lt;br /&gt;
&lt;br /&gt;
This is because python is not included by default in the openmoko image. Or you can use &amp;lt;code&amp;gt;python-pygtk2&amp;lt;/code&amp;gt; if you wish.&lt;br /&gt;
&lt;br /&gt;
Next, you need to perform these actions from the &amp;lt;code&amp;gt;$OMDIR/local&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
  mkdir packages/pyhelloworld packages/pyhelloworld/files&lt;br /&gt;
&lt;br /&gt;
  touch packages/pyhelloworld/files/pyhello packages/pyhelloworld/README.txt&lt;br /&gt;
&lt;br /&gt;
  touch packages/pyhelloworld/pyhelloworld.bb&lt;br /&gt;
&lt;br /&gt;
===Filling in the files===&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;packages/pyhelloworld/files/pyhello&amp;lt;/code&amp;gt; to contain:&lt;br /&gt;
&amp;lt;pre&amp;gt;  &lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;hello world!&amp;quot;&lt;br /&gt;
print &amp;quot;shutting down now. Farewell oh cruel, cruel world!&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
Next up, is editing &amp;lt;code&amp;gt;packages/pyhelloworld/files/README.txt&amp;lt;/code&amp;gt; to say:&lt;br /&gt;
&lt;br /&gt;
  This is the most awesome helloworld application ever. Know why? It has SNAKES!&lt;br /&gt;
&lt;br /&gt;
Kidding aside, next is the all important &amp;lt;code&amp;gt; packages/pyhelloworld/pyhelloworld.bb:&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;A pythonic hello world application&amp;quot;&lt;br /&gt;
AUTHOR = &amp;quot;Tyler Laing&amp;quot;&lt;br /&gt;
HOMEPAGE = &amp;quot;&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;console/applications&amp;quot;&lt;br /&gt;
PRIORITY = &amp;quot;optional&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;MIT&amp;quot;&lt;br /&gt;
#DEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RDEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RRECOMMENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RCONFLICTS = &amp;quot;&amp;quot;&lt;br /&gt;
#SRCDATE = &amp;quot;20070729&amp;quot;&lt;br /&gt;
#PV = &amp;quot;0.1&amp;quot;&lt;br /&gt;
#PR = &amp;quot;r0&amp;quot;&lt;br /&gt;
SRC_URI = &amp;quot;file://pyhello \&lt;br /&gt;
          file://README.txt &amp;quot;&lt;br /&gt;
&lt;br /&gt;
S = &amp;quot;${WORKDIR}/pyhelloworld/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
do_install() {&lt;br /&gt;
        install -m 0755 -d ${D}${bindir} ${D}${docdir}/pyhelloworld&lt;br /&gt;
        install -m 0755 ${WORKDIR}/pyhello ${D}${bindir}&lt;br /&gt;
        install -m 0644 ${WORKDIR}/README.txt ${D}${docdir}/pyhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I'll explain each of the parts right here, for future reference.&lt;br /&gt;
&lt;br /&gt;
====Meanings of variables in .bb files====&lt;br /&gt;
&lt;br /&gt;
  $WORKDIR = $OMDIR/local/packages/&amp;lt;application directory&amp;gt;&lt;br /&gt;
  $bindir  = $OMDIR/build/tmp/work/armv4t-linux/&amp;lt;application directory&amp;gt;/image/usr/bin&lt;br /&gt;
  $docir   = $OMDIR/build/tmp/work/armv4t-linux/&amp;lt;application directory&amp;gt;/image/usr/share/doc&lt;br /&gt;
  $D       = $OMDIR/build/&lt;br /&gt;
&lt;br /&gt;
====Final steps====&lt;br /&gt;
Complete the last steps as per the above instructions, from the point of altering &amp;lt;code&amp;gt;DISTRO_EXTRA_RDEPENDS&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
And your done!&lt;br /&gt;
&lt;br /&gt;
[[Category:Applications]]&lt;br /&gt;
[[Category:OpenMoko]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Customizing_the_Openmoko_Distribution</id>
		<title>Customizing the Openmoko Distribution</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Customizing_the_Openmoko_Distribution"/>
				<updated>2007-08-29T19:58:04Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* Creating your own images */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What's the goal? ==&lt;br /&gt;
&lt;br /&gt;
The goal of this page is to teach you how to take an application that you've coded (or the sample app) and properly get it included in your rootfs. This article is a bit of an aggregate page, it's going to take information from [[MokoMakefile]], [[User:CesarB/Using a local overlay|Using a local overlay]], [[Building a hello world application]], and [[Create a package from existing sources]]. So as you can see the goal is for it to be a very thorough introduction, and will take you from &amp;quot;Idea to Inclusion&amp;quot; of your application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Setting Up the OpenMoko Environment ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; &lt;br /&gt;
 |*If you already have the environment setup then it is imperative that you update your Makefile.&lt;br /&gt;
Do this by running:&lt;br /&gt;
&amp;lt;pre&amp;gt;make update-makefile&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This part of the tutorial is going to be pretty basic. I absolutely love [[MokoMakefile]], it's fantastic, the creator has done and continues to do a fantastic job with this. I see absolutely no reason not to use it I put my OpenMoko development directory in /home/bryce/mokodev/ and that works great for me. You can feel free to do the same or put it anywhere else in your user directory (or anywhere on your system if you're feeling daring and a little nutty).&lt;br /&gt;
&lt;br /&gt;
To get your environment setup please get it setup according to [[MokoMakefile]] however if you do have the build environment setup manually and you're sure you know what you're doing then feel free to go forward with this.&lt;br /&gt;
&lt;br /&gt;
== Setting Up a Local Overlay ==&lt;br /&gt;
If you're at the point for setting up a local overlay this means a couple things. First: You've had a brilliant idea for an application that you just need to have on the OpenMoko platform. Second: You realize that this killer app of yours needs to be done properly and you're not going to do anything silly like include it in the actual tree for the OpenMoko distro because it would probably end up just getting overwritten eventually, or you just realize that it's bad practice!&lt;br /&gt;
&lt;br /&gt;
If you're wondering why and what a local overlay is then let me take this time to explain it to you. A local overlay is where you, as a developer keep your local files in an OE style setup so that you can simply pull your updated code into the tree. You add your overlay tree into the bitbake setup so that when you call bitbake it will pull your own or your customized packages before going to the OE or OpenMoko trees.This keeps everything nice and organized for you and also allows you to build/rebuild/include you apps by using the [[MokoMakefile]]&lt;br /&gt;
&lt;br /&gt;
Thank you to [[User:CesarB]] for this part of the wiki.&lt;br /&gt;
&lt;br /&gt;
To create a local overlay:&lt;br /&gt;
&lt;br /&gt;
* Create a &amp;quot;local&amp;quot; directory and its subdirectories&lt;br /&gt;
&lt;br /&gt;
 mkdir local local/conf local/classes local/packages local/packages/images local/packages/tasks&lt;br /&gt;
&lt;br /&gt;
* Copy &amp;lt;code&amp;gt;site.conf&amp;lt;/code&amp;gt; from the openmoko tree to &amp;lt;code&amp;gt;local/conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cp oe/conf/site.conf local/conf/site.conf&lt;br /&gt;
&lt;br /&gt;
* Edit the local/conf/site.conf you copied to add the new tree as a source for bitbake recipes.&lt;br /&gt;
&lt;br /&gt;
Change the current &amp;lt;code&amp;gt;BBFILES&amp;lt;/code&amp;gt; to look like this:&lt;br /&gt;
 BBFILES := &amp;quot;${OMDIR}/openembedded/packages/*/*.bb ${OMDIR}/oe/packages/*/*.bb ${OMDIR}/local/packages/*/*.bb&amp;quot;&lt;br /&gt;
Change your &amp;lt;code&amp;gt;BBFILE_COLLECTIONS&amp;lt;/code&amp;gt; line to look like this:&lt;br /&gt;
 BBFILE_COLLECTIONS = &amp;quot;upstream local overlay&amp;quot;&lt;br /&gt;
Add this line:&lt;br /&gt;
 BBFILE_PATTERN_overlay = &amp;quot;^${OMDIR}/local/&amp;quot;&lt;br /&gt;
Add this line:&lt;br /&gt;
 BBFILE_PRIORITY_overlay = &amp;quot;20&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;BBFILE_PRIORITY&amp;lt;/code&amp;gt; should be greater than all the other &amp;lt;code&amp;gt;BBFILE_PRIORITY&amp;lt;/code&amp;gt; variables on the same file.&lt;br /&gt;
&lt;br /&gt;
* Change your &amp;lt;code&amp;gt;BBPATH&amp;lt;/code&amp;gt; environment variable to add the new tree ''before'' the two others in your &amp;lt;code&amp;gt;setup-env&amp;lt;/code&amp;gt; file.&amp;lt;code&amp;gt;setup-env&amp;lt;/code&amp;gt; is created by [[MokoMakefile]] automatically and is located in your &amp;lt;code&amp;gt;${OMDIR}&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
 export BBPATH=&amp;quot;${OMDIR}/build:${OMDIR}/local:${OMDIR}/oe:${OMDIR}/openembedded&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Using Your New Local Overlay ==&lt;br /&gt;
&lt;br /&gt;
=== Changing files in conf/ ===&lt;br /&gt;
&lt;br /&gt;
To change a file in conf/, just copy the file to the overlay tree (preserving the directory structure) and edit it.&lt;br /&gt;
&lt;br /&gt;
=== Changing files in classes/ ===&lt;br /&gt;
&lt;br /&gt;
To change a file in classes/, just copy the file to the overlay tree and edit it.&lt;br /&gt;
&lt;br /&gt;
=== Changing packages ===&lt;br /&gt;
&lt;br /&gt;
Changing a package's recipe is a bit more complex. You have to copy over (or symlink) not only the .bb file for the package, but also ''all'' the files it includes with &amp;lt;code&amp;gt;require&amp;lt;/code&amp;gt;, and the &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt; directories (all directories referred to by &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt;, usually named either ''package''-''version'' or &amp;lt;code&amp;gt;files&amp;lt;/code&amp;gt;). If you forget one of them, the build will give an error (either when parsing the recipe in the case of &amp;lt;code&amp;gt;require&amp;lt;/code&amp;gt;, or when trying to build in the case of the &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt; directories).&lt;br /&gt;
&lt;br /&gt;
=== Adding a new package ===&lt;br /&gt;
&lt;br /&gt;
You can add a new package (or a recipe for a new version of a package) to the overlay tree simply by creating it on the overlay tree.&lt;br /&gt;
&lt;br /&gt;
=== Creating your own images ===&lt;br /&gt;
&lt;br /&gt;
To create you own images we'll use the base openmoko .bb files and modify them so suit. Where you see ''scaredycat'' replace this with something to identify your own images.&lt;br /&gt;
&lt;br /&gt;
edit local/packages/images/scaredycat-openmoko-devel-image.bb and paste this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require scaredycat-openmoko-image.bb&lt;br /&gt;
 &lt;br /&gt;
export PACKAGE_INSTALL += &amp;quot;\&lt;br /&gt;
  task-openmoko-debug \&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then edit local/packages/images/scaredycat-openmoko-image.bb&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#------------------------------------------------------&lt;br /&gt;
# OpenMoko Image Recipe&lt;br /&gt;
#------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
export IMAGE_BASENAME = &amp;quot;${PN}&amp;quot;&lt;br /&gt;
export IMAGE_LINGUAS = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export PACKAGE_INSTALL = &amp;quot;\&lt;br /&gt;
  ${MACHINE_TASK_PROVIDER} \&lt;br /&gt;
  task-openmoko-linux \&lt;br /&gt;
  task-openmoko-net \&lt;br /&gt;
  task-openmoko-ui \&lt;br /&gt;
  task-openmoko-base \&lt;br /&gt;
  task-openmoko-phone \&lt;br /&gt;
  task-openmoko-games \&lt;br /&gt;
  task-openmoko-pim \&lt;br /&gt;
  task-openmoko-scaredycat \&lt;br /&gt;
  &amp;quot;&lt;br /&gt;
&lt;br /&gt;
DEPENDS = &amp;quot;\&lt;br /&gt;
  ${MACHINE_TASK_PROVIDER} \&lt;br /&gt;
  task-openmoko \&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
RDEPENDS = &amp;quot;${PACKAGE_INSTALL}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inherit image&lt;br /&gt;
&lt;br /&gt;
LICENSE = MIT&lt;br /&gt;
&lt;br /&gt;
ROOTFS_POSTPROCESS_COMMAND += 'date &amp;quot;+%m%d%H%M%Y&amp;quot; &amp;gt;${IMAGE_ROOTFS}/etc/timestamp'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
edit packages/tasks/task-openmoko-scaredycat.bb - this is where we put the things we want to include in our image, above and behond the standard image. This example includes '''scummvm'''. If you modify this file, make sure you update the '''PR''' by incrementing the number each time.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;OpenMoko: Scaredycat Additions&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;openmoko/base&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;original&amp;quot;&lt;br /&gt;
PR = &amp;quot;r2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inherit task&lt;br /&gt;
&lt;br /&gt;
RDEPENDS_task-openmoko-scaredycat = &amp;quot;\&lt;br /&gt;
  scummvm \&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Actually building your image ====&lt;br /&gt;
&lt;br /&gt;
To build you image, which will be located with your other images, do the following:&lt;br /&gt;
&lt;br /&gt;
 # cd build ; . ../setup-env ; bitbake scaredycat-openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
== Your First Application ==&lt;br /&gt;
&lt;br /&gt;
I know that I said I'd have a GDK application in here, however, I'd really like to get this whole course done first and have you guys starting to code instead of just looking at what I've written!&lt;br /&gt;
&lt;br /&gt;
This will be a very simple CLI hello world.&lt;br /&gt;
&lt;br /&gt;
=== Before We Code ===&lt;br /&gt;
&lt;br /&gt;
Like a good coder you want to make sure that you're not just doing things, but that you're doing them the right way! &lt;br /&gt;
&lt;br /&gt;
Now change directories into your &amp;lt;code&amp;gt;local/packages&amp;lt;/code&amp;gt; directory.The following commands expect you'll be in that directory so don't change unless you know what you're doing!&lt;br /&gt;
&lt;br /&gt;
You'll want to make a directory with the name of your application, and a subdirectory called files.&lt;br /&gt;
  mkdir myhelloworld myhelloworld/files&lt;br /&gt;
Now you'll want to create two files in the &amp;lt;code&amp;gt;files&amp;lt;/code&amp;gt; directory&lt;br /&gt;
  touch myhelloworld/files/README.txt myhelloworld/files/myhelloworld.c&lt;br /&gt;
And finally you'll want to create a bitbake file.&lt;br /&gt;
  touch myhelloworld/myhelloworld.bb&lt;br /&gt;
&lt;br /&gt;
Alrighty now all your necessary files are created so lets go over this real quick.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$HOME&lt;br /&gt;
 +- $OMDIR (contains the official openmoko tree)&lt;br /&gt;
 |  +- local/&lt;br /&gt;
 |     +- packages/&lt;br /&gt;
 |        +- myhelloworld/&lt;br /&gt;
 |           +- myhelloworld.bb&lt;br /&gt;
 |           +- files/&lt;br /&gt;
 |              +- myhelloworld.c&lt;br /&gt;
 |              +- README.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That should be your structure, if it's not you should go and fix it up.&lt;br /&gt;
=== Filling the Files ===&lt;br /&gt;
&lt;br /&gt;
So you've got your sample files all laid out now it's time to make them actually do something.&lt;br /&gt;
&lt;br /&gt;
myhelloworld.c&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char** argv)&lt;br /&gt;
{&lt;br /&gt;
        printf(&amp;quot;Ello Poppet!\n&amp;quot;);&lt;br /&gt;
        return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
README.txt&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This is a command line application. It prints a simple Hello World! To stdout.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
myhelloworld.bb&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;A killer hello world application&amp;quot;&lt;br /&gt;
AUTHOR = &amp;quot;Bryce Leo&amp;quot;&lt;br /&gt;
HOMEPAGE = &amp;quot;&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;console/applications&amp;quot;&lt;br /&gt;
PRIORITY = &amp;quot;optional&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;MIT&amp;quot;&lt;br /&gt;
#DEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RDEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RRECOMMENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RCONFLICTS = &amp;quot;&amp;quot;&lt;br /&gt;
#SRCDATE = &amp;quot;20070729&amp;quot;&lt;br /&gt;
#PV = &amp;quot;0.1&amp;quot;&lt;br /&gt;
#PR = &amp;quot;r0&amp;quot;&lt;br /&gt;
SRC_URI = &amp;quot;file://myhelloworld.c \&lt;br /&gt;
          file://README.txt &amp;quot;&lt;br /&gt;
&lt;br /&gt;
S = &amp;quot;${WORKDIR}/myhelloworld/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
do_compile() {&lt;br /&gt;
        ${CC} ${CFLAGS} ${LDFLAGS} ${WORKDIR}/myhelloworld.c -o myhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
do_install() {&lt;br /&gt;
        install -m 0755 -d ${D}${bindir} ${D}${docdir}/myhelloworld&lt;br /&gt;
        install -m 0755 ${S}/myhelloworld ${D}${bindir}&lt;br /&gt;
        install -m 0644 ${WORKDIR}/README.txt ${D}${docdir}/myhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Your First Compilation ===&lt;br /&gt;
&lt;br /&gt;
This is where the [[MokoMakefile]] comes in very very handy. Change to your ${OMDIR} directory, You'll know it by the fact that it is where &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt; resides.&lt;br /&gt;
 make build-package-myhelloworld&lt;br /&gt;
&lt;br /&gt;
(make sure you run make openmoko-devel-image at least once before building your own packages)&lt;br /&gt;
&lt;br /&gt;
This should all come back and not return any error messages, The output should end in something similar to&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NOTE: package myhelloworld-1.0: completed&lt;br /&gt;
NOTE: build 200707291926: completed&lt;br /&gt;
Build statistics:&lt;br /&gt;
  Attempted builds: 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that no errors were thrown we are happily done!&lt;br /&gt;
&lt;br /&gt;
== Adding Your Application to the Image ==&lt;br /&gt;
&lt;br /&gt;
So you've had an idea, you've setup the build environment, you've setup your local overlay, you've laid out your application tree, you've put code into those fantastic files of yours and now it compiles.There's only one thing left to do. Add that application to your image.&lt;br /&gt;
&lt;br /&gt;
Now lets go over in words and whys what we're about to do. First we need to make modify the &amp;lt;code&amp;gt;${OMDIR}/build/conf/local.conf&amp;lt;/code&amp;gt;. We add in the variable &amp;lt;code&amp;gt;DISTRO_EXTRA_RDEPENDS&amp;lt;/code&amp;gt; and set its value to include &amp;lt;code&amp;gt;myhelloworld&amp;lt;/code&amp;gt;. If you'd like to include other packages from your own overlay or the OM tree just add them inseparated by spaces. After this gets added as a dependency to build the Distro (in this case OpenMoko). Now we have to re-build the task-base package. This essentially just generates an ipk file that will &amp;quot;Merge machine and distro options to create a basic machine task/package.&amp;quot; It pretty much builds a file with a list of packages to be installed that are required for the distro to work correctly. So then you just go through and make &amp;lt;code&amp;gt;openmoko-devel-image, build-qemu, flash-qemu-local,&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;run-qemu&amp;lt;/code&amp;gt;. Then calibrate your stylus, head over to the terminal, and run your application!&lt;br /&gt;
&lt;br /&gt;
=== Modifying Your local.conf ===&lt;br /&gt;
Now, go into your build config directory &amp;lt;code&amp;gt;${OMDIR}/build/conf/&amp;lt;/code&amp;gt; and now you'll be editing &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
Add this line to you &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld&amp;quot;&lt;br /&gt;
With this line you can also include other applications from the OE tree. For instance my &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; looks like this.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MACHINE = &amp;quot;fic-gta01&amp;quot;&lt;br /&gt;
DISTRO = &amp;quot;openmoko&amp;quot;&lt;br /&gt;
BUILD_ARCH = &amp;quot;i686&amp;quot;&lt;br /&gt;
SRCDATE_eds-dbus = &amp;quot;now&amp;quot;&lt;br /&gt;
DISTRO_EXTRA_RDEPENDS += &amp;quot;lua dillo myhelloworld&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that you've fixed your &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; it's time to go through all the necessary tasks to add and re-build you image and have your sweet package included.&lt;br /&gt;
&lt;br /&gt;
=== Building ===&lt;br /&gt;
Now come the easy part thanks to [[MokoMakefile]]. &lt;br /&gt;
&lt;br /&gt;
  make rebuild-package-task-base&lt;br /&gt;
  make openmoko-devel-image&lt;br /&gt;
  make build-qemu&lt;br /&gt;
  make flash-qemu-local&lt;br /&gt;
&lt;br /&gt;
Now all you have to do is run qemu.&lt;br /&gt;
  make run-qemu&lt;br /&gt;
&lt;br /&gt;
From here after you calibrate your stylus, you click on the Menu in the top right, click down to terminal, then just run your program.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@fic-gta02:/$ myhelloworld&lt;br /&gt;
Ello Poppet!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Adding Python scripts as applications==&lt;br /&gt;
This is for adding python scripts/packages to the image for your own use.&lt;br /&gt;
===First steps===&lt;br /&gt;
First, you need to modify the &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; file as described above. You need to modify &lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld&amp;quot;&lt;br /&gt;
to&lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld python&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--[[User:Xkr47|xkr47]] 18:21, 11 August 2007 (CEST) Hmm surely the new line should be DISTRO_EXTRA_RDEPENDS += &amp;quot;pyhelloworld python&amp;quot; instead since the package we create below is pyhelloworld..&lt;br /&gt;
&lt;br /&gt;
This is because python is not included by default in the openmoko image. Or you can use &amp;lt;code&amp;gt;python-pygtk2&amp;lt;/code&amp;gt; if you wish.&lt;br /&gt;
&lt;br /&gt;
Next, you need to perform these actions from the &amp;lt;code&amp;gt;$OMDIR/local&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
  mkdir packages/pyhelloworld packages/pyhelloworld/files&lt;br /&gt;
&lt;br /&gt;
  touch packages/pyhelloworld/files/pyhello packages/pyhelloworld/README.txt&lt;br /&gt;
&lt;br /&gt;
  touch packages/pyhelloworld/pyhelloworld.bb&lt;br /&gt;
&lt;br /&gt;
===Filling in the files===&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;packages/pyhelloworld/files/pyhello&amp;lt;/code&amp;gt; to contain:&lt;br /&gt;
&amp;lt;pre&amp;gt;  &lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;hello world!&amp;quot;&lt;br /&gt;
print &amp;quot;shutting down now. Farewell oh cruel, cruel world!&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
Next up, is editing &amp;lt;code&amp;gt;packages/pyhelloworld/files/README.txt&amp;lt;/code&amp;gt; to say:&lt;br /&gt;
&lt;br /&gt;
  This is the most awesome helloworld application ever. Know why? It has SNAKES!&lt;br /&gt;
&lt;br /&gt;
Kidding aside, next is the all important &amp;lt;code&amp;gt; packages/pyhelloworld/pyhelloworld.bb:&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;A pythonic hello world application&amp;quot;&lt;br /&gt;
AUTHOR = &amp;quot;Tyler Laing&amp;quot;&lt;br /&gt;
HOMEPAGE = &amp;quot;&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;console/applications&amp;quot;&lt;br /&gt;
PRIORITY = &amp;quot;optional&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;MIT&amp;quot;&lt;br /&gt;
#DEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RDEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RRECOMMENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RCONFLICTS = &amp;quot;&amp;quot;&lt;br /&gt;
#SRCDATE = &amp;quot;20070729&amp;quot;&lt;br /&gt;
#PV = &amp;quot;0.1&amp;quot;&lt;br /&gt;
#PR = &amp;quot;r0&amp;quot;&lt;br /&gt;
SRC_URI = &amp;quot;file://pyhello \&lt;br /&gt;
          file://README.txt &amp;quot;&lt;br /&gt;
&lt;br /&gt;
S = &amp;quot;${WORKDIR}/pyhelloworld/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
do_install() {&lt;br /&gt;
        install -m 0755 -d ${D}${bindir} ${D}${docdir}/pyhelloworld&lt;br /&gt;
        install -m 0755 ${WORKDIR}/pyhello ${D}${bindir}&lt;br /&gt;
        install -m 0644 ${WORKDIR}/README.txt ${D}${docdir}/pyhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I'll explain each of the parts right here, for future reference.&lt;br /&gt;
&lt;br /&gt;
====Meanings of variables in .bb files====&lt;br /&gt;
&lt;br /&gt;
  $WORKDIR = $OMDIR/local/packages/&amp;lt;application directory&amp;gt;&lt;br /&gt;
  $bindir  = $OMDIR/build/tmp/work/armv4t-linux/&amp;lt;application directory&amp;gt;/image/usr/bin&lt;br /&gt;
  $docir   = $OMDIR/build/tmp/work/armv4t-linux/&amp;lt;application directory&amp;gt;/image/usr/share/doc&lt;br /&gt;
  $D       = $OMDIR/build/&lt;br /&gt;
&lt;br /&gt;
====Final steps====&lt;br /&gt;
Complete the last steps as per the above instructions, from the point of altering &amp;lt;code&amp;gt;DISTRO_EXTRA_RDEPENDS&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
And your done!&lt;br /&gt;
&lt;br /&gt;
[[Category:Applications]]&lt;br /&gt;
[[Category:OpenMoko]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Customizing_the_Openmoko_Distribution</id>
		<title>Customizing the Openmoko Distribution</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Customizing_the_Openmoko_Distribution"/>
				<updated>2007-08-29T19:56:57Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* Creating your own images */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What's the goal? ==&lt;br /&gt;
&lt;br /&gt;
The goal of this page is to teach you how to take an application that you've coded (or the sample app) and properly get it included in your rootfs. This article is a bit of an aggregate page, it's going to take information from [[MokoMakefile]], [[User:CesarB/Using a local overlay|Using a local overlay]], [[Building a hello world application]], and [[Create a package from existing sources]]. So as you can see the goal is for it to be a very thorough introduction, and will take you from &amp;quot;Idea to Inclusion&amp;quot; of your application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Setting Up the OpenMoko Environment ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; &lt;br /&gt;
 |*If you already have the environment setup then it is imperative that you update your Makefile.&lt;br /&gt;
Do this by running:&lt;br /&gt;
&amp;lt;pre&amp;gt;make update-makefile&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This part of the tutorial is going to be pretty basic. I absolutely love [[MokoMakefile]], it's fantastic, the creator has done and continues to do a fantastic job with this. I see absolutely no reason not to use it I put my OpenMoko development directory in /home/bryce/mokodev/ and that works great for me. You can feel free to do the same or put it anywhere else in your user directory (or anywhere on your system if you're feeling daring and a little nutty).&lt;br /&gt;
&lt;br /&gt;
To get your environment setup please get it setup according to [[MokoMakefile]] however if you do have the build environment setup manually and you're sure you know what you're doing then feel free to go forward with this.&lt;br /&gt;
&lt;br /&gt;
== Setting Up a Local Overlay ==&lt;br /&gt;
If you're at the point for setting up a local overlay this means a couple things. First: You've had a brilliant idea for an application that you just need to have on the OpenMoko platform. Second: You realize that this killer app of yours needs to be done properly and you're not going to do anything silly like include it in the actual tree for the OpenMoko distro because it would probably end up just getting overwritten eventually, or you just realize that it's bad practice!&lt;br /&gt;
&lt;br /&gt;
If you're wondering why and what a local overlay is then let me take this time to explain it to you. A local overlay is where you, as a developer keep your local files in an OE style setup so that you can simply pull your updated code into the tree. You add your overlay tree into the bitbake setup so that when you call bitbake it will pull your own or your customized packages before going to the OE or OpenMoko trees.This keeps everything nice and organized for you and also allows you to build/rebuild/include you apps by using the [[MokoMakefile]]&lt;br /&gt;
&lt;br /&gt;
Thank you to [[User:CesarB]] for this part of the wiki.&lt;br /&gt;
&lt;br /&gt;
To create a local overlay:&lt;br /&gt;
&lt;br /&gt;
* Create a &amp;quot;local&amp;quot; directory and its subdirectories&lt;br /&gt;
&lt;br /&gt;
 mkdir local local/conf local/classes local/packages local/packages/images local/packages/tasks&lt;br /&gt;
&lt;br /&gt;
* Copy &amp;lt;code&amp;gt;site.conf&amp;lt;/code&amp;gt; from the openmoko tree to &amp;lt;code&amp;gt;local/conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cp oe/conf/site.conf local/conf/site.conf&lt;br /&gt;
&lt;br /&gt;
* Edit the local/conf/site.conf you copied to add the new tree as a source for bitbake recipes.&lt;br /&gt;
&lt;br /&gt;
Change the current &amp;lt;code&amp;gt;BBFILES&amp;lt;/code&amp;gt; to look like this:&lt;br /&gt;
 BBFILES := &amp;quot;${OMDIR}/openembedded/packages/*/*.bb ${OMDIR}/oe/packages/*/*.bb ${OMDIR}/local/packages/*/*.bb&amp;quot;&lt;br /&gt;
Change your &amp;lt;code&amp;gt;BBFILE_COLLECTIONS&amp;lt;/code&amp;gt; line to look like this:&lt;br /&gt;
 BBFILE_COLLECTIONS = &amp;quot;upstream local overlay&amp;quot;&lt;br /&gt;
Add this line:&lt;br /&gt;
 BBFILE_PATTERN_overlay = &amp;quot;^${OMDIR}/local/&amp;quot;&lt;br /&gt;
Add this line:&lt;br /&gt;
 BBFILE_PRIORITY_overlay = &amp;quot;20&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;BBFILE_PRIORITY&amp;lt;/code&amp;gt; should be greater than all the other &amp;lt;code&amp;gt;BBFILE_PRIORITY&amp;lt;/code&amp;gt; variables on the same file.&lt;br /&gt;
&lt;br /&gt;
* Change your &amp;lt;code&amp;gt;BBPATH&amp;lt;/code&amp;gt; environment variable to add the new tree ''before'' the two others in your &amp;lt;code&amp;gt;setup-env&amp;lt;/code&amp;gt; file.&amp;lt;code&amp;gt;setup-env&amp;lt;/code&amp;gt; is created by [[MokoMakefile]] automatically and is located in your &amp;lt;code&amp;gt;${OMDIR}&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
 export BBPATH=&amp;quot;${OMDIR}/build:${OMDIR}/local:${OMDIR}/oe:${OMDIR}/openembedded&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Using Your New Local Overlay ==&lt;br /&gt;
&lt;br /&gt;
=== Changing files in conf/ ===&lt;br /&gt;
&lt;br /&gt;
To change a file in conf/, just copy the file to the overlay tree (preserving the directory structure) and edit it.&lt;br /&gt;
&lt;br /&gt;
=== Changing files in classes/ ===&lt;br /&gt;
&lt;br /&gt;
To change a file in classes/, just copy the file to the overlay tree and edit it.&lt;br /&gt;
&lt;br /&gt;
=== Changing packages ===&lt;br /&gt;
&lt;br /&gt;
Changing a package's recipe is a bit more complex. You have to copy over (or symlink) not only the .bb file for the package, but also ''all'' the files it includes with &amp;lt;code&amp;gt;require&amp;lt;/code&amp;gt;, and the &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt; directories (all directories referred to by &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt;, usually named either ''package''-''version'' or &amp;lt;code&amp;gt;files&amp;lt;/code&amp;gt;). If you forget one of them, the build will give an error (either when parsing the recipe in the case of &amp;lt;code&amp;gt;require&amp;lt;/code&amp;gt;, or when trying to build in the case of the &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt; directories).&lt;br /&gt;
&lt;br /&gt;
=== Adding a new package ===&lt;br /&gt;
&lt;br /&gt;
You can add a new package (or a recipe for a new version of a package) to the overlay tree simply by creating it on the overlay tree.&lt;br /&gt;
&lt;br /&gt;
=== Creating your own images ===&lt;br /&gt;
&lt;br /&gt;
To create you own images we'll use the base openmoko .bb files and modify them so suit. Where you see ''scaredycat'' replace this with something to identify your own images.&lt;br /&gt;
&lt;br /&gt;
edit local/packages/images/scaredycat-openmoko-devel-image.bb and paste this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require scaredycat-openmoko-image.bb&lt;br /&gt;
 &lt;br /&gt;
export PACKAGE_INSTALL += &amp;quot;\&lt;br /&gt;
  task-openmoko-debug \&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then edit local/packages/images/scaredycat-openmoko-image.bb&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#------------------------------------------------------&lt;br /&gt;
# OpenMoko Image Recipe&lt;br /&gt;
#------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
export IMAGE_BASENAME = &amp;quot;${PN}&amp;quot;&lt;br /&gt;
export IMAGE_LINGUAS = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export PACKAGE_INSTALL = &amp;quot;\&lt;br /&gt;
  ${MACHINE_TASK_PROVIDER} \&lt;br /&gt;
  task-openmoko-linux \&lt;br /&gt;
  task-openmoko-net \&lt;br /&gt;
  task-openmoko-ui \&lt;br /&gt;
  task-openmoko-base \&lt;br /&gt;
  task-openmoko-phone \&lt;br /&gt;
  task-openmoko-games \&lt;br /&gt;
  task-openmoko-pim \&lt;br /&gt;
  task-openmoko-scaredycat \&lt;br /&gt;
  &amp;quot;&lt;br /&gt;
&lt;br /&gt;
DEPENDS = &amp;quot;\&lt;br /&gt;
  ${MACHINE_TASK_PROVIDER} \&lt;br /&gt;
  task-openmoko \&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
RDEPENDS = &amp;quot;${PACKAGE_INSTALL}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inherit image&lt;br /&gt;
&lt;br /&gt;
LICENSE = MIT&lt;br /&gt;
&lt;br /&gt;
ROOTFS_POSTPROCESS_COMMAND += 'date &amp;quot;+%m%d%H%M%Y&amp;quot; &amp;gt;${IMAGE_ROOTFS}/etc/timestamp'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
edit packages/tasks/task-openmoko-scaredycat.bb - this is where we put the things we want to include in our image, above and behond the standard image. This example includes '''scummvm'''. If you modify this file, make sure you update the '''PR''' by incrementing the number.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;OpenMoko: Scaredycat Additions&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;openmoko/base&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;original&amp;quot;&lt;br /&gt;
PR = &amp;quot;r2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inherit task&lt;br /&gt;
&lt;br /&gt;
RDEPENDS_task-openmoko-scaredycat = &amp;quot;\&lt;br /&gt;
  scummvm \&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Building it ====&lt;br /&gt;
&lt;br /&gt;
To build you image, which will be located with your other images, do the following:&lt;br /&gt;
&lt;br /&gt;
 # cd build ; . ../setup-env ; bitbake scaredycat-openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
== Your First Application ==&lt;br /&gt;
&lt;br /&gt;
I know that I said I'd have a GDK application in here, however, I'd really like to get this whole course done first and have you guys starting to code instead of just looking at what I've written!&lt;br /&gt;
&lt;br /&gt;
This will be a very simple CLI hello world.&lt;br /&gt;
&lt;br /&gt;
=== Before We Code ===&lt;br /&gt;
&lt;br /&gt;
Like a good coder you want to make sure that you're not just doing things, but that you're doing them the right way! &lt;br /&gt;
&lt;br /&gt;
Now change directories into your &amp;lt;code&amp;gt;local/packages&amp;lt;/code&amp;gt; directory.The following commands expect you'll be in that directory so don't change unless you know what you're doing!&lt;br /&gt;
&lt;br /&gt;
You'll want to make a directory with the name of your application, and a subdirectory called files.&lt;br /&gt;
  mkdir myhelloworld myhelloworld/files&lt;br /&gt;
Now you'll want to create two files in the &amp;lt;code&amp;gt;files&amp;lt;/code&amp;gt; directory&lt;br /&gt;
  touch myhelloworld/files/README.txt myhelloworld/files/myhelloworld.c&lt;br /&gt;
And finally you'll want to create a bitbake file.&lt;br /&gt;
  touch myhelloworld/myhelloworld.bb&lt;br /&gt;
&lt;br /&gt;
Alrighty now all your necessary files are created so lets go over this real quick.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$HOME&lt;br /&gt;
 +- $OMDIR (contains the official openmoko tree)&lt;br /&gt;
 |  +- local/&lt;br /&gt;
 |     +- packages/&lt;br /&gt;
 |        +- myhelloworld/&lt;br /&gt;
 |           +- myhelloworld.bb&lt;br /&gt;
 |           +- files/&lt;br /&gt;
 |              +- myhelloworld.c&lt;br /&gt;
 |              +- README.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That should be your structure, if it's not you should go and fix it up.&lt;br /&gt;
=== Filling the Files ===&lt;br /&gt;
&lt;br /&gt;
So you've got your sample files all laid out now it's time to make them actually do something.&lt;br /&gt;
&lt;br /&gt;
myhelloworld.c&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char** argv)&lt;br /&gt;
{&lt;br /&gt;
        printf(&amp;quot;Ello Poppet!\n&amp;quot;);&lt;br /&gt;
        return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
README.txt&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This is a command line application. It prints a simple Hello World! To stdout.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
myhelloworld.bb&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;A killer hello world application&amp;quot;&lt;br /&gt;
AUTHOR = &amp;quot;Bryce Leo&amp;quot;&lt;br /&gt;
HOMEPAGE = &amp;quot;&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;console/applications&amp;quot;&lt;br /&gt;
PRIORITY = &amp;quot;optional&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;MIT&amp;quot;&lt;br /&gt;
#DEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RDEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RRECOMMENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RCONFLICTS = &amp;quot;&amp;quot;&lt;br /&gt;
#SRCDATE = &amp;quot;20070729&amp;quot;&lt;br /&gt;
#PV = &amp;quot;0.1&amp;quot;&lt;br /&gt;
#PR = &amp;quot;r0&amp;quot;&lt;br /&gt;
SRC_URI = &amp;quot;file://myhelloworld.c \&lt;br /&gt;
          file://README.txt &amp;quot;&lt;br /&gt;
&lt;br /&gt;
S = &amp;quot;${WORKDIR}/myhelloworld/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
do_compile() {&lt;br /&gt;
        ${CC} ${CFLAGS} ${LDFLAGS} ${WORKDIR}/myhelloworld.c -o myhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
do_install() {&lt;br /&gt;
        install -m 0755 -d ${D}${bindir} ${D}${docdir}/myhelloworld&lt;br /&gt;
        install -m 0755 ${S}/myhelloworld ${D}${bindir}&lt;br /&gt;
        install -m 0644 ${WORKDIR}/README.txt ${D}${docdir}/myhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Your First Compilation ===&lt;br /&gt;
&lt;br /&gt;
This is where the [[MokoMakefile]] comes in very very handy. Change to your ${OMDIR} directory, You'll know it by the fact that it is where &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt; resides.&lt;br /&gt;
 make build-package-myhelloworld&lt;br /&gt;
&lt;br /&gt;
(make sure you run make openmoko-devel-image at least once before building your own packages)&lt;br /&gt;
&lt;br /&gt;
This should all come back and not return any error messages, The output should end in something similar to&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NOTE: package myhelloworld-1.0: completed&lt;br /&gt;
NOTE: build 200707291926: completed&lt;br /&gt;
Build statistics:&lt;br /&gt;
  Attempted builds: 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that no errors were thrown we are happily done!&lt;br /&gt;
&lt;br /&gt;
== Adding Your Application to the Image ==&lt;br /&gt;
&lt;br /&gt;
So you've had an idea, you've setup the build environment, you've setup your local overlay, you've laid out your application tree, you've put code into those fantastic files of yours and now it compiles.There's only one thing left to do. Add that application to your image.&lt;br /&gt;
&lt;br /&gt;
Now lets go over in words and whys what we're about to do. First we need to make modify the &amp;lt;code&amp;gt;${OMDIR}/build/conf/local.conf&amp;lt;/code&amp;gt;. We add in the variable &amp;lt;code&amp;gt;DISTRO_EXTRA_RDEPENDS&amp;lt;/code&amp;gt; and set its value to include &amp;lt;code&amp;gt;myhelloworld&amp;lt;/code&amp;gt;. If you'd like to include other packages from your own overlay or the OM tree just add them inseparated by spaces. After this gets added as a dependency to build the Distro (in this case OpenMoko). Now we have to re-build the task-base package. This essentially just generates an ipk file that will &amp;quot;Merge machine and distro options to create a basic machine task/package.&amp;quot; It pretty much builds a file with a list of packages to be installed that are required for the distro to work correctly. So then you just go through and make &amp;lt;code&amp;gt;openmoko-devel-image, build-qemu, flash-qemu-local,&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;run-qemu&amp;lt;/code&amp;gt;. Then calibrate your stylus, head over to the terminal, and run your application!&lt;br /&gt;
&lt;br /&gt;
=== Modifying Your local.conf ===&lt;br /&gt;
Now, go into your build config directory &amp;lt;code&amp;gt;${OMDIR}/build/conf/&amp;lt;/code&amp;gt; and now you'll be editing &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
Add this line to you &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld&amp;quot;&lt;br /&gt;
With this line you can also include other applications from the OE tree. For instance my &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; looks like this.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MACHINE = &amp;quot;fic-gta01&amp;quot;&lt;br /&gt;
DISTRO = &amp;quot;openmoko&amp;quot;&lt;br /&gt;
BUILD_ARCH = &amp;quot;i686&amp;quot;&lt;br /&gt;
SRCDATE_eds-dbus = &amp;quot;now&amp;quot;&lt;br /&gt;
DISTRO_EXTRA_RDEPENDS += &amp;quot;lua dillo myhelloworld&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that you've fixed your &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; it's time to go through all the necessary tasks to add and re-build you image and have your sweet package included.&lt;br /&gt;
&lt;br /&gt;
=== Building ===&lt;br /&gt;
Now come the easy part thanks to [[MokoMakefile]]. &lt;br /&gt;
&lt;br /&gt;
  make rebuild-package-task-base&lt;br /&gt;
  make openmoko-devel-image&lt;br /&gt;
  make build-qemu&lt;br /&gt;
  make flash-qemu-local&lt;br /&gt;
&lt;br /&gt;
Now all you have to do is run qemu.&lt;br /&gt;
  make run-qemu&lt;br /&gt;
&lt;br /&gt;
From here after you calibrate your stylus, you click on the Menu in the top right, click down to terminal, then just run your program.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@fic-gta02:/$ myhelloworld&lt;br /&gt;
Ello Poppet!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Adding Python scripts as applications==&lt;br /&gt;
This is for adding python scripts/packages to the image for your own use.&lt;br /&gt;
===First steps===&lt;br /&gt;
First, you need to modify the &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; file as described above. You need to modify &lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld&amp;quot;&lt;br /&gt;
to&lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld python&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--[[User:Xkr47|xkr47]] 18:21, 11 August 2007 (CEST) Hmm surely the new line should be DISTRO_EXTRA_RDEPENDS += &amp;quot;pyhelloworld python&amp;quot; instead since the package we create below is pyhelloworld..&lt;br /&gt;
&lt;br /&gt;
This is because python is not included by default in the openmoko image. Or you can use &amp;lt;code&amp;gt;python-pygtk2&amp;lt;/code&amp;gt; if you wish.&lt;br /&gt;
&lt;br /&gt;
Next, you need to perform these actions from the &amp;lt;code&amp;gt;$OMDIR/local&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
  mkdir packages/pyhelloworld packages/pyhelloworld/files&lt;br /&gt;
&lt;br /&gt;
  touch packages/pyhelloworld/files/pyhello packages/pyhelloworld/README.txt&lt;br /&gt;
&lt;br /&gt;
  touch packages/pyhelloworld/pyhelloworld.bb&lt;br /&gt;
&lt;br /&gt;
===Filling in the files===&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;packages/pyhelloworld/files/pyhello&amp;lt;/code&amp;gt; to contain:&lt;br /&gt;
&amp;lt;pre&amp;gt;  &lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;hello world!&amp;quot;&lt;br /&gt;
print &amp;quot;shutting down now. Farewell oh cruel, cruel world!&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
Next up, is editing &amp;lt;code&amp;gt;packages/pyhelloworld/files/README.txt&amp;lt;/code&amp;gt; to say:&lt;br /&gt;
&lt;br /&gt;
  This is the most awesome helloworld application ever. Know why? It has SNAKES!&lt;br /&gt;
&lt;br /&gt;
Kidding aside, next is the all important &amp;lt;code&amp;gt; packages/pyhelloworld/pyhelloworld.bb:&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;A pythonic hello world application&amp;quot;&lt;br /&gt;
AUTHOR = &amp;quot;Tyler Laing&amp;quot;&lt;br /&gt;
HOMEPAGE = &amp;quot;&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;console/applications&amp;quot;&lt;br /&gt;
PRIORITY = &amp;quot;optional&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;MIT&amp;quot;&lt;br /&gt;
#DEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RDEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RRECOMMENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RCONFLICTS = &amp;quot;&amp;quot;&lt;br /&gt;
#SRCDATE = &amp;quot;20070729&amp;quot;&lt;br /&gt;
#PV = &amp;quot;0.1&amp;quot;&lt;br /&gt;
#PR = &amp;quot;r0&amp;quot;&lt;br /&gt;
SRC_URI = &amp;quot;file://pyhello \&lt;br /&gt;
          file://README.txt &amp;quot;&lt;br /&gt;
&lt;br /&gt;
S = &amp;quot;${WORKDIR}/pyhelloworld/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
do_install() {&lt;br /&gt;
        install -m 0755 -d ${D}${bindir} ${D}${docdir}/pyhelloworld&lt;br /&gt;
        install -m 0755 ${WORKDIR}/pyhello ${D}${bindir}&lt;br /&gt;
        install -m 0644 ${WORKDIR}/README.txt ${D}${docdir}/pyhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I'll explain each of the parts right here, for future reference.&lt;br /&gt;
&lt;br /&gt;
====Meanings of variables in .bb files====&lt;br /&gt;
&lt;br /&gt;
  $WORKDIR = $OMDIR/local/packages/&amp;lt;application directory&amp;gt;&lt;br /&gt;
  $bindir  = $OMDIR/build/tmp/work/armv4t-linux/&amp;lt;application directory&amp;gt;/image/usr/bin&lt;br /&gt;
  $docir   = $OMDIR/build/tmp/work/armv4t-linux/&amp;lt;application directory&amp;gt;/image/usr/share/doc&lt;br /&gt;
  $D       = $OMDIR/build/&lt;br /&gt;
&lt;br /&gt;
====Final steps====&lt;br /&gt;
Complete the last steps as per the above instructions, from the point of altering &amp;lt;code&amp;gt;DISTRO_EXTRA_RDEPENDS&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
And your done!&lt;br /&gt;
&lt;br /&gt;
[[Category:Applications]]&lt;br /&gt;
[[Category:OpenMoko]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Customizing_the_Openmoko_Distribution</id>
		<title>Customizing the Openmoko Distribution</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Customizing_the_Openmoko_Distribution"/>
				<updated>2007-08-29T17:47:20Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* Creating your own images */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What's the goal? ==&lt;br /&gt;
&lt;br /&gt;
The goal of this page is to teach you how to take an application that you've coded (or the sample app) and properly get it included in your rootfs. This article is a bit of an aggregate page, it's going to take information from [[MokoMakefile]], [[User:CesarB/Using a local overlay|Using a local overlay]], [[Building a hello world application]], and [[Create a package from existing sources]]. So as you can see the goal is for it to be a very thorough introduction, and will take you from &amp;quot;Idea to Inclusion&amp;quot; of your application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Setting Up the OpenMoko Environment ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; &lt;br /&gt;
 |*If you already have the environment setup then it is imperative that you update your Makefile.&lt;br /&gt;
Do this by running:&lt;br /&gt;
&amp;lt;pre&amp;gt;make update-makefile&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This part of the tutorial is going to be pretty basic. I absolutely love [[MokoMakefile]], it's fantastic, the creator has done and continues to do a fantastic job with this. I see absolutely no reason not to use it I put my OpenMoko development directory in /home/bryce/mokodev/ and that works great for me. You can feel free to do the same or put it anywhere else in your user directory (or anywhere on your system if you're feeling daring and a little nutty).&lt;br /&gt;
&lt;br /&gt;
To get your environment setup please get it setup according to [[MokoMakefile]] however if you do have the build environment setup manually and you're sure you know what you're doing then feel free to go forward with this.&lt;br /&gt;
&lt;br /&gt;
== Setting Up a Local Overlay ==&lt;br /&gt;
If you're at the point for setting up a local overlay this means a couple things. First: You've had a brilliant idea for an application that you just need to have on the OpenMoko platform. Second: You realize that this killer app of yours needs to be done properly and you're not going to do anything silly like include it in the actual tree for the OpenMoko distro because it would probably end up just getting overwritten eventually, or you just realize that it's bad practice!&lt;br /&gt;
&lt;br /&gt;
If you're wondering why and what a local overlay is then let me take this time to explain it to you. A local overlay is where you, as a developer keep your local files in an OE style setup so that you can simply pull your updated code into the tree. You add your overlay tree into the bitbake setup so that when you call bitbake it will pull your own or your customized packages before going to the OE or OpenMoko trees.This keeps everything nice and organized for you and also allows you to build/rebuild/include you apps by using the [[MokoMakefile]]&lt;br /&gt;
&lt;br /&gt;
Thank you to [[User:CesarB]] for this part of the wiki.&lt;br /&gt;
&lt;br /&gt;
To create a local overlay:&lt;br /&gt;
&lt;br /&gt;
* Create a &amp;quot;local&amp;quot; directory and its subdirectories&lt;br /&gt;
&lt;br /&gt;
 mkdir local local/conf local/classes local/packages local/packages/images local/packages/tasks&lt;br /&gt;
&lt;br /&gt;
* Copy &amp;lt;code&amp;gt;site.conf&amp;lt;/code&amp;gt; from the openmoko tree to &amp;lt;code&amp;gt;local/conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cp oe/conf/site.conf local/conf/site.conf&lt;br /&gt;
&lt;br /&gt;
* Edit the local/conf/site.conf you copied to add the new tree as a source for bitbake recipes.&lt;br /&gt;
&lt;br /&gt;
Change the current &amp;lt;code&amp;gt;BBFILES&amp;lt;/code&amp;gt; to look like this:&lt;br /&gt;
 BBFILES := &amp;quot;${OMDIR}/openembedded/packages/*/*.bb ${OMDIR}/oe/packages/*/*.bb ${OMDIR}/local/packages/*/*.bb&amp;quot;&lt;br /&gt;
Change your &amp;lt;code&amp;gt;BBFILE_COLLECTIONS&amp;lt;/code&amp;gt; line to look like this:&lt;br /&gt;
 BBFILE_COLLECTIONS = &amp;quot;upstream local overlay&amp;quot;&lt;br /&gt;
Add this line:&lt;br /&gt;
 BBFILE_PATTERN_overlay = &amp;quot;^${OMDIR}/local/&amp;quot;&lt;br /&gt;
Add this line:&lt;br /&gt;
 BBFILE_PRIORITY_overlay = &amp;quot;20&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;BBFILE_PRIORITY&amp;lt;/code&amp;gt; should be greater than all the other &amp;lt;code&amp;gt;BBFILE_PRIORITY&amp;lt;/code&amp;gt; variables on the same file.&lt;br /&gt;
&lt;br /&gt;
* Change your &amp;lt;code&amp;gt;BBPATH&amp;lt;/code&amp;gt; environment variable to add the new tree ''before'' the two others in your &amp;lt;code&amp;gt;setup-env&amp;lt;/code&amp;gt; file.&amp;lt;code&amp;gt;setup-env&amp;lt;/code&amp;gt; is created by [[MokoMakefile]] automatically and is located in your &amp;lt;code&amp;gt;${OMDIR}&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
 export BBPATH=&amp;quot;${OMDIR}/build:${OMDIR}/local:${OMDIR}/oe:${OMDIR}/openembedded&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Using Your New Local Overlay ==&lt;br /&gt;
&lt;br /&gt;
=== Changing files in conf/ ===&lt;br /&gt;
&lt;br /&gt;
To change a file in conf/, just copy the file to the overlay tree (preserving the directory structure) and edit it.&lt;br /&gt;
&lt;br /&gt;
=== Changing files in classes/ ===&lt;br /&gt;
&lt;br /&gt;
To change a file in classes/, just copy the file to the overlay tree and edit it.&lt;br /&gt;
&lt;br /&gt;
=== Changing packages ===&lt;br /&gt;
&lt;br /&gt;
Changing a package's recipe is a bit more complex. You have to copy over (or symlink) not only the .bb file for the package, but also ''all'' the files it includes with &amp;lt;code&amp;gt;require&amp;lt;/code&amp;gt;, and the &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt; directories (all directories referred to by &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt;, usually named either ''package''-''version'' or &amp;lt;code&amp;gt;files&amp;lt;/code&amp;gt;). If you forget one of them, the build will give an error (either when parsing the recipe in the case of &amp;lt;code&amp;gt;require&amp;lt;/code&amp;gt;, or when trying to build in the case of the &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt; directories).&lt;br /&gt;
&lt;br /&gt;
=== Adding a new package ===&lt;br /&gt;
&lt;br /&gt;
You can add a new package (or a recipe for a new version of a package) to the overlay tree simply by creating it on the overlay tree.&lt;br /&gt;
&lt;br /&gt;
=== Creating your own images ===&lt;br /&gt;
&lt;br /&gt;
To create you own images we'll use the base openmoko .bb files and modify them so suit. Where you see ''scaredycat'' replace this with something to identify your own images.&lt;br /&gt;
&lt;br /&gt;
edit local/packages/images/scaredycat-openmoko-devel-image.bb and paste this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require scaredycat-openmoko-image.bb&lt;br /&gt;
 &lt;br /&gt;
export PACKAGE_INSTALL += &amp;quot;\&lt;br /&gt;
  task-openmoko-debug \&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then edit local/packages/images/scaredycat-openmoko-image.bb&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#------------------------------------------------------&lt;br /&gt;
# OpenMoko Image Recipe&lt;br /&gt;
#------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
export IMAGE_BASENAME = &amp;quot;${PN}&amp;quot;&lt;br /&gt;
export IMAGE_LINGUAS = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export PACKAGE_INSTALL = &amp;quot;\&lt;br /&gt;
  ${MACHINE_TASK_PROVIDER} \&lt;br /&gt;
  task-openmoko-linux \&lt;br /&gt;
  task-openmoko-net \&lt;br /&gt;
  task-openmoko-ui \&lt;br /&gt;
  task-openmoko-base \&lt;br /&gt;
  task-openmoko-phone \&lt;br /&gt;
  task-openmoko-games \&lt;br /&gt;
  task-openmoko-pim \&lt;br /&gt;
  task-openmoko-scaredycat \&lt;br /&gt;
  &amp;quot;&lt;br /&gt;
&lt;br /&gt;
DEPENDS = &amp;quot;\&lt;br /&gt;
  ${MACHINE_TASK_PROVIDER} \&lt;br /&gt;
  task-openmoko \&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
RDEPENDS = &amp;quot;${PACKAGE_INSTALL}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inherit image&lt;br /&gt;
&lt;br /&gt;
LICENSE = MIT&lt;br /&gt;
&lt;br /&gt;
ROOTFS_POSTPROCESS_COMMAND += 'date &amp;quot;+%m%d%H%M%Y&amp;quot; &amp;gt;${IMAGE_ROOTFS}/etc/timestamp'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
edit packages/tasks/task-openmoko-scaredycat.bb - this is where we put the things we want to include in our image, above and behond the standard image. This example includes '''scummvm'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;OpenMoko: Scaredycat Additions&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;openmoko/base&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;original&amp;quot;&lt;br /&gt;
PR = &amp;quot;r2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inherit task&lt;br /&gt;
&lt;br /&gt;
RDEPENDS_task-openmoko-scaredycat = &amp;quot;\&lt;br /&gt;
  scummvm \&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Building it ====&lt;br /&gt;
&lt;br /&gt;
To build you image, which will be located with your other images, do the following:&lt;br /&gt;
&lt;br /&gt;
 # cd build ; . ../setup-env ; bitbake scaredycat-openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
== Your First Application ==&lt;br /&gt;
&lt;br /&gt;
I know that I said I'd have a GDK application in here, however, I'd really like to get this whole course done first and have you guys starting to code instead of just looking at what I've written!&lt;br /&gt;
&lt;br /&gt;
This will be a very simple CLI hello world.&lt;br /&gt;
&lt;br /&gt;
=== Before We Code ===&lt;br /&gt;
&lt;br /&gt;
Like a good coder you want to make sure that you're not just doing things, but that you're doing them the right way! &lt;br /&gt;
&lt;br /&gt;
Now change directories into your &amp;lt;code&amp;gt;local/packages&amp;lt;/code&amp;gt; directory.The following commands expect you'll be in that directory so don't change unless you know what you're doing!&lt;br /&gt;
&lt;br /&gt;
You'll want to make a directory with the name of your application, and a subdirectory called files.&lt;br /&gt;
  mkdir myhelloworld myhelloworld/files&lt;br /&gt;
Now you'll want to create two files in the &amp;lt;code&amp;gt;files&amp;lt;/code&amp;gt; directory&lt;br /&gt;
  touch myhelloworld/files/README.txt myhelloworld/files/myhelloworld.c&lt;br /&gt;
And finally you'll want to create a bitbake file.&lt;br /&gt;
  touch myhelloworld/myhelloworld.bb&lt;br /&gt;
&lt;br /&gt;
Alrighty now all your necessary files are created so lets go over this real quick.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$HOME&lt;br /&gt;
 +- $OMDIR (contains the official openmoko tree)&lt;br /&gt;
 |  +- local/&lt;br /&gt;
 |     +- packages/&lt;br /&gt;
 |        +- myhelloworld/&lt;br /&gt;
 |           +- myhelloworld.bb&lt;br /&gt;
 |           +- files/&lt;br /&gt;
 |              +- myhelloworld.c&lt;br /&gt;
 |              +- README.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That should be your structure, if it's not you should go and fix it up.&lt;br /&gt;
=== Filling the Files ===&lt;br /&gt;
&lt;br /&gt;
So you've got your sample files all laid out now it's time to make them actually do something.&lt;br /&gt;
&lt;br /&gt;
myhelloworld.c&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char** argv)&lt;br /&gt;
{&lt;br /&gt;
        printf(&amp;quot;Ello Poppet!\n&amp;quot;);&lt;br /&gt;
        return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
README.txt&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This is a command line application. It prints a simple Hello World! To stdout.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
myhelloworld.bb&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;A killer hello world application&amp;quot;&lt;br /&gt;
AUTHOR = &amp;quot;Bryce Leo&amp;quot;&lt;br /&gt;
HOMEPAGE = &amp;quot;&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;console/applications&amp;quot;&lt;br /&gt;
PRIORITY = &amp;quot;optional&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;MIT&amp;quot;&lt;br /&gt;
#DEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RDEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RRECOMMENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RCONFLICTS = &amp;quot;&amp;quot;&lt;br /&gt;
#SRCDATE = &amp;quot;20070729&amp;quot;&lt;br /&gt;
#PV = &amp;quot;0.1&amp;quot;&lt;br /&gt;
#PR = &amp;quot;r0&amp;quot;&lt;br /&gt;
SRC_URI = &amp;quot;file://myhelloworld.c \&lt;br /&gt;
          file://README.txt &amp;quot;&lt;br /&gt;
&lt;br /&gt;
S = &amp;quot;${WORKDIR}/myhelloworld/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
do_compile() {&lt;br /&gt;
        ${CC} ${CFLAGS} ${LDFLAGS} ${WORKDIR}/myhelloworld.c -o myhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
do_install() {&lt;br /&gt;
        install -m 0755 -d ${D}${bindir} ${D}${docdir}/myhelloworld&lt;br /&gt;
        install -m 0755 ${S}/myhelloworld ${D}${bindir}&lt;br /&gt;
        install -m 0644 ${WORKDIR}/README.txt ${D}${docdir}/myhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Your First Compilation ===&lt;br /&gt;
&lt;br /&gt;
This is where the [[MokoMakefile]] comes in very very handy. Change to your ${OMDIR} directory, You'll know it by the fact that it is where &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt; resides.&lt;br /&gt;
 make build-package-myhelloworld&lt;br /&gt;
&lt;br /&gt;
(make sure you run make openmoko-devel-image at least once before building your own packages)&lt;br /&gt;
&lt;br /&gt;
This should all come back and not return any error messages, The output should end in something similar to&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NOTE: package myhelloworld-1.0: completed&lt;br /&gt;
NOTE: build 200707291926: completed&lt;br /&gt;
Build statistics:&lt;br /&gt;
  Attempted builds: 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that no errors were thrown we are happily done!&lt;br /&gt;
&lt;br /&gt;
== Adding Your Application to the Image ==&lt;br /&gt;
&lt;br /&gt;
So you've had an idea, you've setup the build environment, you've setup your local overlay, you've laid out your application tree, you've put code into those fantastic files of yours and now it compiles.There's only one thing left to do. Add that application to your image.&lt;br /&gt;
&lt;br /&gt;
Now lets go over in words and whys what we're about to do. First we need to make modify the &amp;lt;code&amp;gt;${OMDIR}/build/conf/local.conf&amp;lt;/code&amp;gt;. We add in the variable &amp;lt;code&amp;gt;DISTRO_EXTRA_RDEPENDS&amp;lt;/code&amp;gt; and set its value to include &amp;lt;code&amp;gt;myhelloworld&amp;lt;/code&amp;gt;. If you'd like to include other packages from your own overlay or the OM tree just add them inseparated by spaces. After this gets added as a dependency to build the Distro (in this case OpenMoko). Now we have to re-build the task-base package. This essentially just generates an ipk file that will &amp;quot;Merge machine and distro options to create a basic machine task/package.&amp;quot; It pretty much builds a file with a list of packages to be installed that are required for the distro to work correctly. So then you just go through and make &amp;lt;code&amp;gt;openmoko-devel-image, build-qemu, flash-qemu-local,&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;run-qemu&amp;lt;/code&amp;gt;. Then calibrate your stylus, head over to the terminal, and run your application!&lt;br /&gt;
&lt;br /&gt;
=== Modifying Your local.conf ===&lt;br /&gt;
Now, go into your build config directory &amp;lt;code&amp;gt;${OMDIR}/build/conf/&amp;lt;/code&amp;gt; and now you'll be editing &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
Add this line to you &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld&amp;quot;&lt;br /&gt;
With this line you can also include other applications from the OE tree. For instance my &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; looks like this.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MACHINE = &amp;quot;fic-gta01&amp;quot;&lt;br /&gt;
DISTRO = &amp;quot;openmoko&amp;quot;&lt;br /&gt;
BUILD_ARCH = &amp;quot;i686&amp;quot;&lt;br /&gt;
SRCDATE_eds-dbus = &amp;quot;now&amp;quot;&lt;br /&gt;
DISTRO_EXTRA_RDEPENDS += &amp;quot;lua dillo myhelloworld&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that you've fixed your &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; it's time to go through all the necessary tasks to add and re-build you image and have your sweet package included.&lt;br /&gt;
&lt;br /&gt;
=== Building ===&lt;br /&gt;
Now come the easy part thanks to [[MokoMakefile]]. &lt;br /&gt;
&lt;br /&gt;
  make rebuild-package-task-base&lt;br /&gt;
  make openmoko-devel-image&lt;br /&gt;
  make build-qemu&lt;br /&gt;
  make flash-qemu-local&lt;br /&gt;
&lt;br /&gt;
Now all you have to do is run qemu.&lt;br /&gt;
  make run-qemu&lt;br /&gt;
&lt;br /&gt;
From here after you calibrate your stylus, you click on the Menu in the top right, click down to terminal, then just run your program.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@fic-gta02:/$ myhelloworld&lt;br /&gt;
Ello Poppet!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Adding Python scripts as applications==&lt;br /&gt;
This is for adding python scripts/packages to the image for your own use.&lt;br /&gt;
===First steps===&lt;br /&gt;
First, you need to modify the &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; file as described above. You need to modify &lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld&amp;quot;&lt;br /&gt;
to&lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld python&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--[[User:Xkr47|xkr47]] 18:21, 11 August 2007 (CEST) Hmm surely the new line should be DISTRO_EXTRA_RDEPENDS += &amp;quot;pyhelloworld python&amp;quot; instead since the package we create below is pyhelloworld..&lt;br /&gt;
&lt;br /&gt;
This is because python is not included by default in the openmoko image. Or you can use &amp;lt;code&amp;gt;python-pygtk2&amp;lt;/code&amp;gt; if you wish.&lt;br /&gt;
&lt;br /&gt;
Next, you need to perform these actions from the &amp;lt;code&amp;gt;$OMDIR/local&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
  mkdir packages/pyhelloworld packages/pyhelloworld/files&lt;br /&gt;
&lt;br /&gt;
  touch packages/pyhelloworld/files/pyhello packages/pyhelloworld/README.txt&lt;br /&gt;
&lt;br /&gt;
  touch packages/pyhelloworld/pyhelloworld.bb&lt;br /&gt;
&lt;br /&gt;
===Filling in the files===&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;packages/pyhelloworld/files/pyhello&amp;lt;/code&amp;gt; to contain:&lt;br /&gt;
&amp;lt;pre&amp;gt;  &lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;hello world!&amp;quot;&lt;br /&gt;
print &amp;quot;shutting down now. Farewell oh cruel, cruel world!&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
Next up, is editing &amp;lt;code&amp;gt;packages/pyhelloworld/files/README.txt&amp;lt;/code&amp;gt; to say:&lt;br /&gt;
&lt;br /&gt;
  This is the most awesome helloworld application ever. Know why? It has SNAKES!&lt;br /&gt;
&lt;br /&gt;
Kidding aside, next is the all important &amp;lt;code&amp;gt; packages/pyhelloworld/pyhelloworld.bb:&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;A pythonic hello world application&amp;quot;&lt;br /&gt;
AUTHOR = &amp;quot;Tyler Laing&amp;quot;&lt;br /&gt;
HOMEPAGE = &amp;quot;&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;console/applications&amp;quot;&lt;br /&gt;
PRIORITY = &amp;quot;optional&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;MIT&amp;quot;&lt;br /&gt;
#DEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RDEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RRECOMMENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RCONFLICTS = &amp;quot;&amp;quot;&lt;br /&gt;
#SRCDATE = &amp;quot;20070729&amp;quot;&lt;br /&gt;
#PV = &amp;quot;0.1&amp;quot;&lt;br /&gt;
#PR = &amp;quot;r0&amp;quot;&lt;br /&gt;
SRC_URI = &amp;quot;file://pyhello \&lt;br /&gt;
          file://README.txt &amp;quot;&lt;br /&gt;
&lt;br /&gt;
S = &amp;quot;${WORKDIR}/pyhelloworld/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
do_install() {&lt;br /&gt;
        install -m 0755 -d ${D}${bindir} ${D}${docdir}/pyhelloworld&lt;br /&gt;
        install -m 0755 ${WORKDIR}/pyhello ${D}${bindir}&lt;br /&gt;
        install -m 0644 ${WORKDIR}/README.txt ${D}${docdir}/pyhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I'll explain each of the parts right here, for future reference.&lt;br /&gt;
&lt;br /&gt;
====Meanings of variables in .bb files====&lt;br /&gt;
&lt;br /&gt;
  $WORKDIR = $OMDIR/local/packages/&amp;lt;application directory&amp;gt;&lt;br /&gt;
  $bindir  = $OMDIR/build/tmp/work/armv4t-linux/&amp;lt;application directory&amp;gt;/image/usr/bin&lt;br /&gt;
  $docir   = $OMDIR/build/tmp/work/armv4t-linux/&amp;lt;application directory&amp;gt;/image/usr/share/doc&lt;br /&gt;
  $D       = $OMDIR/build/&lt;br /&gt;
&lt;br /&gt;
====Final steps====&lt;br /&gt;
Complete the last steps as per the above instructions, from the point of altering &amp;lt;code&amp;gt;DISTRO_EXTRA_RDEPENDS&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
And your done!&lt;br /&gt;
&lt;br /&gt;
[[Category:Applications]]&lt;br /&gt;
[[Category:OpenMoko]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Customizing_the_Openmoko_Distribution</id>
		<title>Customizing the Openmoko Distribution</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Customizing_the_Openmoko_Distribution"/>
				<updated>2007-08-29T17:46:15Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* Creating your own images */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What's the goal? ==&lt;br /&gt;
&lt;br /&gt;
The goal of this page is to teach you how to take an application that you've coded (or the sample app) and properly get it included in your rootfs. This article is a bit of an aggregate page, it's going to take information from [[MokoMakefile]], [[User:CesarB/Using a local overlay|Using a local overlay]], [[Building a hello world application]], and [[Create a package from existing sources]]. So as you can see the goal is for it to be a very thorough introduction, and will take you from &amp;quot;Idea to Inclusion&amp;quot; of your application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Setting Up the OpenMoko Environment ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; &lt;br /&gt;
 |*If you already have the environment setup then it is imperative that you update your Makefile.&lt;br /&gt;
Do this by running:&lt;br /&gt;
&amp;lt;pre&amp;gt;make update-makefile&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This part of the tutorial is going to be pretty basic. I absolutely love [[MokoMakefile]], it's fantastic, the creator has done and continues to do a fantastic job with this. I see absolutely no reason not to use it I put my OpenMoko development directory in /home/bryce/mokodev/ and that works great for me. You can feel free to do the same or put it anywhere else in your user directory (or anywhere on your system if you're feeling daring and a little nutty).&lt;br /&gt;
&lt;br /&gt;
To get your environment setup please get it setup according to [[MokoMakefile]] however if you do have the build environment setup manually and you're sure you know what you're doing then feel free to go forward with this.&lt;br /&gt;
&lt;br /&gt;
== Setting Up a Local Overlay ==&lt;br /&gt;
If you're at the point for setting up a local overlay this means a couple things. First: You've had a brilliant idea for an application that you just need to have on the OpenMoko platform. Second: You realize that this killer app of yours needs to be done properly and you're not going to do anything silly like include it in the actual tree for the OpenMoko distro because it would probably end up just getting overwritten eventually, or you just realize that it's bad practice!&lt;br /&gt;
&lt;br /&gt;
If you're wondering why and what a local overlay is then let me take this time to explain it to you. A local overlay is where you, as a developer keep your local files in an OE style setup so that you can simply pull your updated code into the tree. You add your overlay tree into the bitbake setup so that when you call bitbake it will pull your own or your customized packages before going to the OE or OpenMoko trees.This keeps everything nice and organized for you and also allows you to build/rebuild/include you apps by using the [[MokoMakefile]]&lt;br /&gt;
&lt;br /&gt;
Thank you to [[User:CesarB]] for this part of the wiki.&lt;br /&gt;
&lt;br /&gt;
To create a local overlay:&lt;br /&gt;
&lt;br /&gt;
* Create a &amp;quot;local&amp;quot; directory and its subdirectories&lt;br /&gt;
&lt;br /&gt;
 mkdir local local/conf local/classes local/packages local/packages/images local/packages/tasks&lt;br /&gt;
&lt;br /&gt;
* Copy &amp;lt;code&amp;gt;site.conf&amp;lt;/code&amp;gt; from the openmoko tree to &amp;lt;code&amp;gt;local/conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cp oe/conf/site.conf local/conf/site.conf&lt;br /&gt;
&lt;br /&gt;
* Edit the local/conf/site.conf you copied to add the new tree as a source for bitbake recipes.&lt;br /&gt;
&lt;br /&gt;
Change the current &amp;lt;code&amp;gt;BBFILES&amp;lt;/code&amp;gt; to look like this:&lt;br /&gt;
 BBFILES := &amp;quot;${OMDIR}/openembedded/packages/*/*.bb ${OMDIR}/oe/packages/*/*.bb ${OMDIR}/local/packages/*/*.bb&amp;quot;&lt;br /&gt;
Change your &amp;lt;code&amp;gt;BBFILE_COLLECTIONS&amp;lt;/code&amp;gt; line to look like this:&lt;br /&gt;
 BBFILE_COLLECTIONS = &amp;quot;upstream local overlay&amp;quot;&lt;br /&gt;
Add this line:&lt;br /&gt;
 BBFILE_PATTERN_overlay = &amp;quot;^${OMDIR}/local/&amp;quot;&lt;br /&gt;
Add this line:&lt;br /&gt;
 BBFILE_PRIORITY_overlay = &amp;quot;20&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;BBFILE_PRIORITY&amp;lt;/code&amp;gt; should be greater than all the other &amp;lt;code&amp;gt;BBFILE_PRIORITY&amp;lt;/code&amp;gt; variables on the same file.&lt;br /&gt;
&lt;br /&gt;
* Change your &amp;lt;code&amp;gt;BBPATH&amp;lt;/code&amp;gt; environment variable to add the new tree ''before'' the two others in your &amp;lt;code&amp;gt;setup-env&amp;lt;/code&amp;gt; file.&amp;lt;code&amp;gt;setup-env&amp;lt;/code&amp;gt; is created by [[MokoMakefile]] automatically and is located in your &amp;lt;code&amp;gt;${OMDIR}&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
 export BBPATH=&amp;quot;${OMDIR}/build:${OMDIR}/local:${OMDIR}/oe:${OMDIR}/openembedded&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Using Your New Local Overlay ==&lt;br /&gt;
&lt;br /&gt;
=== Changing files in conf/ ===&lt;br /&gt;
&lt;br /&gt;
To change a file in conf/, just copy the file to the overlay tree (preserving the directory structure) and edit it.&lt;br /&gt;
&lt;br /&gt;
=== Changing files in classes/ ===&lt;br /&gt;
&lt;br /&gt;
To change a file in classes/, just copy the file to the overlay tree and edit it.&lt;br /&gt;
&lt;br /&gt;
=== Changing packages ===&lt;br /&gt;
&lt;br /&gt;
Changing a package's recipe is a bit more complex. You have to copy over (or symlink) not only the .bb file for the package, but also ''all'' the files it includes with &amp;lt;code&amp;gt;require&amp;lt;/code&amp;gt;, and the &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt; directories (all directories referred to by &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt;, usually named either ''package''-''version'' or &amp;lt;code&amp;gt;files&amp;lt;/code&amp;gt;). If you forget one of them, the build will give an error (either when parsing the recipe in the case of &amp;lt;code&amp;gt;require&amp;lt;/code&amp;gt;, or when trying to build in the case of the &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt; directories).&lt;br /&gt;
&lt;br /&gt;
=== Adding a new package ===&lt;br /&gt;
&lt;br /&gt;
You can add a new package (or a recipe for a new version of a package) to the overlay tree simply by creating it on the overlay tree.&lt;br /&gt;
&lt;br /&gt;
=== Creating your own images ===&lt;br /&gt;
&lt;br /&gt;
To create you own images we'll use the base openmoko .bb files and modify them so suit. Where you see ''scaredycat'' replace this with something to identify your own images.&lt;br /&gt;
&lt;br /&gt;
edit local/packages/images/scaredycat-openmoko-devel-image.bb and paste this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require scaredycat-openmoko-image.bb&lt;br /&gt;
 &lt;br /&gt;
export PACKAGE_INSTALL += &amp;quot;\&lt;br /&gt;
  task-openmoko-debug \&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then edit local/packages/images/scaredycat-openmoko-image.bb&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#------------------------------------------------------&lt;br /&gt;
# OpenMoko Image Recipe&lt;br /&gt;
#------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
export IMAGE_BASENAME = &amp;quot;${PN}&amp;quot;&lt;br /&gt;
export IMAGE_LINGUAS = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export PACKAGE_INSTALL = &amp;quot;\&lt;br /&gt;
  ${MACHINE_TASK_PROVIDER} \&lt;br /&gt;
  task-openmoko-linux \&lt;br /&gt;
  task-openmoko-net \&lt;br /&gt;
  task-openmoko-ui \&lt;br /&gt;
  task-openmoko-base \&lt;br /&gt;
  task-openmoko-phone \&lt;br /&gt;
  task-openmoko-games \&lt;br /&gt;
  task-openmoko-pim \&lt;br /&gt;
  task-openmoko-scaredycat \&lt;br /&gt;
  &amp;quot;&lt;br /&gt;
&lt;br /&gt;
DEPENDS = &amp;quot;\&lt;br /&gt;
  ${MACHINE_TASK_PROVIDER} \&lt;br /&gt;
  task-openmoko \&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
RDEPENDS = &amp;quot;${PACKAGE_INSTALL}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inherit image&lt;br /&gt;
&lt;br /&gt;
LICENSE = MIT&lt;br /&gt;
&lt;br /&gt;
ROOTFS_POSTPROCESS_COMMAND += 'date &amp;quot;+%m%d%H%M%Y&amp;quot; &amp;gt;${IMAGE_ROOTFS}/etc/timestamp'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
edit packages/tasks/task-openmoko-scaredycat.bb - this is where we put the things we want to include in our image, above and behond the standard image.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;OpenMoko: Scaredycat Additions&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;openmoko/base&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;original&amp;quot;&lt;br /&gt;
PR = &amp;quot;r2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inherit task&lt;br /&gt;
&lt;br /&gt;
RDEPENDS_task-openmoko-scaredycat = &amp;quot;\&lt;br /&gt;
  scummvm \&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Building it ====&lt;br /&gt;
&lt;br /&gt;
To build you image, which will be located with your other images, do the following:&lt;br /&gt;
&lt;br /&gt;
 # cd build ; . ../setup-env ; bitbake scaredycat-openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
== Your First Application ==&lt;br /&gt;
&lt;br /&gt;
I know that I said I'd have a GDK application in here, however, I'd really like to get this whole course done first and have you guys starting to code instead of just looking at what I've written!&lt;br /&gt;
&lt;br /&gt;
This will be a very simple CLI hello world.&lt;br /&gt;
&lt;br /&gt;
=== Before We Code ===&lt;br /&gt;
&lt;br /&gt;
Like a good coder you want to make sure that you're not just doing things, but that you're doing them the right way! &lt;br /&gt;
&lt;br /&gt;
Now change directories into your &amp;lt;code&amp;gt;local/packages&amp;lt;/code&amp;gt; directory.The following commands expect you'll be in that directory so don't change unless you know what you're doing!&lt;br /&gt;
&lt;br /&gt;
You'll want to make a directory with the name of your application, and a subdirectory called files.&lt;br /&gt;
  mkdir myhelloworld myhelloworld/files&lt;br /&gt;
Now you'll want to create two files in the &amp;lt;code&amp;gt;files&amp;lt;/code&amp;gt; directory&lt;br /&gt;
  touch myhelloworld/files/README.txt myhelloworld/files/myhelloworld.c&lt;br /&gt;
And finally you'll want to create a bitbake file.&lt;br /&gt;
  touch myhelloworld/myhelloworld.bb&lt;br /&gt;
&lt;br /&gt;
Alrighty now all your necessary files are created so lets go over this real quick.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$HOME&lt;br /&gt;
 +- $OMDIR (contains the official openmoko tree)&lt;br /&gt;
 |  +- local/&lt;br /&gt;
 |     +- packages/&lt;br /&gt;
 |        +- myhelloworld/&lt;br /&gt;
 |           +- myhelloworld.bb&lt;br /&gt;
 |           +- files/&lt;br /&gt;
 |              +- myhelloworld.c&lt;br /&gt;
 |              +- README.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That should be your structure, if it's not you should go and fix it up.&lt;br /&gt;
=== Filling the Files ===&lt;br /&gt;
&lt;br /&gt;
So you've got your sample files all laid out now it's time to make them actually do something.&lt;br /&gt;
&lt;br /&gt;
myhelloworld.c&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char** argv)&lt;br /&gt;
{&lt;br /&gt;
        printf(&amp;quot;Ello Poppet!\n&amp;quot;);&lt;br /&gt;
        return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
README.txt&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This is a command line application. It prints a simple Hello World! To stdout.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
myhelloworld.bb&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;A killer hello world application&amp;quot;&lt;br /&gt;
AUTHOR = &amp;quot;Bryce Leo&amp;quot;&lt;br /&gt;
HOMEPAGE = &amp;quot;&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;console/applications&amp;quot;&lt;br /&gt;
PRIORITY = &amp;quot;optional&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;MIT&amp;quot;&lt;br /&gt;
#DEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RDEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RRECOMMENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RCONFLICTS = &amp;quot;&amp;quot;&lt;br /&gt;
#SRCDATE = &amp;quot;20070729&amp;quot;&lt;br /&gt;
#PV = &amp;quot;0.1&amp;quot;&lt;br /&gt;
#PR = &amp;quot;r0&amp;quot;&lt;br /&gt;
SRC_URI = &amp;quot;file://myhelloworld.c \&lt;br /&gt;
          file://README.txt &amp;quot;&lt;br /&gt;
&lt;br /&gt;
S = &amp;quot;${WORKDIR}/myhelloworld/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
do_compile() {&lt;br /&gt;
        ${CC} ${CFLAGS} ${LDFLAGS} ${WORKDIR}/myhelloworld.c -o myhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
do_install() {&lt;br /&gt;
        install -m 0755 -d ${D}${bindir} ${D}${docdir}/myhelloworld&lt;br /&gt;
        install -m 0755 ${S}/myhelloworld ${D}${bindir}&lt;br /&gt;
        install -m 0644 ${WORKDIR}/README.txt ${D}${docdir}/myhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Your First Compilation ===&lt;br /&gt;
&lt;br /&gt;
This is where the [[MokoMakefile]] comes in very very handy. Change to your ${OMDIR} directory, You'll know it by the fact that it is where &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt; resides.&lt;br /&gt;
 make build-package-myhelloworld&lt;br /&gt;
&lt;br /&gt;
(make sure you run make openmoko-devel-image at least once before building your own packages)&lt;br /&gt;
&lt;br /&gt;
This should all come back and not return any error messages, The output should end in something similar to&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NOTE: package myhelloworld-1.0: completed&lt;br /&gt;
NOTE: build 200707291926: completed&lt;br /&gt;
Build statistics:&lt;br /&gt;
  Attempted builds: 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that no errors were thrown we are happily done!&lt;br /&gt;
&lt;br /&gt;
== Adding Your Application to the Image ==&lt;br /&gt;
&lt;br /&gt;
So you've had an idea, you've setup the build environment, you've setup your local overlay, you've laid out your application tree, you've put code into those fantastic files of yours and now it compiles.There's only one thing left to do. Add that application to your image.&lt;br /&gt;
&lt;br /&gt;
Now lets go over in words and whys what we're about to do. First we need to make modify the &amp;lt;code&amp;gt;${OMDIR}/build/conf/local.conf&amp;lt;/code&amp;gt;. We add in the variable &amp;lt;code&amp;gt;DISTRO_EXTRA_RDEPENDS&amp;lt;/code&amp;gt; and set its value to include &amp;lt;code&amp;gt;myhelloworld&amp;lt;/code&amp;gt;. If you'd like to include other packages from your own overlay or the OM tree just add them inseparated by spaces. After this gets added as a dependency to build the Distro (in this case OpenMoko). Now we have to re-build the task-base package. This essentially just generates an ipk file that will &amp;quot;Merge machine and distro options to create a basic machine task/package.&amp;quot; It pretty much builds a file with a list of packages to be installed that are required for the distro to work correctly. So then you just go through and make &amp;lt;code&amp;gt;openmoko-devel-image, build-qemu, flash-qemu-local,&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;run-qemu&amp;lt;/code&amp;gt;. Then calibrate your stylus, head over to the terminal, and run your application!&lt;br /&gt;
&lt;br /&gt;
=== Modifying Your local.conf ===&lt;br /&gt;
Now, go into your build config directory &amp;lt;code&amp;gt;${OMDIR}/build/conf/&amp;lt;/code&amp;gt; and now you'll be editing &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
Add this line to you &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld&amp;quot;&lt;br /&gt;
With this line you can also include other applications from the OE tree. For instance my &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; looks like this.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MACHINE = &amp;quot;fic-gta01&amp;quot;&lt;br /&gt;
DISTRO = &amp;quot;openmoko&amp;quot;&lt;br /&gt;
BUILD_ARCH = &amp;quot;i686&amp;quot;&lt;br /&gt;
SRCDATE_eds-dbus = &amp;quot;now&amp;quot;&lt;br /&gt;
DISTRO_EXTRA_RDEPENDS += &amp;quot;lua dillo myhelloworld&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that you've fixed your &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; it's time to go through all the necessary tasks to add and re-build you image and have your sweet package included.&lt;br /&gt;
&lt;br /&gt;
=== Building ===&lt;br /&gt;
Now come the easy part thanks to [[MokoMakefile]]. &lt;br /&gt;
&lt;br /&gt;
  make rebuild-package-task-base&lt;br /&gt;
  make openmoko-devel-image&lt;br /&gt;
  make build-qemu&lt;br /&gt;
  make flash-qemu-local&lt;br /&gt;
&lt;br /&gt;
Now all you have to do is run qemu.&lt;br /&gt;
  make run-qemu&lt;br /&gt;
&lt;br /&gt;
From here after you calibrate your stylus, you click on the Menu in the top right, click down to terminal, then just run your program.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@fic-gta02:/$ myhelloworld&lt;br /&gt;
Ello Poppet!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Adding Python scripts as applications==&lt;br /&gt;
This is for adding python scripts/packages to the image for your own use.&lt;br /&gt;
===First steps===&lt;br /&gt;
First, you need to modify the &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; file as described above. You need to modify &lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld&amp;quot;&lt;br /&gt;
to&lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld python&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--[[User:Xkr47|xkr47]] 18:21, 11 August 2007 (CEST) Hmm surely the new line should be DISTRO_EXTRA_RDEPENDS += &amp;quot;pyhelloworld python&amp;quot; instead since the package we create below is pyhelloworld..&lt;br /&gt;
&lt;br /&gt;
This is because python is not included by default in the openmoko image. Or you can use &amp;lt;code&amp;gt;python-pygtk2&amp;lt;/code&amp;gt; if you wish.&lt;br /&gt;
&lt;br /&gt;
Next, you need to perform these actions from the &amp;lt;code&amp;gt;$OMDIR/local&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
  mkdir packages/pyhelloworld packages/pyhelloworld/files&lt;br /&gt;
&lt;br /&gt;
  touch packages/pyhelloworld/files/pyhello packages/pyhelloworld/README.txt&lt;br /&gt;
&lt;br /&gt;
  touch packages/pyhelloworld/pyhelloworld.bb&lt;br /&gt;
&lt;br /&gt;
===Filling in the files===&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;packages/pyhelloworld/files/pyhello&amp;lt;/code&amp;gt; to contain:&lt;br /&gt;
&amp;lt;pre&amp;gt;  &lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;hello world!&amp;quot;&lt;br /&gt;
print &amp;quot;shutting down now. Farewell oh cruel, cruel world!&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
Next up, is editing &amp;lt;code&amp;gt;packages/pyhelloworld/files/README.txt&amp;lt;/code&amp;gt; to say:&lt;br /&gt;
&lt;br /&gt;
  This is the most awesome helloworld application ever. Know why? It has SNAKES!&lt;br /&gt;
&lt;br /&gt;
Kidding aside, next is the all important &amp;lt;code&amp;gt; packages/pyhelloworld/pyhelloworld.bb:&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;A pythonic hello world application&amp;quot;&lt;br /&gt;
AUTHOR = &amp;quot;Tyler Laing&amp;quot;&lt;br /&gt;
HOMEPAGE = &amp;quot;&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;console/applications&amp;quot;&lt;br /&gt;
PRIORITY = &amp;quot;optional&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;MIT&amp;quot;&lt;br /&gt;
#DEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RDEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RRECOMMENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RCONFLICTS = &amp;quot;&amp;quot;&lt;br /&gt;
#SRCDATE = &amp;quot;20070729&amp;quot;&lt;br /&gt;
#PV = &amp;quot;0.1&amp;quot;&lt;br /&gt;
#PR = &amp;quot;r0&amp;quot;&lt;br /&gt;
SRC_URI = &amp;quot;file://pyhello \&lt;br /&gt;
          file://README.txt &amp;quot;&lt;br /&gt;
&lt;br /&gt;
S = &amp;quot;${WORKDIR}/pyhelloworld/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
do_install() {&lt;br /&gt;
        install -m 0755 -d ${D}${bindir} ${D}${docdir}/pyhelloworld&lt;br /&gt;
        install -m 0755 ${WORKDIR}/pyhello ${D}${bindir}&lt;br /&gt;
        install -m 0644 ${WORKDIR}/README.txt ${D}${docdir}/pyhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I'll explain each of the parts right here, for future reference.&lt;br /&gt;
&lt;br /&gt;
====Meanings of variables in .bb files====&lt;br /&gt;
&lt;br /&gt;
  $WORKDIR = $OMDIR/local/packages/&amp;lt;application directory&amp;gt;&lt;br /&gt;
  $bindir  = $OMDIR/build/tmp/work/armv4t-linux/&amp;lt;application directory&amp;gt;/image/usr/bin&lt;br /&gt;
  $docir   = $OMDIR/build/tmp/work/armv4t-linux/&amp;lt;application directory&amp;gt;/image/usr/share/doc&lt;br /&gt;
  $D       = $OMDIR/build/&lt;br /&gt;
&lt;br /&gt;
====Final steps====&lt;br /&gt;
Complete the last steps as per the above instructions, from the point of altering &amp;lt;code&amp;gt;DISTRO_EXTRA_RDEPENDS&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
And your done!&lt;br /&gt;
&lt;br /&gt;
[[Category:Applications]]&lt;br /&gt;
[[Category:OpenMoko]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Customizing_the_Openmoko_Distribution</id>
		<title>Customizing the Openmoko Distribution</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Customizing_the_Openmoko_Distribution"/>
				<updated>2007-08-29T17:43:40Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* Creating your own images */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What's the goal? ==&lt;br /&gt;
&lt;br /&gt;
The goal of this page is to teach you how to take an application that you've coded (or the sample app) and properly get it included in your rootfs. This article is a bit of an aggregate page, it's going to take information from [[MokoMakefile]], [[User:CesarB/Using a local overlay|Using a local overlay]], [[Building a hello world application]], and [[Create a package from existing sources]]. So as you can see the goal is for it to be a very thorough introduction, and will take you from &amp;quot;Idea to Inclusion&amp;quot; of your application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Setting Up the OpenMoko Environment ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; &lt;br /&gt;
 |*If you already have the environment setup then it is imperative that you update your Makefile.&lt;br /&gt;
Do this by running:&lt;br /&gt;
&amp;lt;pre&amp;gt;make update-makefile&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This part of the tutorial is going to be pretty basic. I absolutely love [[MokoMakefile]], it's fantastic, the creator has done and continues to do a fantastic job with this. I see absolutely no reason not to use it I put my OpenMoko development directory in /home/bryce/mokodev/ and that works great for me. You can feel free to do the same or put it anywhere else in your user directory (or anywhere on your system if you're feeling daring and a little nutty).&lt;br /&gt;
&lt;br /&gt;
To get your environment setup please get it setup according to [[MokoMakefile]] however if you do have the build environment setup manually and you're sure you know what you're doing then feel free to go forward with this.&lt;br /&gt;
&lt;br /&gt;
== Setting Up a Local Overlay ==&lt;br /&gt;
If you're at the point for setting up a local overlay this means a couple things. First: You've had a brilliant idea for an application that you just need to have on the OpenMoko platform. Second: You realize that this killer app of yours needs to be done properly and you're not going to do anything silly like include it in the actual tree for the OpenMoko distro because it would probably end up just getting overwritten eventually, or you just realize that it's bad practice!&lt;br /&gt;
&lt;br /&gt;
If you're wondering why and what a local overlay is then let me take this time to explain it to you. A local overlay is where you, as a developer keep your local files in an OE style setup so that you can simply pull your updated code into the tree. You add your overlay tree into the bitbake setup so that when you call bitbake it will pull your own or your customized packages before going to the OE or OpenMoko trees.This keeps everything nice and organized for you and also allows you to build/rebuild/include you apps by using the [[MokoMakefile]]&lt;br /&gt;
&lt;br /&gt;
Thank you to [[User:CesarB]] for this part of the wiki.&lt;br /&gt;
&lt;br /&gt;
To create a local overlay:&lt;br /&gt;
&lt;br /&gt;
* Create a &amp;quot;local&amp;quot; directory and its subdirectories&lt;br /&gt;
&lt;br /&gt;
 mkdir local local/conf local/classes local/packages local/packages/images local/packages/tasks&lt;br /&gt;
&lt;br /&gt;
* Copy &amp;lt;code&amp;gt;site.conf&amp;lt;/code&amp;gt; from the openmoko tree to &amp;lt;code&amp;gt;local/conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cp oe/conf/site.conf local/conf/site.conf&lt;br /&gt;
&lt;br /&gt;
* Edit the local/conf/site.conf you copied to add the new tree as a source for bitbake recipes.&lt;br /&gt;
&lt;br /&gt;
Change the current &amp;lt;code&amp;gt;BBFILES&amp;lt;/code&amp;gt; to look like this:&lt;br /&gt;
 BBFILES := &amp;quot;${OMDIR}/openembedded/packages/*/*.bb ${OMDIR}/oe/packages/*/*.bb ${OMDIR}/local/packages/*/*.bb&amp;quot;&lt;br /&gt;
Change your &amp;lt;code&amp;gt;BBFILE_COLLECTIONS&amp;lt;/code&amp;gt; line to look like this:&lt;br /&gt;
 BBFILE_COLLECTIONS = &amp;quot;upstream local overlay&amp;quot;&lt;br /&gt;
Add this line:&lt;br /&gt;
 BBFILE_PATTERN_overlay = &amp;quot;^${OMDIR}/local/&amp;quot;&lt;br /&gt;
Add this line:&lt;br /&gt;
 BBFILE_PRIORITY_overlay = &amp;quot;20&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;BBFILE_PRIORITY&amp;lt;/code&amp;gt; should be greater than all the other &amp;lt;code&amp;gt;BBFILE_PRIORITY&amp;lt;/code&amp;gt; variables on the same file.&lt;br /&gt;
&lt;br /&gt;
* Change your &amp;lt;code&amp;gt;BBPATH&amp;lt;/code&amp;gt; environment variable to add the new tree ''before'' the two others in your &amp;lt;code&amp;gt;setup-env&amp;lt;/code&amp;gt; file.&amp;lt;code&amp;gt;setup-env&amp;lt;/code&amp;gt; is created by [[MokoMakefile]] automatically and is located in your &amp;lt;code&amp;gt;${OMDIR}&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
 export BBPATH=&amp;quot;${OMDIR}/build:${OMDIR}/local:${OMDIR}/oe:${OMDIR}/openembedded&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Using Your New Local Overlay ==&lt;br /&gt;
&lt;br /&gt;
=== Changing files in conf/ ===&lt;br /&gt;
&lt;br /&gt;
To change a file in conf/, just copy the file to the overlay tree (preserving the directory structure) and edit it.&lt;br /&gt;
&lt;br /&gt;
=== Changing files in classes/ ===&lt;br /&gt;
&lt;br /&gt;
To change a file in classes/, just copy the file to the overlay tree and edit it.&lt;br /&gt;
&lt;br /&gt;
=== Changing packages ===&lt;br /&gt;
&lt;br /&gt;
Changing a package's recipe is a bit more complex. You have to copy over (or symlink) not only the .bb file for the package, but also ''all'' the files it includes with &amp;lt;code&amp;gt;require&amp;lt;/code&amp;gt;, and the &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt; directories (all directories referred to by &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt;, usually named either ''package''-''version'' or &amp;lt;code&amp;gt;files&amp;lt;/code&amp;gt;). If you forget one of them, the build will give an error (either when parsing the recipe in the case of &amp;lt;code&amp;gt;require&amp;lt;/code&amp;gt;, or when trying to build in the case of the &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt; directories).&lt;br /&gt;
&lt;br /&gt;
=== Adding a new package ===&lt;br /&gt;
&lt;br /&gt;
You can add a new package (or a recipe for a new version of a package) to the overlay tree simply by creating it on the overlay tree.&lt;br /&gt;
&lt;br /&gt;
=== Creating your own images ===&lt;br /&gt;
&lt;br /&gt;
To create you own images we'll use the base openmoko .bb files and modify them so suit. Where you see ''scaredycat'' replace this with something yo identify your images.&lt;br /&gt;
&lt;br /&gt;
edit local/packages/images/scaredycat-openmoko-devel-image.bb and paste this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require scaredycat-openmoko-image.bb&lt;br /&gt;
 &lt;br /&gt;
export PACKAGE_INSTALL += &amp;quot;\&lt;br /&gt;
  task-openmoko-debug \&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then edit local/packages/images/scaredycat-openmoko-image.bb&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#------------------------------------------------------&lt;br /&gt;
# OpenMoko Image Recipe&lt;br /&gt;
#------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
export IMAGE_BASENAME = &amp;quot;${PN}&amp;quot;&lt;br /&gt;
export IMAGE_LINGUAS = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export PACKAGE_INSTALL = &amp;quot;\&lt;br /&gt;
  ${MACHINE_TASK_PROVIDER} \&lt;br /&gt;
  task-openmoko-linux \&lt;br /&gt;
  task-openmoko-net \&lt;br /&gt;
  task-openmoko-ui \&lt;br /&gt;
  task-openmoko-base \&lt;br /&gt;
  task-openmoko-phone \&lt;br /&gt;
  task-openmoko-games \&lt;br /&gt;
  task-openmoko-pim \&lt;br /&gt;
  task-openmoko-scaredycat \&lt;br /&gt;
  &amp;quot;&lt;br /&gt;
&lt;br /&gt;
DEPENDS = &amp;quot;\&lt;br /&gt;
  ${MACHINE_TASK_PROVIDER} \&lt;br /&gt;
  task-openmoko \&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
RDEPENDS = &amp;quot;${PACKAGE_INSTALL}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inherit image&lt;br /&gt;
&lt;br /&gt;
LICENSE = MIT&lt;br /&gt;
&lt;br /&gt;
ROOTFS_POSTPROCESS_COMMAND += 'date &amp;quot;+%m%d%H%M%Y&amp;quot; &amp;gt;${IMAGE_ROOTFS}/etc/timestamp'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
edit packages/tasks/task-openmoko-scaredycat.bb - this is where we put the things we want to include in our image, above and behond the standard image.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;OpenMoko: Scaredycat Additions&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;openmoko/base&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;original&amp;quot;&lt;br /&gt;
PR = &amp;quot;r2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inherit task&lt;br /&gt;
&lt;br /&gt;
RDEPENDS_task-openmoko-scaredycat = &amp;quot;\&lt;br /&gt;
  scummvm \&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Building it ====&lt;br /&gt;
&lt;br /&gt;
To build you image, which will be located with your other images, do the following:&lt;br /&gt;
&lt;br /&gt;
 # cd build ; . ../setup-env ; bitbake scaredycat-openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
== Your First Application ==&lt;br /&gt;
&lt;br /&gt;
I know that I said I'd have a GDK application in here, however, I'd really like to get this whole course done first and have you guys starting to code instead of just looking at what I've written!&lt;br /&gt;
&lt;br /&gt;
This will be a very simple CLI hello world.&lt;br /&gt;
&lt;br /&gt;
=== Before We Code ===&lt;br /&gt;
&lt;br /&gt;
Like a good coder you want to make sure that you're not just doing things, but that you're doing them the right way! &lt;br /&gt;
&lt;br /&gt;
Now change directories into your &amp;lt;code&amp;gt;local/packages&amp;lt;/code&amp;gt; directory.The following commands expect you'll be in that directory so don't change unless you know what you're doing!&lt;br /&gt;
&lt;br /&gt;
You'll want to make a directory with the name of your application, and a subdirectory called files.&lt;br /&gt;
  mkdir myhelloworld myhelloworld/files&lt;br /&gt;
Now you'll want to create two files in the &amp;lt;code&amp;gt;files&amp;lt;/code&amp;gt; directory&lt;br /&gt;
  touch myhelloworld/files/README.txt myhelloworld/files/myhelloworld.c&lt;br /&gt;
And finally you'll want to create a bitbake file.&lt;br /&gt;
  touch myhelloworld/myhelloworld.bb&lt;br /&gt;
&lt;br /&gt;
Alrighty now all your necessary files are created so lets go over this real quick.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$HOME&lt;br /&gt;
 +- $OMDIR (contains the official openmoko tree)&lt;br /&gt;
 |  +- local/&lt;br /&gt;
 |     +- packages/&lt;br /&gt;
 |        +- myhelloworld/&lt;br /&gt;
 |           +- myhelloworld.bb&lt;br /&gt;
 |           +- files/&lt;br /&gt;
 |              +- myhelloworld.c&lt;br /&gt;
 |              +- README.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That should be your structure, if it's not you should go and fix it up.&lt;br /&gt;
=== Filling the Files ===&lt;br /&gt;
&lt;br /&gt;
So you've got your sample files all laid out now it's time to make them actually do something.&lt;br /&gt;
&lt;br /&gt;
myhelloworld.c&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char** argv)&lt;br /&gt;
{&lt;br /&gt;
        printf(&amp;quot;Ello Poppet!\n&amp;quot;);&lt;br /&gt;
        return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
README.txt&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This is a command line application. It prints a simple Hello World! To stdout.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
myhelloworld.bb&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;A killer hello world application&amp;quot;&lt;br /&gt;
AUTHOR = &amp;quot;Bryce Leo&amp;quot;&lt;br /&gt;
HOMEPAGE = &amp;quot;&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;console/applications&amp;quot;&lt;br /&gt;
PRIORITY = &amp;quot;optional&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;MIT&amp;quot;&lt;br /&gt;
#DEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RDEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RRECOMMENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RCONFLICTS = &amp;quot;&amp;quot;&lt;br /&gt;
#SRCDATE = &amp;quot;20070729&amp;quot;&lt;br /&gt;
#PV = &amp;quot;0.1&amp;quot;&lt;br /&gt;
#PR = &amp;quot;r0&amp;quot;&lt;br /&gt;
SRC_URI = &amp;quot;file://myhelloworld.c \&lt;br /&gt;
          file://README.txt &amp;quot;&lt;br /&gt;
&lt;br /&gt;
S = &amp;quot;${WORKDIR}/myhelloworld/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
do_compile() {&lt;br /&gt;
        ${CC} ${CFLAGS} ${LDFLAGS} ${WORKDIR}/myhelloworld.c -o myhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
do_install() {&lt;br /&gt;
        install -m 0755 -d ${D}${bindir} ${D}${docdir}/myhelloworld&lt;br /&gt;
        install -m 0755 ${S}/myhelloworld ${D}${bindir}&lt;br /&gt;
        install -m 0644 ${WORKDIR}/README.txt ${D}${docdir}/myhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Your First Compilation ===&lt;br /&gt;
&lt;br /&gt;
This is where the [[MokoMakefile]] comes in very very handy. Change to your ${OMDIR} directory, You'll know it by the fact that it is where &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt; resides.&lt;br /&gt;
 make build-package-myhelloworld&lt;br /&gt;
&lt;br /&gt;
(make sure you run make openmoko-devel-image at least once before building your own packages)&lt;br /&gt;
&lt;br /&gt;
This should all come back and not return any error messages, The output should end in something similar to&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NOTE: package myhelloworld-1.0: completed&lt;br /&gt;
NOTE: build 200707291926: completed&lt;br /&gt;
Build statistics:&lt;br /&gt;
  Attempted builds: 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that no errors were thrown we are happily done!&lt;br /&gt;
&lt;br /&gt;
== Adding Your Application to the Image ==&lt;br /&gt;
&lt;br /&gt;
So you've had an idea, you've setup the build environment, you've setup your local overlay, you've laid out your application tree, you've put code into those fantastic files of yours and now it compiles.There's only one thing left to do. Add that application to your image.&lt;br /&gt;
&lt;br /&gt;
Now lets go over in words and whys what we're about to do. First we need to make modify the &amp;lt;code&amp;gt;${OMDIR}/build/conf/local.conf&amp;lt;/code&amp;gt;. We add in the variable &amp;lt;code&amp;gt;DISTRO_EXTRA_RDEPENDS&amp;lt;/code&amp;gt; and set its value to include &amp;lt;code&amp;gt;myhelloworld&amp;lt;/code&amp;gt;. If you'd like to include other packages from your own overlay or the OM tree just add them inseparated by spaces. After this gets added as a dependency to build the Distro (in this case OpenMoko). Now we have to re-build the task-base package. This essentially just generates an ipk file that will &amp;quot;Merge machine and distro options to create a basic machine task/package.&amp;quot; It pretty much builds a file with a list of packages to be installed that are required for the distro to work correctly. So then you just go through and make &amp;lt;code&amp;gt;openmoko-devel-image, build-qemu, flash-qemu-local,&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;run-qemu&amp;lt;/code&amp;gt;. Then calibrate your stylus, head over to the terminal, and run your application!&lt;br /&gt;
&lt;br /&gt;
=== Modifying Your local.conf ===&lt;br /&gt;
Now, go into your build config directory &amp;lt;code&amp;gt;${OMDIR}/build/conf/&amp;lt;/code&amp;gt; and now you'll be editing &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
Add this line to you &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld&amp;quot;&lt;br /&gt;
With this line you can also include other applications from the OE tree. For instance my &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; looks like this.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MACHINE = &amp;quot;fic-gta01&amp;quot;&lt;br /&gt;
DISTRO = &amp;quot;openmoko&amp;quot;&lt;br /&gt;
BUILD_ARCH = &amp;quot;i686&amp;quot;&lt;br /&gt;
SRCDATE_eds-dbus = &amp;quot;now&amp;quot;&lt;br /&gt;
DISTRO_EXTRA_RDEPENDS += &amp;quot;lua dillo myhelloworld&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that you've fixed your &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; it's time to go through all the necessary tasks to add and re-build you image and have your sweet package included.&lt;br /&gt;
&lt;br /&gt;
=== Building ===&lt;br /&gt;
Now come the easy part thanks to [[MokoMakefile]]. &lt;br /&gt;
&lt;br /&gt;
  make rebuild-package-task-base&lt;br /&gt;
  make openmoko-devel-image&lt;br /&gt;
  make build-qemu&lt;br /&gt;
  make flash-qemu-local&lt;br /&gt;
&lt;br /&gt;
Now all you have to do is run qemu.&lt;br /&gt;
  make run-qemu&lt;br /&gt;
&lt;br /&gt;
From here after you calibrate your stylus, you click on the Menu in the top right, click down to terminal, then just run your program.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@fic-gta02:/$ myhelloworld&lt;br /&gt;
Ello Poppet!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Adding Python scripts as applications==&lt;br /&gt;
This is for adding python scripts/packages to the image for your own use.&lt;br /&gt;
===First steps===&lt;br /&gt;
First, you need to modify the &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; file as described above. You need to modify &lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld&amp;quot;&lt;br /&gt;
to&lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld python&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--[[User:Xkr47|xkr47]] 18:21, 11 August 2007 (CEST) Hmm surely the new line should be DISTRO_EXTRA_RDEPENDS += &amp;quot;pyhelloworld python&amp;quot; instead since the package we create below is pyhelloworld..&lt;br /&gt;
&lt;br /&gt;
This is because python is not included by default in the openmoko image. Or you can use &amp;lt;code&amp;gt;python-pygtk2&amp;lt;/code&amp;gt; if you wish.&lt;br /&gt;
&lt;br /&gt;
Next, you need to perform these actions from the &amp;lt;code&amp;gt;$OMDIR/local&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
  mkdir packages/pyhelloworld packages/pyhelloworld/files&lt;br /&gt;
&lt;br /&gt;
  touch packages/pyhelloworld/files/pyhello packages/pyhelloworld/README.txt&lt;br /&gt;
&lt;br /&gt;
  touch packages/pyhelloworld/pyhelloworld.bb&lt;br /&gt;
&lt;br /&gt;
===Filling in the files===&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;packages/pyhelloworld/files/pyhello&amp;lt;/code&amp;gt; to contain:&lt;br /&gt;
&amp;lt;pre&amp;gt;  &lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;hello world!&amp;quot;&lt;br /&gt;
print &amp;quot;shutting down now. Farewell oh cruel, cruel world!&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
Next up, is editing &amp;lt;code&amp;gt;packages/pyhelloworld/files/README.txt&amp;lt;/code&amp;gt; to say:&lt;br /&gt;
&lt;br /&gt;
  This is the most awesome helloworld application ever. Know why? It has SNAKES!&lt;br /&gt;
&lt;br /&gt;
Kidding aside, next is the all important &amp;lt;code&amp;gt; packages/pyhelloworld/pyhelloworld.bb:&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;A pythonic hello world application&amp;quot;&lt;br /&gt;
AUTHOR = &amp;quot;Tyler Laing&amp;quot;&lt;br /&gt;
HOMEPAGE = &amp;quot;&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;console/applications&amp;quot;&lt;br /&gt;
PRIORITY = &amp;quot;optional&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;MIT&amp;quot;&lt;br /&gt;
#DEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RDEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RRECOMMENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RCONFLICTS = &amp;quot;&amp;quot;&lt;br /&gt;
#SRCDATE = &amp;quot;20070729&amp;quot;&lt;br /&gt;
#PV = &amp;quot;0.1&amp;quot;&lt;br /&gt;
#PR = &amp;quot;r0&amp;quot;&lt;br /&gt;
SRC_URI = &amp;quot;file://pyhello \&lt;br /&gt;
          file://README.txt &amp;quot;&lt;br /&gt;
&lt;br /&gt;
S = &amp;quot;${WORKDIR}/pyhelloworld/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
do_install() {&lt;br /&gt;
        install -m 0755 -d ${D}${bindir} ${D}${docdir}/pyhelloworld&lt;br /&gt;
        install -m 0755 ${WORKDIR}/pyhello ${D}${bindir}&lt;br /&gt;
        install -m 0644 ${WORKDIR}/README.txt ${D}${docdir}/pyhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I'll explain each of the parts right here, for future reference.&lt;br /&gt;
&lt;br /&gt;
====Meanings of variables in .bb files====&lt;br /&gt;
&lt;br /&gt;
  $WORKDIR = $OMDIR/local/packages/&amp;lt;application directory&amp;gt;&lt;br /&gt;
  $bindir  = $OMDIR/build/tmp/work/armv4t-linux/&amp;lt;application directory&amp;gt;/image/usr/bin&lt;br /&gt;
  $docir   = $OMDIR/build/tmp/work/armv4t-linux/&amp;lt;application directory&amp;gt;/image/usr/share/doc&lt;br /&gt;
  $D       = $OMDIR/build/&lt;br /&gt;
&lt;br /&gt;
====Final steps====&lt;br /&gt;
Complete the last steps as per the above instructions, from the point of altering &amp;lt;code&amp;gt;DISTRO_EXTRA_RDEPENDS&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
And your done!&lt;br /&gt;
&lt;br /&gt;
[[Category:Applications]]&lt;br /&gt;
[[Category:OpenMoko]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Customizing_the_Openmoko_Distribution</id>
		<title>Customizing the Openmoko Distribution</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Customizing_the_Openmoko_Distribution"/>
				<updated>2007-08-29T17:40:45Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* Creating your own images */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What's the goal? ==&lt;br /&gt;
&lt;br /&gt;
The goal of this page is to teach you how to take an application that you've coded (or the sample app) and properly get it included in your rootfs. This article is a bit of an aggregate page, it's going to take information from [[MokoMakefile]], [[User:CesarB/Using a local overlay|Using a local overlay]], [[Building a hello world application]], and [[Create a package from existing sources]]. So as you can see the goal is for it to be a very thorough introduction, and will take you from &amp;quot;Idea to Inclusion&amp;quot; of your application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Setting Up the OpenMoko Environment ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; &lt;br /&gt;
 |*If you already have the environment setup then it is imperative that you update your Makefile.&lt;br /&gt;
Do this by running:&lt;br /&gt;
&amp;lt;pre&amp;gt;make update-makefile&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This part of the tutorial is going to be pretty basic. I absolutely love [[MokoMakefile]], it's fantastic, the creator has done and continues to do a fantastic job with this. I see absolutely no reason not to use it I put my OpenMoko development directory in /home/bryce/mokodev/ and that works great for me. You can feel free to do the same or put it anywhere else in your user directory (or anywhere on your system if you're feeling daring and a little nutty).&lt;br /&gt;
&lt;br /&gt;
To get your environment setup please get it setup according to [[MokoMakefile]] however if you do have the build environment setup manually and you're sure you know what you're doing then feel free to go forward with this.&lt;br /&gt;
&lt;br /&gt;
== Setting Up a Local Overlay ==&lt;br /&gt;
If you're at the point for setting up a local overlay this means a couple things. First: You've had a brilliant idea for an application that you just need to have on the OpenMoko platform. Second: You realize that this killer app of yours needs to be done properly and you're not going to do anything silly like include it in the actual tree for the OpenMoko distro because it would probably end up just getting overwritten eventually, or you just realize that it's bad practice!&lt;br /&gt;
&lt;br /&gt;
If you're wondering why and what a local overlay is then let me take this time to explain it to you. A local overlay is where you, as a developer keep your local files in an OE style setup so that you can simply pull your updated code into the tree. You add your overlay tree into the bitbake setup so that when you call bitbake it will pull your own or your customized packages before going to the OE or OpenMoko trees.This keeps everything nice and organized for you and also allows you to build/rebuild/include you apps by using the [[MokoMakefile]]&lt;br /&gt;
&lt;br /&gt;
Thank you to [[User:CesarB]] for this part of the wiki.&lt;br /&gt;
&lt;br /&gt;
To create a local overlay:&lt;br /&gt;
&lt;br /&gt;
* Create a &amp;quot;local&amp;quot; directory and its subdirectories&lt;br /&gt;
&lt;br /&gt;
 mkdir local local/conf local/classes local/packages local/packages/images local/packages/tasks&lt;br /&gt;
&lt;br /&gt;
* Copy &amp;lt;code&amp;gt;site.conf&amp;lt;/code&amp;gt; from the openmoko tree to &amp;lt;code&amp;gt;local/conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cp oe/conf/site.conf local/conf/site.conf&lt;br /&gt;
&lt;br /&gt;
* Edit the local/conf/site.conf you copied to add the new tree as a source for bitbake recipes.&lt;br /&gt;
&lt;br /&gt;
Change the current &amp;lt;code&amp;gt;BBFILES&amp;lt;/code&amp;gt; to look like this:&lt;br /&gt;
 BBFILES := &amp;quot;${OMDIR}/openembedded/packages/*/*.bb ${OMDIR}/oe/packages/*/*.bb ${OMDIR}/local/packages/*/*.bb&amp;quot;&lt;br /&gt;
Change your &amp;lt;code&amp;gt;BBFILE_COLLECTIONS&amp;lt;/code&amp;gt; line to look like this:&lt;br /&gt;
 BBFILE_COLLECTIONS = &amp;quot;upstream local overlay&amp;quot;&lt;br /&gt;
Add this line:&lt;br /&gt;
 BBFILE_PATTERN_overlay = &amp;quot;^${OMDIR}/local/&amp;quot;&lt;br /&gt;
Add this line:&lt;br /&gt;
 BBFILE_PRIORITY_overlay = &amp;quot;20&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;BBFILE_PRIORITY&amp;lt;/code&amp;gt; should be greater than all the other &amp;lt;code&amp;gt;BBFILE_PRIORITY&amp;lt;/code&amp;gt; variables on the same file.&lt;br /&gt;
&lt;br /&gt;
* Change your &amp;lt;code&amp;gt;BBPATH&amp;lt;/code&amp;gt; environment variable to add the new tree ''before'' the two others in your &amp;lt;code&amp;gt;setup-env&amp;lt;/code&amp;gt; file.&amp;lt;code&amp;gt;setup-env&amp;lt;/code&amp;gt; is created by [[MokoMakefile]] automatically and is located in your &amp;lt;code&amp;gt;${OMDIR}&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
 export BBPATH=&amp;quot;${OMDIR}/build:${OMDIR}/local:${OMDIR}/oe:${OMDIR}/openembedded&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Using Your New Local Overlay ==&lt;br /&gt;
&lt;br /&gt;
=== Changing files in conf/ ===&lt;br /&gt;
&lt;br /&gt;
To change a file in conf/, just copy the file to the overlay tree (preserving the directory structure) and edit it.&lt;br /&gt;
&lt;br /&gt;
=== Changing files in classes/ ===&lt;br /&gt;
&lt;br /&gt;
To change a file in classes/, just copy the file to the overlay tree and edit it.&lt;br /&gt;
&lt;br /&gt;
=== Changing packages ===&lt;br /&gt;
&lt;br /&gt;
Changing a package's recipe is a bit more complex. You have to copy over (or symlink) not only the .bb file for the package, but also ''all'' the files it includes with &amp;lt;code&amp;gt;require&amp;lt;/code&amp;gt;, and the &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt; directories (all directories referred to by &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt;, usually named either ''package''-''version'' or &amp;lt;code&amp;gt;files&amp;lt;/code&amp;gt;). If you forget one of them, the build will give an error (either when parsing the recipe in the case of &amp;lt;code&amp;gt;require&amp;lt;/code&amp;gt;, or when trying to build in the case of the &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt; directories).&lt;br /&gt;
&lt;br /&gt;
=== Adding a new package ===&lt;br /&gt;
&lt;br /&gt;
You can add a new package (or a recipe for a new version of a package) to the overlay tree simply by creating it on the overlay tree.&lt;br /&gt;
&lt;br /&gt;
=== Creating your own images ===&lt;br /&gt;
&lt;br /&gt;
To create you own images we'll use the base openmoko .bb files and modify them so suit. Where you see ''scaredycat'' replace this with something yo identify your images.&lt;br /&gt;
&lt;br /&gt;
edit local/packages/images/scaredycat-openmoko-devel-image.bb and paste this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require scaredycat-openmoko-image.bb&lt;br /&gt;
 &lt;br /&gt;
export PACKAGE_INSTALL += &amp;quot;\&lt;br /&gt;
  task-openmoko-debug \&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then edit local/packages/images/scaredycat-openmoko-image.bb&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#------------------------------------------------------&lt;br /&gt;
# OpenMoko Image Recipe&lt;br /&gt;
#------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
export IMAGE_BASENAME = &amp;quot;${PN}&amp;quot;&lt;br /&gt;
export IMAGE_LINGUAS = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export PACKAGE_INSTALL = &amp;quot;\&lt;br /&gt;
  ${MACHINE_TASK_PROVIDER} \&lt;br /&gt;
  task-openmoko-linux \&lt;br /&gt;
  task-openmoko-net \&lt;br /&gt;
  task-openmoko-ui \&lt;br /&gt;
  task-openmoko-base \&lt;br /&gt;
  task-openmoko-phone \&lt;br /&gt;
  task-openmoko-games \&lt;br /&gt;
  task-openmoko-pim \&lt;br /&gt;
  task-openmoko-scaredycat \&lt;br /&gt;
  &amp;quot;&lt;br /&gt;
&lt;br /&gt;
DEPENDS = &amp;quot;\&lt;br /&gt;
  ${MACHINE_TASK_PROVIDER} \&lt;br /&gt;
  task-openmoko \&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
RDEPENDS = &amp;quot;${PACKAGE_INSTALL}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inherit image&lt;br /&gt;
&lt;br /&gt;
LICENSE = MIT&lt;br /&gt;
&lt;br /&gt;
ROOTFS_POSTPROCESS_COMMAND += 'date &amp;quot;+%m%d%H%M%Y&amp;quot; &amp;gt;${IMAGE_ROOTFS}/etc/timestamp'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
edit packages/tasks/task-openmoko-scaredycat.bb - this is where we put the things we want to include in our image, above and behond the standard image.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;OpenMoko: Scaredycat Additions&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;openmoko/base&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;original&amp;quot;&lt;br /&gt;
PR = &amp;quot;r2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inherit task&lt;br /&gt;
&lt;br /&gt;
RDEPENDS_task-openmoko-scaredycat = &amp;quot;\&lt;br /&gt;
  scummvm \&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Your First Application ==&lt;br /&gt;
&lt;br /&gt;
I know that I said I'd have a GDK application in here, however, I'd really like to get this whole course done first and have you guys starting to code instead of just looking at what I've written!&lt;br /&gt;
&lt;br /&gt;
This will be a very simple CLI hello world.&lt;br /&gt;
&lt;br /&gt;
=== Before We Code ===&lt;br /&gt;
&lt;br /&gt;
Like a good coder you want to make sure that you're not just doing things, but that you're doing them the right way! &lt;br /&gt;
&lt;br /&gt;
Now change directories into your &amp;lt;code&amp;gt;local/packages&amp;lt;/code&amp;gt; directory.The following commands expect you'll be in that directory so don't change unless you know what you're doing!&lt;br /&gt;
&lt;br /&gt;
You'll want to make a directory with the name of your application, and a subdirectory called files.&lt;br /&gt;
  mkdir myhelloworld myhelloworld/files&lt;br /&gt;
Now you'll want to create two files in the &amp;lt;code&amp;gt;files&amp;lt;/code&amp;gt; directory&lt;br /&gt;
  touch myhelloworld/files/README.txt myhelloworld/files/myhelloworld.c&lt;br /&gt;
And finally you'll want to create a bitbake file.&lt;br /&gt;
  touch myhelloworld/myhelloworld.bb&lt;br /&gt;
&lt;br /&gt;
Alrighty now all your necessary files are created so lets go over this real quick.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$HOME&lt;br /&gt;
 +- $OMDIR (contains the official openmoko tree)&lt;br /&gt;
 |  +- local/&lt;br /&gt;
 |     +- packages/&lt;br /&gt;
 |        +- myhelloworld/&lt;br /&gt;
 |           +- myhelloworld.bb&lt;br /&gt;
 |           +- files/&lt;br /&gt;
 |              +- myhelloworld.c&lt;br /&gt;
 |              +- README.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That should be your structure, if it's not you should go and fix it up.&lt;br /&gt;
=== Filling the Files ===&lt;br /&gt;
&lt;br /&gt;
So you've got your sample files all laid out now it's time to make them actually do something.&lt;br /&gt;
&lt;br /&gt;
myhelloworld.c&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char** argv)&lt;br /&gt;
{&lt;br /&gt;
        printf(&amp;quot;Ello Poppet!\n&amp;quot;);&lt;br /&gt;
        return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
README.txt&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This is a command line application. It prints a simple Hello World! To stdout.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
myhelloworld.bb&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;A killer hello world application&amp;quot;&lt;br /&gt;
AUTHOR = &amp;quot;Bryce Leo&amp;quot;&lt;br /&gt;
HOMEPAGE = &amp;quot;&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;console/applications&amp;quot;&lt;br /&gt;
PRIORITY = &amp;quot;optional&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;MIT&amp;quot;&lt;br /&gt;
#DEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RDEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RRECOMMENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RCONFLICTS = &amp;quot;&amp;quot;&lt;br /&gt;
#SRCDATE = &amp;quot;20070729&amp;quot;&lt;br /&gt;
#PV = &amp;quot;0.1&amp;quot;&lt;br /&gt;
#PR = &amp;quot;r0&amp;quot;&lt;br /&gt;
SRC_URI = &amp;quot;file://myhelloworld.c \&lt;br /&gt;
          file://README.txt &amp;quot;&lt;br /&gt;
&lt;br /&gt;
S = &amp;quot;${WORKDIR}/myhelloworld/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
do_compile() {&lt;br /&gt;
        ${CC} ${CFLAGS} ${LDFLAGS} ${WORKDIR}/myhelloworld.c -o myhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
do_install() {&lt;br /&gt;
        install -m 0755 -d ${D}${bindir} ${D}${docdir}/myhelloworld&lt;br /&gt;
        install -m 0755 ${S}/myhelloworld ${D}${bindir}&lt;br /&gt;
        install -m 0644 ${WORKDIR}/README.txt ${D}${docdir}/myhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Your First Compilation ===&lt;br /&gt;
&lt;br /&gt;
This is where the [[MokoMakefile]] comes in very very handy. Change to your ${OMDIR} directory, You'll know it by the fact that it is where &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt; resides.&lt;br /&gt;
 make build-package-myhelloworld&lt;br /&gt;
&lt;br /&gt;
(make sure you run make openmoko-devel-image at least once before building your own packages)&lt;br /&gt;
&lt;br /&gt;
This should all come back and not return any error messages, The output should end in something similar to&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NOTE: package myhelloworld-1.0: completed&lt;br /&gt;
NOTE: build 200707291926: completed&lt;br /&gt;
Build statistics:&lt;br /&gt;
  Attempted builds: 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that no errors were thrown we are happily done!&lt;br /&gt;
&lt;br /&gt;
== Adding Your Application to the Image ==&lt;br /&gt;
&lt;br /&gt;
So you've had an idea, you've setup the build environment, you've setup your local overlay, you've laid out your application tree, you've put code into those fantastic files of yours and now it compiles.There's only one thing left to do. Add that application to your image.&lt;br /&gt;
&lt;br /&gt;
Now lets go over in words and whys what we're about to do. First we need to make modify the &amp;lt;code&amp;gt;${OMDIR}/build/conf/local.conf&amp;lt;/code&amp;gt;. We add in the variable &amp;lt;code&amp;gt;DISTRO_EXTRA_RDEPENDS&amp;lt;/code&amp;gt; and set its value to include &amp;lt;code&amp;gt;myhelloworld&amp;lt;/code&amp;gt;. If you'd like to include other packages from your own overlay or the OM tree just add them inseparated by spaces. After this gets added as a dependency to build the Distro (in this case OpenMoko). Now we have to re-build the task-base package. This essentially just generates an ipk file that will &amp;quot;Merge machine and distro options to create a basic machine task/package.&amp;quot; It pretty much builds a file with a list of packages to be installed that are required for the distro to work correctly. So then you just go through and make &amp;lt;code&amp;gt;openmoko-devel-image, build-qemu, flash-qemu-local,&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;run-qemu&amp;lt;/code&amp;gt;. Then calibrate your stylus, head over to the terminal, and run your application!&lt;br /&gt;
&lt;br /&gt;
=== Modifying Your local.conf ===&lt;br /&gt;
Now, go into your build config directory &amp;lt;code&amp;gt;${OMDIR}/build/conf/&amp;lt;/code&amp;gt; and now you'll be editing &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
Add this line to you &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld&amp;quot;&lt;br /&gt;
With this line you can also include other applications from the OE tree. For instance my &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; looks like this.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MACHINE = &amp;quot;fic-gta01&amp;quot;&lt;br /&gt;
DISTRO = &amp;quot;openmoko&amp;quot;&lt;br /&gt;
BUILD_ARCH = &amp;quot;i686&amp;quot;&lt;br /&gt;
SRCDATE_eds-dbus = &amp;quot;now&amp;quot;&lt;br /&gt;
DISTRO_EXTRA_RDEPENDS += &amp;quot;lua dillo myhelloworld&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that you've fixed your &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; it's time to go through all the necessary tasks to add and re-build you image and have your sweet package included.&lt;br /&gt;
&lt;br /&gt;
=== Building ===&lt;br /&gt;
Now come the easy part thanks to [[MokoMakefile]]. &lt;br /&gt;
&lt;br /&gt;
  make rebuild-package-task-base&lt;br /&gt;
  make openmoko-devel-image&lt;br /&gt;
  make build-qemu&lt;br /&gt;
  make flash-qemu-local&lt;br /&gt;
&lt;br /&gt;
Now all you have to do is run qemu.&lt;br /&gt;
  make run-qemu&lt;br /&gt;
&lt;br /&gt;
From here after you calibrate your stylus, you click on the Menu in the top right, click down to terminal, then just run your program.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@fic-gta02:/$ myhelloworld&lt;br /&gt;
Ello Poppet!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Adding Python scripts as applications==&lt;br /&gt;
This is for adding python scripts/packages to the image for your own use.&lt;br /&gt;
===First steps===&lt;br /&gt;
First, you need to modify the &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; file as described above. You need to modify &lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld&amp;quot;&lt;br /&gt;
to&lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld python&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--[[User:Xkr47|xkr47]] 18:21, 11 August 2007 (CEST) Hmm surely the new line should be DISTRO_EXTRA_RDEPENDS += &amp;quot;pyhelloworld python&amp;quot; instead since the package we create below is pyhelloworld..&lt;br /&gt;
&lt;br /&gt;
This is because python is not included by default in the openmoko image. Or you can use &amp;lt;code&amp;gt;python-pygtk2&amp;lt;/code&amp;gt; if you wish.&lt;br /&gt;
&lt;br /&gt;
Next, you need to perform these actions from the &amp;lt;code&amp;gt;$OMDIR/local&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
  mkdir packages/pyhelloworld packages/pyhelloworld/files&lt;br /&gt;
&lt;br /&gt;
  touch packages/pyhelloworld/files/pyhello packages/pyhelloworld/README.txt&lt;br /&gt;
&lt;br /&gt;
  touch packages/pyhelloworld/pyhelloworld.bb&lt;br /&gt;
&lt;br /&gt;
===Filling in the files===&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;packages/pyhelloworld/files/pyhello&amp;lt;/code&amp;gt; to contain:&lt;br /&gt;
&amp;lt;pre&amp;gt;  &lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;hello world!&amp;quot;&lt;br /&gt;
print &amp;quot;shutting down now. Farewell oh cruel, cruel world!&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
Next up, is editing &amp;lt;code&amp;gt;packages/pyhelloworld/files/README.txt&amp;lt;/code&amp;gt; to say:&lt;br /&gt;
&lt;br /&gt;
  This is the most awesome helloworld application ever. Know why? It has SNAKES!&lt;br /&gt;
&lt;br /&gt;
Kidding aside, next is the all important &amp;lt;code&amp;gt; packages/pyhelloworld/pyhelloworld.bb:&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;A pythonic hello world application&amp;quot;&lt;br /&gt;
AUTHOR = &amp;quot;Tyler Laing&amp;quot;&lt;br /&gt;
HOMEPAGE = &amp;quot;&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;console/applications&amp;quot;&lt;br /&gt;
PRIORITY = &amp;quot;optional&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;MIT&amp;quot;&lt;br /&gt;
#DEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RDEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RRECOMMENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RCONFLICTS = &amp;quot;&amp;quot;&lt;br /&gt;
#SRCDATE = &amp;quot;20070729&amp;quot;&lt;br /&gt;
#PV = &amp;quot;0.1&amp;quot;&lt;br /&gt;
#PR = &amp;quot;r0&amp;quot;&lt;br /&gt;
SRC_URI = &amp;quot;file://pyhello \&lt;br /&gt;
          file://README.txt &amp;quot;&lt;br /&gt;
&lt;br /&gt;
S = &amp;quot;${WORKDIR}/pyhelloworld/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
do_install() {&lt;br /&gt;
        install -m 0755 -d ${D}${bindir} ${D}${docdir}/pyhelloworld&lt;br /&gt;
        install -m 0755 ${WORKDIR}/pyhello ${D}${bindir}&lt;br /&gt;
        install -m 0644 ${WORKDIR}/README.txt ${D}${docdir}/pyhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I'll explain each of the parts right here, for future reference.&lt;br /&gt;
&lt;br /&gt;
====Meanings of variables in .bb files====&lt;br /&gt;
&lt;br /&gt;
  $WORKDIR = $OMDIR/local/packages/&amp;lt;application directory&amp;gt;&lt;br /&gt;
  $bindir  = $OMDIR/build/tmp/work/armv4t-linux/&amp;lt;application directory&amp;gt;/image/usr/bin&lt;br /&gt;
  $docir   = $OMDIR/build/tmp/work/armv4t-linux/&amp;lt;application directory&amp;gt;/image/usr/share/doc&lt;br /&gt;
  $D       = $OMDIR/build/&lt;br /&gt;
&lt;br /&gt;
====Final steps====&lt;br /&gt;
Complete the last steps as per the above instructions, from the point of altering &amp;lt;code&amp;gt;DISTRO_EXTRA_RDEPENDS&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
And your done!&lt;br /&gt;
&lt;br /&gt;
[[Category:Applications]]&lt;br /&gt;
[[Category:OpenMoko]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Customizing_the_Openmoko_Distribution</id>
		<title>Customizing the Openmoko Distribution</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Customizing_the_Openmoko_Distribution"/>
				<updated>2007-08-29T17:39:50Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* Creating your own images */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What's the goal? ==&lt;br /&gt;
&lt;br /&gt;
The goal of this page is to teach you how to take an application that you've coded (or the sample app) and properly get it included in your rootfs. This article is a bit of an aggregate page, it's going to take information from [[MokoMakefile]], [[User:CesarB/Using a local overlay|Using a local overlay]], [[Building a hello world application]], and [[Create a package from existing sources]]. So as you can see the goal is for it to be a very thorough introduction, and will take you from &amp;quot;Idea to Inclusion&amp;quot; of your application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Setting Up the OpenMoko Environment ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; &lt;br /&gt;
 |*If you already have the environment setup then it is imperative that you update your Makefile.&lt;br /&gt;
Do this by running:&lt;br /&gt;
&amp;lt;pre&amp;gt;make update-makefile&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This part of the tutorial is going to be pretty basic. I absolutely love [[MokoMakefile]], it's fantastic, the creator has done and continues to do a fantastic job with this. I see absolutely no reason not to use it I put my OpenMoko development directory in /home/bryce/mokodev/ and that works great for me. You can feel free to do the same or put it anywhere else in your user directory (or anywhere on your system if you're feeling daring and a little nutty).&lt;br /&gt;
&lt;br /&gt;
To get your environment setup please get it setup according to [[MokoMakefile]] however if you do have the build environment setup manually and you're sure you know what you're doing then feel free to go forward with this.&lt;br /&gt;
&lt;br /&gt;
== Setting Up a Local Overlay ==&lt;br /&gt;
If you're at the point for setting up a local overlay this means a couple things. First: You've had a brilliant idea for an application that you just need to have on the OpenMoko platform. Second: You realize that this killer app of yours needs to be done properly and you're not going to do anything silly like include it in the actual tree for the OpenMoko distro because it would probably end up just getting overwritten eventually, or you just realize that it's bad practice!&lt;br /&gt;
&lt;br /&gt;
If you're wondering why and what a local overlay is then let me take this time to explain it to you. A local overlay is where you, as a developer keep your local files in an OE style setup so that you can simply pull your updated code into the tree. You add your overlay tree into the bitbake setup so that when you call bitbake it will pull your own or your customized packages before going to the OE or OpenMoko trees.This keeps everything nice and organized for you and also allows you to build/rebuild/include you apps by using the [[MokoMakefile]]&lt;br /&gt;
&lt;br /&gt;
Thank you to [[User:CesarB]] for this part of the wiki.&lt;br /&gt;
&lt;br /&gt;
To create a local overlay:&lt;br /&gt;
&lt;br /&gt;
* Create a &amp;quot;local&amp;quot; directory and its subdirectories&lt;br /&gt;
&lt;br /&gt;
 mkdir local local/conf local/classes local/packages local/packages/images local/packages/tasks&lt;br /&gt;
&lt;br /&gt;
* Copy &amp;lt;code&amp;gt;site.conf&amp;lt;/code&amp;gt; from the openmoko tree to &amp;lt;code&amp;gt;local/conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cp oe/conf/site.conf local/conf/site.conf&lt;br /&gt;
&lt;br /&gt;
* Edit the local/conf/site.conf you copied to add the new tree as a source for bitbake recipes.&lt;br /&gt;
&lt;br /&gt;
Change the current &amp;lt;code&amp;gt;BBFILES&amp;lt;/code&amp;gt; to look like this:&lt;br /&gt;
 BBFILES := &amp;quot;${OMDIR}/openembedded/packages/*/*.bb ${OMDIR}/oe/packages/*/*.bb ${OMDIR}/local/packages/*/*.bb&amp;quot;&lt;br /&gt;
Change your &amp;lt;code&amp;gt;BBFILE_COLLECTIONS&amp;lt;/code&amp;gt; line to look like this:&lt;br /&gt;
 BBFILE_COLLECTIONS = &amp;quot;upstream local overlay&amp;quot;&lt;br /&gt;
Add this line:&lt;br /&gt;
 BBFILE_PATTERN_overlay = &amp;quot;^${OMDIR}/local/&amp;quot;&lt;br /&gt;
Add this line:&lt;br /&gt;
 BBFILE_PRIORITY_overlay = &amp;quot;20&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;BBFILE_PRIORITY&amp;lt;/code&amp;gt; should be greater than all the other &amp;lt;code&amp;gt;BBFILE_PRIORITY&amp;lt;/code&amp;gt; variables on the same file.&lt;br /&gt;
&lt;br /&gt;
* Change your &amp;lt;code&amp;gt;BBPATH&amp;lt;/code&amp;gt; environment variable to add the new tree ''before'' the two others in your &amp;lt;code&amp;gt;setup-env&amp;lt;/code&amp;gt; file.&amp;lt;code&amp;gt;setup-env&amp;lt;/code&amp;gt; is created by [[MokoMakefile]] automatically and is located in your &amp;lt;code&amp;gt;${OMDIR}&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
 export BBPATH=&amp;quot;${OMDIR}/build:${OMDIR}/local:${OMDIR}/oe:${OMDIR}/openembedded&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Using Your New Local Overlay ==&lt;br /&gt;
&lt;br /&gt;
=== Changing files in conf/ ===&lt;br /&gt;
&lt;br /&gt;
To change a file in conf/, just copy the file to the overlay tree (preserving the directory structure) and edit it.&lt;br /&gt;
&lt;br /&gt;
=== Changing files in classes/ ===&lt;br /&gt;
&lt;br /&gt;
To change a file in classes/, just copy the file to the overlay tree and edit it.&lt;br /&gt;
&lt;br /&gt;
=== Changing packages ===&lt;br /&gt;
&lt;br /&gt;
Changing a package's recipe is a bit more complex. You have to copy over (or symlink) not only the .bb file for the package, but also ''all'' the files it includes with &amp;lt;code&amp;gt;require&amp;lt;/code&amp;gt;, and the &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt; directories (all directories referred to by &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt;, usually named either ''package''-''version'' or &amp;lt;code&amp;gt;files&amp;lt;/code&amp;gt;). If you forget one of them, the build will give an error (either when parsing the recipe in the case of &amp;lt;code&amp;gt;require&amp;lt;/code&amp;gt;, or when trying to build in the case of the &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt; directories).&lt;br /&gt;
&lt;br /&gt;
=== Adding a new package ===&lt;br /&gt;
&lt;br /&gt;
You can add a new package (or a recipe for a new version of a package) to the overlay tree simply by creating it on the overlay tree.&lt;br /&gt;
&lt;br /&gt;
=== Creating your own images ===&lt;br /&gt;
&lt;br /&gt;
To create you own images we'll use the base openmoko .bb files and modify them so suit. Where you see 'scaredycat' replace this with something yo identify your images.&lt;br /&gt;
&lt;br /&gt;
edit local/packages/images/scaredycat-openmoko-devel-image.bb and paste this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require scaredycat-openmoko-image.bb&lt;br /&gt;
 &lt;br /&gt;
export PACKAGE_INSTALL += &amp;quot;\&lt;br /&gt;
  task-openmoko-debug \&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
then edit local/packages/images/scaredycat-openmoko-image.bb&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#------------------------------------------------------&lt;br /&gt;
# OpenMoko Image Recipe&lt;br /&gt;
#------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
export IMAGE_BASENAME = &amp;quot;${PN}&amp;quot;&lt;br /&gt;
export IMAGE_LINGUAS = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export PACKAGE_INSTALL = &amp;quot;\&lt;br /&gt;
  ${MACHINE_TASK_PROVIDER} \&lt;br /&gt;
  task-openmoko-linux \&lt;br /&gt;
  task-openmoko-net \&lt;br /&gt;
  task-openmoko-ui \&lt;br /&gt;
  task-openmoko-base \&lt;br /&gt;
  task-openmoko-phone \&lt;br /&gt;
  task-openmoko-games \&lt;br /&gt;
  task-openmoko-pim \&lt;br /&gt;
  task-openmoko-scaredycat \&lt;br /&gt;
  &amp;quot;&lt;br /&gt;
&lt;br /&gt;
DEPENDS = &amp;quot;\&lt;br /&gt;
  ${MACHINE_TASK_PROVIDER} \&lt;br /&gt;
  task-openmoko \&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
RDEPENDS = &amp;quot;${PACKAGE_INSTALL}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inherit image&lt;br /&gt;
&lt;br /&gt;
LICENSE = MIT&lt;br /&gt;
&lt;br /&gt;
ROOTFS_POSTPROCESS_COMMAND += 'date &amp;quot;+%m%d%H%M%Y&amp;quot; &amp;gt;${IMAGE_ROOTFS}/etc/timestamp'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
edit packages/tasks/task-openmoko-scaredycat.bb - this is where we put the things we want to include in our image, above and behond the standard image.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;OpenMoko: Scaredycat Additions&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;openmoko/base&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;original&amp;quot;&lt;br /&gt;
PR = &amp;quot;r2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inherit task&lt;br /&gt;
&lt;br /&gt;
RDEPENDS_task-openmoko-scaredycat = &amp;quot;\&lt;br /&gt;
  scummvm \&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Your First Application ==&lt;br /&gt;
&lt;br /&gt;
I know that I said I'd have a GDK application in here, however, I'd really like to get this whole course done first and have you guys starting to code instead of just looking at what I've written!&lt;br /&gt;
&lt;br /&gt;
This will be a very simple CLI hello world.&lt;br /&gt;
&lt;br /&gt;
=== Before We Code ===&lt;br /&gt;
&lt;br /&gt;
Like a good coder you want to make sure that you're not just doing things, but that you're doing them the right way! &lt;br /&gt;
&lt;br /&gt;
Now change directories into your &amp;lt;code&amp;gt;local/packages&amp;lt;/code&amp;gt; directory.The following commands expect you'll be in that directory so don't change unless you know what you're doing!&lt;br /&gt;
&lt;br /&gt;
You'll want to make a directory with the name of your application, and a subdirectory called files.&lt;br /&gt;
  mkdir myhelloworld myhelloworld/files&lt;br /&gt;
Now you'll want to create two files in the &amp;lt;code&amp;gt;files&amp;lt;/code&amp;gt; directory&lt;br /&gt;
  touch myhelloworld/files/README.txt myhelloworld/files/myhelloworld.c&lt;br /&gt;
And finally you'll want to create a bitbake file.&lt;br /&gt;
  touch myhelloworld/myhelloworld.bb&lt;br /&gt;
&lt;br /&gt;
Alrighty now all your necessary files are created so lets go over this real quick.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$HOME&lt;br /&gt;
 +- $OMDIR (contains the official openmoko tree)&lt;br /&gt;
 |  +- local/&lt;br /&gt;
 |     +- packages/&lt;br /&gt;
 |        +- myhelloworld/&lt;br /&gt;
 |           +- myhelloworld.bb&lt;br /&gt;
 |           +- files/&lt;br /&gt;
 |              +- myhelloworld.c&lt;br /&gt;
 |              +- README.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That should be your structure, if it's not you should go and fix it up.&lt;br /&gt;
=== Filling the Files ===&lt;br /&gt;
&lt;br /&gt;
So you've got your sample files all laid out now it's time to make them actually do something.&lt;br /&gt;
&lt;br /&gt;
myhelloworld.c&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char** argv)&lt;br /&gt;
{&lt;br /&gt;
        printf(&amp;quot;Ello Poppet!\n&amp;quot;);&lt;br /&gt;
        return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
README.txt&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This is a command line application. It prints a simple Hello World! To stdout.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
myhelloworld.bb&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;A killer hello world application&amp;quot;&lt;br /&gt;
AUTHOR = &amp;quot;Bryce Leo&amp;quot;&lt;br /&gt;
HOMEPAGE = &amp;quot;&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;console/applications&amp;quot;&lt;br /&gt;
PRIORITY = &amp;quot;optional&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;MIT&amp;quot;&lt;br /&gt;
#DEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RDEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RRECOMMENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RCONFLICTS = &amp;quot;&amp;quot;&lt;br /&gt;
#SRCDATE = &amp;quot;20070729&amp;quot;&lt;br /&gt;
#PV = &amp;quot;0.1&amp;quot;&lt;br /&gt;
#PR = &amp;quot;r0&amp;quot;&lt;br /&gt;
SRC_URI = &amp;quot;file://myhelloworld.c \&lt;br /&gt;
          file://README.txt &amp;quot;&lt;br /&gt;
&lt;br /&gt;
S = &amp;quot;${WORKDIR}/myhelloworld/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
do_compile() {&lt;br /&gt;
        ${CC} ${CFLAGS} ${LDFLAGS} ${WORKDIR}/myhelloworld.c -o myhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
do_install() {&lt;br /&gt;
        install -m 0755 -d ${D}${bindir} ${D}${docdir}/myhelloworld&lt;br /&gt;
        install -m 0755 ${S}/myhelloworld ${D}${bindir}&lt;br /&gt;
        install -m 0644 ${WORKDIR}/README.txt ${D}${docdir}/myhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Your First Compilation ===&lt;br /&gt;
&lt;br /&gt;
This is where the [[MokoMakefile]] comes in very very handy. Change to your ${OMDIR} directory, You'll know it by the fact that it is where &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt; resides.&lt;br /&gt;
 make build-package-myhelloworld&lt;br /&gt;
&lt;br /&gt;
(make sure you run make openmoko-devel-image at least once before building your own packages)&lt;br /&gt;
&lt;br /&gt;
This should all come back and not return any error messages, The output should end in something similar to&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NOTE: package myhelloworld-1.0: completed&lt;br /&gt;
NOTE: build 200707291926: completed&lt;br /&gt;
Build statistics:&lt;br /&gt;
  Attempted builds: 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that no errors were thrown we are happily done!&lt;br /&gt;
&lt;br /&gt;
== Adding Your Application to the Image ==&lt;br /&gt;
&lt;br /&gt;
So you've had an idea, you've setup the build environment, you've setup your local overlay, you've laid out your application tree, you've put code into those fantastic files of yours and now it compiles.There's only one thing left to do. Add that application to your image.&lt;br /&gt;
&lt;br /&gt;
Now lets go over in words and whys what we're about to do. First we need to make modify the &amp;lt;code&amp;gt;${OMDIR}/build/conf/local.conf&amp;lt;/code&amp;gt;. We add in the variable &amp;lt;code&amp;gt;DISTRO_EXTRA_RDEPENDS&amp;lt;/code&amp;gt; and set its value to include &amp;lt;code&amp;gt;myhelloworld&amp;lt;/code&amp;gt;. If you'd like to include other packages from your own overlay or the OM tree just add them inseparated by spaces. After this gets added as a dependency to build the Distro (in this case OpenMoko). Now we have to re-build the task-base package. This essentially just generates an ipk file that will &amp;quot;Merge machine and distro options to create a basic machine task/package.&amp;quot; It pretty much builds a file with a list of packages to be installed that are required for the distro to work correctly. So then you just go through and make &amp;lt;code&amp;gt;openmoko-devel-image, build-qemu, flash-qemu-local,&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;run-qemu&amp;lt;/code&amp;gt;. Then calibrate your stylus, head over to the terminal, and run your application!&lt;br /&gt;
&lt;br /&gt;
=== Modifying Your local.conf ===&lt;br /&gt;
Now, go into your build config directory &amp;lt;code&amp;gt;${OMDIR}/build/conf/&amp;lt;/code&amp;gt; and now you'll be editing &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
Add this line to you &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld&amp;quot;&lt;br /&gt;
With this line you can also include other applications from the OE tree. For instance my &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; looks like this.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MACHINE = &amp;quot;fic-gta01&amp;quot;&lt;br /&gt;
DISTRO = &amp;quot;openmoko&amp;quot;&lt;br /&gt;
BUILD_ARCH = &amp;quot;i686&amp;quot;&lt;br /&gt;
SRCDATE_eds-dbus = &amp;quot;now&amp;quot;&lt;br /&gt;
DISTRO_EXTRA_RDEPENDS += &amp;quot;lua dillo myhelloworld&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that you've fixed your &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; it's time to go through all the necessary tasks to add and re-build you image and have your sweet package included.&lt;br /&gt;
&lt;br /&gt;
=== Building ===&lt;br /&gt;
Now come the easy part thanks to [[MokoMakefile]]. &lt;br /&gt;
&lt;br /&gt;
  make rebuild-package-task-base&lt;br /&gt;
  make openmoko-devel-image&lt;br /&gt;
  make build-qemu&lt;br /&gt;
  make flash-qemu-local&lt;br /&gt;
&lt;br /&gt;
Now all you have to do is run qemu.&lt;br /&gt;
  make run-qemu&lt;br /&gt;
&lt;br /&gt;
From here after you calibrate your stylus, you click on the Menu in the top right, click down to terminal, then just run your program.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@fic-gta02:/$ myhelloworld&lt;br /&gt;
Ello Poppet!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Adding Python scripts as applications==&lt;br /&gt;
This is for adding python scripts/packages to the image for your own use.&lt;br /&gt;
===First steps===&lt;br /&gt;
First, you need to modify the &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; file as described above. You need to modify &lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld&amp;quot;&lt;br /&gt;
to&lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld python&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--[[User:Xkr47|xkr47]] 18:21, 11 August 2007 (CEST) Hmm surely the new line should be DISTRO_EXTRA_RDEPENDS += &amp;quot;pyhelloworld python&amp;quot; instead since the package we create below is pyhelloworld..&lt;br /&gt;
&lt;br /&gt;
This is because python is not included by default in the openmoko image. Or you can use &amp;lt;code&amp;gt;python-pygtk2&amp;lt;/code&amp;gt; if you wish.&lt;br /&gt;
&lt;br /&gt;
Next, you need to perform these actions from the &amp;lt;code&amp;gt;$OMDIR/local&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
  mkdir packages/pyhelloworld packages/pyhelloworld/files&lt;br /&gt;
&lt;br /&gt;
  touch packages/pyhelloworld/files/pyhello packages/pyhelloworld/README.txt&lt;br /&gt;
&lt;br /&gt;
  touch packages/pyhelloworld/pyhelloworld.bb&lt;br /&gt;
&lt;br /&gt;
===Filling in the files===&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;packages/pyhelloworld/files/pyhello&amp;lt;/code&amp;gt; to contain:&lt;br /&gt;
&amp;lt;pre&amp;gt;  &lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;hello world!&amp;quot;&lt;br /&gt;
print &amp;quot;shutting down now. Farewell oh cruel, cruel world!&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
Next up, is editing &amp;lt;code&amp;gt;packages/pyhelloworld/files/README.txt&amp;lt;/code&amp;gt; to say:&lt;br /&gt;
&lt;br /&gt;
  This is the most awesome helloworld application ever. Know why? It has SNAKES!&lt;br /&gt;
&lt;br /&gt;
Kidding aside, next is the all important &amp;lt;code&amp;gt; packages/pyhelloworld/pyhelloworld.bb:&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;A pythonic hello world application&amp;quot;&lt;br /&gt;
AUTHOR = &amp;quot;Tyler Laing&amp;quot;&lt;br /&gt;
HOMEPAGE = &amp;quot;&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;console/applications&amp;quot;&lt;br /&gt;
PRIORITY = &amp;quot;optional&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;MIT&amp;quot;&lt;br /&gt;
#DEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RDEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RRECOMMENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RCONFLICTS = &amp;quot;&amp;quot;&lt;br /&gt;
#SRCDATE = &amp;quot;20070729&amp;quot;&lt;br /&gt;
#PV = &amp;quot;0.1&amp;quot;&lt;br /&gt;
#PR = &amp;quot;r0&amp;quot;&lt;br /&gt;
SRC_URI = &amp;quot;file://pyhello \&lt;br /&gt;
          file://README.txt &amp;quot;&lt;br /&gt;
&lt;br /&gt;
S = &amp;quot;${WORKDIR}/pyhelloworld/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
do_install() {&lt;br /&gt;
        install -m 0755 -d ${D}${bindir} ${D}${docdir}/pyhelloworld&lt;br /&gt;
        install -m 0755 ${WORKDIR}/pyhello ${D}${bindir}&lt;br /&gt;
        install -m 0644 ${WORKDIR}/README.txt ${D}${docdir}/pyhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I'll explain each of the parts right here, for future reference.&lt;br /&gt;
&lt;br /&gt;
====Meanings of variables in .bb files====&lt;br /&gt;
&lt;br /&gt;
  $WORKDIR = $OMDIR/local/packages/&amp;lt;application directory&amp;gt;&lt;br /&gt;
  $bindir  = $OMDIR/build/tmp/work/armv4t-linux/&amp;lt;application directory&amp;gt;/image/usr/bin&lt;br /&gt;
  $docir   = $OMDIR/build/tmp/work/armv4t-linux/&amp;lt;application directory&amp;gt;/image/usr/share/doc&lt;br /&gt;
  $D       = $OMDIR/build/&lt;br /&gt;
&lt;br /&gt;
====Final steps====&lt;br /&gt;
Complete the last steps as per the above instructions, from the point of altering &amp;lt;code&amp;gt;DISTRO_EXTRA_RDEPENDS&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
And your done!&lt;br /&gt;
&lt;br /&gt;
[[Category:Applications]]&lt;br /&gt;
[[Category:OpenMoko]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Customizing_the_Openmoko_Distribution</id>
		<title>Customizing the Openmoko Distribution</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Customizing_the_Openmoko_Distribution"/>
				<updated>2007-08-29T17:39:15Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* Creating your own images */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What's the goal? ==&lt;br /&gt;
&lt;br /&gt;
The goal of this page is to teach you how to take an application that you've coded (or the sample app) and properly get it included in your rootfs. This article is a bit of an aggregate page, it's going to take information from [[MokoMakefile]], [[User:CesarB/Using a local overlay|Using a local overlay]], [[Building a hello world application]], and [[Create a package from existing sources]]. So as you can see the goal is for it to be a very thorough introduction, and will take you from &amp;quot;Idea to Inclusion&amp;quot; of your application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Setting Up the OpenMoko Environment ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; &lt;br /&gt;
 |*If you already have the environment setup then it is imperative that you update your Makefile.&lt;br /&gt;
Do this by running:&lt;br /&gt;
&amp;lt;pre&amp;gt;make update-makefile&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This part of the tutorial is going to be pretty basic. I absolutely love [[MokoMakefile]], it's fantastic, the creator has done and continues to do a fantastic job with this. I see absolutely no reason not to use it I put my OpenMoko development directory in /home/bryce/mokodev/ and that works great for me. You can feel free to do the same or put it anywhere else in your user directory (or anywhere on your system if you're feeling daring and a little nutty).&lt;br /&gt;
&lt;br /&gt;
To get your environment setup please get it setup according to [[MokoMakefile]] however if you do have the build environment setup manually and you're sure you know what you're doing then feel free to go forward with this.&lt;br /&gt;
&lt;br /&gt;
== Setting Up a Local Overlay ==&lt;br /&gt;
If you're at the point for setting up a local overlay this means a couple things. First: You've had a brilliant idea for an application that you just need to have on the OpenMoko platform. Second: You realize that this killer app of yours needs to be done properly and you're not going to do anything silly like include it in the actual tree for the OpenMoko distro because it would probably end up just getting overwritten eventually, or you just realize that it's bad practice!&lt;br /&gt;
&lt;br /&gt;
If you're wondering why and what a local overlay is then let me take this time to explain it to you. A local overlay is where you, as a developer keep your local files in an OE style setup so that you can simply pull your updated code into the tree. You add your overlay tree into the bitbake setup so that when you call bitbake it will pull your own or your customized packages before going to the OE or OpenMoko trees.This keeps everything nice and organized for you and also allows you to build/rebuild/include you apps by using the [[MokoMakefile]]&lt;br /&gt;
&lt;br /&gt;
Thank you to [[User:CesarB]] for this part of the wiki.&lt;br /&gt;
&lt;br /&gt;
To create a local overlay:&lt;br /&gt;
&lt;br /&gt;
* Create a &amp;quot;local&amp;quot; directory and its subdirectories&lt;br /&gt;
&lt;br /&gt;
 mkdir local local/conf local/classes local/packages local/packages/images local/packages/tasks&lt;br /&gt;
&lt;br /&gt;
* Copy &amp;lt;code&amp;gt;site.conf&amp;lt;/code&amp;gt; from the openmoko tree to &amp;lt;code&amp;gt;local/conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cp oe/conf/site.conf local/conf/site.conf&lt;br /&gt;
&lt;br /&gt;
* Edit the local/conf/site.conf you copied to add the new tree as a source for bitbake recipes.&lt;br /&gt;
&lt;br /&gt;
Change the current &amp;lt;code&amp;gt;BBFILES&amp;lt;/code&amp;gt; to look like this:&lt;br /&gt;
 BBFILES := &amp;quot;${OMDIR}/openembedded/packages/*/*.bb ${OMDIR}/oe/packages/*/*.bb ${OMDIR}/local/packages/*/*.bb&amp;quot;&lt;br /&gt;
Change your &amp;lt;code&amp;gt;BBFILE_COLLECTIONS&amp;lt;/code&amp;gt; line to look like this:&lt;br /&gt;
 BBFILE_COLLECTIONS = &amp;quot;upstream local overlay&amp;quot;&lt;br /&gt;
Add this line:&lt;br /&gt;
 BBFILE_PATTERN_overlay = &amp;quot;^${OMDIR}/local/&amp;quot;&lt;br /&gt;
Add this line:&lt;br /&gt;
 BBFILE_PRIORITY_overlay = &amp;quot;20&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;BBFILE_PRIORITY&amp;lt;/code&amp;gt; should be greater than all the other &amp;lt;code&amp;gt;BBFILE_PRIORITY&amp;lt;/code&amp;gt; variables on the same file.&lt;br /&gt;
&lt;br /&gt;
* Change your &amp;lt;code&amp;gt;BBPATH&amp;lt;/code&amp;gt; environment variable to add the new tree ''before'' the two others in your &amp;lt;code&amp;gt;setup-env&amp;lt;/code&amp;gt; file.&amp;lt;code&amp;gt;setup-env&amp;lt;/code&amp;gt; is created by [[MokoMakefile]] automatically and is located in your &amp;lt;code&amp;gt;${OMDIR}&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
 export BBPATH=&amp;quot;${OMDIR}/build:${OMDIR}/local:${OMDIR}/oe:${OMDIR}/openembedded&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Using Your New Local Overlay ==&lt;br /&gt;
&lt;br /&gt;
=== Changing files in conf/ ===&lt;br /&gt;
&lt;br /&gt;
To change a file in conf/, just copy the file to the overlay tree (preserving the directory structure) and edit it.&lt;br /&gt;
&lt;br /&gt;
=== Changing files in classes/ ===&lt;br /&gt;
&lt;br /&gt;
To change a file in classes/, just copy the file to the overlay tree and edit it.&lt;br /&gt;
&lt;br /&gt;
=== Changing packages ===&lt;br /&gt;
&lt;br /&gt;
Changing a package's recipe is a bit more complex. You have to copy over (or symlink) not only the .bb file for the package, but also ''all'' the files it includes with &amp;lt;code&amp;gt;require&amp;lt;/code&amp;gt;, and the &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt; directories (all directories referred to by &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt;, usually named either ''package''-''version'' or &amp;lt;code&amp;gt;files&amp;lt;/code&amp;gt;). If you forget one of them, the build will give an error (either when parsing the recipe in the case of &amp;lt;code&amp;gt;require&amp;lt;/code&amp;gt;, or when trying to build in the case of the &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt; directories).&lt;br /&gt;
&lt;br /&gt;
=== Adding a new package ===&lt;br /&gt;
&lt;br /&gt;
You can add a new package (or a recipe for a new version of a package) to the overlay tree simply by creating it on the overlay tree.&lt;br /&gt;
&lt;br /&gt;
=== Creating your own images ===&lt;br /&gt;
&lt;br /&gt;
To create you own images we'll use the base openmoko .bb files and modify them so suit. Where you see 'scaredycat' replace this with something yo identify your images.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
edit local/packages/images/scaredycat-openmoko-devel-image.bb and paste this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
require scaredycat-openmoko-image.bb&lt;br /&gt;
 &lt;br /&gt;
export PACKAGE_INSTALL += &amp;quot;\&lt;br /&gt;
  task-openmoko-debug \&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
then edit local/packages/images/scaredycat-openmoko-image.bb&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#------------------------------------------------------&lt;br /&gt;
# OpenMoko Image Recipe&lt;br /&gt;
#------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
export IMAGE_BASENAME = &amp;quot;${PN}&amp;quot;&lt;br /&gt;
export IMAGE_LINGUAS = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
export PACKAGE_INSTALL = &amp;quot;\&lt;br /&gt;
  ${MACHINE_TASK_PROVIDER} \&lt;br /&gt;
  task-openmoko-linux \&lt;br /&gt;
  task-openmoko-net \&lt;br /&gt;
  task-openmoko-ui \&lt;br /&gt;
  task-openmoko-base \&lt;br /&gt;
  task-openmoko-phone \&lt;br /&gt;
  task-openmoko-games \&lt;br /&gt;
  task-openmoko-pim \&lt;br /&gt;
  task-openmoko-scaredycat \&lt;br /&gt;
  &amp;quot;&lt;br /&gt;
&lt;br /&gt;
DEPENDS = &amp;quot;\&lt;br /&gt;
  ${MACHINE_TASK_PROVIDER} \&lt;br /&gt;
  task-openmoko \&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
RDEPENDS = &amp;quot;${PACKAGE_INSTALL}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inherit image&lt;br /&gt;
&lt;br /&gt;
LICENSE = MIT&lt;br /&gt;
&lt;br /&gt;
ROOTFS_POSTPROCESS_COMMAND += 'date &amp;quot;+%m%d%H%M%Y&amp;quot; &amp;gt;${IMAGE_ROOTFS}/etc/timestamp'&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
edit packages/tasks/task-openmoko-scaredycat.bb - this is where we put the things we want to include in our image, above and behond the standard image.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;OpenMoko: Scaredycat Additions&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;openmoko/base&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;original&amp;quot;&lt;br /&gt;
PR = &amp;quot;r2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
inherit task&lt;br /&gt;
&lt;br /&gt;
RDEPENDS_task-openmoko-scaredycat = &amp;quot;\&lt;br /&gt;
  scummvm \&lt;br /&gt;
&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Your First Application ==&lt;br /&gt;
&lt;br /&gt;
I know that I said I'd have a GDK application in here, however, I'd really like to get this whole course done first and have you guys starting to code instead of just looking at what I've written!&lt;br /&gt;
&lt;br /&gt;
This will be a very simple CLI hello world.&lt;br /&gt;
&lt;br /&gt;
=== Before We Code ===&lt;br /&gt;
&lt;br /&gt;
Like a good coder you want to make sure that you're not just doing things, but that you're doing them the right way! &lt;br /&gt;
&lt;br /&gt;
Now change directories into your &amp;lt;code&amp;gt;local/packages&amp;lt;/code&amp;gt; directory.The following commands expect you'll be in that directory so don't change unless you know what you're doing!&lt;br /&gt;
&lt;br /&gt;
You'll want to make a directory with the name of your application, and a subdirectory called files.&lt;br /&gt;
  mkdir myhelloworld myhelloworld/files&lt;br /&gt;
Now you'll want to create two files in the &amp;lt;code&amp;gt;files&amp;lt;/code&amp;gt; directory&lt;br /&gt;
  touch myhelloworld/files/README.txt myhelloworld/files/myhelloworld.c&lt;br /&gt;
And finally you'll want to create a bitbake file.&lt;br /&gt;
  touch myhelloworld/myhelloworld.bb&lt;br /&gt;
&lt;br /&gt;
Alrighty now all your necessary files are created so lets go over this real quick.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$HOME&lt;br /&gt;
 +- $OMDIR (contains the official openmoko tree)&lt;br /&gt;
 |  +- local/&lt;br /&gt;
 |     +- packages/&lt;br /&gt;
 |        +- myhelloworld/&lt;br /&gt;
 |           +- myhelloworld.bb&lt;br /&gt;
 |           +- files/&lt;br /&gt;
 |              +- myhelloworld.c&lt;br /&gt;
 |              +- README.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That should be your structure, if it's not you should go and fix it up.&lt;br /&gt;
=== Filling the Files ===&lt;br /&gt;
&lt;br /&gt;
So you've got your sample files all laid out now it's time to make them actually do something.&lt;br /&gt;
&lt;br /&gt;
myhelloworld.c&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char** argv)&lt;br /&gt;
{&lt;br /&gt;
        printf(&amp;quot;Ello Poppet!\n&amp;quot;);&lt;br /&gt;
        return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
README.txt&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This is a command line application. It prints a simple Hello World! To stdout.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
myhelloworld.bb&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;A killer hello world application&amp;quot;&lt;br /&gt;
AUTHOR = &amp;quot;Bryce Leo&amp;quot;&lt;br /&gt;
HOMEPAGE = &amp;quot;&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;console/applications&amp;quot;&lt;br /&gt;
PRIORITY = &amp;quot;optional&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;MIT&amp;quot;&lt;br /&gt;
#DEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RDEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RRECOMMENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RCONFLICTS = &amp;quot;&amp;quot;&lt;br /&gt;
#SRCDATE = &amp;quot;20070729&amp;quot;&lt;br /&gt;
#PV = &amp;quot;0.1&amp;quot;&lt;br /&gt;
#PR = &amp;quot;r0&amp;quot;&lt;br /&gt;
SRC_URI = &amp;quot;file://myhelloworld.c \&lt;br /&gt;
          file://README.txt &amp;quot;&lt;br /&gt;
&lt;br /&gt;
S = &amp;quot;${WORKDIR}/myhelloworld/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
do_compile() {&lt;br /&gt;
        ${CC} ${CFLAGS} ${LDFLAGS} ${WORKDIR}/myhelloworld.c -o myhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
do_install() {&lt;br /&gt;
        install -m 0755 -d ${D}${bindir} ${D}${docdir}/myhelloworld&lt;br /&gt;
        install -m 0755 ${S}/myhelloworld ${D}${bindir}&lt;br /&gt;
        install -m 0644 ${WORKDIR}/README.txt ${D}${docdir}/myhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Your First Compilation ===&lt;br /&gt;
&lt;br /&gt;
This is where the [[MokoMakefile]] comes in very very handy. Change to your ${OMDIR} directory, You'll know it by the fact that it is where &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt; resides.&lt;br /&gt;
 make build-package-myhelloworld&lt;br /&gt;
&lt;br /&gt;
(make sure you run make openmoko-devel-image at least once before building your own packages)&lt;br /&gt;
&lt;br /&gt;
This should all come back and not return any error messages, The output should end in something similar to&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NOTE: package myhelloworld-1.0: completed&lt;br /&gt;
NOTE: build 200707291926: completed&lt;br /&gt;
Build statistics:&lt;br /&gt;
  Attempted builds: 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that no errors were thrown we are happily done!&lt;br /&gt;
&lt;br /&gt;
== Adding Your Application to the Image ==&lt;br /&gt;
&lt;br /&gt;
So you've had an idea, you've setup the build environment, you've setup your local overlay, you've laid out your application tree, you've put code into those fantastic files of yours and now it compiles.There's only one thing left to do. Add that application to your image.&lt;br /&gt;
&lt;br /&gt;
Now lets go over in words and whys what we're about to do. First we need to make modify the &amp;lt;code&amp;gt;${OMDIR}/build/conf/local.conf&amp;lt;/code&amp;gt;. We add in the variable &amp;lt;code&amp;gt;DISTRO_EXTRA_RDEPENDS&amp;lt;/code&amp;gt; and set its value to include &amp;lt;code&amp;gt;myhelloworld&amp;lt;/code&amp;gt;. If you'd like to include other packages from your own overlay or the OM tree just add them inseparated by spaces. After this gets added as a dependency to build the Distro (in this case OpenMoko). Now we have to re-build the task-base package. This essentially just generates an ipk file that will &amp;quot;Merge machine and distro options to create a basic machine task/package.&amp;quot; It pretty much builds a file with a list of packages to be installed that are required for the distro to work correctly. So then you just go through and make &amp;lt;code&amp;gt;openmoko-devel-image, build-qemu, flash-qemu-local,&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;run-qemu&amp;lt;/code&amp;gt;. Then calibrate your stylus, head over to the terminal, and run your application!&lt;br /&gt;
&lt;br /&gt;
=== Modifying Your local.conf ===&lt;br /&gt;
Now, go into your build config directory &amp;lt;code&amp;gt;${OMDIR}/build/conf/&amp;lt;/code&amp;gt; and now you'll be editing &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
Add this line to you &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld&amp;quot;&lt;br /&gt;
With this line you can also include other applications from the OE tree. For instance my &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; looks like this.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MACHINE = &amp;quot;fic-gta01&amp;quot;&lt;br /&gt;
DISTRO = &amp;quot;openmoko&amp;quot;&lt;br /&gt;
BUILD_ARCH = &amp;quot;i686&amp;quot;&lt;br /&gt;
SRCDATE_eds-dbus = &amp;quot;now&amp;quot;&lt;br /&gt;
DISTRO_EXTRA_RDEPENDS += &amp;quot;lua dillo myhelloworld&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that you've fixed your &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; it's time to go through all the necessary tasks to add and re-build you image and have your sweet package included.&lt;br /&gt;
&lt;br /&gt;
=== Building ===&lt;br /&gt;
Now come the easy part thanks to [[MokoMakefile]]. &lt;br /&gt;
&lt;br /&gt;
  make rebuild-package-task-base&lt;br /&gt;
  make openmoko-devel-image&lt;br /&gt;
  make build-qemu&lt;br /&gt;
  make flash-qemu-local&lt;br /&gt;
&lt;br /&gt;
Now all you have to do is run qemu.&lt;br /&gt;
  make run-qemu&lt;br /&gt;
&lt;br /&gt;
From here after you calibrate your stylus, you click on the Menu in the top right, click down to terminal, then just run your program.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@fic-gta02:/$ myhelloworld&lt;br /&gt;
Ello Poppet!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Adding Python scripts as applications==&lt;br /&gt;
This is for adding python scripts/packages to the image for your own use.&lt;br /&gt;
===First steps===&lt;br /&gt;
First, you need to modify the &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; file as described above. You need to modify &lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld&amp;quot;&lt;br /&gt;
to&lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld python&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--[[User:Xkr47|xkr47]] 18:21, 11 August 2007 (CEST) Hmm surely the new line should be DISTRO_EXTRA_RDEPENDS += &amp;quot;pyhelloworld python&amp;quot; instead since the package we create below is pyhelloworld..&lt;br /&gt;
&lt;br /&gt;
This is because python is not included by default in the openmoko image. Or you can use &amp;lt;code&amp;gt;python-pygtk2&amp;lt;/code&amp;gt; if you wish.&lt;br /&gt;
&lt;br /&gt;
Next, you need to perform these actions from the &amp;lt;code&amp;gt;$OMDIR/local&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
  mkdir packages/pyhelloworld packages/pyhelloworld/files&lt;br /&gt;
&lt;br /&gt;
  touch packages/pyhelloworld/files/pyhello packages/pyhelloworld/README.txt&lt;br /&gt;
&lt;br /&gt;
  touch packages/pyhelloworld/pyhelloworld.bb&lt;br /&gt;
&lt;br /&gt;
===Filling in the files===&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;packages/pyhelloworld/files/pyhello&amp;lt;/code&amp;gt; to contain:&lt;br /&gt;
&amp;lt;pre&amp;gt;  &lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;hello world!&amp;quot;&lt;br /&gt;
print &amp;quot;shutting down now. Farewell oh cruel, cruel world!&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
Next up, is editing &amp;lt;code&amp;gt;packages/pyhelloworld/files/README.txt&amp;lt;/code&amp;gt; to say:&lt;br /&gt;
&lt;br /&gt;
  This is the most awesome helloworld application ever. Know why? It has SNAKES!&lt;br /&gt;
&lt;br /&gt;
Kidding aside, next is the all important &amp;lt;code&amp;gt; packages/pyhelloworld/pyhelloworld.bb:&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;A pythonic hello world application&amp;quot;&lt;br /&gt;
AUTHOR = &amp;quot;Tyler Laing&amp;quot;&lt;br /&gt;
HOMEPAGE = &amp;quot;&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;console/applications&amp;quot;&lt;br /&gt;
PRIORITY = &amp;quot;optional&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;MIT&amp;quot;&lt;br /&gt;
#DEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RDEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RRECOMMENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RCONFLICTS = &amp;quot;&amp;quot;&lt;br /&gt;
#SRCDATE = &amp;quot;20070729&amp;quot;&lt;br /&gt;
#PV = &amp;quot;0.1&amp;quot;&lt;br /&gt;
#PR = &amp;quot;r0&amp;quot;&lt;br /&gt;
SRC_URI = &amp;quot;file://pyhello \&lt;br /&gt;
          file://README.txt &amp;quot;&lt;br /&gt;
&lt;br /&gt;
S = &amp;quot;${WORKDIR}/pyhelloworld/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
do_install() {&lt;br /&gt;
        install -m 0755 -d ${D}${bindir} ${D}${docdir}/pyhelloworld&lt;br /&gt;
        install -m 0755 ${WORKDIR}/pyhello ${D}${bindir}&lt;br /&gt;
        install -m 0644 ${WORKDIR}/README.txt ${D}${docdir}/pyhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I'll explain each of the parts right here, for future reference.&lt;br /&gt;
&lt;br /&gt;
====Meanings of variables in .bb files====&lt;br /&gt;
&lt;br /&gt;
  $WORKDIR = $OMDIR/local/packages/&amp;lt;application directory&amp;gt;&lt;br /&gt;
  $bindir  = $OMDIR/build/tmp/work/armv4t-linux/&amp;lt;application directory&amp;gt;/image/usr/bin&lt;br /&gt;
  $docir   = $OMDIR/build/tmp/work/armv4t-linux/&amp;lt;application directory&amp;gt;/image/usr/share/doc&lt;br /&gt;
  $D       = $OMDIR/build/&lt;br /&gt;
&lt;br /&gt;
====Final steps====&lt;br /&gt;
Complete the last steps as per the above instructions, from the point of altering &amp;lt;code&amp;gt;DISTRO_EXTRA_RDEPENDS&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
And your done!&lt;br /&gt;
&lt;br /&gt;
[[Category:Applications]]&lt;br /&gt;
[[Category:OpenMoko]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Customizing_the_Openmoko_Distribution</id>
		<title>Customizing the Openmoko Distribution</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Customizing_the_Openmoko_Distribution"/>
				<updated>2007-08-29T17:30:03Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* Setting Up a Local Overlay */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What's the goal? ==&lt;br /&gt;
&lt;br /&gt;
The goal of this page is to teach you how to take an application that you've coded (or the sample app) and properly get it included in your rootfs. This article is a bit of an aggregate page, it's going to take information from [[MokoMakefile]], [[User:CesarB/Using a local overlay|Using a local overlay]], [[Building a hello world application]], and [[Create a package from existing sources]]. So as you can see the goal is for it to be a very thorough introduction, and will take you from &amp;quot;Idea to Inclusion&amp;quot; of your application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Setting Up the OpenMoko Environment ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; &lt;br /&gt;
 |*If you already have the environment setup then it is imperative that you update your Makefile.&lt;br /&gt;
Do this by running:&lt;br /&gt;
&amp;lt;pre&amp;gt;make update-makefile&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This part of the tutorial is going to be pretty basic. I absolutely love [[MokoMakefile]], it's fantastic, the creator has done and continues to do a fantastic job with this. I see absolutely no reason not to use it I put my OpenMoko development directory in /home/bryce/mokodev/ and that works great for me. You can feel free to do the same or put it anywhere else in your user directory (or anywhere on your system if you're feeling daring and a little nutty).&lt;br /&gt;
&lt;br /&gt;
To get your environment setup please get it setup according to [[MokoMakefile]] however if you do have the build environment setup manually and you're sure you know what you're doing then feel free to go forward with this.&lt;br /&gt;
&lt;br /&gt;
== Setting Up a Local Overlay ==&lt;br /&gt;
If you're at the point for setting up a local overlay this means a couple things. First: You've had a brilliant idea for an application that you just need to have on the OpenMoko platform. Second: You realize that this killer app of yours needs to be done properly and you're not going to do anything silly like include it in the actual tree for the OpenMoko distro because it would probably end up just getting overwritten eventually, or you just realize that it's bad practice!&lt;br /&gt;
&lt;br /&gt;
If you're wondering why and what a local overlay is then let me take this time to explain it to you. A local overlay is where you, as a developer keep your local files in an OE style setup so that you can simply pull your updated code into the tree. You add your overlay tree into the bitbake setup so that when you call bitbake it will pull your own or your customized packages before going to the OE or OpenMoko trees.This keeps everything nice and organized for you and also allows you to build/rebuild/include you apps by using the [[MokoMakefile]]&lt;br /&gt;
&lt;br /&gt;
Thank you to [[User:CesarB]] for this part of the wiki.&lt;br /&gt;
&lt;br /&gt;
To create a local overlay:&lt;br /&gt;
&lt;br /&gt;
* Create a &amp;quot;local&amp;quot; directory and its subdirectories&lt;br /&gt;
&lt;br /&gt;
 mkdir local local/conf local/classes local/packages local/packages/images local/packages/tasks&lt;br /&gt;
&lt;br /&gt;
* Copy &amp;lt;code&amp;gt;site.conf&amp;lt;/code&amp;gt; from the openmoko tree to &amp;lt;code&amp;gt;local/conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cp oe/conf/site.conf local/conf/site.conf&lt;br /&gt;
&lt;br /&gt;
* Edit the local/conf/site.conf you copied to add the new tree as a source for bitbake recipes.&lt;br /&gt;
&lt;br /&gt;
Change the current &amp;lt;code&amp;gt;BBFILES&amp;lt;/code&amp;gt; to look like this:&lt;br /&gt;
 BBFILES := &amp;quot;${OMDIR}/openembedded/packages/*/*.bb ${OMDIR}/oe/packages/*/*.bb ${OMDIR}/local/packages/*/*.bb&amp;quot;&lt;br /&gt;
Change your &amp;lt;code&amp;gt;BBFILE_COLLECTIONS&amp;lt;/code&amp;gt; line to look like this:&lt;br /&gt;
 BBFILE_COLLECTIONS = &amp;quot;upstream local overlay&amp;quot;&lt;br /&gt;
Add this line:&lt;br /&gt;
 BBFILE_PATTERN_overlay = &amp;quot;^${OMDIR}/local/&amp;quot;&lt;br /&gt;
Add this line:&lt;br /&gt;
 BBFILE_PRIORITY_overlay = &amp;quot;20&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;BBFILE_PRIORITY&amp;lt;/code&amp;gt; should be greater than all the other &amp;lt;code&amp;gt;BBFILE_PRIORITY&amp;lt;/code&amp;gt; variables on the same file.&lt;br /&gt;
&lt;br /&gt;
* Change your &amp;lt;code&amp;gt;BBPATH&amp;lt;/code&amp;gt; environment variable to add the new tree ''before'' the two others in your &amp;lt;code&amp;gt;setup-env&amp;lt;/code&amp;gt; file.&amp;lt;code&amp;gt;setup-env&amp;lt;/code&amp;gt; is created by [[MokoMakefile]] automatically and is located in your &amp;lt;code&amp;gt;${OMDIR}&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
 export BBPATH=&amp;quot;${OMDIR}/build:${OMDIR}/local:${OMDIR}/oe:${OMDIR}/openembedded&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Using Your New Local Overlay ==&lt;br /&gt;
&lt;br /&gt;
=== Changing files in conf/ ===&lt;br /&gt;
&lt;br /&gt;
To change a file in conf/, just copy the file to the overlay tree (preserving the directory structure) and edit it.&lt;br /&gt;
&lt;br /&gt;
=== Changing files in classes/ ===&lt;br /&gt;
&lt;br /&gt;
To change a file in classes/, just copy the file to the overlay tree and edit it.&lt;br /&gt;
&lt;br /&gt;
=== Changing packages ===&lt;br /&gt;
&lt;br /&gt;
Changing a package's recipe is a bit more complex. You have to copy over (or symlink) not only the .bb file for the package, but also ''all'' the files it includes with &amp;lt;code&amp;gt;require&amp;lt;/code&amp;gt;, and the &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt; directories (all directories referred to by &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt;, usually named either ''package''-''version'' or &amp;lt;code&amp;gt;files&amp;lt;/code&amp;gt;). If you forget one of them, the build will give an error (either when parsing the recipe in the case of &amp;lt;code&amp;gt;require&amp;lt;/code&amp;gt;, or when trying to build in the case of the &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt; directories).&lt;br /&gt;
&lt;br /&gt;
=== Adding a new package ===&lt;br /&gt;
&lt;br /&gt;
You can add a new package (or a recipe for a new version of a package) to the overlay tree simply by creating it on the overlay tree.&lt;br /&gt;
&lt;br /&gt;
== Your First Application ==&lt;br /&gt;
&lt;br /&gt;
I know that I said I'd have a GDK application in here, however, I'd really like to get this whole course done first and have you guys starting to code instead of just looking at what I've written!&lt;br /&gt;
&lt;br /&gt;
This will be a very simple CLI hello world.&lt;br /&gt;
&lt;br /&gt;
=== Before We Code ===&lt;br /&gt;
&lt;br /&gt;
Like a good coder you want to make sure that you're not just doing things, but that you're doing them the right way! &lt;br /&gt;
&lt;br /&gt;
Now change directories into your &amp;lt;code&amp;gt;local/packages&amp;lt;/code&amp;gt; directory.The following commands expect you'll be in that directory so don't change unless you know what you're doing!&lt;br /&gt;
&lt;br /&gt;
You'll want to make a directory with the name of your application, and a subdirectory called files.&lt;br /&gt;
  mkdir myhelloworld myhelloworld/files&lt;br /&gt;
Now you'll want to create two files in the &amp;lt;code&amp;gt;files&amp;lt;/code&amp;gt; directory&lt;br /&gt;
  touch myhelloworld/files/README.txt myhelloworld/files/myhelloworld.c&lt;br /&gt;
And finally you'll want to create a bitbake file.&lt;br /&gt;
  touch myhelloworld/myhelloworld.bb&lt;br /&gt;
&lt;br /&gt;
Alrighty now all your necessary files are created so lets go over this real quick.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$HOME&lt;br /&gt;
 +- $OMDIR (contains the official openmoko tree)&lt;br /&gt;
 |  +- local/&lt;br /&gt;
 |     +- packages/&lt;br /&gt;
 |        +- myhelloworld/&lt;br /&gt;
 |           +- myhelloworld.bb&lt;br /&gt;
 |           +- files/&lt;br /&gt;
 |              +- myhelloworld.c&lt;br /&gt;
 |              +- README.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That should be your structure, if it's not you should go and fix it up.&lt;br /&gt;
=== Filling the Files ===&lt;br /&gt;
&lt;br /&gt;
So you've got your sample files all laid out now it's time to make them actually do something.&lt;br /&gt;
&lt;br /&gt;
myhelloworld.c&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char** argv)&lt;br /&gt;
{&lt;br /&gt;
        printf(&amp;quot;Ello Poppet!\n&amp;quot;);&lt;br /&gt;
        return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
README.txt&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This is a command line application. It prints a simple Hello World! To stdout.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
myhelloworld.bb&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;A killer hello world application&amp;quot;&lt;br /&gt;
AUTHOR = &amp;quot;Bryce Leo&amp;quot;&lt;br /&gt;
HOMEPAGE = &amp;quot;&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;console/applications&amp;quot;&lt;br /&gt;
PRIORITY = &amp;quot;optional&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;MIT&amp;quot;&lt;br /&gt;
#DEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RDEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RRECOMMENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RCONFLICTS = &amp;quot;&amp;quot;&lt;br /&gt;
#SRCDATE = &amp;quot;20070729&amp;quot;&lt;br /&gt;
#PV = &amp;quot;0.1&amp;quot;&lt;br /&gt;
#PR = &amp;quot;r0&amp;quot;&lt;br /&gt;
SRC_URI = &amp;quot;file://myhelloworld.c \&lt;br /&gt;
          file://README.txt &amp;quot;&lt;br /&gt;
&lt;br /&gt;
S = &amp;quot;${WORKDIR}/myhelloworld/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
do_compile() {&lt;br /&gt;
        ${CC} ${CFLAGS} ${LDFLAGS} ${WORKDIR}/myhelloworld.c -o myhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
do_install() {&lt;br /&gt;
        install -m 0755 -d ${D}${bindir} ${D}${docdir}/myhelloworld&lt;br /&gt;
        install -m 0755 ${S}/myhelloworld ${D}${bindir}&lt;br /&gt;
        install -m 0644 ${WORKDIR}/README.txt ${D}${docdir}/myhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Your First Compilation ===&lt;br /&gt;
&lt;br /&gt;
This is where the [[MokoMakefile]] comes in very very handy. Change to your ${OMDIR} directory, You'll know it by the fact that it is where &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt; resides.&lt;br /&gt;
 make build-package-myhelloworld&lt;br /&gt;
&lt;br /&gt;
(make sure you run make openmoko-devel-image at least once before building your own packages)&lt;br /&gt;
&lt;br /&gt;
This should all come back and not return any error messages, The output should end in something similar to&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NOTE: package myhelloworld-1.0: completed&lt;br /&gt;
NOTE: build 200707291926: completed&lt;br /&gt;
Build statistics:&lt;br /&gt;
  Attempted builds: 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that no errors were thrown we are happily done!&lt;br /&gt;
&lt;br /&gt;
== Adding Your Application to the Image ==&lt;br /&gt;
&lt;br /&gt;
So you've had an idea, you've setup the build environment, you've setup your local overlay, you've laid out your application tree, you've put code into those fantastic files of yours and now it compiles.There's only one thing left to do. Add that application to your image.&lt;br /&gt;
&lt;br /&gt;
Now lets go over in words and whys what we're about to do. First we need to make modify the &amp;lt;code&amp;gt;${OMDIR}/build/conf/local.conf&amp;lt;/code&amp;gt;. We add in the variable &amp;lt;code&amp;gt;DISTRO_EXTRA_RDEPENDS&amp;lt;/code&amp;gt; and set its value to include &amp;lt;code&amp;gt;myhelloworld&amp;lt;/code&amp;gt;. If you'd like to include other packages from your own overlay or the OM tree just add them inseparated by spaces. After this gets added as a dependency to build the Distro (in this case OpenMoko). Now we have to re-build the task-base package. This essentially just generates an ipk file that will &amp;quot;Merge machine and distro options to create a basic machine task/package.&amp;quot; It pretty much builds a file with a list of packages to be installed that are required for the distro to work correctly. So then you just go through and make &amp;lt;code&amp;gt;openmoko-devel-image, build-qemu, flash-qemu-local,&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;run-qemu&amp;lt;/code&amp;gt;. Then calibrate your stylus, head over to the terminal, and run your application!&lt;br /&gt;
&lt;br /&gt;
=== Modifying Your local.conf ===&lt;br /&gt;
Now, go into your build config directory &amp;lt;code&amp;gt;${OMDIR}/build/conf/&amp;lt;/code&amp;gt; and now you'll be editing &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
Add this line to you &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld&amp;quot;&lt;br /&gt;
With this line you can also include other applications from the OE tree. For instance my &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; looks like this.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MACHINE = &amp;quot;fic-gta01&amp;quot;&lt;br /&gt;
DISTRO = &amp;quot;openmoko&amp;quot;&lt;br /&gt;
BUILD_ARCH = &amp;quot;i686&amp;quot;&lt;br /&gt;
SRCDATE_eds-dbus = &amp;quot;now&amp;quot;&lt;br /&gt;
DISTRO_EXTRA_RDEPENDS += &amp;quot;lua dillo myhelloworld&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that you've fixed your &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; it's time to go through all the necessary tasks to add and re-build you image and have your sweet package included.&lt;br /&gt;
&lt;br /&gt;
=== Building ===&lt;br /&gt;
Now come the easy part thanks to [[MokoMakefile]]. &lt;br /&gt;
&lt;br /&gt;
  make rebuild-package-task-base&lt;br /&gt;
  make openmoko-devel-image&lt;br /&gt;
  make build-qemu&lt;br /&gt;
  make flash-qemu-local&lt;br /&gt;
&lt;br /&gt;
Now all you have to do is run qemu.&lt;br /&gt;
  make run-qemu&lt;br /&gt;
&lt;br /&gt;
From here after you calibrate your stylus, you click on the Menu in the top right, click down to terminal, then just run your program.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@fic-gta02:/$ myhelloworld&lt;br /&gt;
Ello Poppet!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Adding Python scripts as applications==&lt;br /&gt;
This is for adding python scripts/packages to the image for your own use.&lt;br /&gt;
===First steps===&lt;br /&gt;
First, you need to modify the &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; file as described above. You need to modify &lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld&amp;quot;&lt;br /&gt;
to&lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld python&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--[[User:Xkr47|xkr47]] 18:21, 11 August 2007 (CEST) Hmm surely the new line should be DISTRO_EXTRA_RDEPENDS += &amp;quot;pyhelloworld python&amp;quot; instead since the package we create below is pyhelloworld..&lt;br /&gt;
&lt;br /&gt;
This is because python is not included by default in the openmoko image. Or you can use &amp;lt;code&amp;gt;python-pygtk2&amp;lt;/code&amp;gt; if you wish.&lt;br /&gt;
&lt;br /&gt;
Next, you need to perform these actions from the &amp;lt;code&amp;gt;$OMDIR/local&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
  mkdir packages/pyhelloworld packages/pyhelloworld/files&lt;br /&gt;
&lt;br /&gt;
  touch packages/pyhelloworld/files/pyhello packages/pyhelloworld/README.txt&lt;br /&gt;
&lt;br /&gt;
  touch packages/pyhelloworld/pyhelloworld.bb&lt;br /&gt;
&lt;br /&gt;
===Filling in the files===&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;packages/pyhelloworld/files/pyhello&amp;lt;/code&amp;gt; to contain:&lt;br /&gt;
&amp;lt;pre&amp;gt;  &lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;hello world!&amp;quot;&lt;br /&gt;
print &amp;quot;shutting down now. Farewell oh cruel, cruel world!&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
Next up, is editing &amp;lt;code&amp;gt;packages/pyhelloworld/files/README.txt&amp;lt;/code&amp;gt; to say:&lt;br /&gt;
&lt;br /&gt;
  This is the most awesome helloworld application ever. Know why? It has SNAKES!&lt;br /&gt;
&lt;br /&gt;
Kidding aside, next is the all important &amp;lt;code&amp;gt; packages/pyhelloworld/pyhelloworld.bb:&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;A pythonic hello world application&amp;quot;&lt;br /&gt;
AUTHOR = &amp;quot;Tyler Laing&amp;quot;&lt;br /&gt;
HOMEPAGE = &amp;quot;&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;console/applications&amp;quot;&lt;br /&gt;
PRIORITY = &amp;quot;optional&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;MIT&amp;quot;&lt;br /&gt;
#DEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RDEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RRECOMMENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RCONFLICTS = &amp;quot;&amp;quot;&lt;br /&gt;
#SRCDATE = &amp;quot;20070729&amp;quot;&lt;br /&gt;
#PV = &amp;quot;0.1&amp;quot;&lt;br /&gt;
#PR = &amp;quot;r0&amp;quot;&lt;br /&gt;
SRC_URI = &amp;quot;file://pyhello \&lt;br /&gt;
          file://README.txt &amp;quot;&lt;br /&gt;
&lt;br /&gt;
S = &amp;quot;${WORKDIR}/pyhelloworld/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
do_install() {&lt;br /&gt;
        install -m 0755 -d ${D}${bindir} ${D}${docdir}/pyhelloworld&lt;br /&gt;
        install -m 0755 ${WORKDIR}/pyhello ${D}${bindir}&lt;br /&gt;
        install -m 0644 ${WORKDIR}/README.txt ${D}${docdir}/pyhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I'll explain each of the parts right here, for future reference.&lt;br /&gt;
&lt;br /&gt;
====Meanings of variables in .bb files====&lt;br /&gt;
&lt;br /&gt;
  $WORKDIR = $OMDIR/local/packages/&amp;lt;application directory&amp;gt;&lt;br /&gt;
  $bindir  = $OMDIR/build/tmp/work/armv4t-linux/&amp;lt;application directory&amp;gt;/image/usr/bin&lt;br /&gt;
  $docir   = $OMDIR/build/tmp/work/armv4t-linux/&amp;lt;application directory&amp;gt;/image/usr/share/doc&lt;br /&gt;
  $D       = $OMDIR/build/&lt;br /&gt;
&lt;br /&gt;
====Final steps====&lt;br /&gt;
Complete the last steps as per the above instructions, from the point of altering &amp;lt;code&amp;gt;DISTRO_EXTRA_RDEPENDS&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
And your done!&lt;br /&gt;
&lt;br /&gt;
[[Category:Applications]]&lt;br /&gt;
[[Category:OpenMoko]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Customizing_the_Openmoko_Distribution</id>
		<title>Customizing the Openmoko Distribution</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Customizing_the_Openmoko_Distribution"/>
				<updated>2007-08-29T17:28:46Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* Setting Up a Local Overlay */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== What's the goal? ==&lt;br /&gt;
&lt;br /&gt;
The goal of this page is to teach you how to take an application that you've coded (or the sample app) and properly get it included in your rootfs. This article is a bit of an aggregate page, it's going to take information from [[MokoMakefile]], [[User:CesarB/Using a local overlay|Using a local overlay]], [[Building a hello world application]], and [[Create a package from existing sources]]. So as you can see the goal is for it to be a very thorough introduction, and will take you from &amp;quot;Idea to Inclusion&amp;quot; of your application.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Setting Up the OpenMoko Environment ==&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; &lt;br /&gt;
 |*If you already have the environment setup then it is imperative that you update your Makefile.&lt;br /&gt;
Do this by running:&lt;br /&gt;
&amp;lt;pre&amp;gt;make update-makefile&amp;lt;/pre&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This part of the tutorial is going to be pretty basic. I absolutely love [[MokoMakefile]], it's fantastic, the creator has done and continues to do a fantastic job with this. I see absolutely no reason not to use it I put my OpenMoko development directory in /home/bryce/mokodev/ and that works great for me. You can feel free to do the same or put it anywhere else in your user directory (or anywhere on your system if you're feeling daring and a little nutty).&lt;br /&gt;
&lt;br /&gt;
To get your environment setup please get it setup according to [[MokoMakefile]] however if you do have the build environment setup manually and you're sure you know what you're doing then feel free to go forward with this.&lt;br /&gt;
&lt;br /&gt;
== Setting Up a Local Overlay ==&lt;br /&gt;
If you're at the point for setting up a local overlay this means a couple things. First: You've had a brilliant idea for an application that you just need to have on the OpenMoko platform. Second: You realize that this killer app of yours needs to be done properly and you're not going to do anything silly like include it in the actual tree for the OpenMoko distro because it would probably end up just getting overwritten eventually, or you just realize that it's bad practice!&lt;br /&gt;
&lt;br /&gt;
If you're wondering why and what a local overlay is then let me take this time to explain it to you. A local overlay is where you, as a developer keep your local files in an OE style setup so that you can simply pull your updated code into the tree. You add your overlay tree into the bitbake setup so that when you call bitbake it will pull your own or your customized packages before going to the OE or OpenMoko trees.This keeps everything nice and organized for you and also allows you to build/rebuild/include you apps by using the [[MokoMakefile]]&lt;br /&gt;
&lt;br /&gt;
Thank you to [[User:CesarB]] for this part of the wiki.&lt;br /&gt;
&lt;br /&gt;
To create a local overlay:&lt;br /&gt;
&lt;br /&gt;
* Create a &amp;quot;local&amp;quot; directory and its subdirectories&lt;br /&gt;
&lt;br /&gt;
 mkdir local local/conf local/classes local/packages local/packages/images local/packages/tasks&lt;br /&gt;
&lt;br /&gt;
* Copy &amp;lt;code&amp;gt;site.conf&amp;lt;/code&amp;gt; from the openmoko tree to &amp;lt;code&amp;gt;local/conf&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 cp oe/conf/site.conf local/conf/site.conf&lt;br /&gt;
&lt;br /&gt;
* Edit the site.conf you copied to add the new tree as a source for bitbake recipes.&lt;br /&gt;
&lt;br /&gt;
Change the current &amp;lt;code&amp;gt;BBFILES&amp;lt;/code&amp;gt; to look like this:&lt;br /&gt;
 BBFILES := &amp;quot;${OMDIR}/openembedded/packages/*/*.bb ${OMDIR}/oe/packages/*/*.bb ${OMDIR}/local/packages/*/*.bb&amp;quot;&lt;br /&gt;
Change your &amp;lt;code&amp;gt;BBFILE_COLLECTIONS&amp;lt;/code&amp;gt; line to look like this:&lt;br /&gt;
 BBFILE_COLLECTIONS = &amp;quot;upstream local overlay&amp;quot;&lt;br /&gt;
Add this line:&lt;br /&gt;
 BBFILE_PATTERN_overlay = &amp;quot;^${OMDIR}/local/&amp;quot;&lt;br /&gt;
Add this line:&lt;br /&gt;
 BBFILE_PRIORITY_overlay = &amp;quot;20&amp;quot;&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;BBFILE_PRIORITY&amp;lt;/code&amp;gt; should be greater than all the other &amp;lt;code&amp;gt;BBFILE_PRIORITY&amp;lt;/code&amp;gt; variables on the same file.&lt;br /&gt;
&lt;br /&gt;
* Change your &amp;lt;code&amp;gt;BBPATH&amp;lt;/code&amp;gt; environment variable to add the new tree ''before'' the two others in your &amp;lt;code&amp;gt;setup-env&amp;lt;/code&amp;gt; file.&amp;lt;code&amp;gt;setup-env&amp;lt;/code&amp;gt; is created by [[MokoMakefile]] automatically and is located in your &amp;lt;code&amp;gt;${OMDIR}&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
 export BBPATH=&amp;quot;${OMDIR}/build:${OMDIR}/local:${OMDIR}/oe:${OMDIR}/openembedded&amp;quot;&lt;br /&gt;
&lt;br /&gt;
== Using Your New Local Overlay ==&lt;br /&gt;
&lt;br /&gt;
=== Changing files in conf/ ===&lt;br /&gt;
&lt;br /&gt;
To change a file in conf/, just copy the file to the overlay tree (preserving the directory structure) and edit it.&lt;br /&gt;
&lt;br /&gt;
=== Changing files in classes/ ===&lt;br /&gt;
&lt;br /&gt;
To change a file in classes/, just copy the file to the overlay tree and edit it.&lt;br /&gt;
&lt;br /&gt;
=== Changing packages ===&lt;br /&gt;
&lt;br /&gt;
Changing a package's recipe is a bit more complex. You have to copy over (or symlink) not only the .bb file for the package, but also ''all'' the files it includes with &amp;lt;code&amp;gt;require&amp;lt;/code&amp;gt;, and the &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt; directories (all directories referred to by &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt;, usually named either ''package''-''version'' or &amp;lt;code&amp;gt;files&amp;lt;/code&amp;gt;). If you forget one of them, the build will give an error (either when parsing the recipe in the case of &amp;lt;code&amp;gt;require&amp;lt;/code&amp;gt;, or when trying to build in the case of the &amp;lt;code&amp;gt;FILESDIR&amp;lt;/code&amp;gt; directories).&lt;br /&gt;
&lt;br /&gt;
=== Adding a new package ===&lt;br /&gt;
&lt;br /&gt;
You can add a new package (or a recipe for a new version of a package) to the overlay tree simply by creating it on the overlay tree.&lt;br /&gt;
&lt;br /&gt;
== Your First Application ==&lt;br /&gt;
&lt;br /&gt;
I know that I said I'd have a GDK application in here, however, I'd really like to get this whole course done first and have you guys starting to code instead of just looking at what I've written!&lt;br /&gt;
&lt;br /&gt;
This will be a very simple CLI hello world.&lt;br /&gt;
&lt;br /&gt;
=== Before We Code ===&lt;br /&gt;
&lt;br /&gt;
Like a good coder you want to make sure that you're not just doing things, but that you're doing them the right way! &lt;br /&gt;
&lt;br /&gt;
Now change directories into your &amp;lt;code&amp;gt;local/packages&amp;lt;/code&amp;gt; directory.The following commands expect you'll be in that directory so don't change unless you know what you're doing!&lt;br /&gt;
&lt;br /&gt;
You'll want to make a directory with the name of your application, and a subdirectory called files.&lt;br /&gt;
  mkdir myhelloworld myhelloworld/files&lt;br /&gt;
Now you'll want to create two files in the &amp;lt;code&amp;gt;files&amp;lt;/code&amp;gt; directory&lt;br /&gt;
  touch myhelloworld/files/README.txt myhelloworld/files/myhelloworld.c&lt;br /&gt;
And finally you'll want to create a bitbake file.&lt;br /&gt;
  touch myhelloworld/myhelloworld.bb&lt;br /&gt;
&lt;br /&gt;
Alrighty now all your necessary files are created so lets go over this real quick.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$HOME&lt;br /&gt;
 +- $OMDIR (contains the official openmoko tree)&lt;br /&gt;
 |  +- local/&lt;br /&gt;
 |     +- packages/&lt;br /&gt;
 |        +- myhelloworld/&lt;br /&gt;
 |           +- myhelloworld.bb&lt;br /&gt;
 |           +- files/&lt;br /&gt;
 |              +- myhelloworld.c&lt;br /&gt;
 |              +- README.txt&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
That should be your structure, if it's not you should go and fix it up.&lt;br /&gt;
=== Filling the Files ===&lt;br /&gt;
&lt;br /&gt;
So you've got your sample files all laid out now it's time to make them actually do something.&lt;br /&gt;
&lt;br /&gt;
myhelloworld.c&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdio.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
int main(int argc, char** argv)&lt;br /&gt;
{&lt;br /&gt;
        printf(&amp;quot;Ello Poppet!\n&amp;quot;);&lt;br /&gt;
        return 0;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
README.txt&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
This is a command line application. It prints a simple Hello World! To stdout.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
myhelloworld.bb&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;A killer hello world application&amp;quot;&lt;br /&gt;
AUTHOR = &amp;quot;Bryce Leo&amp;quot;&lt;br /&gt;
HOMEPAGE = &amp;quot;&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;console/applications&amp;quot;&lt;br /&gt;
PRIORITY = &amp;quot;optional&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;MIT&amp;quot;&lt;br /&gt;
#DEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RDEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RRECOMMENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RCONFLICTS = &amp;quot;&amp;quot;&lt;br /&gt;
#SRCDATE = &amp;quot;20070729&amp;quot;&lt;br /&gt;
#PV = &amp;quot;0.1&amp;quot;&lt;br /&gt;
#PR = &amp;quot;r0&amp;quot;&lt;br /&gt;
SRC_URI = &amp;quot;file://myhelloworld.c \&lt;br /&gt;
          file://README.txt &amp;quot;&lt;br /&gt;
&lt;br /&gt;
S = &amp;quot;${WORKDIR}/myhelloworld/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
do_compile() {&lt;br /&gt;
        ${CC} ${CFLAGS} ${LDFLAGS} ${WORKDIR}/myhelloworld.c -o myhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
do_install() {&lt;br /&gt;
        install -m 0755 -d ${D}${bindir} ${D}${docdir}/myhelloworld&lt;br /&gt;
        install -m 0755 ${S}/myhelloworld ${D}${bindir}&lt;br /&gt;
        install -m 0644 ${WORKDIR}/README.txt ${D}${docdir}/myhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Your First Compilation ===&lt;br /&gt;
&lt;br /&gt;
This is where the [[MokoMakefile]] comes in very very handy. Change to your ${OMDIR} directory, You'll know it by the fact that it is where &amp;lt;code&amp;gt;Makefile&amp;lt;/code&amp;gt; resides.&lt;br /&gt;
 make build-package-myhelloworld&lt;br /&gt;
&lt;br /&gt;
(make sure you run make openmoko-devel-image at least once before building your own packages)&lt;br /&gt;
&lt;br /&gt;
This should all come back and not return any error messages, The output should end in something similar to&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
NOTE: package myhelloworld-1.0: completed&lt;br /&gt;
NOTE: build 200707291926: completed&lt;br /&gt;
Build statistics:&lt;br /&gt;
  Attempted builds: 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that no errors were thrown we are happily done!&lt;br /&gt;
&lt;br /&gt;
== Adding Your Application to the Image ==&lt;br /&gt;
&lt;br /&gt;
So you've had an idea, you've setup the build environment, you've setup your local overlay, you've laid out your application tree, you've put code into those fantastic files of yours and now it compiles.There's only one thing left to do. Add that application to your image.&lt;br /&gt;
&lt;br /&gt;
Now lets go over in words and whys what we're about to do. First we need to make modify the &amp;lt;code&amp;gt;${OMDIR}/build/conf/local.conf&amp;lt;/code&amp;gt;. We add in the variable &amp;lt;code&amp;gt;DISTRO_EXTRA_RDEPENDS&amp;lt;/code&amp;gt; and set its value to include &amp;lt;code&amp;gt;myhelloworld&amp;lt;/code&amp;gt;. If you'd like to include other packages from your own overlay or the OM tree just add them inseparated by spaces. After this gets added as a dependency to build the Distro (in this case OpenMoko). Now we have to re-build the task-base package. This essentially just generates an ipk file that will &amp;quot;Merge machine and distro options to create a basic machine task/package.&amp;quot; It pretty much builds a file with a list of packages to be installed that are required for the distro to work correctly. So then you just go through and make &amp;lt;code&amp;gt;openmoko-devel-image, build-qemu, flash-qemu-local,&amp;lt;/code&amp;gt; and &amp;lt;code&amp;gt;run-qemu&amp;lt;/code&amp;gt;. Then calibrate your stylus, head over to the terminal, and run your application!&lt;br /&gt;
&lt;br /&gt;
=== Modifying Your local.conf ===&lt;br /&gt;
Now, go into your build config directory &amp;lt;code&amp;gt;${OMDIR}/build/conf/&amp;lt;/code&amp;gt; and now you'll be editing &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
Add this line to you &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt;&lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld&amp;quot;&lt;br /&gt;
With this line you can also include other applications from the OE tree. For instance my &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; looks like this.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MACHINE = &amp;quot;fic-gta01&amp;quot;&lt;br /&gt;
DISTRO = &amp;quot;openmoko&amp;quot;&lt;br /&gt;
BUILD_ARCH = &amp;quot;i686&amp;quot;&lt;br /&gt;
SRCDATE_eds-dbus = &amp;quot;now&amp;quot;&lt;br /&gt;
DISTRO_EXTRA_RDEPENDS += &amp;quot;lua dillo myhelloworld&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now that you've fixed your &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; it's time to go through all the necessary tasks to add and re-build you image and have your sweet package included.&lt;br /&gt;
&lt;br /&gt;
=== Building ===&lt;br /&gt;
Now come the easy part thanks to [[MokoMakefile]]. &lt;br /&gt;
&lt;br /&gt;
  make rebuild-package-task-base&lt;br /&gt;
  make openmoko-devel-image&lt;br /&gt;
  make build-qemu&lt;br /&gt;
  make flash-qemu-local&lt;br /&gt;
&lt;br /&gt;
Now all you have to do is run qemu.&lt;br /&gt;
  make run-qemu&lt;br /&gt;
&lt;br /&gt;
From here after you calibrate your stylus, you click on the Menu in the top right, click down to terminal, then just run your program.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@fic-gta02:/$ myhelloworld&lt;br /&gt;
Ello Poppet!&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Adding Python scripts as applications==&lt;br /&gt;
This is for adding python scripts/packages to the image for your own use.&lt;br /&gt;
===First steps===&lt;br /&gt;
First, you need to modify the &amp;lt;code&amp;gt;local.conf&amp;lt;/code&amp;gt; file as described above. You need to modify &lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld&amp;quot;&lt;br /&gt;
to&lt;br /&gt;
  DISTRO_EXTRA_RDEPENDS += &amp;quot;myhelloworld python&amp;quot;&lt;br /&gt;
&lt;br /&gt;
--[[User:Xkr47|xkr47]] 18:21, 11 August 2007 (CEST) Hmm surely the new line should be DISTRO_EXTRA_RDEPENDS += &amp;quot;pyhelloworld python&amp;quot; instead since the package we create below is pyhelloworld..&lt;br /&gt;
&lt;br /&gt;
This is because python is not included by default in the openmoko image. Or you can use &amp;lt;code&amp;gt;python-pygtk2&amp;lt;/code&amp;gt; if you wish.&lt;br /&gt;
&lt;br /&gt;
Next, you need to perform these actions from the &amp;lt;code&amp;gt;$OMDIR/local&amp;lt;/code&amp;gt; directory.&lt;br /&gt;
&lt;br /&gt;
  mkdir packages/pyhelloworld packages/pyhelloworld/files&lt;br /&gt;
&lt;br /&gt;
  touch packages/pyhelloworld/files/pyhello packages/pyhelloworld/README.txt&lt;br /&gt;
&lt;br /&gt;
  touch packages/pyhelloworld/pyhelloworld.bb&lt;br /&gt;
&lt;br /&gt;
===Filling in the files===&lt;br /&gt;
Now, edit &amp;lt;code&amp;gt;packages/pyhelloworld/files/pyhello&amp;lt;/code&amp;gt; to contain:&lt;br /&gt;
&amp;lt;pre&amp;gt;  &lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;hello world!&amp;quot;&lt;br /&gt;
print &amp;quot;shutting down now. Farewell oh cruel, cruel world!&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
Next up, is editing &amp;lt;code&amp;gt;packages/pyhelloworld/files/README.txt&amp;lt;/code&amp;gt; to say:&lt;br /&gt;
&lt;br /&gt;
  This is the most awesome helloworld application ever. Know why? It has SNAKES!&lt;br /&gt;
&lt;br /&gt;
Kidding aside, next is the all important &amp;lt;code&amp;gt; packages/pyhelloworld/pyhelloworld.bb:&amp;lt;/code&amp;gt;&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DESCRIPTION = &amp;quot;A pythonic hello world application&amp;quot;&lt;br /&gt;
AUTHOR = &amp;quot;Tyler Laing&amp;quot;&lt;br /&gt;
HOMEPAGE = &amp;quot;&amp;quot;&lt;br /&gt;
SECTION = &amp;quot;console/applications&amp;quot;&lt;br /&gt;
PRIORITY = &amp;quot;optional&amp;quot;&lt;br /&gt;
LICENSE = &amp;quot;MIT&amp;quot;&lt;br /&gt;
#DEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RDEPENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RRECOMMENDS = &amp;quot;&amp;quot;&lt;br /&gt;
#RCONFLICTS = &amp;quot;&amp;quot;&lt;br /&gt;
#SRCDATE = &amp;quot;20070729&amp;quot;&lt;br /&gt;
#PV = &amp;quot;0.1&amp;quot;&lt;br /&gt;
#PR = &amp;quot;r0&amp;quot;&lt;br /&gt;
SRC_URI = &amp;quot;file://pyhello \&lt;br /&gt;
          file://README.txt &amp;quot;&lt;br /&gt;
&lt;br /&gt;
S = &amp;quot;${WORKDIR}/pyhelloworld/&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
do_install() {&lt;br /&gt;
        install -m 0755 -d ${D}${bindir} ${D}${docdir}/pyhelloworld&lt;br /&gt;
        install -m 0755 ${WORKDIR}/pyhello ${D}${bindir}&lt;br /&gt;
        install -m 0644 ${WORKDIR}/README.txt ${D}${docdir}/pyhelloworld&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
I'll explain each of the parts right here, for future reference.&lt;br /&gt;
&lt;br /&gt;
====Meanings of variables in .bb files====&lt;br /&gt;
&lt;br /&gt;
  $WORKDIR = $OMDIR/local/packages/&amp;lt;application directory&amp;gt;&lt;br /&gt;
  $bindir  = $OMDIR/build/tmp/work/armv4t-linux/&amp;lt;application directory&amp;gt;/image/usr/bin&lt;br /&gt;
  $docir   = $OMDIR/build/tmp/work/armv4t-linux/&amp;lt;application directory&amp;gt;/image/usr/share/doc&lt;br /&gt;
  $D       = $OMDIR/build/&lt;br /&gt;
&lt;br /&gt;
====Final steps====&lt;br /&gt;
Complete the last steps as per the above instructions, from the point of altering &amp;lt;code&amp;gt;DISTRO_EXTRA_RDEPENDS&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
And your done!&lt;br /&gt;
&lt;br /&gt;
[[Category:Applications]]&lt;br /&gt;
[[Category:OpenMoko]]&lt;br /&gt;
[[Category:Developer]]&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/USB_Networking</id>
		<title>USB Networking</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/USB_Networking"/>
				<updated>2007-08-27T20:26:26Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* Proxying DNS requests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Neo1973 side =&lt;br /&gt;
&lt;br /&gt;
By default Neo1973 has usb0 interface working due to Ethernet gadget (g_ether) compiled into kernel.&lt;br /&gt;
&lt;br /&gt;
On the Neo, if you want to reach out to the internets using full qualified hostnames, you need to define your DNS server. Create a file /etc/resolv.conf with at least one line saying&lt;br /&gt;
&lt;br /&gt;
 nameserver xxx.xxx.xxx.xxx&lt;br /&gt;
&lt;br /&gt;
e.g. nameserver 192.168.1.1&lt;br /&gt;
&lt;br /&gt;
Then you can also easily update your 2007.2 OpenMoko packages with &amp;quot;ipkg update &amp;amp;&amp;amp; ipkg upgrade&amp;quot; on the Neo.&lt;br /&gt;
&lt;br /&gt;
= Desktop side =&lt;br /&gt;
&lt;br /&gt;
== Manual method ==&lt;br /&gt;
&lt;br /&gt;
With the device connected, modprobe usbnet module and configure usb0 interface (as root):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ifconfig usb0 192.168.0.200 netmask 255.255.255.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If your eth0 interface is also in the same 'range' (e.g. 192.168.0.105) then you can do the following:&lt;br /&gt;
&lt;br /&gt;
1. ping the Neo with&lt;br /&gt;
 # ping -I usb0 192.168.0.202&lt;br /&gt;
2. add a route to your Neo:&lt;br /&gt;
 # /sbin/route add -host 192.168.0.202/32 dev usb0&lt;br /&gt;
3 log in to the Neo&lt;br /&gt;
 # ssh root@192.168.0.202&lt;br /&gt;
&lt;br /&gt;
If you don't have the necessary modules to get usb0 going, make sure you have the following kernel options enabled:&lt;br /&gt;
* CONFIG_USB_USBNET&lt;br /&gt;
* CONFIG_USB_NET_CDCETHER&lt;br /&gt;
Both options are available in the Device Drivers -&amp;gt; USB support -&amp;gt; USB Network Adapters. For more info see the [http://www.linux-usb.org/usbnet/ usbnet driver homepage].&lt;br /&gt;
&lt;br /&gt;
== Automatic method ==&lt;br /&gt;
&lt;br /&gt;
Took from [http://blog.haerwu.biz/2007/03/22/hotpluging-usbnet/ Hotplugging usbnet] post by Marcin 'Hrw' Juszkiewicz.&lt;br /&gt;
&lt;br /&gt;
'''For Debian or similar distros:'''&lt;br /&gt;
Edit /etc/network/interfaces file ():&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow-hotplug usb0&lt;br /&gt;
iface usb0 inet static&lt;br /&gt;
        address 192.168.0.200&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 192.168.0.0&lt;br /&gt;
        post-up iptables -A POSTROUTING -t nat -j MASQUERADE -s 192.168.0.0/24&lt;br /&gt;
        post-up echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        post-up iptables -P FORWARD ACCEPT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are doing the echo 1 &amp;gt; /proc/... command manually, sudo may not be enough, then you will have to execute it from a sudo bash.&lt;br /&gt;
&lt;br /&gt;
Ubuntu feisty appears to have a bug where ifdown is not run when the interface is unplugged, meaning this only works once&lt;br /&gt;
after the system is booted.&lt;br /&gt;
One can patch /etc/udev/rules.d/85-ifupdown.rules, adding a last line:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;net&amp;quot;, ACTION==&amp;quot;remove&amp;quot;,             RUN+=&amp;quot;/sbin/start-stop-daemon --start --background --pidfile /var/run/network/bogus --startas /sbin/ifdown -- --allow auto $env{INTERFACE}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
and remove the similar remove like earlier.&lt;br /&gt;
&lt;br /&gt;
'''For Red Hat or similar distros'''&lt;br /&gt;
Edit /etc/sysconfig/network-scripts/net.hotplug:&lt;br /&gt;
&lt;br /&gt;
After this statement:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    case $INTERFACE in&lt;br /&gt;
	# interfaces that are registered after being &amp;quot;up&amp;quot; (?)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	usb0)&lt;br /&gt;
		ifconfig usb0 192.168.0.200 netmask 255.255.255.0&lt;br /&gt;
		route add 192.168.0.202 usb0&lt;br /&gt;
		iptables -I INPUT 1 -s 192.168.0.202 -j ACCEPT&lt;br /&gt;
		iptables -I OUTPUT 1 -s 192.168.0.200 -j ACCEPT&lt;br /&gt;
		exit 0&lt;br /&gt;
	;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''For Gentoo or similar distros:''' &lt;br /&gt;
&lt;br /&gt;
* Edit /etc/conf.d/net by adding:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   # Neo1973&lt;br /&gt;
   config_usb0=( &amp;quot;192.168.0.200 netmask 255.255.255.0&amp;quot; )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Create a new init script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   # cd /etc/init.d&lt;br /&gt;
   # ln -s net.lo net.usb0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And now when you connect phone (which has 192.168.0.202 IP) it gets connection to world automatically.&lt;br /&gt;
&lt;br /&gt;
'''For MacOS X:'''&lt;br /&gt;
&lt;br /&gt;
there are no files to edit since hotplugging configuration is done automatically by default. Of course, the interface has been initialized once. Install the AJZaurusUSB driver as described on [[MacOS_X]] and then open System Preferences / Networks which will show the new interface. Configure for Manual DHC with Host address 192.168.0.200 and Gateway 192.168.0.202.&lt;br /&gt;
&lt;br /&gt;
= Mobile development  =&lt;br /&gt;
&lt;br /&gt;
== Proxying DNS requests ==&lt;br /&gt;
&lt;br /&gt;
If, like me, you move about quite a lot, connecting to various networks as you go and getting your ip via dhcp, you'll probably be annoyed at having to constantly update your resolv.conf on the Neo 1973.&lt;br /&gt;
&lt;br /&gt;
To get round this, as part of my setup script, I run a proxy dns on the ip address the neo comes in on at the usb0 port. This means that my Neo /etc/resolv.conf only contains &lt;br /&gt;
&lt;br /&gt;
 nameserver 192.168.0.200 &lt;br /&gt;
&lt;br /&gt;
and my laptop will proxy all dns requests based on it's own /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
'''note that we only run the dns proxy on the usb0 interface so that we don't break any other networking'''&lt;br /&gt;
&lt;br /&gt;
The script is designed to use [http://dnrd.sourceforge.net/ dnrd] as the dns proxy. The [http://buildhost.automated.it/gta01 script] and a copy of [http://buildhost.automated.it/dnrd-2.20.3.tar.gz dnrd] are available from my site. The script also performs the initial setup of the connection as per the [[USB_Networking#Manual_method]] above.&lt;br /&gt;
&lt;br /&gt;
= Connecting to phone =&lt;br /&gt;
&lt;br /&gt;
Then &amp;lt;tt&amp;gt;ssh root@192.168.0.202&amp;lt;/tt&amp;gt; with empty password to get into phone.&lt;br /&gt;
&lt;br /&gt;
NOTE: the ssh daemon (dropbear 0.49) on the OpenMoko appears to have a bug when sending the exit status back to the client. From time to time you receive an exit status of 255.&lt;br /&gt;
&lt;br /&gt;
===SSH Extras===&lt;br /&gt;
&lt;br /&gt;
If you get fed up with typing root@192.168.0.202, on your PC edit /etc/hosts and add an entry for 'phone'&lt;br /&gt;
&lt;br /&gt;
 192.168.0.202 phone&lt;br /&gt;
&lt;br /&gt;
then edit ~/.ssh/config (or create it) and add&lt;br /&gt;
&lt;br /&gt;
 host phone&lt;br /&gt;
 user root&lt;br /&gt;
&lt;br /&gt;
then all you need to do is type &lt;br /&gt;
&lt;br /&gt;
 # ssh phone&lt;br /&gt;
&lt;br /&gt;
You might want to use keys to bypass the login prompt too.&lt;br /&gt;
&lt;br /&gt;
===SSH Keys===&lt;br /&gt;
====From host to phone====&lt;br /&gt;
&lt;br /&gt;
To generate ssh keys for use as a login mechanism type&lt;br /&gt;
&lt;br /&gt;
 ssh-keygen -t rsa&lt;br /&gt;
&lt;br /&gt;
when prompted for a password either hit enter for no password (''not really a good idea'') or enter a password for this key. ssh into the phone and create ~/.ssh&lt;br /&gt;
&lt;br /&gt;
 # mkdir ~/.ssh&lt;br /&gt;
&lt;br /&gt;
then from your PC copy the '''.pub''' file to the phone.&lt;br /&gt;
&lt;br /&gt;
 # scp ~/.ssh/id_rsa.pub phone:.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
You should now be able to ssh directly into the phone.&lt;br /&gt;
&lt;br /&gt;
To disable password logins ('''after setting up key access''') edit /etc/init.d/dropbear and change the following line:&lt;br /&gt;
&lt;br /&gt;
 DROPBEAR_EXTRA_ARGS=&lt;br /&gt;
&lt;br /&gt;
to &lt;br /&gt;
&lt;br /&gt;
 DROPBEAR_EXTRA_ARGS=&amp;quot;-s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You will need to restart dropbear for this to take effect.&lt;br /&gt;
&lt;br /&gt;
====From phone to host====&lt;br /&gt;
Generate the key&lt;br /&gt;
&lt;br /&gt;
  dropbearkey -t rsa -f id_rsa&lt;br /&gt;
&lt;br /&gt;
The output will look something like this:&lt;br /&gt;
&lt;br /&gt;
  Will output 1024 bit rsa secret key to 'id_rsa'&lt;br /&gt;
  Generating key, this may take a while...&lt;br /&gt;
  Public key portion is:&lt;br /&gt;
  ssh-rsa AAAAB3Nza[...]&lt;br /&gt;
  Fingerprint: md5 ca:e8:f0:b7:f6:7b:c2:b6:b9:71:e4:45:86:a9:ff:b8&lt;br /&gt;
&lt;br /&gt;
Copy and paste the one line (in this example, starting with 'ssh-rsa' onto the end of the host's authorized_keys file (often in ~/.ssh/).&lt;br /&gt;
&lt;br /&gt;
From the phone, ssh with -i:&lt;br /&gt;
&lt;br /&gt;
  ssh -i id_rsa user@host&lt;br /&gt;
&lt;br /&gt;
This works for me.  I ripped off these instructions from: [[http://forum.openwrt.org/viewtopic.php?pid=53705]]&lt;br /&gt;
&lt;br /&gt;
===GUI on desktop through SSH===&lt;br /&gt;
&lt;br /&gt;
If you need to get the GUI on the phone onto the desktop via usb, you can use ssh as follows&lt;br /&gt;
&lt;br /&gt;
  ssh -l root -X -v 192.168.0.202&lt;br /&gt;
&lt;br /&gt;
Login, and run openmoko-finger-demo for example, and it will open up on the desktop. To get landscape view, just resize the GUI window on the desktop.&lt;br /&gt;
&lt;br /&gt;
===Remote apps on neo===&lt;br /&gt;
&lt;br /&gt;
To get desktop apps to show up on your neo, first log in to the phone&lt;br /&gt;
&lt;br /&gt;
  ssh -l root 192.168.0.202&lt;br /&gt;
&lt;br /&gt;
Then once inside, run:&lt;br /&gt;
&lt;br /&gt;
  DISPLAY=:0 xhost +192.168.0.200&lt;br /&gt;
&lt;br /&gt;
After this you can close the ssh session. Back on the desktop computer, run:&lt;br /&gt;
&lt;br /&gt;
  DISPLAY=moko:0 xclock&lt;br /&gt;
&lt;br /&gt;
Note that the xhost command will allow remote applications on 192.168.0.200 to access the X server. It will allow anyone on the desktop machine to access the X server of the neo, including snooping anything you type on it. To disallow remote applications again, run this in the neo:&lt;br /&gt;
&lt;br /&gt;
  DISPLAY=:0 xhost -192.168.0.200&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;bottom&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; &lt;br /&gt;
{{Languages|USB Networking}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]]&lt;br /&gt;
[[Category:Implemented]]&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Boot_sound</id>
		<title>Boot sound</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Boot_sound"/>
				<updated>2007-08-27T15:14:37Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* The Boot Sound */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The Boot Sound =&lt;br /&gt;
&lt;br /&gt;
Annoying isn't it. To stop the boot sound playing simply edit '''/etc/pulse/session'''. Look near the bottom of the file, you should see something like:&lt;br /&gt;
&lt;br /&gt;
 # Load samples&lt;br /&gt;
 load-sample startup /usr/share/openmoko/sounds/startup_openmoko.wav&lt;br /&gt;
 load-sample touchscreen /usr/share/openmoko/sounds/touchscreen_click.wav&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To disable the boot sound and/or the touchscreen tap sound simply place a # at the start of the line, ie:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 # Load samples&lt;br /&gt;
 #load-sample startup /usr/share/openmoko/sounds/startup_openmoko.wav&lt;br /&gt;
 #load-sample touchscreen /usr/share/openmoko/sounds/touchscreen_click.wav&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the sound, simply change the .wav file name to something else.&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Boot_sound</id>
		<title>Boot sound</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Boot_sound"/>
				<updated>2007-08-27T15:13:46Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* How to remove annoying boot sound */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= The Boot Sound =&lt;br /&gt;
&lt;br /&gt;
Annoying isn't it. To stop the boot sound playing simply edit '''/etc/pulse/session'''. Look neat the bottom of the file, you should see something like:&lt;br /&gt;
&lt;br /&gt;
 # Load samples&lt;br /&gt;
 load-sample startup /usr/share/openmoko/sounds/startup_openmoko.wav&lt;br /&gt;
 load-sample touchscreen /usr/share/openmoko/sounds/touchscreen_click.wav&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To disable the boot sound and/or the touchscreen tap sound simply place a # at the start of the line, ie:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 # Load samples&lt;br /&gt;
 #load-sample startup /usr/share/openmoko/sounds/startup_openmoko.wav&lt;br /&gt;
 #load-sample touchscreen /usr/share/openmoko/sounds/touchscreen_click.wav&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to change the sound, simply change the .wav file name to something else.&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/USB_Networking</id>
		<title>USB Networking</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/USB_Networking"/>
				<updated>2007-08-27T11:50:33Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* Proxying DNS requests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Neo1973 side =&lt;br /&gt;
&lt;br /&gt;
By default Neo1973 has usb0 interface working due to Ethernet gadget (g_ether) compiled into kernel.&lt;br /&gt;
&lt;br /&gt;
On the Neo, if you want to reach out to the internets using full qualified hostnames, you need to define your DNS server. Create a file /etc/resolv.conf with at least one line saying&lt;br /&gt;
&lt;br /&gt;
 nameserver xxx.xxx.xxx.xxx&lt;br /&gt;
&lt;br /&gt;
e.g. nameserver 192.168.1.1&lt;br /&gt;
&lt;br /&gt;
Then you can also easily update your 2007.2 OpenMoko packages with &amp;quot;ipkg update &amp;amp;&amp;amp; ipkg upgrade&amp;quot; on the Neo.&lt;br /&gt;
&lt;br /&gt;
= Desktop side =&lt;br /&gt;
&lt;br /&gt;
== Manual method ==&lt;br /&gt;
&lt;br /&gt;
With the device connected, modprobe usbnet module and configure usb0 interface (as root):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ifconfig usb0 192.168.0.200 netmask 255.255.255.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If your eth0 interface is also in the same 'range' (e.g. 192.168.0.105) then you can do the following:&lt;br /&gt;
&lt;br /&gt;
1. ping the Neo with&lt;br /&gt;
 # ping -I usb0 192.168.0.202&lt;br /&gt;
2. add a route to your Neo:&lt;br /&gt;
 # /sbin/route add -host 192.168.0.202/32 dev usb0&lt;br /&gt;
3 log in to the Neo&lt;br /&gt;
 # ssh root@192.168.0.202&lt;br /&gt;
&lt;br /&gt;
If you don't have the necessary modules to get usb0 going, make sure you have the following kernel options enabled:&lt;br /&gt;
* CONFIG_USB_USBNET&lt;br /&gt;
* CONFIG_USB_NET_CDCETHER&lt;br /&gt;
Both options are available in the Device Drivers -&amp;gt; USB support -&amp;gt; USB Network Adapters. For more info see the [http://www.linux-usb.org/usbnet/ usbnet driver homepage].&lt;br /&gt;
&lt;br /&gt;
== Automatic method ==&lt;br /&gt;
&lt;br /&gt;
Took from [http://blog.haerwu.biz/2007/03/22/hotpluging-usbnet/ Hotplugging usbnet] post by Marcin 'Hrw' Juszkiewicz.&lt;br /&gt;
&lt;br /&gt;
'''For Debian or similar distros:'''&lt;br /&gt;
Edit /etc/network/interfaces file ():&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow-hotplug usb0&lt;br /&gt;
iface usb0 inet static&lt;br /&gt;
        address 192.168.0.200&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 192.168.0.0&lt;br /&gt;
        post-up iptables -A POSTROUTING -t nat -j MASQUERADE -s 192.168.0.0/24&lt;br /&gt;
        post-up echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        post-up iptables -P FORWARD ACCEPT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are doing the echo 1 &amp;gt; /proc/... command manually, sudo may not be enough, then you will have to execute it from a sudo bash.&lt;br /&gt;
&lt;br /&gt;
Ubuntu feisty appears to have a bug where ifdown is not run when the interface is unplugged, meaning this only works once&lt;br /&gt;
after the system is booted.&lt;br /&gt;
One can patch /etc/udev/rules.d/85-ifupdown.rules, adding a last line:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;net&amp;quot;, ACTION==&amp;quot;remove&amp;quot;,             RUN+=&amp;quot;/sbin/start-stop-daemon --start --background --pidfile /var/run/network/bogus --startas /sbin/ifdown -- --allow auto $env{INTERFACE}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
and remove the similar remove like earlier.&lt;br /&gt;
&lt;br /&gt;
'''For Red Hat or similar distros'''&lt;br /&gt;
Edit /etc/sysconfig/network-scripts/net.hotplug:&lt;br /&gt;
&lt;br /&gt;
After this statement:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    case $INTERFACE in&lt;br /&gt;
	# interfaces that are registered after being &amp;quot;up&amp;quot; (?)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	usb0)&lt;br /&gt;
		ifconfig usb0 192.168.0.200 netmask 255.255.255.0&lt;br /&gt;
		route add 192.168.0.202 usb0&lt;br /&gt;
		iptables -I INPUT 1 -s 192.168.0.202 -j ACCEPT&lt;br /&gt;
		iptables -I OUTPUT 1 -s 192.168.0.200 -j ACCEPT&lt;br /&gt;
		exit 0&lt;br /&gt;
	;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''For Gentoo or similar distros:''' &lt;br /&gt;
&lt;br /&gt;
* Edit /etc/conf.d/net by adding:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   # Neo1973&lt;br /&gt;
   config_usb0=( &amp;quot;192.168.0.200 netmask 255.255.255.0&amp;quot; )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Create a new init script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   # cd /etc/init.d&lt;br /&gt;
   # ln -s net.lo net.usb0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And now when you connect phone (which has 192.168.0.202 IP) it gets connection to world automatically.&lt;br /&gt;
&lt;br /&gt;
'''For MacOS X:'''&lt;br /&gt;
&lt;br /&gt;
there are no files to edit since hotplugging configuration is done automatically by default. Of course, the interface has been initialized once. Install the AJZaurusUSB driver as described on [[MacOS_X]] and then open System Preferences / Networks which will show the new interface. Configure for Manual DHC with Host address 192.168.0.200 and Gateway 192.168.0.202.&lt;br /&gt;
&lt;br /&gt;
= Mobile development  =&lt;br /&gt;
&lt;br /&gt;
== Proxying DNS requests ==&lt;br /&gt;
&lt;br /&gt;
If, like me, you move about quite a lot, connecting to various networks as you go and getting your ip via dhcp, you'll probably be annoyed at having to constantly update your resolv.conf on the Neo 1973.&lt;br /&gt;
&lt;br /&gt;
To get round this, as part of my setup script, I run a proxy dns on the ip address the neo comes in on at the usb0 port. This means that my /etc/resolv.conf only contains &lt;br /&gt;
&lt;br /&gt;
 nameserver 192.168.0.200 &lt;br /&gt;
&lt;br /&gt;
and my laptop will proxy all dns requests based on it's own /etc/resolv.conf&lt;br /&gt;
&lt;br /&gt;
'''note that we only run the dns proxy on the usb0 interface so that we don't break any other networking'''&lt;br /&gt;
&lt;br /&gt;
The script is designed to use [http://dnrd.sourceforge.net/ dnrd] as the dns proxy. The [http://buildhost.automated.it/gta01 script] and a copy of [http://buildhost.automated.it/dnrd-2.20.3.tar.gz dnrd] are available from my site. The script also performs the initial setup of the connection as per the [[USB_Networking#Manual_method]] above.&lt;br /&gt;
&lt;br /&gt;
= Connecting to phone =&lt;br /&gt;
&lt;br /&gt;
Then &amp;lt;tt&amp;gt;ssh root@192.168.0.202&amp;lt;/tt&amp;gt; with empty password to get into phone.&lt;br /&gt;
&lt;br /&gt;
NOTE: the ssh daemon (dropbear 0.49) on the OpenMoko appears to have a bug when sending the exit status back to the client. From time to time you receive an exit status of 255.&lt;br /&gt;
&lt;br /&gt;
===SSH Extras===&lt;br /&gt;
&lt;br /&gt;
If you get fed up with typing root@192.168.0.202, on your PC edit /etc/hosts and add an entry for 'phone'&lt;br /&gt;
&lt;br /&gt;
 192.168.0.202 phone&lt;br /&gt;
&lt;br /&gt;
then edit ~/.ssh/config (or create it) and add&lt;br /&gt;
&lt;br /&gt;
 host phone&lt;br /&gt;
 user root&lt;br /&gt;
&lt;br /&gt;
then all you need to do is type &lt;br /&gt;
&lt;br /&gt;
 # ssh phone&lt;br /&gt;
&lt;br /&gt;
You might want to use keys to bypass the login prompt too.&lt;br /&gt;
&lt;br /&gt;
===SSH Keys===&lt;br /&gt;
====From host to phone====&lt;br /&gt;
&lt;br /&gt;
To generate ssh keys for use as a login mechanism type&lt;br /&gt;
&lt;br /&gt;
 ssh-keygen -t rsa&lt;br /&gt;
&lt;br /&gt;
when prompted for a password either hit enter for no password (''not really a good idea'') or enter a password for this key. ssh into the phone and create ~/.ssh&lt;br /&gt;
&lt;br /&gt;
 # mkdir ~/.ssh&lt;br /&gt;
&lt;br /&gt;
then from your PC copy the '''.pub''' file to the phone.&lt;br /&gt;
&lt;br /&gt;
 # scp ~/.ssh/id_rsa.pub phone:.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
You should now be able to ssh directly into the phone.&lt;br /&gt;
&lt;br /&gt;
To disable password logins ('''after setting up key access''') edit /etc/init.d/dropbear and change the following line:&lt;br /&gt;
&lt;br /&gt;
 DROPBEAR_EXTRA_ARGS=&lt;br /&gt;
&lt;br /&gt;
to &lt;br /&gt;
&lt;br /&gt;
 DROPBEAR_EXTRA_ARGS=&amp;quot;-s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You will need to restart dropbear for this to take effect.&lt;br /&gt;
&lt;br /&gt;
====From phone to host====&lt;br /&gt;
Generate the key&lt;br /&gt;
&lt;br /&gt;
  dropbearkey -t rsa -f id_rsa&lt;br /&gt;
&lt;br /&gt;
The output will look something like this:&lt;br /&gt;
&lt;br /&gt;
  Will output 1024 bit rsa secret key to 'id_rsa'&lt;br /&gt;
  Generating key, this may take a while...&lt;br /&gt;
  Public key portion is:&lt;br /&gt;
  ssh-rsa AAAAB3Nza[...]&lt;br /&gt;
  Fingerprint: md5 ca:e8:f0:b7:f6:7b:c2:b6:b9:71:e4:45:86:a9:ff:b8&lt;br /&gt;
&lt;br /&gt;
Copy and paste the one line (in this example, starting with 'ssh-rsa' onto the end of the host's authorized_keys file (often in ~/.ssh/).&lt;br /&gt;
&lt;br /&gt;
From the phone, ssh with -i:&lt;br /&gt;
&lt;br /&gt;
  ssh -i id_rsa user@host&lt;br /&gt;
&lt;br /&gt;
This works for me.  I ripped off these instructions from: [[http://forum.openwrt.org/viewtopic.php?pid=53705]]&lt;br /&gt;
&lt;br /&gt;
===GUI on desktop through SSH===&lt;br /&gt;
&lt;br /&gt;
If you need to get the GUI on the phone onto the desktop via usb, you can use ssh as follows&lt;br /&gt;
&lt;br /&gt;
  ssh -l root -X -v 192.168.0.202&lt;br /&gt;
&lt;br /&gt;
Login, and run openmoko-finger-demo for example, and it will open up on the desktop. To get landscape view, just resize the GUI window on the desktop.&lt;br /&gt;
&lt;br /&gt;
===Remote apps on neo===&lt;br /&gt;
&lt;br /&gt;
To get desktop apps to show up on your neo, first log in to the phone&lt;br /&gt;
&lt;br /&gt;
  ssh -l root 192.168.0.202&lt;br /&gt;
&lt;br /&gt;
Then once inside, run:&lt;br /&gt;
&lt;br /&gt;
  DISPLAY=:0 xhost +192.168.0.200&lt;br /&gt;
&lt;br /&gt;
After this you can close the ssh session. Back on the desktop computer, run:&lt;br /&gt;
&lt;br /&gt;
  DISPLAY=moko:0 xclock&lt;br /&gt;
&lt;br /&gt;
Note that the xhost command will allow remote applications on 192.168.0.200 to access the X server. It will allow anyone on the desktop machine to access the X server of the neo, including snooping anything you type on it. To disallow remote applications again, run this in the neo:&lt;br /&gt;
&lt;br /&gt;
  DISPLAY=:0 xhost -192.168.0.200&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;bottom&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; &lt;br /&gt;
{{Languages|USB Networking}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]]&lt;br /&gt;
[[Category:Implemented]]&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/USB_Networking</id>
		<title>USB Networking</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/USB_Networking"/>
				<updated>2007-08-27T11:45:56Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* Proxying DNS requests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Neo1973 side =&lt;br /&gt;
&lt;br /&gt;
By default Neo1973 has usb0 interface working due to Ethernet gadget (g_ether) compiled into kernel.&lt;br /&gt;
&lt;br /&gt;
On the Neo, if you want to reach out to the internets using full qualified hostnames, you need to define your DNS server. Create a file /etc/resolv.conf with at least one line saying&lt;br /&gt;
&lt;br /&gt;
 nameserver xxx.xxx.xxx.xxx&lt;br /&gt;
&lt;br /&gt;
e.g. nameserver 192.168.1.1&lt;br /&gt;
&lt;br /&gt;
Then you can also easily update your 2007.2 OpenMoko packages with &amp;quot;ipkg update &amp;amp;&amp;amp; ipkg upgrade&amp;quot; on the Neo.&lt;br /&gt;
&lt;br /&gt;
= Desktop side =&lt;br /&gt;
&lt;br /&gt;
== Manual method ==&lt;br /&gt;
&lt;br /&gt;
With the device connected, modprobe usbnet module and configure usb0 interface (as root):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ifconfig usb0 192.168.0.200 netmask 255.255.255.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If your eth0 interface is also in the same 'range' (e.g. 192.168.0.105) then you can do the following:&lt;br /&gt;
&lt;br /&gt;
1. ping the Neo with&lt;br /&gt;
 # ping -I usb0 192.168.0.202&lt;br /&gt;
2. add a route to your Neo:&lt;br /&gt;
 # /sbin/route add -host 192.168.0.202/32 dev usb0&lt;br /&gt;
3 log in to the Neo&lt;br /&gt;
 # ssh root@192.168.0.202&lt;br /&gt;
&lt;br /&gt;
If you don't have the necessary modules to get usb0 going, make sure you have the following kernel options enabled:&lt;br /&gt;
* CONFIG_USB_USBNET&lt;br /&gt;
* CONFIG_USB_NET_CDCETHER&lt;br /&gt;
Both options are available in the Device Drivers -&amp;gt; USB support -&amp;gt; USB Network Adapters. For more info see the [http://www.linux-usb.org/usbnet/ usbnet driver homepage].&lt;br /&gt;
&lt;br /&gt;
== Automatic method ==&lt;br /&gt;
&lt;br /&gt;
Took from [http://blog.haerwu.biz/2007/03/22/hotpluging-usbnet/ Hotplugging usbnet] post by Marcin 'Hrw' Juszkiewicz.&lt;br /&gt;
&lt;br /&gt;
'''For Debian or similar distros:'''&lt;br /&gt;
Edit /etc/network/interfaces file ():&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow-hotplug usb0&lt;br /&gt;
iface usb0 inet static&lt;br /&gt;
        address 192.168.0.200&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 192.168.0.0&lt;br /&gt;
        post-up iptables -A POSTROUTING -t nat -j MASQUERADE -s 192.168.0.0/24&lt;br /&gt;
        post-up echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        post-up iptables -P FORWARD ACCEPT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are doing the echo 1 &amp;gt; /proc/... command manually, sudo may not be enough, then you will have to execute it from a sudo bash.&lt;br /&gt;
&lt;br /&gt;
Ubuntu feisty appears to have a bug where ifdown is not run when the interface is unplugged, meaning this only works once&lt;br /&gt;
after the system is booted.&lt;br /&gt;
One can patch /etc/udev/rules.d/85-ifupdown.rules, adding a last line:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;net&amp;quot;, ACTION==&amp;quot;remove&amp;quot;,             RUN+=&amp;quot;/sbin/start-stop-daemon --start --background --pidfile /var/run/network/bogus --startas /sbin/ifdown -- --allow auto $env{INTERFACE}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
and remove the similar remove like earlier.&lt;br /&gt;
&lt;br /&gt;
'''For Red Hat or similar distros'''&lt;br /&gt;
Edit /etc/sysconfig/network-scripts/net.hotplug:&lt;br /&gt;
&lt;br /&gt;
After this statement:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    case $INTERFACE in&lt;br /&gt;
	# interfaces that are registered after being &amp;quot;up&amp;quot; (?)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	usb0)&lt;br /&gt;
		ifconfig usb0 192.168.0.200 netmask 255.255.255.0&lt;br /&gt;
		route add 192.168.0.202 usb0&lt;br /&gt;
		iptables -I INPUT 1 -s 192.168.0.202 -j ACCEPT&lt;br /&gt;
		iptables -I OUTPUT 1 -s 192.168.0.200 -j ACCEPT&lt;br /&gt;
		exit 0&lt;br /&gt;
	;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''For Gentoo or similar distros:''' &lt;br /&gt;
&lt;br /&gt;
* Edit /etc/conf.d/net by adding:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   # Neo1973&lt;br /&gt;
   config_usb0=( &amp;quot;192.168.0.200 netmask 255.255.255.0&amp;quot; )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Create a new init script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   # cd /etc/init.d&lt;br /&gt;
   # ln -s net.lo net.usb0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And now when you connect phone (which has 192.168.0.202 IP) it gets connection to world automatically.&lt;br /&gt;
&lt;br /&gt;
'''For MacOS X:'''&lt;br /&gt;
&lt;br /&gt;
there are no files to edit since hotplugging configuration is done automatically by default. Of course, the interface has been initialized once. Install the AJZaurusUSB driver as described on [[MacOS_X]] and then open System Preferences / Networks which will show the new interface. Configure for Manual DHC with Host address 192.168.0.200 and Gateway 192.168.0.202.&lt;br /&gt;
&lt;br /&gt;
= Mobile development  =&lt;br /&gt;
&lt;br /&gt;
== Proxying DNS requests ==&lt;br /&gt;
&lt;br /&gt;
If, like me, you move about quite a lot, connecting to various networks as you go and getting your ip via dhcp, you'll probably be annoyed at having to constantly update your resolv.conf on the Neo 1973.&lt;br /&gt;
&lt;br /&gt;
To get round this, as part of my setup script, I run a proxy dns on the ip address the neo comes in on at the usb0 port. This means that my resolv.conf only contains &lt;br /&gt;
&lt;br /&gt;
 nameserver 192.168.0.200 &lt;br /&gt;
&lt;br /&gt;
and my laptop will proxy all dns requests.&lt;br /&gt;
&lt;br /&gt;
'''note that we only run the dns proxy on the usb0 interface so that we don't break any other networking'''&lt;br /&gt;
&lt;br /&gt;
The script is designed to use [http://dnrd.sourceforge.net/ dnrd] as the dns proxy. The [http://buildhost.automated.it/gta01 script] and a copy of [http://buildhost.automated.it/dnrd-2.20.3.tar.gz dnrd] are available from my site. The script also performs the initial setup of the connection as per the [[USB_Networking#Manual_method]] above.&lt;br /&gt;
&lt;br /&gt;
= Connecting to phone =&lt;br /&gt;
&lt;br /&gt;
Then &amp;lt;tt&amp;gt;ssh root@192.168.0.202&amp;lt;/tt&amp;gt; with empty password to get into phone.&lt;br /&gt;
&lt;br /&gt;
NOTE: the ssh daemon (dropbear 0.49) on the OpenMoko appears to have a bug when sending the exit status back to the client. From time to time you receive an exit status of 255.&lt;br /&gt;
&lt;br /&gt;
===SSH Extras===&lt;br /&gt;
&lt;br /&gt;
If you get fed up with typing root@192.168.0.202, on your PC edit /etc/hosts and add an entry for 'phone'&lt;br /&gt;
&lt;br /&gt;
 192.168.0.202 phone&lt;br /&gt;
&lt;br /&gt;
then edit ~/.ssh/config (or create it) and add&lt;br /&gt;
&lt;br /&gt;
 host phone&lt;br /&gt;
 user root&lt;br /&gt;
&lt;br /&gt;
then all you need to do is type &lt;br /&gt;
&lt;br /&gt;
 # ssh phone&lt;br /&gt;
&lt;br /&gt;
You might want to use keys to bypass the login prompt too.&lt;br /&gt;
&lt;br /&gt;
===SSH Keys===&lt;br /&gt;
====From host to phone====&lt;br /&gt;
&lt;br /&gt;
To generate ssh keys for use as a login mechanism type&lt;br /&gt;
&lt;br /&gt;
 ssh-keygen -t rsa&lt;br /&gt;
&lt;br /&gt;
when prompted for a password either hit enter for no password (''not really a good idea'') or enter a password for this key. ssh into the phone and create ~/.ssh&lt;br /&gt;
&lt;br /&gt;
 # mkdir ~/.ssh&lt;br /&gt;
&lt;br /&gt;
then from your PC copy the '''.pub''' file to the phone.&lt;br /&gt;
&lt;br /&gt;
 # scp ~/.ssh/id_rsa.pub phone:.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
You should now be able to ssh directly into the phone.&lt;br /&gt;
&lt;br /&gt;
To disable password logins ('''after setting up key access''') edit /etc/init.d/dropbear and change the following line:&lt;br /&gt;
&lt;br /&gt;
 DROPBEAR_EXTRA_ARGS=&lt;br /&gt;
&lt;br /&gt;
to &lt;br /&gt;
&lt;br /&gt;
 DROPBEAR_EXTRA_ARGS=&amp;quot;-s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You will need to restart dropbear for this to take effect.&lt;br /&gt;
&lt;br /&gt;
====From phone to host====&lt;br /&gt;
Generate the key&lt;br /&gt;
&lt;br /&gt;
  dropbearkey -t rsa -f id_rsa&lt;br /&gt;
&lt;br /&gt;
The output will look something like this:&lt;br /&gt;
&lt;br /&gt;
  Will output 1024 bit rsa secret key to 'id_rsa'&lt;br /&gt;
  Generating key, this may take a while...&lt;br /&gt;
  Public key portion is:&lt;br /&gt;
  ssh-rsa AAAAB3Nza[...]&lt;br /&gt;
  Fingerprint: md5 ca:e8:f0:b7:f6:7b:c2:b6:b9:71:e4:45:86:a9:ff:b8&lt;br /&gt;
&lt;br /&gt;
Copy and paste the one line (in this example, starting with 'ssh-rsa' onto the end of the host's authorized_keys file (often in ~/.ssh/).&lt;br /&gt;
&lt;br /&gt;
From the phone, ssh with -i:&lt;br /&gt;
&lt;br /&gt;
  ssh -i id_rsa user@host&lt;br /&gt;
&lt;br /&gt;
This works for me.  I ripped off these instructions from: [[http://forum.openwrt.org/viewtopic.php?pid=53705]]&lt;br /&gt;
&lt;br /&gt;
===GUI on desktop through SSH===&lt;br /&gt;
&lt;br /&gt;
If you need to get the GUI on the phone onto the desktop via usb, you can use ssh as follows&lt;br /&gt;
&lt;br /&gt;
  ssh -l root -X -v 192.168.0.202&lt;br /&gt;
&lt;br /&gt;
Login, and run openmoko-finger-demo for example, and it will open up on the desktop. To get landscape view, just resize the GUI window on the desktop.&lt;br /&gt;
&lt;br /&gt;
===Remote apps on neo===&lt;br /&gt;
&lt;br /&gt;
To get desktop apps to show up on your neo, first log in to the phone&lt;br /&gt;
&lt;br /&gt;
  ssh -l root 192.168.0.202&lt;br /&gt;
&lt;br /&gt;
Then once inside, run:&lt;br /&gt;
&lt;br /&gt;
  DISPLAY=:0 xhost +192.168.0.200&lt;br /&gt;
&lt;br /&gt;
After this you can close the ssh session. Back on the desktop computer, run:&lt;br /&gt;
&lt;br /&gt;
  DISPLAY=moko:0 xclock&lt;br /&gt;
&lt;br /&gt;
Note that the xhost command will allow remote applications on 192.168.0.200 to access the X server. It will allow anyone on the desktop machine to access the X server of the neo, including snooping anything you type on it. To disallow remote applications again, run this in the neo:&lt;br /&gt;
&lt;br /&gt;
  DISPLAY=:0 xhost -192.168.0.200&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;bottom&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; &lt;br /&gt;
{{Languages|USB Networking}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]]&lt;br /&gt;
[[Category:Implemented]]&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/USB_Networking</id>
		<title>USB Networking</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/USB_Networking"/>
				<updated>2007-08-27T11:40:59Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* Proxying DNS requests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Neo1973 side =&lt;br /&gt;
&lt;br /&gt;
By default Neo1973 has usb0 interface working due to Ethernet gadget (g_ether) compiled into kernel.&lt;br /&gt;
&lt;br /&gt;
On the Neo, if you want to reach out to the internets using full qualified hostnames, you need to define your DNS server. Create a file /etc/resolv.conf with at least one line saying&lt;br /&gt;
&lt;br /&gt;
 nameserver xxx.xxx.xxx.xxx&lt;br /&gt;
&lt;br /&gt;
e.g. nameserver 192.168.1.1&lt;br /&gt;
&lt;br /&gt;
Then you can also easily update your 2007.2 OpenMoko packages with &amp;quot;ipkg update &amp;amp;&amp;amp; ipkg upgrade&amp;quot; on the Neo.&lt;br /&gt;
&lt;br /&gt;
= Desktop side =&lt;br /&gt;
&lt;br /&gt;
== Manual method ==&lt;br /&gt;
&lt;br /&gt;
With the device connected, modprobe usbnet module and configure usb0 interface (as root):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ifconfig usb0 192.168.0.200 netmask 255.255.255.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If your eth0 interface is also in the same 'range' (e.g. 192.168.0.105) then you can do the following:&lt;br /&gt;
&lt;br /&gt;
1. ping the Neo with&lt;br /&gt;
 # ping -I usb0 192.168.0.202&lt;br /&gt;
2. add a route to your Neo:&lt;br /&gt;
 # /sbin/route add -host 192.168.0.202/32 dev usb0&lt;br /&gt;
3 log in to the Neo&lt;br /&gt;
 # ssh root@192.168.0.202&lt;br /&gt;
&lt;br /&gt;
If you don't have the necessary modules to get usb0 going, make sure you have the following kernel options enabled:&lt;br /&gt;
* CONFIG_USB_USBNET&lt;br /&gt;
* CONFIG_USB_NET_CDCETHER&lt;br /&gt;
Both options are available in the Device Drivers -&amp;gt; USB support -&amp;gt; USB Network Adapters. For more info see the [http://www.linux-usb.org/usbnet/ usbnet driver homepage].&lt;br /&gt;
&lt;br /&gt;
== Automatic method ==&lt;br /&gt;
&lt;br /&gt;
Took from [http://blog.haerwu.biz/2007/03/22/hotpluging-usbnet/ Hotplugging usbnet] post by Marcin 'Hrw' Juszkiewicz.&lt;br /&gt;
&lt;br /&gt;
'''For Debian or similar distros:'''&lt;br /&gt;
Edit /etc/network/interfaces file ():&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow-hotplug usb0&lt;br /&gt;
iface usb0 inet static&lt;br /&gt;
        address 192.168.0.200&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 192.168.0.0&lt;br /&gt;
        post-up iptables -A POSTROUTING -t nat -j MASQUERADE -s 192.168.0.0/24&lt;br /&gt;
        post-up echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        post-up iptables -P FORWARD ACCEPT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are doing the echo 1 &amp;gt; /proc/... command manually, sudo may not be enough, then you will have to execute it from a sudo bash.&lt;br /&gt;
&lt;br /&gt;
Ubuntu feisty appears to have a bug where ifdown is not run when the interface is unplugged, meaning this only works once&lt;br /&gt;
after the system is booted.&lt;br /&gt;
One can patch /etc/udev/rules.d/85-ifupdown.rules, adding a last line:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;net&amp;quot;, ACTION==&amp;quot;remove&amp;quot;,             RUN+=&amp;quot;/sbin/start-stop-daemon --start --background --pidfile /var/run/network/bogus --startas /sbin/ifdown -- --allow auto $env{INTERFACE}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
and remove the similar remove like earlier.&lt;br /&gt;
&lt;br /&gt;
'''For Red Hat or similar distros'''&lt;br /&gt;
Edit /etc/sysconfig/network-scripts/net.hotplug:&lt;br /&gt;
&lt;br /&gt;
After this statement:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    case $INTERFACE in&lt;br /&gt;
	# interfaces that are registered after being &amp;quot;up&amp;quot; (?)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	usb0)&lt;br /&gt;
		ifconfig usb0 192.168.0.200 netmask 255.255.255.0&lt;br /&gt;
		route add 192.168.0.202 usb0&lt;br /&gt;
		iptables -I INPUT 1 -s 192.168.0.202 -j ACCEPT&lt;br /&gt;
		iptables -I OUTPUT 1 -s 192.168.0.200 -j ACCEPT&lt;br /&gt;
		exit 0&lt;br /&gt;
	;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''For Gentoo or similar distros:''' &lt;br /&gt;
&lt;br /&gt;
* Edit /etc/conf.d/net by adding:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   # Neo1973&lt;br /&gt;
   config_usb0=( &amp;quot;192.168.0.200 netmask 255.255.255.0&amp;quot; )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Create a new init script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   # cd /etc/init.d&lt;br /&gt;
   # ln -s net.lo net.usb0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And now when you connect phone (which has 192.168.0.202 IP) it gets connection to world automatically.&lt;br /&gt;
&lt;br /&gt;
'''For MacOS X:'''&lt;br /&gt;
&lt;br /&gt;
there are no files to edit since hotplugging configuration is done automatically by default. Of course, the interface has been initialized once. Install the AJZaurusUSB driver as described on [[MacOS_X]] and then open System Preferences / Networks which will show the new interface. Configure for Manual DHC with Host address 192.168.0.200 and Gateway 192.168.0.202.&lt;br /&gt;
&lt;br /&gt;
= Mobile development  =&lt;br /&gt;
&lt;br /&gt;
== Proxying DNS requests ==&lt;br /&gt;
&lt;br /&gt;
If, like me, you move about quite a lot, connecting to various networks as you go and getting your ip via dhcp, you'll probably be annoyed at having to constantly update your resolv.conf on the Neo 1973.&lt;br /&gt;
&lt;br /&gt;
To get round this, as part of my setup script, I run a proxy dns on the ip address the neo comes in on at the usb0 port. This means that my resolv.conf only contains &lt;br /&gt;
&lt;br /&gt;
 nameserver 192.168.0.200 &lt;br /&gt;
&lt;br /&gt;
and my laptop will proxy all dns requests.&lt;br /&gt;
&lt;br /&gt;
'''note that we only run the dns proxy on the usb0 interface so that we don't break any other networking'''&lt;br /&gt;
&lt;br /&gt;
The script is designed to use dnrd as the dns proxy. The [http://buildhost.automated.it/gta01 script] and a copy of [http://buildhost.automated.it/dnrd-2.20.3.tar.gz dnrd] are available from my site.&lt;br /&gt;
&lt;br /&gt;
The script also performs the initial setup of the connection as per the sections above.&lt;br /&gt;
&lt;br /&gt;
= Connecting to phone =&lt;br /&gt;
&lt;br /&gt;
Then &amp;lt;tt&amp;gt;ssh root@192.168.0.202&amp;lt;/tt&amp;gt; with empty password to get into phone.&lt;br /&gt;
&lt;br /&gt;
NOTE: the ssh daemon (dropbear 0.49) on the OpenMoko appears to have a bug when sending the exit status back to the client. From time to time you receive an exit status of 255.&lt;br /&gt;
&lt;br /&gt;
===SSH Extras===&lt;br /&gt;
&lt;br /&gt;
If you get fed up with typing root@192.168.0.202, on your PC edit /etc/hosts and add an entry for 'phone'&lt;br /&gt;
&lt;br /&gt;
 192.168.0.202 phone&lt;br /&gt;
&lt;br /&gt;
then edit ~/.ssh/config (or create it) and add&lt;br /&gt;
&lt;br /&gt;
 host phone&lt;br /&gt;
 user root&lt;br /&gt;
&lt;br /&gt;
then all you need to do is type &lt;br /&gt;
&lt;br /&gt;
 # ssh phone&lt;br /&gt;
&lt;br /&gt;
You might want to use keys to bypass the login prompt too.&lt;br /&gt;
&lt;br /&gt;
===SSH Keys===&lt;br /&gt;
====From host to phone====&lt;br /&gt;
&lt;br /&gt;
To generate ssh keys for use as a login mechanism type&lt;br /&gt;
&lt;br /&gt;
 ssh-keygen -t rsa&lt;br /&gt;
&lt;br /&gt;
when prompted for a password either hit enter for no password (''not really a good idea'') or enter a password for this key. ssh into the phone and create ~/.ssh&lt;br /&gt;
&lt;br /&gt;
 # mkdir ~/.ssh&lt;br /&gt;
&lt;br /&gt;
then from your PC copy the '''.pub''' file to the phone.&lt;br /&gt;
&lt;br /&gt;
 # scp ~/.ssh/id_rsa.pub phone:.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
You should now be able to ssh directly into the phone.&lt;br /&gt;
&lt;br /&gt;
To disable password logins ('''after setting up key access''') edit /etc/init.d/dropbear and change the following line:&lt;br /&gt;
&lt;br /&gt;
 DROPBEAR_EXTRA_ARGS=&lt;br /&gt;
&lt;br /&gt;
to &lt;br /&gt;
&lt;br /&gt;
 DROPBEAR_EXTRA_ARGS=&amp;quot;-s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You will need to restart dropbear for this to take effect.&lt;br /&gt;
&lt;br /&gt;
====From phone to host====&lt;br /&gt;
Generate the key&lt;br /&gt;
&lt;br /&gt;
  dropbearkey -t rsa -f id_rsa&lt;br /&gt;
&lt;br /&gt;
The output will look something like this:&lt;br /&gt;
&lt;br /&gt;
  Will output 1024 bit rsa secret key to 'id_rsa'&lt;br /&gt;
  Generating key, this may take a while...&lt;br /&gt;
  Public key portion is:&lt;br /&gt;
  ssh-rsa AAAAB3Nza[...]&lt;br /&gt;
  Fingerprint: md5 ca:e8:f0:b7:f6:7b:c2:b6:b9:71:e4:45:86:a9:ff:b8&lt;br /&gt;
&lt;br /&gt;
Copy and paste the one line (in this example, starting with 'ssh-rsa' onto the end of the host's authorized_keys file (often in ~/.ssh/).&lt;br /&gt;
&lt;br /&gt;
From the phone, ssh with -i:&lt;br /&gt;
&lt;br /&gt;
  ssh -i id_rsa user@host&lt;br /&gt;
&lt;br /&gt;
This works for me.  I ripped off these instructions from: [[http://forum.openwrt.org/viewtopic.php?pid=53705]]&lt;br /&gt;
&lt;br /&gt;
===GUI on desktop through SSH===&lt;br /&gt;
&lt;br /&gt;
If you need to get the GUI on the phone onto the desktop via usb, you can use ssh as follows&lt;br /&gt;
&lt;br /&gt;
  ssh -l root -X -v 192.168.0.202&lt;br /&gt;
&lt;br /&gt;
Login, and run openmoko-finger-demo for example, and it will open up on the desktop. To get landscape view, just resize the GUI window on the desktop.&lt;br /&gt;
&lt;br /&gt;
===Remote apps on neo===&lt;br /&gt;
&lt;br /&gt;
To get desktop apps to show up on your neo, first log in to the phone&lt;br /&gt;
&lt;br /&gt;
  ssh -l root 192.168.0.202&lt;br /&gt;
&lt;br /&gt;
Then once inside, run:&lt;br /&gt;
&lt;br /&gt;
  DISPLAY=:0 xhost +192.168.0.200&lt;br /&gt;
&lt;br /&gt;
After this you can close the ssh session. Back on the desktop computer, run:&lt;br /&gt;
&lt;br /&gt;
  DISPLAY=moko:0 xclock&lt;br /&gt;
&lt;br /&gt;
Note that the xhost command will allow remote applications on 192.168.0.200 to access the X server. It will allow anyone on the desktop machine to access the X server of the neo, including snooping anything you type on it. To disallow remote applications again, run this in the neo:&lt;br /&gt;
&lt;br /&gt;
  DISPLAY=:0 xhost -192.168.0.200&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;bottom&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; &lt;br /&gt;
{{Languages|USB Networking}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]]&lt;br /&gt;
[[Category:Implemented]]&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/USB_Networking</id>
		<title>USB Networking</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/USB_Networking"/>
				<updated>2007-08-27T11:38:43Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* Mobile development */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Neo1973 side =&lt;br /&gt;
&lt;br /&gt;
By default Neo1973 has usb0 interface working due to Ethernet gadget (g_ether) compiled into kernel.&lt;br /&gt;
&lt;br /&gt;
On the Neo, if you want to reach out to the internets using full qualified hostnames, you need to define your DNS server. Create a file /etc/resolv.conf with at least one line saying&lt;br /&gt;
&lt;br /&gt;
 nameserver xxx.xxx.xxx.xxx&lt;br /&gt;
&lt;br /&gt;
e.g. nameserver 192.168.1.1&lt;br /&gt;
&lt;br /&gt;
Then you can also easily update your 2007.2 OpenMoko packages with &amp;quot;ipkg update &amp;amp;&amp;amp; ipkg upgrade&amp;quot; on the Neo.&lt;br /&gt;
&lt;br /&gt;
= Desktop side =&lt;br /&gt;
&lt;br /&gt;
== Manual method ==&lt;br /&gt;
&lt;br /&gt;
With the device connected, modprobe usbnet module and configure usb0 interface (as root):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ifconfig usb0 192.168.0.200 netmask 255.255.255.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If your eth0 interface is also in the same 'range' (e.g. 192.168.0.105) then you can do the following:&lt;br /&gt;
&lt;br /&gt;
1. ping the Neo with&lt;br /&gt;
 # ping -I usb0 192.168.0.202&lt;br /&gt;
2. add a route to your Neo:&lt;br /&gt;
 # /sbin/route add -host 192.168.0.202/32 dev usb0&lt;br /&gt;
3 log in to the Neo&lt;br /&gt;
 # ssh root@192.168.0.202&lt;br /&gt;
&lt;br /&gt;
If you don't have the necessary modules to get usb0 going, make sure you have the following kernel options enabled:&lt;br /&gt;
* CONFIG_USB_USBNET&lt;br /&gt;
* CONFIG_USB_NET_CDCETHER&lt;br /&gt;
Both options are available in the Device Drivers -&amp;gt; USB support -&amp;gt; USB Network Adapters. For more info see the [http://www.linux-usb.org/usbnet/ usbnet driver homepage].&lt;br /&gt;
&lt;br /&gt;
== Automatic method ==&lt;br /&gt;
&lt;br /&gt;
Took from [http://blog.haerwu.biz/2007/03/22/hotpluging-usbnet/ Hotplugging usbnet] post by Marcin 'Hrw' Juszkiewicz.&lt;br /&gt;
&lt;br /&gt;
'''For Debian or similar distros:'''&lt;br /&gt;
Edit /etc/network/interfaces file ():&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow-hotplug usb0&lt;br /&gt;
iface usb0 inet static&lt;br /&gt;
        address 192.168.0.200&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 192.168.0.0&lt;br /&gt;
        post-up iptables -A POSTROUTING -t nat -j MASQUERADE -s 192.168.0.0/24&lt;br /&gt;
        post-up echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        post-up iptables -P FORWARD ACCEPT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are doing the echo 1 &amp;gt; /proc/... command manually, sudo may not be enough, then you will have to execute it from a sudo bash.&lt;br /&gt;
&lt;br /&gt;
Ubuntu feisty appears to have a bug where ifdown is not run when the interface is unplugged, meaning this only works once&lt;br /&gt;
after the system is booted.&lt;br /&gt;
One can patch /etc/udev/rules.d/85-ifupdown.rules, adding a last line:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;net&amp;quot;, ACTION==&amp;quot;remove&amp;quot;,             RUN+=&amp;quot;/sbin/start-stop-daemon --start --background --pidfile /var/run/network/bogus --startas /sbin/ifdown -- --allow auto $env{INTERFACE}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
and remove the similar remove like earlier.&lt;br /&gt;
&lt;br /&gt;
'''For Red Hat or similar distros'''&lt;br /&gt;
Edit /etc/sysconfig/network-scripts/net.hotplug:&lt;br /&gt;
&lt;br /&gt;
After this statement:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    case $INTERFACE in&lt;br /&gt;
	# interfaces that are registered after being &amp;quot;up&amp;quot; (?)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	usb0)&lt;br /&gt;
		ifconfig usb0 192.168.0.200 netmask 255.255.255.0&lt;br /&gt;
		route add 192.168.0.202 usb0&lt;br /&gt;
		iptables -I INPUT 1 -s 192.168.0.202 -j ACCEPT&lt;br /&gt;
		iptables -I OUTPUT 1 -s 192.168.0.200 -j ACCEPT&lt;br /&gt;
		exit 0&lt;br /&gt;
	;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''For Gentoo or similar distros:''' &lt;br /&gt;
&lt;br /&gt;
* Edit /etc/conf.d/net by adding:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   # Neo1973&lt;br /&gt;
   config_usb0=( &amp;quot;192.168.0.200 netmask 255.255.255.0&amp;quot; )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Create a new init script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   # cd /etc/init.d&lt;br /&gt;
   # ln -s net.lo net.usb0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And now when you connect phone (which has 192.168.0.202 IP) it gets connection to world automatically.&lt;br /&gt;
&lt;br /&gt;
'''For MacOS X:'''&lt;br /&gt;
&lt;br /&gt;
there are no files to edit since hotplugging configuration is done automatically by default. Of course, the interface has been initialized once. Install the AJZaurusUSB driver as described on [[MacOS_X]] and then open System Preferences / Networks which will show the new interface. Configure for Manual DHC with Host address 192.168.0.200 and Gateway 192.168.0.202.&lt;br /&gt;
&lt;br /&gt;
= Mobile development  =&lt;br /&gt;
&lt;br /&gt;
== Proxying DNS requests ==&lt;br /&gt;
&lt;br /&gt;
If, like me, you move about quite a lot, connecting to various networks as you go and getting your ip via dhcp, you'll probably be annoyed at having to constantly update your resolv.conf on the Neo 1973.&lt;br /&gt;
&lt;br /&gt;
To get round this, as part of my setup script, I run a proxy dns on the ip address the neo comes in on at the usb0 port. This means that my resolv.conf only contains &lt;br /&gt;
&lt;br /&gt;
 nameserver 192.168.0.200 &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
and my laptop will proxy all dns requests.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''note that we only run the dns proxy on the usb0 interface so that we don't break any other networking'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The script is designed to use dnrd as the dns proxy. The [http://buildhost.automated.it/gta01 script] and a copy of [http://buildhost.automated.it/dnrd-2.20.3.tar.gz dnrd] are available from my site.&lt;br /&gt;
&lt;br /&gt;
= Connecting to phone =&lt;br /&gt;
&lt;br /&gt;
Then &amp;lt;tt&amp;gt;ssh root@192.168.0.202&amp;lt;/tt&amp;gt; with empty password to get into phone.&lt;br /&gt;
&lt;br /&gt;
NOTE: the ssh daemon (dropbear 0.49) on the OpenMoko appears to have a bug when sending the exit status back to the client. From time to time you receive an exit status of 255.&lt;br /&gt;
&lt;br /&gt;
===SSH Extras===&lt;br /&gt;
&lt;br /&gt;
If you get fed up with typing root@192.168.0.202, on your PC edit /etc/hosts and add an entry for 'phone'&lt;br /&gt;
&lt;br /&gt;
 192.168.0.202 phone&lt;br /&gt;
&lt;br /&gt;
then edit ~/.ssh/config (or create it) and add&lt;br /&gt;
&lt;br /&gt;
 host phone&lt;br /&gt;
 user root&lt;br /&gt;
&lt;br /&gt;
then all you need to do is type &lt;br /&gt;
&lt;br /&gt;
 # ssh phone&lt;br /&gt;
&lt;br /&gt;
You might want to use keys to bypass the login prompt too.&lt;br /&gt;
&lt;br /&gt;
===SSH Keys===&lt;br /&gt;
====From host to phone====&lt;br /&gt;
&lt;br /&gt;
To generate ssh keys for use as a login mechanism type&lt;br /&gt;
&lt;br /&gt;
 ssh-keygen -t rsa&lt;br /&gt;
&lt;br /&gt;
when prompted for a password either hit enter for no password (''not really a good idea'') or enter a password for this key. ssh into the phone and create ~/.ssh&lt;br /&gt;
&lt;br /&gt;
 # mkdir ~/.ssh&lt;br /&gt;
&lt;br /&gt;
then from your PC copy the '''.pub''' file to the phone.&lt;br /&gt;
&lt;br /&gt;
 # scp ~/.ssh/id_rsa.pub phone:.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
You should now be able to ssh directly into the phone.&lt;br /&gt;
&lt;br /&gt;
To disable password logins ('''after setting up key access''') edit /etc/init.d/dropbear and change the following line:&lt;br /&gt;
&lt;br /&gt;
 DROPBEAR_EXTRA_ARGS=&lt;br /&gt;
&lt;br /&gt;
to &lt;br /&gt;
&lt;br /&gt;
 DROPBEAR_EXTRA_ARGS=&amp;quot;-s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You will need to restart dropbear for this to take effect.&lt;br /&gt;
&lt;br /&gt;
====From phone to host====&lt;br /&gt;
Generate the key&lt;br /&gt;
&lt;br /&gt;
  dropbearkey -t rsa -f id_rsa&lt;br /&gt;
&lt;br /&gt;
The output will look something like this:&lt;br /&gt;
&lt;br /&gt;
  Will output 1024 bit rsa secret key to 'id_rsa'&lt;br /&gt;
  Generating key, this may take a while...&lt;br /&gt;
  Public key portion is:&lt;br /&gt;
  ssh-rsa AAAAB3Nza[...]&lt;br /&gt;
  Fingerprint: md5 ca:e8:f0:b7:f6:7b:c2:b6:b9:71:e4:45:86:a9:ff:b8&lt;br /&gt;
&lt;br /&gt;
Copy and paste the one line (in this example, starting with 'ssh-rsa' onto the end of the host's authorized_keys file (often in ~/.ssh/).&lt;br /&gt;
&lt;br /&gt;
From the phone, ssh with -i:&lt;br /&gt;
&lt;br /&gt;
  ssh -i id_rsa user@host&lt;br /&gt;
&lt;br /&gt;
This works for me.  I ripped off these instructions from: [[http://forum.openwrt.org/viewtopic.php?pid=53705]]&lt;br /&gt;
&lt;br /&gt;
===GUI on desktop through SSH===&lt;br /&gt;
&lt;br /&gt;
If you need to get the GUI on the phone onto the desktop via usb, you can use ssh as follows&lt;br /&gt;
&lt;br /&gt;
  ssh -l root -X -v 192.168.0.202&lt;br /&gt;
&lt;br /&gt;
Login, and run openmoko-finger-demo for example, and it will open up on the desktop. To get landscape view, just resize the GUI window on the desktop.&lt;br /&gt;
&lt;br /&gt;
===Remote apps on neo===&lt;br /&gt;
&lt;br /&gt;
To get desktop apps to show up on your neo, first log in to the phone&lt;br /&gt;
&lt;br /&gt;
  ssh -l root 192.168.0.202&lt;br /&gt;
&lt;br /&gt;
Then once inside, run:&lt;br /&gt;
&lt;br /&gt;
  DISPLAY=:0 xhost +192.168.0.200&lt;br /&gt;
&lt;br /&gt;
After this you can close the ssh session. Back on the desktop computer, run:&lt;br /&gt;
&lt;br /&gt;
  DISPLAY=moko:0 xclock&lt;br /&gt;
&lt;br /&gt;
Note that the xhost command will allow remote applications on 192.168.0.200 to access the X server. It will allow anyone on the desktop machine to access the X server of the neo, including snooping anything you type on it. To disallow remote applications again, run this in the neo:&lt;br /&gt;
&lt;br /&gt;
  DISPLAY=:0 xhost -192.168.0.200&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;bottom&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; &lt;br /&gt;
{{Languages|USB Networking}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]]&lt;br /&gt;
[[Category:Implemented]]&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/USB_Networking</id>
		<title>USB Networking</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/USB_Networking"/>
				<updated>2007-08-27T11:36:49Z</updated>
		
		<summary type="html">&lt;p&gt;ScaredyCat: /* how to proxy dns requests */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Neo1973 side =&lt;br /&gt;
&lt;br /&gt;
By default Neo1973 has usb0 interface working due to Ethernet gadget (g_ether) compiled into kernel.&lt;br /&gt;
&lt;br /&gt;
On the Neo, if you want to reach out to the internets using full qualified hostnames, you need to define your DNS server. Create a file /etc/resolv.conf with at least one line saying&lt;br /&gt;
&lt;br /&gt;
 nameserver xxx.xxx.xxx.xxx&lt;br /&gt;
&lt;br /&gt;
e.g. nameserver 192.168.1.1&lt;br /&gt;
&lt;br /&gt;
Then you can also easily update your 2007.2 OpenMoko packages with &amp;quot;ipkg update &amp;amp;&amp;amp; ipkg upgrade&amp;quot; on the Neo.&lt;br /&gt;
&lt;br /&gt;
= Desktop side =&lt;br /&gt;
&lt;br /&gt;
== Manual method ==&lt;br /&gt;
&lt;br /&gt;
With the device connected, modprobe usbnet module and configure usb0 interface (as root):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ifconfig usb0 192.168.0.200 netmask 255.255.255.0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
If your eth0 interface is also in the same 'range' (e.g. 192.168.0.105) then you can do the following:&lt;br /&gt;
&lt;br /&gt;
1. ping the Neo with&lt;br /&gt;
 # ping -I usb0 192.168.0.202&lt;br /&gt;
2. add a route to your Neo:&lt;br /&gt;
 # /sbin/route add -host 192.168.0.202/32 dev usb0&lt;br /&gt;
3 log in to the Neo&lt;br /&gt;
 # ssh root@192.168.0.202&lt;br /&gt;
&lt;br /&gt;
If you don't have the necessary modules to get usb0 going, make sure you have the following kernel options enabled:&lt;br /&gt;
* CONFIG_USB_USBNET&lt;br /&gt;
* CONFIG_USB_NET_CDCETHER&lt;br /&gt;
Both options are available in the Device Drivers -&amp;gt; USB support -&amp;gt; USB Network Adapters. For more info see the [http://www.linux-usb.org/usbnet/ usbnet driver homepage].&lt;br /&gt;
&lt;br /&gt;
== Automatic method ==&lt;br /&gt;
&lt;br /&gt;
Took from [http://blog.haerwu.biz/2007/03/22/hotpluging-usbnet/ Hotplugging usbnet] post by Marcin 'Hrw' Juszkiewicz.&lt;br /&gt;
&lt;br /&gt;
'''For Debian or similar distros:'''&lt;br /&gt;
Edit /etc/network/interfaces file ():&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
allow-hotplug usb0&lt;br /&gt;
iface usb0 inet static&lt;br /&gt;
        address 192.168.0.200&lt;br /&gt;
        netmask 255.255.255.0&lt;br /&gt;
        network 192.168.0.0&lt;br /&gt;
        post-up iptables -A POSTROUTING -t nat -j MASQUERADE -s 192.168.0.0/24&lt;br /&gt;
        post-up echo 1 &amp;gt; /proc/sys/net/ipv4/ip_forward&lt;br /&gt;
        post-up iptables -P FORWARD ACCEPT&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you are doing the echo 1 &amp;gt; /proc/... command manually, sudo may not be enough, then you will have to execute it from a sudo bash.&lt;br /&gt;
&lt;br /&gt;
Ubuntu feisty appears to have a bug where ifdown is not run when the interface is unplugged, meaning this only works once&lt;br /&gt;
after the system is booted.&lt;br /&gt;
One can patch /etc/udev/rules.d/85-ifupdown.rules, adding a last line:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
SUBSYSTEM==&amp;quot;net&amp;quot;, ACTION==&amp;quot;remove&amp;quot;,             RUN+=&amp;quot;/sbin/start-stop-daemon --start --background --pidfile /var/run/network/bogus --startas /sbin/ifdown -- --allow auto $env{INTERFACE}&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
and remove the similar remove like earlier.&lt;br /&gt;
&lt;br /&gt;
'''For Red Hat or similar distros'''&lt;br /&gt;
Edit /etc/sysconfig/network-scripts/net.hotplug:&lt;br /&gt;
&lt;br /&gt;
After this statement:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
    case $INTERFACE in&lt;br /&gt;
	# interfaces that are registered after being &amp;quot;up&amp;quot; (?)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Add the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
	usb0)&lt;br /&gt;
		ifconfig usb0 192.168.0.200 netmask 255.255.255.0&lt;br /&gt;
		route add 192.168.0.202 usb0&lt;br /&gt;
		iptables -I INPUT 1 -s 192.168.0.202 -j ACCEPT&lt;br /&gt;
		iptables -I OUTPUT 1 -s 192.168.0.200 -j ACCEPT&lt;br /&gt;
		exit 0&lt;br /&gt;
	;;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''For Gentoo or similar distros:''' &lt;br /&gt;
&lt;br /&gt;
* Edit /etc/conf.d/net by adding:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   # Neo1973&lt;br /&gt;
   config_usb0=( &amp;quot;192.168.0.200 netmask 255.255.255.0&amp;quot; )&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Create a new init script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   # cd /etc/init.d&lt;br /&gt;
   # ln -s net.lo net.usb0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
And now when you connect phone (which has 192.168.0.202 IP) it gets connection to world automatically.&lt;br /&gt;
&lt;br /&gt;
'''For MacOS X:'''&lt;br /&gt;
&lt;br /&gt;
there are no files to edit since hotplugging configuration is done automatically by default. Of course, the interface has been initialized once. Install the AJZaurusUSB driver as described on [[MacOS_X]] and then open System Preferences / Networks which will show the new interface. Configure for Manual DHC with Host address 192.168.0.200 and Gateway 192.168.0.202.&lt;br /&gt;
&lt;br /&gt;
= Mobile development  =&lt;br /&gt;
&lt;br /&gt;
If, like me, you move about quite a lot, connecting to various networks as you go and getting your ip via dhcp, you'll probably be annoyed at having to constantly update your resolv.conf on the Neo 1973.&lt;br /&gt;
&lt;br /&gt;
To get round this, as part of my setup script, I run a proxy dns on the ip address the neo comes in on at the usb0 port. This means that my resolv.conf only contains &lt;br /&gt;
&lt;br /&gt;
 nameserver 192.168.0.200 &lt;br /&gt;
&lt;br /&gt;
and my laptop will proxy all dns requests.&lt;br /&gt;
&lt;br /&gt;
'''note that we only run the dns proxy on the usb0 interface so that we don't break any other networking'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The script is designed to use dnrd as the dns proxy. The [http://buildhost.automated.it/gta01 script] and a copy of [http://buildhost.automated.it/dnrd-2.20.3.tar.gz dnrd] are available from my site.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Connecting to phone =&lt;br /&gt;
&lt;br /&gt;
Then &amp;lt;tt&amp;gt;ssh root@192.168.0.202&amp;lt;/tt&amp;gt; with empty password to get into phone.&lt;br /&gt;
&lt;br /&gt;
NOTE: the ssh daemon (dropbear 0.49) on the OpenMoko appears to have a bug when sending the exit status back to the client. From time to time you receive an exit status of 255.&lt;br /&gt;
&lt;br /&gt;
===SSH Extras===&lt;br /&gt;
&lt;br /&gt;
If you get fed up with typing root@192.168.0.202, on your PC edit /etc/hosts and add an entry for 'phone'&lt;br /&gt;
&lt;br /&gt;
 192.168.0.202 phone&lt;br /&gt;
&lt;br /&gt;
then edit ~/.ssh/config (or create it) and add&lt;br /&gt;
&lt;br /&gt;
 host phone&lt;br /&gt;
 user root&lt;br /&gt;
&lt;br /&gt;
then all you need to do is type &lt;br /&gt;
&lt;br /&gt;
 # ssh phone&lt;br /&gt;
&lt;br /&gt;
You might want to use keys to bypass the login prompt too.&lt;br /&gt;
&lt;br /&gt;
===SSH Keys===&lt;br /&gt;
====From host to phone====&lt;br /&gt;
&lt;br /&gt;
To generate ssh keys for use as a login mechanism type&lt;br /&gt;
&lt;br /&gt;
 ssh-keygen -t rsa&lt;br /&gt;
&lt;br /&gt;
when prompted for a password either hit enter for no password (''not really a good idea'') or enter a password for this key. ssh into the phone and create ~/.ssh&lt;br /&gt;
&lt;br /&gt;
 # mkdir ~/.ssh&lt;br /&gt;
&lt;br /&gt;
then from your PC copy the '''.pub''' file to the phone.&lt;br /&gt;
&lt;br /&gt;
 # scp ~/.ssh/id_rsa.pub phone:.ssh/authorized_keys&lt;br /&gt;
&lt;br /&gt;
You should now be able to ssh directly into the phone.&lt;br /&gt;
&lt;br /&gt;
To disable password logins ('''after setting up key access''') edit /etc/init.d/dropbear and change the following line:&lt;br /&gt;
&lt;br /&gt;
 DROPBEAR_EXTRA_ARGS=&lt;br /&gt;
&lt;br /&gt;
to &lt;br /&gt;
&lt;br /&gt;
 DROPBEAR_EXTRA_ARGS=&amp;quot;-s&amp;quot;&lt;br /&gt;
&lt;br /&gt;
You will need to restart dropbear for this to take effect.&lt;br /&gt;
&lt;br /&gt;
====From phone to host====&lt;br /&gt;
Generate the key&lt;br /&gt;
&lt;br /&gt;
  dropbearkey -t rsa -f id_rsa&lt;br /&gt;
&lt;br /&gt;
The output will look something like this:&lt;br /&gt;
&lt;br /&gt;
  Will output 1024 bit rsa secret key to 'id_rsa'&lt;br /&gt;
  Generating key, this may take a while...&lt;br /&gt;
  Public key portion is:&lt;br /&gt;
  ssh-rsa AAAAB3Nza[...]&lt;br /&gt;
  Fingerprint: md5 ca:e8:f0:b7:f6:7b:c2:b6:b9:71:e4:45:86:a9:ff:b8&lt;br /&gt;
&lt;br /&gt;
Copy and paste the one line (in this example, starting with 'ssh-rsa' onto the end of the host's authorized_keys file (often in ~/.ssh/).&lt;br /&gt;
&lt;br /&gt;
From the phone, ssh with -i:&lt;br /&gt;
&lt;br /&gt;
  ssh -i id_rsa user@host&lt;br /&gt;
&lt;br /&gt;
This works for me.  I ripped off these instructions from: [[http://forum.openwrt.org/viewtopic.php?pid=53705]]&lt;br /&gt;
&lt;br /&gt;
===GUI on desktop through SSH===&lt;br /&gt;
&lt;br /&gt;
If you need to get the GUI on the phone onto the desktop via usb, you can use ssh as follows&lt;br /&gt;
&lt;br /&gt;
  ssh -l root -X -v 192.168.0.202&lt;br /&gt;
&lt;br /&gt;
Login, and run openmoko-finger-demo for example, and it will open up on the desktop. To get landscape view, just resize the GUI window on the desktop.&lt;br /&gt;
&lt;br /&gt;
===Remote apps on neo===&lt;br /&gt;
&lt;br /&gt;
To get desktop apps to show up on your neo, first log in to the phone&lt;br /&gt;
&lt;br /&gt;
  ssh -l root 192.168.0.202&lt;br /&gt;
&lt;br /&gt;
Then once inside, run:&lt;br /&gt;
&lt;br /&gt;
  DISPLAY=:0 xhost +192.168.0.200&lt;br /&gt;
&lt;br /&gt;
After this you can close the ssh session. Back on the desktop computer, run:&lt;br /&gt;
&lt;br /&gt;
  DISPLAY=moko:0 xclock&lt;br /&gt;
&lt;br /&gt;
Note that the xhost command will allow remote applications on 192.168.0.200 to access the X server. It will allow anyone on the desktop machine to access the X server of the neo, including snooping anything you type on it. To disallow remote applications again, run this in the neo:&lt;br /&gt;
&lt;br /&gt;
  DISPLAY=:0 xhost -192.168.0.200&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;bottom&amp;quot;&amp;gt;&amp;lt;/span&amp;gt; &lt;br /&gt;
{{Languages|USB Networking}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]]&lt;br /&gt;
[[Category:Implemented]]&lt;/div&gt;</summary>
		<author><name>ScaredyCat</name></author>	</entry>

	</feed>