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

	<entry>
		<id>http://wiki.openmoko.org/wiki/Who_is_Who</id>
		<title>Who is Who</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Who_is_Who"/>
				<updated>2009-07-29T09:34:02Z</updated>
		
		<summary type="html">&lt;p&gt;Jserv: Added jserv&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you subscribe to a mailing list or join an IRC channel, you will see people speaking, answering some questions, but you may ask:&lt;br /&gt;
* Who is who?&lt;br /&gt;
* Who can I trust when they say something?&lt;br /&gt;
This page should serve as a list of community members and their areas of expertise.&lt;br /&gt;
&lt;br /&gt;
= Community members =&lt;br /&gt;
&lt;br /&gt;
IRC nicknames are in brackets after each name.&lt;br /&gt;
&lt;br /&gt;
== [[Kernel]] ==&lt;br /&gt;
&lt;br /&gt;
* Luca Capello&lt;br /&gt;
* Mike Westerhof (mwester)&lt;br /&gt;
* Nelson Castillo (Arhuaco)&lt;br /&gt;
* Paul Fertser (PaulFertser)&lt;br /&gt;
* Timo Juhani Lindfors (lindi-)&lt;br /&gt;
* Rod Whitby (rwhitby)&lt;br /&gt;
* Werner Almesberger (wpwrak)&lt;br /&gt;
&lt;br /&gt;
== [[FSO]] (freesmartphone.org) ==&lt;br /&gt;
* Michael Lauer ([[user:Mickey|Mickey]])&lt;br /&gt;
* Jan Luebbe (Shoragan)&lt;br /&gt;
* Daniel Willmann (Alphaone)&lt;br /&gt;
* Stefan Schmidt&lt;br /&gt;
&lt;br /&gt;
== [[Om2009]] ==&lt;br /&gt;
* Angus Ainslie (nytowl)&lt;br /&gt;
&lt;br /&gt;
== [[SHR]] ==&lt;br /&gt;
* Julien Cassignol (Ainulindale)&lt;br /&gt;
* David Kozub (dent)&lt;br /&gt;
* Klaus Kurzmann (mrmoku)&lt;br /&gt;
* Wolfgang Kroener (azog)&lt;br /&gt;
* Hire&lt;br /&gt;
* David Wagner (deubeuliou)  &lt;br /&gt;
* Montgoss&lt;br /&gt;
* Dolf                       &lt;br /&gt;
* Quickdev (RIP)&lt;br /&gt;
* Sebastian Spaeth (spaetz)  &lt;br /&gt;
* Cameron Frazier (Toaster)&lt;br /&gt;
* Didier (ptitjes)       &lt;br /&gt;
* Yorick (yoyo)&lt;br /&gt;
* Tom (Tasn)               &lt;br /&gt;
* Morphis&lt;br /&gt;
* Hiciu                      &lt;br /&gt;
* Sebastian Krzyszkowiak (dos)&lt;br /&gt;
* Stian Skjelstad (mywave)  &lt;br /&gt;
* Tilman Sauerbeck (tilman)&lt;br /&gt;
* Mike Westerhof (mwester)    &lt;br /&gt;
* Bobby Martin (wurp2)&lt;br /&gt;
&lt;br /&gt;
== [[hackable:1]] ==&lt;br /&gt;
* Marcus Bauer (iscape)&lt;br /&gt;
* Jérôme Blondon (jbl2024)&lt;br /&gt;
* Sébastien Bocahu (zecrazytux)&lt;br /&gt;
* Pierre Pronchery (khorben)&lt;br /&gt;
* David Wagner (deubeuliou)&lt;br /&gt;
&lt;br /&gt;
== [[Paroli]] ==&lt;br /&gt;
* Mirko Lindner (mirko)&lt;br /&gt;
&lt;br /&gt;
== [[Smedia_Glamo_3362#Hardware_Accelerated_Projects|X.org / Glamo (Graphics subsystem)]] ==&lt;br /&gt;
* Lars-Peter Clausen (larsc)&lt;br /&gt;
* Thomas White (Weiss)&lt;br /&gt;
* Andreas Pokorny (DieMumiee)&lt;br /&gt;
* Timo Juhani Lindfors (lindi-)&lt;br /&gt;
&lt;br /&gt;
== [http://activationrecord.net/radekp/openmoko/qtmoko/ QtMoko] ==&lt;br /&gt;
* Lorn Potter (lpotter)&lt;br /&gt;
* Radekp&lt;br /&gt;
* Franky Van Liedekerke (liedekef)&lt;br /&gt;
* Fabio Alessandro Locati (fale)&lt;br /&gt;
&lt;br /&gt;
== [[MokoMakefile]] ==&lt;br /&gt;
* Rod Whitby (rwhitby)&lt;br /&gt;
&lt;br /&gt;
== [[gta02-core]] ==&lt;br /&gt;
(community project to create a new hardware revision of the gta02 hardware)&lt;br /&gt;
* Werner Almesberger (wpwrak)&lt;br /&gt;
&lt;br /&gt;
= Officials members of the Openmoko Team =&lt;br /&gt;
&lt;br /&gt;
''Note: This is severly outdated. Most of the people listed here as officials do not work for Openmoko anymore.''&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;margin: 0em &amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Name !! email !! Wiki username !! IRC nickname !! Position&lt;br /&gt;
|-&lt;br /&gt;
| Allen Chang || || {{user|allen_chang}} || || GTA Hardware Engineer ('''Left Openmoko''')&lt;br /&gt;
|-&lt;br /&gt;
| Andy Green || ''andy'' at openmoko dot ''com'' || {{user|warmcat}} || agreen || Software Developer/kernel maintainer ('''Left Openmoko'''. Here for archives.)&lt;br /&gt;
|-&lt;br /&gt;
| Anthony Chang || || || || Software Developer ('''Left Openmoko''')&lt;br /&gt;
|-&lt;br /&gt;
| Candy Chou || || {{user|candy_chou}} || || GTA/HXD Hardware Engineer ('''Left Openmoko''')&lt;br /&gt;
|-&lt;br /&gt;
| Dkay Chen || || {{user|dkay_chen}} || || GTA/HXD Hardware Engineer ('''Left Openmoko''')&lt;br /&gt;
|-&lt;br /&gt;
| Jeremy Chang || || || || Software Developer ('''Left Openmoko''')&lt;br /&gt;
|-&lt;br /&gt;
| Jollen Chen || || || ||  Marketing('''Left Openmoko''')&lt;br /&gt;
|-&lt;br /&gt;
| Tick Chen || || || || Software Developer('''Left Openmoko''')&lt;br /&gt;
|-&lt;br /&gt;
| Guillaume 'Charlie' Chereau || ''charlie'' at openmoko dot ''org'' || || || ('''Left Openmoko'''. Here for archives.)&lt;br /&gt;
|-&lt;br /&gt;
| Julian Chu || ''julian_chu'' at openmoko dot ''com'' || || || Software Developer ('''Left Openmoko''')&lt;br /&gt;
|-&lt;br /&gt;
| Holger 'Zecke' Freyther || ''zecke'' at openmoko dot ''org'' || || || Software Developer ('''Left Openmoko''')&lt;br /&gt;
|-&lt;br /&gt;
| Graeme Gregory || ''graeme'' at openmoko dot ''org'' || || XorA || ('''Left Openmoko''')&lt;br /&gt;
|-&lt;br /&gt;
| Carsten Haitzler || ''raster'' at openmoko dot ''org'' || || raster || ('''Left Openmoko'''. Here for archives.)&lt;br /&gt;
|-&lt;br /&gt;
| Matt Hsu || || {{user|Matt}} || || Software Developer ('''Left Openmoko''')&lt;br /&gt;
|-&lt;br /&gt;
| Wendy Hung || || || || Testing ('''Left Openmoko''')&lt;br /&gt;
|-&lt;br /&gt;
| Regina Kim || || || || Testing ('''Left Openmoko''')&lt;br /&gt;
|-&lt;br /&gt;
| William Lai || ''will'' at openmoko dot ''com'' || || || Design Team Project Manager&lt;br /&gt;
|-&lt;br /&gt;
| Michael 'Mickey' Lauer || || {{user|Mickey}} || || Software Developer ('''Left Openmoko'''. Freelancer - maintains FSO.)&lt;br /&gt;
|-&lt;br /&gt;
| John Lee || || || || Software Developer ('''Left Openmoko''')&lt;br /&gt;
|-&lt;br /&gt;
| Tim Lee || || {{user|Tim}} || || Hardware Manager&lt;br /&gt;
|-&lt;br /&gt;
| Marek Lindner || ''marek'' at openmoko dot ''com'' || || || Software Developer ('''Left Openmoko''')&lt;br /&gt;
|-&lt;br /&gt;
| Xiangfu Liu || ''xiangfu'' at openmoko dot ''org'' || {{user|liuxf}} || || Software Developer ('''Left Openmoko''')&lt;br /&gt;
|-&lt;br /&gt;
| Jan 'Shoragan' Luebbe || || || || Openmoko student (part-time) ('''Left Openmoko''')&lt;br /&gt;
|-&lt;br /&gt;
| Steven Mosher || || {{user|steve}} || || Vice President of Marketing ('''Left Openmoko''')&lt;br /&gt;
|-&lt;br /&gt;
| Sean Moss-Pultz || || {{user|Sean}} || || CEO&lt;br /&gt;
|-&lt;br /&gt;
| Shawn Lin || || {{user|shawn_lin}} || || RF Engineer('''Left Openmoko''')&lt;br /&gt;
|-&lt;br /&gt;
| Joerg Reisenweber || || {{user|jOERG}} || || Hardware Engineer ('''Left Openmoko'''. Here for archives.)&lt;br /&gt;
|-&lt;br /&gt;
| Michael Shiloh || ''michael'' at openmoko dot ''org'' || {{user|Michaelshiloh}} || || Head of Developer Relations ('''Left Openmoko'''. Here for archives.)&lt;br /&gt;
|-&lt;br /&gt;
| Werner Almesberger || ''werner'' at openmoko dot ''org'' || || || ('''Left Openmoko'''.  Here for archives.)&lt;br /&gt;
|-&lt;br /&gt;
| Wolfgang Spraul || ''wolfgang'' at openmoko dot ''com'' || || || Vice President of Engineering ('''Left Openmoko''')&lt;br /&gt;
|-&lt;br /&gt;
| Joachim Steiger || ''roh'' at openmoko dot ''org'' || {{user|Roh}} || roh || Central Services ('''Left Openmoko'''.  Here for archives.)&lt;br /&gt;
|-&lt;br /&gt;
| Teenie Hung || || {{user|teenie_hung}} || || Operations Head ('''Left Openmoko''')&lt;br /&gt;
|-&lt;br /&gt;
| Harry Tsai || ''tsaiharry'' at gmail dot ''com'' || || || long time ago he was Vice President of Sales in Openmoko, but that is past. ('''Left Openmoko'''. Here for archives.)&lt;br /&gt;
|-&lt;br /&gt;
| Neng-Yu 'Tony' Tu || || {{user|Tony Tu}} || || Project manager (gta01/02), software developer ('''Left Openmoko'''. Here for archives.) &lt;br /&gt;
|-&lt;br /&gt;
| Brenda Wang || ''brenda_wang'' at openmoko dot ''com'' || {{user|Coolcat}} || || Used to Wiki editor . volunteer now. ('''Left Openmoko''')&lt;br /&gt;
|-&lt;br /&gt;
| Harald Welte || ''laforge'' at openmoko dot ''org'' || {{user|HaraldWelte}} || LaF0rge || ('''Left Openmoko'''. Here for archives.)&lt;br /&gt;
|-&lt;br /&gt;
| Daniel 'Alphaone' Willmann || || {{user|DanielWillmann}} || || Software Developer ('''Left Openmoko'''. Here for archives.)&lt;br /&gt;
|-&lt;br /&gt;
| Thomas Wood || || {{user|ThomasWood}} || || Was hired as part of OpenedHand. ('''No longer employed by Openmoko''')&lt;br /&gt;
|-&lt;br /&gt;
| OLV Wu || ''olv'' at openmoko dot ''org'' || || || Software Developer ('''Left Openmoko''')&lt;br /&gt;
|-&lt;br /&gt;
| Erin Yeh || ''erin_yueh'' at openmoko dot ''org''||{{user|erin}} || || Software Developer ('''Left Openmoko''')&lt;br /&gt;
|-&lt;br /&gt;
| Mirko Lindner || ''mirko'' at openmoko dot ''com''||{{user|Vegyraupe}} || mirko-paroli || Software Developer (om2009/paroli) ('''Left Openmoko''')&lt;br /&gt;
|-&lt;br /&gt;
| Angus Ainslie || ''nytowl'' at openmoko dot ''org''||{{user|Nytowl}} || nytowl || Distribution maintainer (om2009) ('''Left Openmoko''')&lt;br /&gt;
|-&lt;br /&gt;
| Ray Chao || ''ray_chao'' at openmoko dot ''org''||{{user|Ray}} || jc || System Administrator ('''Left Openmoko''')&lt;br /&gt;
|-&lt;br /&gt;
| Chelsea Wei || ''chelsea'' at openmoko dot ''com''||{{user|Chelsea}} || || ('''Left Openmoko''')&lt;br /&gt;
|-&lt;br /&gt;
| Jim Huang || ''jserv'' at openmoko dot ''org''||{{user|jserv}} || || ('''Left Openmoko''')&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Openmoko Inc]]&lt;/div&gt;</summary>
		<author><name>Jserv</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Regular_Training_Programs</id>
		<title>Regular Training Programs</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Regular_Training_Programs"/>
				<updated>2008-03-23T00:36:05Z</updated>
		
		<summary type="html">&lt;p&gt;Jserv: /* Programs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
To practice and improve the skills for team work, every software engineer at openmoko Taipei office would attend weekly training / experience sharing events. and be one of the speakers of the regular events by turns.&lt;br /&gt;
&lt;br /&gt;
== Orientations ==&lt;br /&gt;
The orientations and topics are dedicated to the purpose as following:&lt;br /&gt;
# [[OpenMoko_FOSS_Tools_Introduction]]&lt;br /&gt;
# Manufacturing process and Factory testing procedure&lt;br /&gt;
# Case study for OpenMoko software architecture and designs&lt;br /&gt;
# Phone functionality and inter-connectivity&lt;br /&gt;
# Recent development progress of [[OpenLab]]&lt;br /&gt;
&lt;br /&gt;
== Programs ==&lt;br /&gt;
Rough schedule for each of the events/programs done and planned by openmoko software team as following:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! Topic !! Speaker !! Date !! Summary / Notes !! Slides / Reference Materials&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeedd;&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot;|Regular Training Program&lt;br /&gt;
|-&lt;br /&gt;
|Introduction to Autotools || [[User:jserv|Jim Huang]] || Jul 8, 2007 || Brief introduction to GNU Autotools (automake, autoconf, and libtool), which are useful for cross development and diverse environments. || [[Media:moko-autotools.pdf|moko-autotools.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Text Layout in GTK+ World || olv || Jul 20, 2007 || An introduction to pango and text layout. || [[Media:Text_layout_in_gtk.pdf|Text_layout_in_gtk.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Introduction to GSM Multiplexer || Sweden Hsu ||Jul 27, 2007 || Overview to GSM Multiplexer (GSM 07.10) and analyze current implementation of OpenMoko and Linux kernel support.&lt;br /&gt;
|-&lt;br /&gt;
|OpenMoko GSM/GPRS Overview || [[User:Jserv|Jim Huang]] || Aug 3, 2007 || Overview to OpenMoko gsmd/libgsmd/gsmmux for GSM/GPRS functions in the aspect of system-level architecture and designs. || [[Media:openmokogsm.pdf|openmokogsm.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Factory and Production Test|| Nod Huang || Aug 24, 2007 || Experience for GTA01 production in Suzhou.  The presentation will cover testing procedure, related software, and possible issues.  Also, he will share his thoughts about GTA01/HXD8/GTA02 production considerations. ||[[Media:Dash_Production_Flow.pdf|Dash_Production_Flow.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|3G Feature Phone Case Study || Erin Yuen || Sep 7, 2007 || Take BenQ 3G Feature Phone design and production as case study. || [[Media:Benq_experiences_0907.pdf|BenQ_experiences.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Three levels of Fun in Graphics || olv || Sep 14, 2007 || There are three things to do in designing a GUI toolkit: graphics, human interaction, and widgets... || [[Media:graphics_fun.pdf|graphics_fun.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Automatic Approaches for Building, Deployment, and Testing || [[User:John|John Lee]] || Sep 21, 2007 || A brief introduction to the current automatic build/deploy/test method. || [[Media:auto.pdf|auto.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Case Study: Linux-based Skype/GSM dual-mode phone || IFan &amp;quot;Tick&amp;quot; Chen || Sep 28, 2007 || Share the experience of Linux-based Skype/GSM dual-mode phone project inside Compal Communications Inc. as case study. || [[Media:Dual.pdf|dual.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Graphics and stuff (TBD) || Raster || Nov 02, 2007 || Will talk about Graphics and stuff || TBA&lt;br /&gt;
|-&lt;br /&gt;
|EFL introduction || Jeremy Chang || Nov 16, 2007 || Enlightenment Foundation Libraries overview . || [[Media:EFL_intro.pdf|EFL introduction]] &lt;br /&gt;
|-&lt;br /&gt;
|Introduction to Boot and Application Launching Time Optimizations for Linux-based products || [[User:Jserv|Jim Huang]] || Nov 23, 2007 || How fast do we need in product expectations? Analyzing boot time and application launching.  Optimizations to boot time.  Tweaking in user-space. || &lt;br /&gt;
|-&lt;br /&gt;
|Introduction of the PBE|| [[User:Nod|Nod Huang]] || Nov 30, 2007 || 1. PBE file system 2. how to create a new package in PBE 3. PBE file system 4. how to create a new package in PBE || [[Media:PBE.pdf|PBE.pdf]] &lt;br /&gt;
|-&lt;br /&gt;
|Power consumption in kernel|| [[User:Willie|Willie Chen]] || Dec 7, 2007 || 1. How to reduce power consumption 2. Utilities 3. GTA01/GTA02 issues || [[Media:power.pdf|Power]]&lt;br /&gt;
|-&lt;br /&gt;
|ARM Exception System Introduction (HXD8 example)|| [[User:Alec|Alec Tsai]] || Jan 11, 2008 || 1. Exceptions 2. System Memory Map || [[Media:Exception.pdf|Exception]]&lt;br /&gt;
|-&lt;br /&gt;
| Object files Introduction|| [[User:tick | Tick]] || Feb, 22 2008 || A brief introductions to a.out and ELF || [[Media:elf.pdf| ELF]]&lt;br /&gt;
|- &lt;br /&gt;
| Kboot || [[User:werner| Werner]] || Feb, 29 2009 || An introduction and discussion about Kboot ||&lt;br /&gt;
|- &lt;br /&gt;
| Small introduction to Qtopia || [[User: zecke | Zecke]] || Mar, 07 2008 || A small introduction to Qtopia || [[Media: qtopia.pdf | Qtopia]]&lt;br /&gt;
|-&lt;br /&gt;
| Some daemons in OM-2007.2|| [[User:olv | olv]] || Mar, 14 2008 || A brief introduction to daemons running behind OM-2007.2 || [[Media:om-daemons.pdf| om-daemons.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
| Introduce to Audio || [[User:graeme | Graeme]] || Mar, 21 2008 ||  An introduction to the Audio system || [[Media: audio_presentation.pdf | Audio]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Training| ]]&lt;/div&gt;</summary>
		<author><name>Jserv</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:Jserv</id>
		<title>User:Jserv</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:Jserv"/>
				<updated>2008-03-23T00:35:17Z</updated>
		
		<summary type="html">&lt;p&gt;Jserv: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Jim Huang was born in Taiwan, and he usually uses &amp;quot;jserv&amp;quot; as his nickname in internet communication, including IRC, BBS, mailing-list, etc. Currently, he was working on software development for openmoko.&lt;/div&gt;</summary>
		<author><name>Jserv</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Regular_Training_Programs</id>
		<title>Regular Training Programs</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Regular_Training_Programs"/>
				<updated>2008-03-23T00:29:15Z</updated>
		
		<summary type="html">&lt;p&gt;Jserv: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Introduction ==&lt;br /&gt;
To practice and improve the skills for team work, every software engineer at openmoko Taipei office would attend weekly training / experience sharing events. and be one of the speakers of the regular events by turns.&lt;br /&gt;
&lt;br /&gt;
== Orientations ==&lt;br /&gt;
The orientations and topics are dedicated to the purpose as following:&lt;br /&gt;
# [[OpenMoko_FOSS_Tools_Introduction]]&lt;br /&gt;
# Manufacturing process and Factory testing procedure&lt;br /&gt;
# Case study for OpenMoko software architecture and designs&lt;br /&gt;
# Phone functionality and inter-connectivity&lt;br /&gt;
# Recent development progress of [[OpenLab]]&lt;br /&gt;
&lt;br /&gt;
== Programs ==&lt;br /&gt;
Rough schedule for each of the events/programs done and planned by [[Software_Team]] as following:&lt;br /&gt;
&lt;br /&gt;
{|&lt;br /&gt;
! Topic !! Speaker !! Date !! Summary / Notes !! Slides / Reference Materials&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeedd;&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;5&amp;quot;|Regular Training Program&lt;br /&gt;
|-&lt;br /&gt;
|Introduction to Autotools || [[User:jserv|Jim Huang]] || Jul 8, 2007 || Brief introduction to GNU Autotools (automake, autoconf, and libtool), which are useful for cross development and diverse environments. || [[Media:moko-autotools.pdf|moko-autotools.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Text Layout in GTK+ World || olv || Jul 20, 2007 || An introduction to pango and text layout. || [[Media:Text_layout_in_gtk.pdf|Text_layout_in_gtk.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Introduction to GSM Multiplexer || Sweden Hsu ||Jul 27, 2007 || Overview to GSM Multiplexer (GSM 07.10) and analyze current implementation of OpenMoko and Linux kernel support.&lt;br /&gt;
|-&lt;br /&gt;
|OpenMoko GSM/GPRS Overview || [[User:jserv|Jim Huang]] || Aug 3, 2007 || Overview to OpenMoko gsmd/libgsmd/gsmmux for GSM/GPRS functions in the aspect of system-level architecture and designs. || [[Media:openmokogsm.pdf|openmokogsm.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Factory and Production Test|| Nod Huang || Aug 24, 2007 || Experience for GTA01 production in Suzhou.  The presentation will cover testing procedure, related software, and possible issues.  Also, he will share his thoughts about GTA01/HXD8/GTA02 production considerations. ||[[Media:Dash_Production_Flow.pdf|Dash_Production_Flow.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|3G Feature Phone Case Study || Erin Yuen || Sep 7, 2007 || Take BenQ 3G Feature Phone design and production as case study. || [[Media:Benq_experiences_0907.pdf|BenQ_experiences.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Three levels of Fun in Graphics || olv || Sep 14, 2007 || There are three things to do in designing a GUI toolkit: graphics, human interaction, and widgets... || [[Media:graphics_fun.pdf|graphics_fun.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Automatic Approaches for Building, Deployment, and Testing || [[User:John|John Lee]] || Sep 21, 2007 || A brief introduction to the current automatic build/deploy/test method. || [[Media:auto.pdf|auto.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Case Study: Linux-based Skype/GSM dual-mode phone || IFan &amp;quot;Tick&amp;quot; Chen || Sep 28, 2007 || Share the experience of Linux-based Skype/GSM dual-mode phone project inside Compal Communications Inc. as case study. || [[Media:Dual.pdf|dual.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
|Graphics and stuff (TBD) || Raster || Nov 02, 2007 || Will talk about Graphics and stuff || TBA&lt;br /&gt;
|-&lt;br /&gt;
|EFL introduction || Jeremy Chang || Nov 16, 2007 || Enlightenment Foundation Libraries overview . || [[Media:EFL_intro.pdf|EFL introduction]] &lt;br /&gt;
|-&lt;br /&gt;
|Introduction to Boot and Application Launching Time Optimizations for Linux-based products || [[User:jserv|Jim Huang]] || Nov 23, 2007 || How fast do we need in product expectations? Analyzing boot time and application launching.  Optimizations to boot time.  Tweaking in user-space. || &lt;br /&gt;
|-&lt;br /&gt;
|Introduction of the PBE|| [[User:Nod|Nod Huang]] || Nov 30, 2007 || 1. PBE file system 2. how to create a new package in PBE 3. PBE file system 4. how to create a new package in PBE || [[Media:PBE.pdf|PBE.pdf]] &lt;br /&gt;
|-&lt;br /&gt;
|Power consumption in kernel|| [[User:Willie|Willie Chen]] || Dec 7, 2007 || 1. How to reduce power consumption 2. Utilities 3. GTA01/GTA02 issues || [[Media:power.pdf|Power]]&lt;br /&gt;
|-&lt;br /&gt;
|ARM Exception System Introduction (HXD8 example)|| [[User:Alec|Alec Tsai]] || Jan 11, 2008 || 1. Exceptions 2. System Memory Map || [[Media:Exception.pdf|Exception]]&lt;br /&gt;
|-&lt;br /&gt;
| Object files Introduction|| [[User:tick | Tick]] || Feb, 22 2008 || A brief introductions to a.out and ELF || [[Media:elf.pdf| ELF]]&lt;br /&gt;
|- &lt;br /&gt;
| Kboot || [[User:werner| Werner]] || Feb, 29 2009 || An introduction and discussion about Kboot ||&lt;br /&gt;
|- &lt;br /&gt;
| Small introduction to Qtopia || [[User: zecke | Zecke]] || Mar, 07 2008 || A small introduction to Qtopia || [[Media: qtopia.pdf | Qtopia]]&lt;br /&gt;
|-&lt;br /&gt;
| Some daemons in OM-2007.2|| [[User:olv | olv]] || Mar, 14 2008 || A brief introduction to daemons running behind OM-2007.2 || [[Media:om-daemons.pdf| om-daemons.pdf]]&lt;br /&gt;
|-&lt;br /&gt;
| Introduce to Audio || [[User:graeme | Graeme]] || Mar, 21 2008 ||  An introduction to the Audio system || [[Media: audio_presentation.pdf | Audio]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Training| ]]&lt;/div&gt;</summary>
		<author><name>Jserv</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Gsmd/document</id>
		<title>Gsmd/document</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Gsmd/document"/>
				<updated>2007-10-08T16:09:25Z</updated>
		
		<summary type="html">&lt;p&gt;Jserv: /* Gsmd */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
=== What is gsmd ===&lt;br /&gt;
'''Gsmd''' is a daemon that handles the communications between applications and GSM modem.&lt;br /&gt;
Applications manipulate gsmd through the APIs defined in '''libgsmd'''. &lt;br /&gt;
libgsmd communicates with gsmd through unix socket, and modem goes through UART.&lt;br /&gt;
The diagram is as following.&lt;br /&gt;
&lt;br /&gt;
http://lh6.google.com/ticktock35/RwDCAWdUPEI/AAAAAAAAAD4/wBrRLv-1oyE/s400/gsmd_overview.jpg&lt;br /&gt;
&lt;br /&gt;
== Gsmd ==&lt;br /&gt;
GSMD is an event-driven daemon. Each event shall have a response and will pass through the function '''gsmd_select_main()''' in which finding and then executing their correspond callback functions.&lt;br /&gt;
&lt;br /&gt;
The last part of gsmd '''main''' function enters a infinite loop, trying to call '''gsmd_select_main'''.&lt;br /&gt;
&lt;br /&gt;
 while(1) {&lt;br /&gt;
          int ret = gsmd_select_main();&lt;br /&gt;
          ...&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
=== gsmd_select_main() ===&lt;br /&gt;
gsmd_select_main this is core of the callback function scheme. All devices, gsmd monitors and linked in a [http://wiki.kldp.org/wiki.php/LinkedList list], are described as a struct '''gsmd_fd''', and gsmd_select_main will [http://swoolley.org/man.cgi/select select] them. &lt;br /&gt;
Once an event comes out from one of the devices, gsmd_select_main will try to call it's '''callback function''' that devices registered.&lt;br /&gt;
&lt;br /&gt;
 int gsmd_select_main()&lt;br /&gt;
 {&lt;br /&gt;
        struct gsmd_fd *ufd, *ufd2;&lt;br /&gt;
        fd_set readset, writeset, exceptset;&lt;br /&gt;
        int i;&lt;br /&gt;
 &lt;br /&gt;
        FD_ZERO(&amp;amp;readset);&lt;br /&gt;
        FD_ZERO(&amp;amp;writeset);&lt;br /&gt;
        FD_ZERO(&amp;amp;exceptset);&lt;br /&gt;
 &lt;br /&gt;
        /* prepare read and write fdsets */&lt;br /&gt;
        llist_for_each_entry(ufd, &amp;amp;gsmd_fds, list) {&lt;br /&gt;
                if (ufd-&amp;gt;when &amp;amp; GSMD_FD_READ)&lt;br /&gt;
                        FD_SET(ufd-&amp;gt;fd, &amp;amp;readset);&lt;br /&gt;
 &lt;br /&gt;
                if (ufd-&amp;gt;when &amp;amp; GSMD_FD_WRITE)&lt;br /&gt;
                        FD_SET(ufd-&amp;gt;fd, &amp;amp;writeset);&lt;br /&gt;
 &lt;br /&gt;
                if (ufd-&amp;gt;when &amp;amp; GSMD_FD_EXCEPT)&lt;br /&gt;
                        FD_SET(ufd-&amp;gt;fd, &amp;amp;exceptset);&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        '''i = select(maxfd+1, &amp;amp;readset, &amp;amp;writeset, &amp;amp;exceptset, NULL);'''&lt;br /&gt;
        if (i &amp;gt; 0) {&lt;br /&gt;
                /* call registered callback functions */&lt;br /&gt;
                llist_for_each_entry_safe(ufd, ufd2, &amp;amp;gsmd_fds, list) {&lt;br /&gt;
                        int flags = 0;&lt;br /&gt;
 &lt;br /&gt;
                        if (FD_ISSET(ufd-&amp;gt;fd, &amp;amp;readset))&lt;br /&gt;
                                flags |= GSMD_FD_READ;&lt;br /&gt;
 &lt;br /&gt;
                        if (FD_ISSET(ufd-&amp;gt;fd, &amp;amp;writeset))&lt;br /&gt;
                                flags |= GSMD_FD_WRITE;&lt;br /&gt;
  &lt;br /&gt;
                        if (FD_ISSET(ufd-&amp;gt;fd, &amp;amp;exceptset))&lt;br /&gt;
                                flags |= GSMD_FD_EXCEPT;&lt;br /&gt;
 &lt;br /&gt;
                        if (flags)&lt;br /&gt;
                               ''' ufd-&amp;gt;cb(ufd-&amp;gt;fd, flags, ufd-&amp;gt;data);'''&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
        return i;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== gsmd_fd ==== &lt;br /&gt;
 struct gsmd_fd {&lt;br /&gt;
     struct llist_head list;&lt;br /&gt;
     int fd;                         /* file descriptor */&lt;br /&gt;
     unsigned int when;&lt;br /&gt;
     '''int (*cb)(int fd, unsigned int what, void *data);'''&lt;br /&gt;
     void *data;                     /* void * to pass to callback */&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
When there are anything change in fd, the gsmd_select_main will detect them and try to call it's callback function cb.&lt;br /&gt;
&lt;br /&gt;
That means if you redirect the callback function cb to another implementation, the gsmd will behave very differently.&lt;br /&gt;
&lt;br /&gt;
==== gsmd_atcmd ====&lt;br /&gt;
 struct gsmd_atcmd {&lt;br /&gt;
        '''struct llist_head list;'''&lt;br /&gt;
        void *ctx;&lt;br /&gt;
        '''int (*cb)(struct gsmd_atcmd *cmd, void *ctx, char *resp);'''&lt;br /&gt;
        char *resp;&lt;br /&gt;
        int32_t ret;&lt;br /&gt;
        u_int32_t buflen;&lt;br /&gt;
        u_int16_t id;&lt;br /&gt;
        u_int8_t flags;&lt;br /&gt;
        char *cur;&lt;br /&gt;
        char buf[];&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
=== callback functions ===&lt;br /&gt;
Gsmd opens at least one devices. One is uart to modem and others are the Unix socket, communicating with libgsmd.&lt;br /&gt;
 &lt;br /&gt;
'''atcmd_select_cb''' is the default callback function that dealing the UART to the modem. It will handle sending AT commands to GSM modem or receive whatever return from modem and send them into parser. &lt;br /&gt;
&lt;br /&gt;
The default parser callback function of UART (to modem) is '''ml_parse''', in which dealing with reading the response of modem dispatch the correct call back function to handle the response.&lt;br /&gt;
 &lt;br /&gt;
==== atcmd_select_cb ====&lt;br /&gt;
&lt;br /&gt;
===== atcmd_fill =====&lt;br /&gt;
&lt;br /&gt;
===== atcmd_submit =====&lt;br /&gt;
&lt;br /&gt;
==== ml_parse ====&lt;br /&gt;
ml_parse is the parser callback function that handles:&lt;br /&gt;
* Initial GSM Modem&lt;br /&gt;
* handle correspond AT command callback&lt;br /&gt;
* handle notification callback&lt;br /&gt;
&lt;br /&gt;
===== Initialize GSM Modem =====&lt;br /&gt;
When the modem firmware is ready to initial, it will send '''AT-Command Interpreter ready''' to gsmd. If ml_parse get this string, gsmd will try to initialize the modem.&lt;br /&gt;
        if (strlen(buf) == 0 ||&lt;br /&gt;
            !strcmp(buf, &amp;quot;'''AT-Command Interpreter ready'''&amp;quot;)) {&lt;br /&gt;
                g-&amp;gt;interpreter_ready = 1;&lt;br /&gt;
               ''' gsmd_initsettings(g);'''&lt;br /&gt;
                gmsd_alive_start(g);&lt;br /&gt;
                return 0;&lt;br /&gt;
        }&lt;br /&gt;
What modem write to gsmd will put in &amp;quot;buf&amp;quot;. And if the contents of the &amp;quot;buf&amp;quot; is &amp;quot;AT-Command Interpreter ready&amp;quot; the automatic gsmd initialize will start.&lt;br /&gt;
&lt;br /&gt;
gsmd_alive_start is a scheme that gsmd detect if the modem is still alive or not. It will send an &amp;quot;AT&amp;quot; to modem periodically, and check the modem's response.&lt;br /&gt;
&lt;br /&gt;
===== handle correspond AT command call back =====&lt;br /&gt;
===== handle notification call back =====&lt;br /&gt;
&lt;br /&gt;
== libgsmd ==&lt;br /&gt;
'''libgsmd''' is a library with C language API for application programs. Programs using this library can use the phone, e.g. make phone calls, receive incoming calls, register to the network, etc.&lt;br /&gt;
&lt;br /&gt;
===='''libgsmd_sms'''====&lt;br /&gt;
&lt;br /&gt;
'''libgsmd_sms''' is about all related SMS functions. The API is as below:&lt;br /&gt;
&lt;br /&gt;
* '''List Messages''': can list all SMS message by 'stat' value&lt;br /&gt;
 extern int lgsm_sms_list(struct lgsm_handle *lh, enum gsmd_msg_sms_type stat);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Read Message''': It can read one SMS message by 'index' value&lt;br /&gt;
 extern int lgsm_sms_read(struct lgsm_handle *lh, int index);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Delete Message''': can delete one SMS message by 'index' and 'del_flag' values&lt;br /&gt;
 extern int lgsm_sms_delete(struct lgsm_handle *lh, const struct lgsm_sms_delete *sms_del);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Send Message''': can send one SMS message &lt;br /&gt;
 extern int lgsm_sms_send (struct lgsm_handle *lh, const struct lgsm_sms *sms);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Write Message to Memory''': can write one SMS message to preferred memory&lt;br /&gt;
 extern int lgsm_sms_write (struct lgsm_handle *lh, const struct lgsm_sms_write *sms_write);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Retrieve SMS storage Information''': retrieve all SMS storage information&lt;br /&gt;
 extern int lgsm_sms_get_storage (struct lgsm_handle *lh);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Set preferred SMS storage''': can set SMS preferred storage&lt;br /&gt;
 extern int lgsm_sms_set_storage (struct lgsm_handle *lh, enum ts0705_mem_type mem1, enum ts0705_mem_type mem2, enum ts0705_mem_type mem3);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Retrieve current default service center address'''&lt;br /&gt;
 extern int lgsm_sms_get_smsc(struct lgsm_handle *lh);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Set new default service center address'''&lt;br /&gt;
 extern int lgsm_sms_set_smsc(struct lgsm_handle *lh, const char *number);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Packing of 7-bit characters'''&lt;br /&gt;
 extern int packing_7bit_character(const char *src, struct lgsm_sms *dest);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''libgsmd_phonebook'''====&lt;br /&gt;
&lt;br /&gt;
'''libgsmd_phonebook''' is about all related phonebook functions. The API is as below:&lt;br /&gt;
&lt;br /&gt;
* '''Store''' a specific phonebook entry 'pb' into phone&lt;br /&gt;
 extern int lgsm_pb_set_entry(struct lgsm_handle *lh, struct lgsm_pb_entry *pb);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''List''' of supported phonebook memory storage &lt;br /&gt;
 extern int lgsm_pb_list_storage(struct lgsm_handle *lh);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Select''' phonebook memory storage &lt;br /&gt;
 extern int lgsm_pb_set_storage(struct lgsm_handle *lh, char *storage);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Find phonebook entires''' which alphanumeric filed start with string &amp;lt;findtext&amp;gt; &lt;br /&gt;
 extern int lgsm_pb_find_entry(struct lgsm_handle *lh, const struct lgsm_phonebook_find *pb_find);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Read phonebook entry''' in location number index &lt;br /&gt;
 extern int lgsm_pb_read_entry(struct lgsm_handle *lh, int index);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Read phonebook entries''' in location number range &lt;br /&gt;
 extern int lgsm_pb_read_entries(struct lgsm_handle *lh, const struct lgsm_phonebook_readrg *pb_readrg);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Delete''' phonebook entry in location index &lt;br /&gt;
 extern int lgsm_pb_del_entry(struct lgsm_handle *lh, int index);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Write''' phonebook entry in location &lt;br /&gt;
 extern int lgsm_pb_write_entry(struct lgsm_handle *lh, const struct lgsm_phonebook *pb);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Get the location range/nlength/tlength supported '''&lt;br /&gt;
 extern int lgsm_pb_get_support(struct lgsm_handle *lh);&lt;br /&gt;
&lt;br /&gt;
== libgsmd-tool ==&lt;br /&gt;
[http://wiki.openmoko.org/wiki/Gsmd#libgsmd-tool Please reference to here]&lt;br /&gt;
&lt;br /&gt;
== Debug Log ==&lt;br /&gt;
== To-do ==&lt;/div&gt;</summary>
		<author><name>Jserv</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Gsmd/document</id>
		<title>Gsmd/document</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Gsmd/document"/>
				<updated>2007-10-08T15:51:54Z</updated>
		
		<summary type="html">&lt;p&gt;Jserv: /* What is gsmd */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
=== What is gsmd ===&lt;br /&gt;
'''Gsmd''' is a daemon that handles the communications between applications and GSM modem.&lt;br /&gt;
Applications manipulate gsmd through the APIs defined in '''libgsmd'''. &lt;br /&gt;
libgsmd communicates with gsmd through unix socket, and modem goes through UART.&lt;br /&gt;
The diagram is as following.&lt;br /&gt;
&lt;br /&gt;
http://lh6.google.com/ticktock35/RwDCAWdUPEI/AAAAAAAAAD4/wBrRLv-1oyE/s400/gsmd_overview.jpg&lt;br /&gt;
&lt;br /&gt;
== Gsmd ==&lt;br /&gt;
GSMD is a event driven daemon. Each event shall has a response. &lt;br /&gt;
Every event will pass through the '''gsmd_select_main()''' in which finding and executing their correspond call back functions.&lt;br /&gt;
&lt;br /&gt;
The last part of gsmd '''main''' function enters a infinite loop, trying to call '''gsmd_select_main'''.&lt;br /&gt;
&lt;br /&gt;
 while(1) {&lt;br /&gt;
          int ret = gsmd_select_main();&lt;br /&gt;
          ...&lt;br /&gt;
  }&lt;br /&gt;
&lt;br /&gt;
=== gsmd_select_main() ===&lt;br /&gt;
gsmd_select_main this is core of the call back function scheme. All devices, gsmd monitors and linked in a [http://wiki.kldp.org/wiki.php/LinkedList list], are described as a struct '''gsmd_fd''', and gsmd_select_main will [http://swoolley.org/man.cgi/select select] them. &lt;br /&gt;
Once an event comes out from one of the devices, gsmd_select_main will try to call it's '''call back function''' that devices registered.&lt;br /&gt;
&lt;br /&gt;
 int gsmd_select_main()&lt;br /&gt;
 {&lt;br /&gt;
        struct gsmd_fd *ufd, *ufd2;&lt;br /&gt;
        fd_set readset, writeset, exceptset;&lt;br /&gt;
        int i;&lt;br /&gt;
 &lt;br /&gt;
        FD_ZERO(&amp;amp;readset);&lt;br /&gt;
        FD_ZERO(&amp;amp;writeset);&lt;br /&gt;
        FD_ZERO(&amp;amp;exceptset);&lt;br /&gt;
 &lt;br /&gt;
        /* prepare read and write fdsets */&lt;br /&gt;
        llist_for_each_entry(ufd, &amp;amp;gsmd_fds, list) {&lt;br /&gt;
                if (ufd-&amp;gt;when &amp;amp; GSMD_FD_READ)&lt;br /&gt;
                        FD_SET(ufd-&amp;gt;fd, &amp;amp;readset);&lt;br /&gt;
 &lt;br /&gt;
                if (ufd-&amp;gt;when &amp;amp; GSMD_FD_WRITE)&lt;br /&gt;
                        FD_SET(ufd-&amp;gt;fd, &amp;amp;writeset);&lt;br /&gt;
 &lt;br /&gt;
                if (ufd-&amp;gt;when &amp;amp; GSMD_FD_EXCEPT)&lt;br /&gt;
                        FD_SET(ufd-&amp;gt;fd, &amp;amp;exceptset);&lt;br /&gt;
        }&lt;br /&gt;
 &lt;br /&gt;
        '''i = select(maxfd+1, &amp;amp;readset, &amp;amp;writeset, &amp;amp;exceptset, NULL);'''&lt;br /&gt;
        if (i &amp;gt; 0) {&lt;br /&gt;
                /* call registered callback functions */&lt;br /&gt;
                llist_for_each_entry_safe(ufd, ufd2, &amp;amp;gsmd_fds, list) {&lt;br /&gt;
                        int flags = 0;&lt;br /&gt;
 &lt;br /&gt;
                        if (FD_ISSET(ufd-&amp;gt;fd, &amp;amp;readset))&lt;br /&gt;
                                flags |= GSMD_FD_READ;&lt;br /&gt;
 &lt;br /&gt;
                        if (FD_ISSET(ufd-&amp;gt;fd, &amp;amp;writeset))&lt;br /&gt;
                                flags |= GSMD_FD_WRITE;&lt;br /&gt;
  &lt;br /&gt;
                        if (FD_ISSET(ufd-&amp;gt;fd, &amp;amp;exceptset))&lt;br /&gt;
                                flags |= GSMD_FD_EXCEPT;&lt;br /&gt;
 &lt;br /&gt;
                        if (flags)&lt;br /&gt;
                               ''' ufd-&amp;gt;cb(ufd-&amp;gt;fd, flags, ufd-&amp;gt;data);'''&lt;br /&gt;
                }&lt;br /&gt;
        }&lt;br /&gt;
        return i;&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== gsmd_fd ==== &lt;br /&gt;
 struct gsmd_fd {&lt;br /&gt;
     struct llist_head list;&lt;br /&gt;
     int fd;                         /* file descriptor */&lt;br /&gt;
     unsigned int when;&lt;br /&gt;
     '''int (*cb)(int fd, unsigned int what, void *data);'''&lt;br /&gt;
     void *data;                     /* void * to pass to callback */&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
When there are anything change in fd, the gsmd_select_main will detect them and try to call it's call back function cb.&lt;br /&gt;
&lt;br /&gt;
That means if you redirect the cb to another implementation, the gsmd will behave very differently.&lt;br /&gt;
&lt;br /&gt;
==== gsmd_atcmd ====&lt;br /&gt;
 struct gsmd_atcmd {&lt;br /&gt;
        '''struct llist_head list;'''&lt;br /&gt;
        void *ctx;&lt;br /&gt;
        '''int (*cb)(struct gsmd_atcmd *cmd, void *ctx, char *resp);'''&lt;br /&gt;
        char *resp;&lt;br /&gt;
        int32_t ret;&lt;br /&gt;
        u_int32_t buflen;&lt;br /&gt;
        u_int16_t id;&lt;br /&gt;
        u_int8_t flags;&lt;br /&gt;
        char *cur;&lt;br /&gt;
        char buf[];&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
=== call back functions ===&lt;br /&gt;
Gsmd opens at least one devices. One is uart to modem and others are the Unix socket, communicating with libgsmd.&lt;br /&gt;
 &lt;br /&gt;
'''atcmd_select_cb''' is the default call back function that dealing the uart to the modem. It will handle sending AT command to modem or receive whatever return from modem and send them into parser. &lt;br /&gt;
&lt;br /&gt;
The default parser call back function of uart (to modem) is '''ml_parse''', in which dealing with reading the response of modem dispatch the correct call back function to handle the response.&lt;br /&gt;
 &lt;br /&gt;
==== atcmd_select_cb ====&lt;br /&gt;
&lt;br /&gt;
===== atcmd_fill =====&lt;br /&gt;
&lt;br /&gt;
===== atcmd_submit =====&lt;br /&gt;
&lt;br /&gt;
==== ml_parse ====&lt;br /&gt;
ml_parse is the parser call back function that handles:&lt;br /&gt;
* Initial GSM Modem&lt;br /&gt;
* handle correspond AT command call back&lt;br /&gt;
* handle notification call back&lt;br /&gt;
&lt;br /&gt;
===== initial GSM Modem =====&lt;br /&gt;
When the modem firmware is ready to initial, it will send '''AT-Command Interpreter ready''' to gsmd. If ml_parse get this string, gsmd will try to initialize the modem.&lt;br /&gt;
        if (strlen(buf) == 0 ||&lt;br /&gt;
            !strcmp(buf, &amp;quot;'''AT-Command Interpreter ready'''&amp;quot;)) {&lt;br /&gt;
                g-&amp;gt;interpreter_ready = 1;&lt;br /&gt;
               ''' gsmd_initsettings(g);'''&lt;br /&gt;
                gmsd_alive_start(g);&lt;br /&gt;
                return 0;&lt;br /&gt;
        }&lt;br /&gt;
What modem write to gsmd will put in &amp;quot;buf&amp;quot;. And if the contents of the &amp;quot;buf&amp;quot; is &amp;quot;AT-Command Interpreter ready&amp;quot; the automatic gsmd initialize will start.&lt;br /&gt;
&lt;br /&gt;
gsmd_alive_start is a scheme that gsmd detect if the modem is still alive or not. It will send an &amp;quot;AT&amp;quot; to modem periodically, and check the modem's response.&lt;br /&gt;
&lt;br /&gt;
===== handle correspond AT command call back =====&lt;br /&gt;
===== handle notification call back =====&lt;br /&gt;
&lt;br /&gt;
== libgsmd ==&lt;br /&gt;
'''libgsmd''' is a library with C language API for application programs. Programs using this library can use the phone, e.g. make phone calls, receive incoming calls, register to the network, etc.&lt;br /&gt;
&lt;br /&gt;
===='''libgsmd_sms'''====&lt;br /&gt;
&lt;br /&gt;
'''libgsmd_sms''' is about all related SMS functions. The API is as below:&lt;br /&gt;
&lt;br /&gt;
* '''List Messages''': can list all SMS message by 'stat' value&lt;br /&gt;
 extern int lgsm_sms_list(struct lgsm_handle *lh, enum gsmd_msg_sms_type stat);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Read Message''': It can read one SMS message by 'index' value&lt;br /&gt;
 extern int lgsm_sms_read(struct lgsm_handle *lh, int index);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Delete Message''': can delete one SMS message by 'index' and 'del_flag' values&lt;br /&gt;
 extern int lgsm_sms_delete(struct lgsm_handle *lh, const struct lgsm_sms_delete *sms_del);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Send Message''': can send one SMS message &lt;br /&gt;
 extern int lgsm_sms_send (struct lgsm_handle *lh, const struct lgsm_sms *sms);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Write Message to Memory''': can write one SMS message to preferred memory&lt;br /&gt;
 extern int lgsm_sms_write (struct lgsm_handle *lh, const struct lgsm_sms_write *sms_write);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Retrieve SMS storage Information''': retrieve all SMS storage information&lt;br /&gt;
 extern int lgsm_sms_get_storage (struct lgsm_handle *lh);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Set preferred SMS storage''': can set SMS preferred storage&lt;br /&gt;
 extern int lgsm_sms_set_storage (struct lgsm_handle *lh, enum ts0705_mem_type mem1, enum ts0705_mem_type mem2, enum ts0705_mem_type mem3);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Retrieve current default service center address'''&lt;br /&gt;
 extern int lgsm_sms_get_smsc(struct lgsm_handle *lh);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Set new default service center address'''&lt;br /&gt;
 extern int lgsm_sms_set_smsc(struct lgsm_handle *lh, const char *number);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Packing of 7-bit characters'''&lt;br /&gt;
 extern int packing_7bit_character(const char *src, struct lgsm_sms *dest);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===='''libgsmd_phonebook'''====&lt;br /&gt;
&lt;br /&gt;
'''libgsmd_phonebook''' is about all related phonebook functions. The API is as below:&lt;br /&gt;
&lt;br /&gt;
* '''Store''' a specific phonebook entry 'pb' into phone&lt;br /&gt;
 extern int lgsm_pb_set_entry(struct lgsm_handle *lh, struct lgsm_pb_entry *pb);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''List''' of supported phonebook memory storage &lt;br /&gt;
 extern int lgsm_pb_list_storage(struct lgsm_handle *lh);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Select''' phonebook memory storage &lt;br /&gt;
 extern int lgsm_pb_set_storage(struct lgsm_handle *lh, char *storage);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Find phonebook entires''' which alphanumeric filed start with string &amp;lt;findtext&amp;gt; &lt;br /&gt;
 extern int lgsm_pb_find_entry(struct lgsm_handle *lh, const struct lgsm_phonebook_find *pb_find);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Read phonebook entry''' in location number index &lt;br /&gt;
 extern int lgsm_pb_read_entry(struct lgsm_handle *lh, int index);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Read phonebook entries''' in location number range &lt;br /&gt;
 extern int lgsm_pb_read_entries(struct lgsm_handle *lh, const struct lgsm_phonebook_readrg *pb_readrg);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Delete''' phonebook entry in location index &lt;br /&gt;
 extern int lgsm_pb_del_entry(struct lgsm_handle *lh, int index);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Write''' phonebook entry in location &lt;br /&gt;
 extern int lgsm_pb_write_entry(struct lgsm_handle *lh, const struct lgsm_phonebook *pb);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* '''Get the location range/nlength/tlength supported '''&lt;br /&gt;
 extern int lgsm_pb_get_support(struct lgsm_handle *lh);&lt;br /&gt;
&lt;br /&gt;
== libgsmd-tool ==&lt;br /&gt;
[http://wiki.openmoko.org/wiki/Gsmd#libgsmd-tool Please reference to here]&lt;br /&gt;
&lt;br /&gt;
== Debug Log ==&lt;br /&gt;
== To-do ==&lt;/div&gt;</summary>
		<author><name>Jserv</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/OpenMoko_under_QEMU</id>
		<title>OpenMoko under QEMU</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/OpenMoko_under_QEMU"/>
				<updated>2007-06-24T18:10:01Z</updated>
		
		<summary type="html">&lt;p&gt;Jserv: /* Pre-built binaries */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;QEMU can basically be used in three ways to run [[OpenMoko]]. Depending on the purpose that you are going to use the emulator for, you should decide on the target platform.&lt;br /&gt;
&lt;br /&gt;
*''PC'' - OpenMoko can be built to run on regular i386 hardware, 32- or 64-bit and this is probably the fastest way to get OpenMoko running if you want to get an impression of how it looks.  In this scenario QEMU would only serve for isolating your [[OpenMoko]] installation from your normal system, or, if you're not on a UNIX system, QEMU provides a non-intrusive way to get Linux up quickly. More information can be found in the [[FAQ]] and [[Getting Openmoko working on host with Xoo|here]].&lt;br /&gt;
&lt;br /&gt;
*''Integrator/CP'' - this is the default ARM-based machine that QEMU knows about. This target is used with MACHINE=&amp;quot;qemuarm&amp;quot; and it is sufficient to run the original OpenMoko rootfs image, although it doesn't emulate any of the [[:Category:Neo1973 Hardware | Neo1973 Hardware]] except the very CPU core. Read more in the [[FAQ#Q:_Is_there_an_emulator_available_for_OpenMoko.3F|FAQ]].&lt;br /&gt;
&lt;br /&gt;
*''Neo1973'' - the QEMU tree available from OpenMoko repositories is also capable of emulating most of the actual [[Neo1973]] hardware, although not all of it at this moment. It is a work-in-progress and when it's more mature it is going to be submitted for merging to the main QEMU development tree.&lt;br /&gt;
&lt;br /&gt;
== Neo1973 emulation ==&lt;br /&gt;
&lt;br /&gt;
This target will (obviously) run original OpenMoko rootfs images, but then it should also be able to run the original u-boot and kernel images, the same ones that a real Neo1973 uses. Among other differences you will notice between this approach and the Integrator/CP target is you also get correct screen resolution, some (fake) battery readings, and other goodness. Currently missing parts of the emulator are: [[Hardware:AGPS|AGPS]] and [[Bluetooth]] - these things will still be worked on, as well as general usability. Even with these things missing, QEMU should provide substantial help in debugging kernel and u-boot issues to developers.&lt;br /&gt;
&lt;br /&gt;
What QEMU can '''*not*''' be used for, and probably no other emulator can, is speed measures and getting the general feel of OpenMoko performance. Code running in qemu runs with the maximum speed your host computer can provide with an overhead of translating target code to host code, and this overhead is not uniform across different instructions. This means that even if your virtual Neo reports near 100 BogoMIPS (which is the speed of a real Neo), different actions performed in the emulator will not run with the same speed. On most PCs you will notice the virtual Neo running faster than a real one (Audio related operations may be one of the exceptions).&lt;br /&gt;
&lt;br /&gt;
=== What hardware is supported ===&lt;br /&gt;
&lt;br /&gt;
Rough status for each of the components that need emulation, following the outline of [[:Category:Neo1973 Hardware | Neo1973 Hardware]] page.&lt;br /&gt;
{|&lt;br /&gt;
! Hardware !! Status !! Usage notes&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeedd;&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot;|S3C2410A Processor&lt;br /&gt;
|-&lt;br /&gt;
|ARM920T core || Works || Already in mainline QEMU.&lt;br /&gt;
|-&lt;br /&gt;
|Basic guts || Work || This includes GPIO interface, DMA, Interrupt Controller, Timers, NAND controller, MMC/SD host, [[I2C]] and IIS interfaces, Memory &amp;amp; Clock &amp;amp; Power management controllers, RAM.&lt;br /&gt;
|-&lt;br /&gt;
|Serial ports || Works || Use the &amp;quot;-serial&amp;quot; switch (maybe be specified multiple times) to tell QEMU where serial input/output should go to. GSM module will be connected on UART0.&lt;br /&gt;
|-&lt;br /&gt;
|RTC || Works || On start QEMU will load it with current time/date - the Neo1973 [[kernel]] doesn't use it for time/date source currently.&lt;br /&gt;
|-&lt;br /&gt;
|SPI || Works || The guest kernel can drive it using either the SPI interface or raw GPIO bitbanging.&lt;br /&gt;
|-&lt;br /&gt;
|LCD || Works || The virtual LCD will display as in QEMU window iff &amp;quot;-nographic&amp;quot; is not specified.&lt;br /&gt;
|-&lt;br /&gt;
|ADC || Works || Mouse events in QEMU window generate what would be touchscreen events on a Neo1973 and are passed to the guest OS through the on-chip ADC.&lt;br /&gt;
|-&lt;br /&gt;
|OHCI USB || Works || This part is in mainline QEMU. Use the &amp;quot;-usb&amp;quot; switch to enable the controller and &amp;quot;usb_add&amp;quot; in QEMU monitor to attach new virtual or physical USB devices.&lt;br /&gt;
|-&lt;br /&gt;
|Slave USB || Works || Linux's dummy HCD in conjunction with gadget filesystem API is used to make the virtual Neo appear as a real one connected to the host computer. See [[#Setting up USB connection|Setting up USB connection]] below. (Experimental)&lt;br /&gt;
|-&lt;br /&gt;
|Watchdog || Works || This is one of the less important on-chip peripherals in S3C2410. It is however used by Linux for rebooting the board.&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeedd;&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot;|[[I2C]] bus peripherals&lt;br /&gt;
|-&lt;br /&gt;
|[[PCF50606]] || Works || (Aka PMU) Fakes the battery charge level (set at 88%), POWER button, etc. Also contains and RTC, also unused by Linux.&lt;br /&gt;
|-&lt;br /&gt;
|[[LM4857]] || Works&lt;br /&gt;
|-&lt;br /&gt;
|[[WM8753L]] || Works || The CODEC is also connect to the CPU's IIS port. Basic [[Neo1973 Audio Subsystem|audio functionality]] is supported - see QEMU documentation on getting audio input/output from the emulator. Volume control has no effects.&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeedd;&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot;|Other peripherals&lt;br /&gt;
|-&lt;br /&gt;
|NAND Flash || Works || However, some pieces are not confirmed to be completely compatible with the real hardware because of lack thereof. Use &amp;quot;-mtdblock flashimagefilenamehere&amp;quot; switch to point QEMU to your flash image. The file should be at least 69206016 bytes big.&lt;br /&gt;
|-&lt;br /&gt;
|JBT6K74-AS(PI) || Works || (Aka LCM) Wired to the SPI channel 1&lt;br /&gt;
|-&lt;br /&gt;
|Buttons || Work || Enter is the AUX button, Space is the POWER button. Wired to on-chip GPIO and PCF50606.&lt;br /&gt;
|-&lt;br /&gt;
|SD card || Works || This part is already in mainline QEMU. Use the &amp;quot;-sd cardimagegoeshere&amp;quot; switch to point QEMU to the card image. The regular QEMU monitor commands for removable media can also be used. The card works, however the on-chip host controller gave block length errors on heavy I/O despite working as described in specification. I suspect the kernel driver. DMA operation is not tested.&lt;br /&gt;
|-&lt;br /&gt;
|Bluetooth&lt;br /&gt;
|style=&amp;quot;background-color:#ffffcc;&amp;quot;|Works&lt;br /&gt;
|A generic Bluetooth HCI (just like the BlueCore4 chip) is connected to internal USB hub (just like the Delta DBFM dongle). Currently qemu emulates no other bluetooth devices, so the dongle behaves as if there was no BT-enabled slaves around, being the only device on the piconet, i.e. is not really useful. Likely a Bluetooth keyboard will be emulated. A physical Bluetooth dongle can also be attached to the emulator (see USB documentation in QEMU).&lt;br /&gt;
|-&lt;br /&gt;
|[[GSM]] || Works || A fake modem is connected to UART0 understanding a (currently quite limited) subset of AT commands. Ultimately it should support as much functionality as possible (basic AT command set, fake GPRS connections, dialing and SMS send/receive). This way all parts of the phone subsystem (CALYPSO, TWL3014, TRF6151) will not have to be emulated. There is a possibility to wire a real GSM modem to QEMU's serial port.&lt;br /&gt;
|-&lt;br /&gt;
|[[Hardware:AGPS|AGPS]]&lt;br /&gt;
|style=&amp;quot;background-color:#ffcccc;&amp;quot;|To Do&lt;br /&gt;
|There are obvious difficulties emulating the chip, but hopefully it can be made to present the guest OS with some fixed coordinates later when more is known about the chip. Again a real chip could be connected to QEMU's serial port.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Current development is aiming for [[:Category:Neo1973_Hardware#GTA01Bv4 | GTA01Bv4]] compatibility; [[:Category:Neo1973_Hardware#GTA01Bv3 | earlier revisions]] can also be emulated if needed. The differences between the hardware revisions currently only manifest themselves in GPIO wiring. Hardware emulation is implemented in a clean-room manner using official specifications where possible.&lt;br /&gt;
&lt;br /&gt;
== How to get it running ==&lt;br /&gt;
&lt;br /&gt;
=== Using MokoMakefile ===&lt;br /&gt;
&lt;br /&gt;
This is the easiest way since you won't need to deal with the compiling and flashing processes yourself. See [[MokoMakefile#QEMU|MokoMakefile]] for details.&lt;br /&gt;
&lt;br /&gt;
=== Manual setup ===&lt;br /&gt;
&lt;br /&gt;
To obtain the latest source code for the emulator, you will want to do something like the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ svn checkout https://svn.openmoko.org/trunk/src/host/qemu-neo1973&lt;br /&gt;
$ cd qemu-neo1973&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now, we're going to configure and build the emulator (Note [[#Requirements|Requirements]] below):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ./configure --target-list=arm-softmmu  # GCC 3.x will be required, see --cc=&lt;br /&gt;
$ make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
See other available options for the configure script by appending &amp;quot;--help&amp;quot;.&lt;br /&gt;
Now you should have a working emulator under the name &amp;quot;arm-softmmu/qemu-system-arm&amp;quot;. To run OpenMoko you will also need to somehow install OpenMoko on your virtual phone, which is totally clean of any software at this moment. There are several block devices to choose from, the best option is probably to do exactly what the Neo1973 manufacturer does before it ships the device to the final user. This process is described in [[Bootloader]], [[Kernel]], [[NAND bad blocks]] and [[Devirginator]] but you don't need to know all the details. Two scripts are provided to generate a firmware for your phone, as realistic as possible. First run&lt;br /&gt;
&amp;lt;pre&amp;gt;$ openmoko/download.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
which will look up the list of latest available OpenMoko snapshot builds from buildhost.openmoko.org and choose the most recent [[u-boot]], Kernel, and root filesystem images, and download the images (unless they are already found in the openmoko/ directory). These binaries will be used by the next command:&lt;br /&gt;
&amp;lt;pre&amp;gt;$ openmoko/flash.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
which runs the emulator, loads u-boot into it and then uses u-boot's capability to program the Flash memory to install all the necessary parts of the system into the virtual Flash. It will also set up all the bootloading process including a boot menu (ENTER is [AUX] and SPACE is [POWER]), splash, u-boot environment and some default kernel parameters. If everything goes OK, the script should print a command which you can use to start using the emulator.&lt;br /&gt;
&lt;br /&gt;
QEMU has '''*tons*''' of commandline switches and things that can be configured. You can look them up in [http://www.qemu.org/user-doc.html QEMU user docs]. You will probably want to use the &amp;quot;-snapshot&amp;quot; switch, among other ones. Saving and restoring emulation state at any point (unrelated to &amp;quot;-snapshot&amp;quot;) should work as per QEMU user docs too.&lt;br /&gt;
&lt;br /&gt;
=== Pre-built binaries ===&lt;br /&gt;
&lt;br /&gt;
Win32 binaries shipped with firmware can be downloaded from [http://mdk.linux.org.tw/~jserv/openmoko/openmoko-emulator-win32-bin-20070625.zip openmoko-emulator-win32-bin-20070625.zip]. Tested on MS Windows XP and Vista Business.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
This QEMU tree has only been tested on GNU/Linux. To get graphical (not counting VNC) and/or audio output from the emulator you will need either SDL or Cocoa installed on your computer. To enable audio, see the available switches to the ./configure script.&lt;br /&gt;
&lt;br /&gt;
The scripts that sit in openmoko/ require lynx, wget, python and most GNU base utilities installed in standard locations.&lt;br /&gt;
&lt;br /&gt;
All of the build-time and run-time requirements listed in [http://www.qemu.org/user-doc.html QEMU documentation] apply. This includes zlib, etc. On distributions that use binary packages, remember that you need the packages ending in '''-dev''' or '''-devel'''.&lt;br /&gt;
&lt;br /&gt;
== QEMU and GNU debugger ==&lt;br /&gt;
&lt;br /&gt;
QEMU lets you debug operating system kernels and bootloaders like you debug all other programs. To do this you will need a debugger that speaks the GDB remote debugging protocol - [http://sourceware.org/gdb/ GDB] is the obvious choice. Some cross toolchains come with GDB already set up. Otherwise building cross-GDB yourself is quick and easy (compared to building binutils and cross-gcc).&lt;br /&gt;
&lt;br /&gt;
To debug u-boot, load the file &amp;quot;u-boot&amp;quot; into gdb (not &amp;quot;u-boot.bin&amp;quot;) that is produced by &amp;quot;make&amp;quot; when building u-boot. To debug a Linux kernel, load the file &amp;quot;vmlinux&amp;quot; from the main source directory into gdb. These files are in ELF format and contain all the symbol information and are not stripped of debugging data until you run &amp;quot;strip&amp;quot; on them, unlike &amp;quot;u-boot.bin&amp;quot; and &amp;quot;Image&amp;quot;/&amp;quot;zImage&amp;quot;/&amp;quot;uImage&amp;quot;. Next, tell QEMU to enable the gdbserver by appending the &amp;quot;-s&amp;quot; switch or issuing &amp;quot;gdbserver&amp;quot; in the monitor. Use the command &amp;lt;pre&amp;gt;(gdb) target remote localhost:1234&amp;lt;/pre&amp;gt; to make a connection to the emulator. From there you should be able to use all the usual GDB commands, including stepping instructions, setting breakpoints, watchpoints, inspecting stack, variables, registers and more. If gdb is running in the same directory from which it grabbed the ELF executable, the &amp;quot;edit&amp;quot; command should work so you can jump right to the source line which is executing.&lt;br /&gt;
&lt;br /&gt;
== Setting up USB connection ==&lt;br /&gt;
&lt;br /&gt;
It is possible (although not very straight forward, probably about the complexity of tun-tap networking) to connect the virtual, emulated Neo1973 to the Linux PC on which the emulator is running, and work with it as if a real Neo1973 was plugged into the computer's USB port, but no twiddling with cables is needed. If you're testing your applications on the Neo, it may be worth setting up this kind of connection because it lets you enable normal [[USB_Networking|networking between the PC and the phone and ssh into it]] (which is much more comfortable than typing commands into the OpenMoko's terminal emulator via on-screen keyboard). Here's what you will need in order to get this working:&lt;br /&gt;
&lt;br /&gt;
A Linux host with a 2.6 series kernel. The following drivers compiled-in or in modules: dummy_hcd, gadgetfs, usbnet, cdc_ether. Note that you need root access to perform most actions described here. Here's how to enable them in menuconfig.&lt;br /&gt;
&lt;br /&gt;
Find and enable '''Device Drivers''' -&amp;gt; '''USB support''' -&amp;gt; '''USB Gadget Support''' -&amp;gt; '''Support for USB Gadgets'''&lt;br /&gt;
&lt;br /&gt;
Find '''Device Drivers''' -&amp;gt; '''USB support''' -&amp;gt; '''USB Gadget Support''' -&amp;gt; '''USB Peripheral Controller''' and set it to '''Dummy HCD (DEVELOPMENT)'''&lt;br /&gt;
&lt;br /&gt;
Find and enable '''Device Drivers''' -&amp;gt; '''USB support''' -&amp;gt; '''USB Gadget Support''' -&amp;gt; '''Gadget Filesystem (EXPERIMENTAL)''' (this one is good to have as a module)&lt;br /&gt;
&lt;br /&gt;
Find and enable '''Device Drivers''' -&amp;gt; '''USB support''' -&amp;gt; '''USB Network Adapters''' -&amp;gt; '''Multi-purpose USB Networking Framework'''&lt;br /&gt;
&lt;br /&gt;
Find and enable '''Device Drivers''' -&amp;gt; '''USB support''' -&amp;gt; '''USB Network Adapters''' -&amp;gt; '''CDC Ethernet support (smart devices such as cable modems)'''&lt;br /&gt;
&lt;br /&gt;
These last two drivers are the same [[Getting Started with your Neo1973#By using Ethernet emulation over a USB cable|drivers that you need to work with a real Neo over USB network]]. After you've built the drivers, make sure that the copy of kernel headers in /usr/include/linux is up to date. In particular the file /usr/include/linux/usb_gadgetfs.h needs to be present and if your distribution came with headers older than 2.6.18 or so, then you need tell the package manager to update them, or you can do that manually with&lt;br /&gt;
&amp;lt;pre&amp;gt; # cp -a /usr/src/linux/include/linux/* /usr/include/linux/&amp;lt;/pre&amp;gt;&lt;br /&gt;
(assuming that your kernel sources are in /usr/src/linux). It is important that this is done before building qemu because the build system checks if these headers are functional and in case they aren't found it will disable the USB Slave functionality.&lt;br /&gt;
&lt;br /&gt;
After building qemu and before running it, make sure that the modules are loaded into the kernel. I found it useful to load gadgetfs with the following command:&lt;br /&gt;
&amp;lt;pre&amp;gt; # modprobe gadgetfs default_uid=1000  # assuming my User ID is 1000&amp;lt;/pre&amp;gt;&lt;br /&gt;
and added the following line to my /etc/fstab:&lt;br /&gt;
&amp;lt;pre&amp;gt;gadget         /dev/gadget    gadgetfs   noauto,user,group         0   0&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure that the mountpoint /dev/gadget exists:&lt;br /&gt;
&amp;lt;pre&amp;gt; # mkdir -p /dev/gadget&amp;lt;/pre&amp;gt;&lt;br /&gt;
After that the rest of the procedure can be performed from your regular user account. Mounting gadgetfs is done with:&lt;br /&gt;
&amp;lt;pre&amp;gt; $ mount /dev/gadget&amp;lt;/pre&amp;gt;&lt;br /&gt;
The &amp;quot;default_uid&amp;quot; parameter changes the ownership on all files under /dev/gadget to your own and since the files there are created and destroyed dynamically, there's no easy way to have that performed by ''udev''. Now running qemu as you usually do but appending &amp;quot;-usb -usbgadget&amp;quot; should enable the USB Slave functionality. The qemu monitor commands &amp;quot;info usbslave&amp;quot; and &amp;quot;usb_add gadget&amp;quot; will be useful. The former instruction asks the OS running under the emulator (OpenMoko) to describe its slave features (that's what ''lsusb'' does after a Neo1973 is connected to a PC). You can see the available USB configurations in this command's output. Since gadgetfs allows only one configuration, we will need to choose the desired configuration - most device have only one such configuration, in which case you can use just &amp;quot;usb_add gadget&amp;quot; to connect to host; CDC ethernet devices however usually include a second configuration for RNDIS networking (i.e. Ms Windows compatibility) and so does OpenMoko when using the g_ether driver. Hence, to get this right, wait for OpenMoko to fully boot up and execute the following in QEMU monitor:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
QEMU 0.9.0 monitor - type 'help' for more information&lt;br /&gt;
(qemu) info usbslave &lt;br /&gt;
USB2.2 device 1457:5122:&lt;br /&gt;
Manufacturer: Linux 2.6.20.7-moko8/s3c2410_udc&lt;br /&gt;
Product: RNDIS/Ethernet Gadget&lt;br /&gt;
Configuration 0: RNDIS&lt;br /&gt;
Configuration 1: CDC Ethernet&lt;br /&gt;
(qemu) &lt;br /&gt;
(qemu) usb_add gadget:1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The &amp;quot;1&amp;quot; in &amp;quot;usb_add gadget:N&amp;quot; is the number of the USB configuration that we want to use. If everything went correctly - you can check that in dmesg - you should now have a new network interface called ''usb0'' on the PC, through which you can talk to the OpenMoko running in QEMU:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $ dmesg | tail&lt;br /&gt;
&amp;lt;6&amp;gt;gadgetfs: bound to dummy_udc driver&lt;br /&gt;
&amp;lt;7&amp;gt;hub 3-0:1.0: debounce: port 1: total 100ms stable 100ms status 0x101&lt;br /&gt;
&amp;lt;6&amp;gt;usb 3-1: new high speed USB device using dummy_hcd and address 3&lt;br /&gt;
&amp;lt;6&amp;gt;gadgetfs: connected&lt;br /&gt;
&amp;lt;7&amp;gt;usb 3-1: default language 0x0409&lt;br /&gt;
&amp;lt;7&amp;gt;usb 3-1: new device strings: Mfr=1, Product=2, SerialNumber=0&lt;br /&gt;
&amp;lt;6&amp;gt;usb 3-1: Product: RNDIS/Ethernet Gadget&lt;br /&gt;
&amp;lt;6&amp;gt;usb 3-1: Manufacturer: Linux 2.6.20.7-moko8/s3c2410_udc&lt;br /&gt;
&amp;lt;6&amp;gt;usb 3-1: configuration #1 chosen from 1 choice&lt;br /&gt;
&amp;lt;7&amp;gt;usb 3-1: adding 3-1:1.0 (config #1, interface 0)&lt;br /&gt;
&amp;lt;7&amp;gt;usb 3-1:1.0: uevent&lt;br /&gt;
&amp;lt;7&amp;gt;cdc_ether 3-1:1.0: usb_probe_interface - got id&lt;br /&gt;
&amp;lt;7&amp;gt;cdc_ether 3-1:1.0: status ep3in, 16 bytes period 14&lt;br /&gt;
&amp;lt;7&amp;gt;usb 3-1: adding 3-1:1.1 (config #1, interface 1)&lt;br /&gt;
&amp;lt;7&amp;gt;usb 3-1:1.1: uevent&lt;br /&gt;
 $ su -&lt;br /&gt;
Password:&lt;br /&gt;
 # tail /var/log/everything/current&lt;br /&gt;
May  8 19:25:32 [kernel] gadgetfs: connected&lt;br /&gt;
May  8 19:25:32 [kernel] gadgetfs: disconnected&lt;br /&gt;
May  8 19:25:32 [kernel] gadgetfs: configuration #1&lt;br /&gt;
May  8 19:25:32 [kernel] usb0: register 'cdc_ether' at usb-dummy_hcd-1, CDC Ethernet Device, 52:e7:eb:76:0a:d0&lt;br /&gt;
 # lsusb -vvv&lt;br /&gt;
Bus 003 Device 003: ID 1457:5122  &lt;br /&gt;
Device Descriptor:&lt;br /&gt;
  bLength                18&lt;br /&gt;
  bDescriptorType         1&lt;br /&gt;
  bcdUSB               2.00&lt;br /&gt;
  bDeviceClass            2 Communications&lt;br /&gt;
  bDeviceSubClass         0 &lt;br /&gt;
  bDeviceProtocol         0 &lt;br /&gt;
  bMaxPacketSize0        64&lt;br /&gt;
  idVendor           0x1457 &lt;br /&gt;
  idProduct          0x5122 &lt;br /&gt;
  bcdDevice            2.12&lt;br /&gt;
  iManufacturer           1 Linux 2.6.20.7-moko8/s3c2410_udc&lt;br /&gt;
  iProduct                2 RNDIS/Ethernet Gadget&lt;br /&gt;
  iSerial                 0 &lt;br /&gt;
  bNumConfigurations      1&lt;br /&gt;
  Configuration Descriptor:&lt;br /&gt;
    bLength                 9&lt;br /&gt;
    bDescriptorType         2&lt;br /&gt;
    wTotalLength           80&lt;br /&gt;
    bNumInterfaces          2&lt;br /&gt;
    bConfigurationValue     1&lt;br /&gt;
    iConfiguration          7 CDC Ethernet&lt;br /&gt;
    bmAttributes         0xc0&lt;br /&gt;
      Self Powered&lt;br /&gt;
    MaxPower                0mA&lt;br /&gt;
    Interface Descriptor:&lt;br /&gt;
      bLength                 9&lt;br /&gt;
      bDescriptorType         4&lt;br /&gt;
      bInterfaceNumber        0&lt;br /&gt;
      bAlternateSetting       0&lt;br /&gt;
      bNumEndpoints           1&lt;br /&gt;
      bInterfaceClass         2 Communications&lt;br /&gt;
      bInterfaceSubClass      6 Ethernet Networking&lt;br /&gt;
      bInterfaceProtocol      0 &lt;br /&gt;
      iInterface              5 CDC Communications Control&lt;br /&gt;
      CDC Header:&lt;br /&gt;
        bcdCDC               1.10&lt;br /&gt;
      CDC Union:&lt;br /&gt;
        bMasterInterface        0&lt;br /&gt;
        bSlaveInterface         1 &lt;br /&gt;
      CDC Ethernet:&lt;br /&gt;
        iMacAddress                      3 52E7EB760AD0&lt;br /&gt;
        bmEthernetStatistics    0x00000000&lt;br /&gt;
        wMaxSegmentSize               1514&lt;br /&gt;
        wNumberMCFilters            0x0000&lt;br /&gt;
        bNumberPowerFilters              0&lt;br /&gt;
      Endpoint Descriptor:&lt;br /&gt;
        bLength                 7&lt;br /&gt;
        bDescriptorType         5&lt;br /&gt;
        bEndpointAddress     0x83  EP 3 IN&lt;br /&gt;
        bmAttributes            3&lt;br /&gt;
          Transfer Type            Interrupt&lt;br /&gt;
          Synch Type               None&lt;br /&gt;
          Usage Type               Data&lt;br /&gt;
        wMaxPacketSize     0x0010  1x 16 bytes&lt;br /&gt;
        bInterval              14&lt;br /&gt;
    Interface Descriptor:&lt;br /&gt;
      bLength                 9&lt;br /&gt;
      bDescriptorType         4&lt;br /&gt;
      bInterfaceNumber        1&lt;br /&gt;
      bAlternateSetting       0&lt;br /&gt;
      bNumEndpoints           0&lt;br /&gt;
      bInterfaceClass        10 Data&lt;br /&gt;
      bInterfaceSubClass      0 Unused&lt;br /&gt;
      bInterfaceProtocol      0 &lt;br /&gt;
      iInterface              0 &lt;br /&gt;
    Interface Descriptor:&lt;br /&gt;
      bLength                 9&lt;br /&gt;
      bDescriptorType         4&lt;br /&gt;
      bInterfaceNumber        1&lt;br /&gt;
      bAlternateSetting       1&lt;br /&gt;
      bNumEndpoints           2&lt;br /&gt;
      bInterfaceClass        10 Data&lt;br /&gt;
      bInterfaceSubClass      0 Unused&lt;br /&gt;
      bInterfaceProtocol      0 &lt;br /&gt;
      iInterface              4 Ethernet Data&lt;br /&gt;
      Endpoint Descriptor:&lt;br /&gt;
        bLength                 7&lt;br /&gt;
        bDescriptorType         5&lt;br /&gt;
        bEndpointAddress     0x81  EP 1 IN&lt;br /&gt;
        bmAttributes            2&lt;br /&gt;
          Transfer Type            Bulk&lt;br /&gt;
          Synch Type               None&lt;br /&gt;
          Usage Type               Data&lt;br /&gt;
        wMaxPacketSize     0x0040  1x 64 bytes&lt;br /&gt;
        bInterval               0&lt;br /&gt;
      Endpoint Descriptor:&lt;br /&gt;
        bLength                 7&lt;br /&gt;
        bDescriptorType         5&lt;br /&gt;
        bEndpointAddress     0x02  EP 2 OUT&lt;br /&gt;
        bmAttributes            2&lt;br /&gt;
          Transfer Type            Bulk&lt;br /&gt;
          Synch Type               None&lt;br /&gt;
          Usage Type               Data&lt;br /&gt;
        wMaxPacketSize     0x0040  1x 64 bytes&lt;br /&gt;
        bInterval               0&lt;br /&gt;
Device Qualifier (for other device speed):&lt;br /&gt;
  bLength                10&lt;br /&gt;
  bDescriptorType         6&lt;br /&gt;
  bcdUSB               2.00&lt;br /&gt;
  bDeviceClass            2 Communications&lt;br /&gt;
  bDeviceSubClass         0 &lt;br /&gt;
  bDeviceProtocol         0 &lt;br /&gt;
  bMaxPacketSize0        64&lt;br /&gt;
  bNumConfigurations      1&lt;br /&gt;
&lt;br /&gt;
 # ifconfig usb0 inet 192.168.0.200 netmask 255.255.255.0&lt;br /&gt;
 # exit&lt;br /&gt;
 $ ssh root@192.168.0.202&lt;br /&gt;
The authenticity of host '192.168.0.202 (192.168.0.202)' can't be established.&lt;br /&gt;
RSA key fingerprint is de:21:87:93:52:1c:6b:c7:69:29:6c:af:66:50:02:02.&lt;br /&gt;
Are you sure you want to continue connecting (yes/no)? yes&lt;br /&gt;
Warning: Permanently added '192.168.0.202' (RSA) to the list of known hosts.&lt;br /&gt;
root@192.168.0.202's password: &lt;br /&gt;
root@fic-gta01:~$ uname -a&lt;br /&gt;
Linux fic-gta01 2.6.20.7-moko8 #1 PREEMPT Wed Apr 25 11:13:52 UTC 2007 armv4tl unknown&lt;/div&gt;</summary>
		<author><name>Jserv</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Press_Coverage</id>
		<title>Press Coverage</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Press_Coverage"/>
				<updated>2007-05-22T19:11:05Z</updated>
		
		<summary type="html">&lt;p&gt;Jserv: /* Chinese */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|align=right&lt;br /&gt;
  |__TOC__&lt;br /&gt;
  |}&lt;br /&gt;
[http://www.google.com/trends?q=openmoko%2Cneo1973&amp;amp;ctab=1&amp;amp;geo=all&amp;amp;date=all  OpenMoko and Neo1973 on google trends.]&lt;br /&gt;
 &lt;br /&gt;
This site contains the press coverage about OpenMoko and the Neo 1973 sorted by language and date. Newest on top.&lt;br /&gt;
&lt;br /&gt;
== Languages ==&lt;br /&gt;
&lt;br /&gt;
=== English ===&lt;br /&gt;
==== May 2007 ====&lt;br /&gt;
* [http://blogs.sun.com/brewin/entry/fic_and_openmoko_thank_you blog.SUN.com] FIC and OpenMoko - Thank You&lt;br /&gt;
* [http://www.pikesoft.com/blog/index.php?itemid=174 PikeSoft.com] JavaFX Mobile:  a new smartphone OS contender&lt;br /&gt;
* [http://www.sfgate.com/cgi-bin/blogs/sfgate/detail?blogid=19&amp;amp;entry_id=16310 SFGate.com] Here comes the Sun Conference&lt;br /&gt;
* [http://www.linuxdevices.com/news/NS7539760574.html LinuxDevices.com] Sun beams Linux/Java at mobile phon&lt;br /&gt;
&lt;br /&gt;
==== April 2007 ====&lt;br /&gt;
* [http://www.palminfocenter.com/news/9371/openmoko-running-on-a-palm-tx/ Palm Infcenter] OpenMoko running on a palm TX&lt;br /&gt;
* [http://jaidev.info/home/blog/archives/2007/04/13/openmoko.html JaidevInfo] OpenMoko&lt;br /&gt;
* [http://www.wirelessweek.com/newsletter.aspx?id=137388 Wirelessweek.com] Democracy Hits the Mobile Phone&lt;br /&gt;
* [http://elearner.edublogs.org/2007/04/11/technologies-is-that-a-word/ Edublogs.org] Technologies is that a word? &lt;br /&gt;
* [http://www.linuxdevices.com/news/NS4777580627.html Linuxdevices.com] 200 million Linux phones to ship by 2012&lt;br /&gt;
* [http://arstechnica.com/news.ars/post/20070415-palm-embracing-linux-in-the-hopes-of-being-relevant-again.html Ars Technica] Palm embracing Linux in the hopes of being relevant again] (Mentions Neo1973 in passing)&lt;br /&gt;
&lt;br /&gt;
==== March 2007 ====&lt;br /&gt;
* [http://www.smartdevicecentral.com/article/OpenMokos+Open+Source+Phone/202546_1.aspx smartdevicecentral.com] OpenMoko's open source phone&lt;br /&gt;
* [http://www.zdnetasia.com/news/communications/0,39044192,61996003,00.htm zdnet asia] Passing mention in an article on the Iphone.&lt;br /&gt;
* [http://www.wikio.com/news/Sean+Moss-Pultz wikio.com] Sean Moss-Pultz News&lt;br /&gt;
* [http://www.edparsons.com/?p=438 edparsons.com] iPhone chipping away at the walls&lt;br /&gt;
* [http://blogs.pcworld.co.nz/pcworld/techsploder/2007/03/openmoko_makes_total_sense.html blogs.pcworld.co.nz] OpenMoko makes total sense&lt;br /&gt;
* [http://www.totalueberwachung.de/blog/articles/2007/03/08/neo1973-arrived totalueberwachung.de] Neo1973 arrived&lt;br /&gt;
* [http://www.makuchaku.info/blog/im-gonna-get-this-one makuchaku.info] I'm gonna get this one&lt;br /&gt;
* [http://www.kitenet.net/~joey/blog/entry/openmoko_and_n800.html kitenet.net] OpenMoko and n800&lt;br /&gt;
* [http://dominion.kabel.utwente.nl/koen/cms/the-neo1973-unboxed dominion.kabel.utwente.nl] The Neo1973 unboxed&lt;br /&gt;
* [http://atulchitnis.net/diary/showentry/421 atulchitnis.net] An OpenMoko Phone arrives&lt;br /&gt;
* [http://blog.matthewgast.com/2007/03/03/good-luck-openmoko blog.matthewgast.com] Good luck OpenMoko&lt;br /&gt;
* [http://vaandoo.blogspot.com/2007/03/openmoko-neo1973-opensource-software.html vaandoo.blogspot.com] OpenMoko Neo1973 opensource software&lt;br /&gt;
* [http://www.linuxdevices.com/news/NS7653749655.html linuxdevices.com] OpenMoko update; Neo1973 on sale in March&lt;br /&gt;
* [http://www.ministryoftech.com/2007/03/05/the-5-hottest-phones-for-linux-fanatics/ ministryoftech.com] Brief line-up of the 5 hottest phones for Linux fans&lt;br /&gt;
* [http://voxilla.com/soapvox/2007/03/01/industry-disruption-really-168 voxilla.com] Article about ETel Sean Moss-Pultz presentation&lt;br /&gt;
* [http://blog.wired.com/gadgets/2007/03/eight_great_lin.html blog.wired.com] Gadget Lab: Eight Great Linux Smartphones&lt;br /&gt;
* [http://gigaom.com/2007/03/01/openmoko-phone/ gigaom.com] OpenMoko Open-Source Mobile, coming soon - Interview with Sean Moss-Pultz&lt;br /&gt;
* [http://www.oreillynet.com/etel/blog/2007/03/openmoko_1.html www.oreillynet.com] ETel coverage&lt;br /&gt;
* [http://gordoncook.net/wp/?p=146 gordoncook.net] Short history of Neo1973 and other stuff&lt;br /&gt;
* [http://www.engadget.com/2007/03/03/openmoko-details-pricing-availability-for-neo1973/ engadget.com] OpenMoko details pricing, availability for Neo1973&lt;br /&gt;
* [http://www.uberpulse.com/us/2007/03/fic_wants_to_rewrite_the_rules_with_open_moko_mobile_phone.php   www.uberpulse.com] Some images from ETel&lt;br /&gt;
&lt;br /&gt;
==== February 2007 ====&lt;br /&gt;
* [http://www.scullen.ca/2007/02/15/forget-about-the-iphone-neo1973-is-far-more-exciting/ scullen.ca] Forget about the iPone, Neo1973 is far more exciting&lt;br /&gt;
* [http://www.mobileread.com/forums/showpost.php?p=59124&amp;amp;postcount=4 mobileread.com] Show post&lt;br /&gt;
* [http://www.pdasnews.com/articles/2568/1/ pdasnews.com] Linux-powered iPhone killer available online in March&lt;br /&gt;
* [http://www.belutz.net/2007/02/05/openmoko/ belutz.net] OpenMoko&lt;br /&gt;
* [http://www.mail-archive.com/community@lists.openmoko.org/msg03686.html mail-archive.com] OpenMoko community mail archive&lt;br /&gt;
* [http://www.maclife.com/article/is_three_a_crowd_in_the_touch_screen_phone_arena maclife.com] Is there a crowd in the touch screen phone arena&lt;br /&gt;
* [http://gopaultech.com/2007/02/fic-neo1973-linux-smartphone/ gopaultech.com] FIC Neo1973 Linux smartphone&lt;br /&gt;
* [http://www.volweb.cz/horvitz/os-info/news-feb07-014.html volweb.cz] Open-source smartphone, with WiFi in version 2&lt;br /&gt;
* [http://www.oreillynet.com/etel/blog/2007/02/etel_coverage_openmoko_opens_t.html oreillynet.com] ETel coverage OpenMoko opens&lt;br /&gt;
* [http://www.mobilewhack.com/openmoko-neo1973-open-source-phone/ mobilewhack.com] OpenMoko Neo1973 open source phone&lt;br /&gt;
* [http://www.engadget.com/2007/02/19/what-tech-would-the-presidents-rock-in-2007/ engadget.com] What tech would the presidents rock in 2007&lt;br /&gt;
* [http://www.tuxmachines.org/node/13602 tuxmachines.org] What participation culture&lt;br /&gt;
* [http://www.vanille-media.de/site/index.php/category/opensource/openmoko/ vanille-media.de] Opensource OpenMoko&lt;br /&gt;
* [http://www.joetech.com/2007/02/15/openmoko-open-source-cell-phone/ joetech.com] OpenMoko open source cell phone&lt;br /&gt;
* [http://www.makezine.com/blog/archive/2007/02/openmoko_open_s.html makezine.com] OpenMoko open&lt;br /&gt;
* [http://www.linuxdevices.com/news/NS9706477996.html linuxdevices.com] Announce of the Openembedded booth at FOSDEM in Brussels.&lt;br /&gt;
* [http://www.linuxdevices.com/news/NS2657814070.html linuxdevices.com] Quick interview with Sean and some pictures&lt;br /&gt;
* [http://gizmodo.com/gadgets/smartphones/first-look-the-antiiphone-openmokos-neo1973-236841.php gizmodo.com] Photos and comments on hardware and software&lt;br /&gt;
* [http://www.onecompare.com/mobile-news/article-asp~aid~244~pub~56321102~story~openmoko-launch-the-official-portal-for-development-of-the-openmoko-platform onecompare.com] Short news article&lt;br /&gt;
* [http://crunchgear.com/2007/02/15/openmokos-open-source-mobile-os crunchgear.com] Holding the phone upside down&lt;br /&gt;
* [http://www.slashgear.com/openmoko-and-fic-neo1973-updates-153926.php slashgear.com] Video interview and many pictures&lt;br /&gt;
* [http://www.djlosch.com/article_Comparison%3A_iPhone_vs_A1200_vs_Neo1973 djlosch.com] Article comparing the Neo to the iPhone and A1200&lt;br /&gt;
* [http://popsci.typepad.com/popsci/2007/02/up_close_and_pe.html popsci.typepad.com] Screenshot of Linux booting on the Neo&lt;br /&gt;
* [http://video.google.de/videoplay?docid=-3742589179435830945&amp;amp;q=Openmoko video.google.com] Presentation of OpenMoko at the FOSDEM&lt;br /&gt;
* [http://www.manilastandardtoday.com/?page=business6_feb27_2007 manilastandardtoday.com] Tale of two phones&lt;br /&gt;
* [http://blog.printf.net/articles/2007/02/22/unboxing-the-openmoko-phone blog.printf.net] OLPC and older Neo1973.&lt;br /&gt;
* [http://mako.cc/copyrighteous/freesoftware/20070228-00.html mako.cc] OLPC and older Neo1973 again.&lt;br /&gt;
* [http://www.maclife.com/article/is_three_a_crowd_in_the_touch_screen_phone_arena MacLife] Is Three a Crowd among Touch-Screen Phones?&lt;br /&gt;
&lt;br /&gt;
==== January 2007 ====&lt;br /&gt;
* [http://blogs.ft.com/techblog/2007/01/openmoko_harks_.html blogs.ft.com] OpenMoko harks back to hello moto&lt;br /&gt;
* [http://opensource.sfsu.edu/node/258 opensource.sfsu.edu] Can you hear me now?&lt;br /&gt;
* [http://losca.blogspot.com/2007/01/maemo-nokia-n800-has-competitor-in.html losca.blogspot.com] Maemo Nokia n800 has competitor in openness - OpenMoko&lt;br /&gt;
* [http://21talks.net/voip/openmoko 21talks.net] OpenMoko: Not as sexy as the iPhone, but it’s a Linux phone&lt;br /&gt;
* [http://www.linuxinfusion.com/openmoko-schedule-announced linuxinfusion.com] OpenMoko schedule announced&lt;br /&gt;
* [http://users.livejournal.com/_paladine_/tag/smartphone users.livjournal.com] The Worlds First Opensource Linux Smartphone&lt;br /&gt;
* [http://www.nungee.com/2007/01/25/openmoko/ nungee.com] OpenMoko&lt;br /&gt;
* [http://www.sda-asia.com/sda/features/psecom,id,880,srn,2,channel,developer,nodeid,21,_language,Singapore.html sda-asia.com] OpenMoko Offers Open-source Smart phone T&lt;br /&gt;
* [http://www.regdeveloper.co.uk/2007/01/15/open_phone/ regdeveloper.co.uk] Open Phone&lt;br /&gt;
* [http://www.product-reviews.net/2007/01/17/fic-neo1973-smartphone-open-source-phone/ product-reviews.net] FIC Neo1973 smartphone open source phone&lt;br /&gt;
* [http://gizmodo.com/gadgets/smartphones/openmoko-smartphone-did-they-have-a-time-machine-or-what-229243.php gizmodo.com] OpenMoko smartphone did they have a time machine or what&lt;br /&gt;
* [http://www.oreillynet.com/conferences/blog/2007/01/openmoko_workshop_added_to_ete.html oreillynet.com] OpenMoko workshop added to ETel&lt;br /&gt;
* [http://www.gadgetell.com/2007/01/openmoko-gets-interviewed-about-new-open-source-fic-neo1973/ gadgetell.com] OpenMoko gets interviewed about new open source FIC Neo1973&lt;br /&gt;
* [http://www.slashgear.com/openmoko-interface-im-loving-it-173496.php slashgear.com] OpenMoko interface I'm loving it&lt;br /&gt;
* [http://www.gadgetorama.com/news/news_details.php?gorid=2008 gadgetorama.com] OpenMoko news details&lt;br /&gt;
* [http://tech.cybernetnews.com/2007/01/17/openmoko-vs-iphone-did-apple-copy/ tech.cybernetnews.com] OpenMoko vs iPhone did Apple copy&lt;br /&gt;
* [http://techtrails.blogspot.com/2007/01/open-phones-with-open-moko-while.html techtrails.blogspot.com] Open phones with OpenMoko while&lt;br /&gt;
* [http://blogger.xs4all.nl/jurjen1/archive/2007/01/17/174341.aspx bloger.xs4all.nl] OpenMoko open source mobile phone&lt;br /&gt;
* [http://www.ringnokia.com/2007/01/i_am_highly_cur.html ringnokia.com] I'm highly curious&lt;br /&gt;
* [http://www.oreillynet.com/etel/blog/2007/01/iclone_1.html oreillynet.com] iClone&lt;br /&gt;
* [http://forums.scotsnewsletter.com/index.php?showtopic=17685 forums.scotsnewsletter.com] Show topic&lt;br /&gt;
* [http://understandinglimited.com/2007/01/15/iphone/ understandinglimited.com] iPhone and OpenMoko&lt;br /&gt;
* [http://robertogaloppini.net/2007/01/12/openmoko-the-integrated-os-mobile-communications-platform-2/ robertogaloppini.net] OpenMoko the intergrated OS mobile communications platform&lt;br /&gt;
* [http://www.funambol.com/blog/capo/2007/01/apple-please-do-not-forget-developers.html funambol.com] Apple please do not forget developers&lt;br /&gt;
* [http://chopey.blogspot.com/2007/01/iphone-or-not-to-iphone.html chopey.blogspot.com] iPhone or not to iPhone&lt;br /&gt;
* [http://opendotdotdot.blogspot.com/2007/01/openmoko.html opendotdotdot.blogspot.com] OpenMoko&lt;br /&gt;
* [http://www.e-pcmag.gr/forum/index.php?showtopic=19505 e-pcmag.gr] Show topic&lt;br /&gt;
* [http://www.costpernews.com/2007/01/12/anything-you-can-do-we-can-do-better/ costpernews.com] Anything you can do we can do better&lt;br /&gt;
* [http://www.tectonic.co.za/view.php?id=1321 tectonic.co.za] iPhone vs OpenMoko - the Open Alternative&lt;br /&gt;
* [http://lwn.net/Articles/217020/rss lwn.net] An OpenMoko update&lt;br /&gt;
* [http://www.networkworld.com/news/2007/010907-moss-pultz.html networkworld.com] Q&amp;amp;A Building a new open source phone platform&lt;br /&gt;
* [http://www.networkcomputing.com/showArticle.jhtml?articleID=196802226 networkcomputing.com] Startup Promises First Linux Smartphone Based On Open Standards&lt;br /&gt;
* [http://www.osweekly.com/index.php?option=com_content&amp;amp;task=view&amp;amp;id=2420&amp;amp;Itemid=449 osweekly.com] Mobile Devices Adopt Open Source&lt;br /&gt;
* [http://www.linuxdevices.com/news/NS8591201260.html linuxdevices.com] Linux phone market open up?&lt;br /&gt;
* [http://www.pcmag.com/article2/0,1895,2080727,00.asp pcmag.com] Cell phone open up&lt;br /&gt;
* [http://sonyericssonz558i.blogurple.com/2007/01/06/23/ sonyericssonz558i.blogurple.com] Sony Ericsson Z558i&lt;br /&gt;
* [http://www.sannes.org/?p=5 sannes.org] An Open mobile phone that does what you want&lt;br /&gt;
* [http://popsci.typepad.com/ces2007/2007/01/opensource_stri.html Popsci.com] Open Source Strikes Again&lt;br /&gt;
* [http://gizmodo.com/gadgets/smartphones/openmoko-smartphone-did-they-have-a-time-machine-or-what-229243.php Gizmodo.com] OpenMoko interface compared to iPhone&lt;br /&gt;
* [http://www.linuxjournal.com/xstatic/abstracts/upfront Linux Journal] Doc Searls in the feb 2007 issue&lt;br /&gt;
* [http://www.osdir.com/Article9642.phtml OSDir.com] Mobile Linux for the Mobile Fan] -&amp;gt; [http://www.madpenguin.org/cms/?m=show&amp;amp;id=7710 MadPenguin] Mobile Linux for the Mobile Fan&lt;br /&gt;
* [http://www.usnews.com/usnews/biztech/davesdownload/archive/070112/a_populist_challenge_to_apples.htm US News] A Populist Challenge to Apple's iPhone&lt;br /&gt;
* [http://www.tectonic.co.za/view.php?id=1321 tectonic.co.za] iPhone vs OpenMoko: The open alternative&lt;br /&gt;
* [http://www.informationweek.com/news/showArticle.jhtml?articleID=196802206&amp;amp;subSection=All+Stories InformationWeek] Startup Promises First Linux Smartphone Based On Open Standards&lt;br /&gt;
* [http://www.theregister.co.uk/2007/01/15/open_phone/ The Register] Open Phones with Open Moko&lt;br /&gt;
* [http://techreport.com/onearticle.x/11589 The Tech Report] OpenMoko offers open-source smart phone&lt;br /&gt;
* [http://blogs.ft.com/techblog/2007/01/openmoko_harks_.html Financial Times] OpenMoko harks back to Hello Moto&lt;br /&gt;
* [http://hardware.slashdot.org/article.pl?sid=07/01/20/1551200 Slashdot] OpenMoko Schedule Announced&lt;br /&gt;
* [http://www.youtube.com/watch?v=jRvtAAXTIlg Youtube] Interview with Sean Moss-Pultz ([http://www.monoploid.be/dl/openmoko_sean_interview.ogm mirror in Ogg format])&lt;br /&gt;
* [http://www.libervis.com/article/forget_iphone_hail_openmoko_the_true_revolution Libervis.com] Forget iPhone, hail OpenMoko, the true revolution&lt;br /&gt;
* [http://gizmodo.com/gadgets/smartphones/sizemodo-iphone-vs-openmoko-neo1073-229294.php Gizmodo]iPhone vs. Openmoko Neo1973] (please, don't mind the typo i n the title)&lt;br /&gt;
&lt;br /&gt;
==== December 2006 ====&lt;br /&gt;
* [http://www.pikesoft.com/blog/index.php?itemid=133 pikesoft.com] Cheap, totally open Linux phone will ship next month&lt;br /&gt;
* [http://www.cdrinfo.com/Sections/News/Details.aspx?NewsId=19254 cdrinfo.com] FIC to release Linux based Smartphone&lt;br /&gt;
&lt;br /&gt;
==== November 2006 ====&lt;br /&gt;
* [http://www.ministryoftech.com/2006/11/09/fic-neo1973-smartphone-with-linux-based-openmoko-open-source-platform/ ministryoftech.com] FIC Neo1973 smartphone with linux-based OpenMoko open source platform&lt;br /&gt;
* [http://www.mobiletechnews.com/info/2006/11/09/124614.html mobiletechnews.com] OpenMoko Linux mobile platform and Neo1973 smartphone announced&lt;br /&gt;
* [http://news.softpedia.com/news/FIC-Neo1973-for-all-the-Linux-Lovers-out-There-40344.shtml news.softpedia.com] FIC Neo1973 for all the Linux lovers out there&lt;br /&gt;
* [http://www.openembedded.org/openmoko-fic-choosing-openembedded openembedded.org] OpenMoko FIC choosing openembedded&lt;br /&gt;
* [http://news.com.com/2300-1037_3-6134795-1.html news.com.com] FIC's Linux handset&lt;br /&gt;
* [http://www.slashphone.com/77/5784.html slashphone.com] OpenMoko Announces Open Source Mobile Communications Platform &lt;br /&gt;
* [http://www.arm.com/iqonline/news/marketnews/15616.html arm.com] Open Linux Based, ARM Powered Mobile In Wings&lt;br /&gt;
* [http://news.com.com/Second+open+Linux+handset+unveiled/2100-1039_3-6133974.html news.com.tw] Second open Linux handset unveiled&lt;br /&gt;
* [http://www.infoworld.com/article/06/11/08/HNlinuxphone_1.html?COMMERCIAL%20LINUX infoworld.com] FIC debuts open Linux-based smartphone &lt;br /&gt;
* [http://www.michaeldolan.com/431 michaeldolan.com] A must have: OpenMoko cell phone with GPS and...apt-get&lt;br /&gt;
* [http://nandz.blogspot.com/2006/11/my-dream-phone.html nandz.blogspot.com] My dream phone&lt;br /&gt;
* [http://www.linuxdevices.com/news/NS2986976174.html linuxdevices.com] Cheap, hackable Linux smartphone due soon&lt;br /&gt;
* [http://www.linuxdevices.com/news/NS7056478804.html linuxdevices.com] First OpenMoKo phone taps dual-licensed SyncML stack&lt;br /&gt;
* [http://lwn.net/Articles/208298/ lwn.net] The OpenMoko open phone&lt;br /&gt;
* [http://www.theinquirer.net/default.aspx?article=35590 theinquirer.net] A truly open Linux phone with GPS debuts&lt;br /&gt;
&lt;br /&gt;
=== German ===&lt;br /&gt;
&lt;br /&gt;
==== April 2007 ====&lt;br /&gt;
* [http://www.pro-linux.de/news/2007/11133.html pro-linux] - OpenMoko produziert erste Muster&lt;br /&gt;
* [http://www.golem.de/0704/51970.html golem.de] - Open-Source-Handy vor Produktionsbeginn&lt;br /&gt;
&lt;br /&gt;
==== March 2007 ====&lt;br /&gt;
* [http://chaosradio.ccc.de/cre042.html Chaosradio Express] - Das neue Projekt zur Entwicklung eines Telefons mit freier Software&lt;br /&gt;
* [http://www.pro-linux.de/news/2007/10966.html pro-linux] - OpenMoko sucht Unterstützung&lt;br /&gt;
&lt;br /&gt;
==== February 2007 ====&lt;br /&gt;
* [http://www.digital-living-magazin.de/index.php?pid=17&amp;amp;art=2050&amp;amp;cid=DLnewsletter digital-living-magazin.de] - Linux erobert Mobilfunkmarkt&lt;br /&gt;
* [http://www.heise.de/tr/artikel/85138 Technology Review] - Open-Source-Handy, nächster Versuch&lt;br /&gt;
* [http://www.pro-linux.de/news/2007/10833.html pro-linux] - OpenMoko-Quellcode angekündigt&lt;br /&gt;
* [http://www.heise.de/newsticker/meldung/85354 heise online] - OpenMoko: Linux-Plattform für Handys freigegeben&lt;br /&gt;
* [http://www.mobile2day.de/news/news_details.html?nd_ref=6870&amp;amp;n_multi=0&amp;amp;nf_id=0&amp;amp;nt_id=0&amp;amp;f_date_m=01&amp;amp;f_date_y=2007&amp;amp;t_date_m=04&amp;amp;t_date_y=2007&amp;amp;from=archive Mobile2Day] - OpenMoko bringt Details zum Neo1973&lt;br /&gt;
&lt;br /&gt;
==== November 2006 ====&lt;br /&gt;
&lt;br /&gt;
* [http://golem.de/0611/48824.html golem.de] - OpenMoko kündigt Open-Source-Handy an&lt;br /&gt;
* [http://www.heise.de/newsticker/meldung/80714 heise online] - Smartphone mit offener Linux-Plattform&lt;br /&gt;
* [http://www.pro-linux.de/news/2006/10448.html pro-linux] - Offenes Linux-Smartphone »OpenMoko« für Januar 2007 angekündigt&lt;br /&gt;
&lt;br /&gt;
=== Scandinavian ===&lt;br /&gt;
* [http://www.amobil.no/nyhet/mobiltelefoner/openmoko_klart_for_verden/36554 Amobil.no] OpenMoko klart for verden&lt;br /&gt;
* [http://www.nyteknik.se/art/48697 NyTeknik] Snart är den öppna Linuxtelefonen här (Swedish) (Translation: this article states free release to selected developers Feb 11, commercial release to developers March 11, and main release to market Sep 11. See also [http://lists.openmoko.org/pipermail/announce/2007-January/000000.html])&lt;br /&gt;
&lt;br /&gt;
=== French ===&lt;br /&gt;
* [http://linuxfr.org/2006/11/08/21596.html LinuxFR] OpenMoko : sortie en janvier d'un téléphone-GPS enfin libre!&lt;br /&gt;
&lt;br /&gt;
=== Chinese ===&lt;br /&gt;
* [http://people.debian.org.tw/~chihchun/2007/05/17/openmoko-at-tossug/ debian.org.tw] OpenMoko at TOSSUG&lt;br /&gt;
* [http://magicdesign.blogspot.com/2007/05/free-your-phoneopenmoko.html MagicDesign] Free your phone OpenMoko&lt;br /&gt;
* [http://people.debian.org.tw/~chihchun/2007/04/30/have-fun-with-openmokoneo1973/ Debian.org.tw] Have fun with OpenMoko Neo1973&lt;br /&gt;
* [http://orzlab.blogspot.com/ Orzlab] When Java meets OpenMoko&lt;br /&gt;
* [http://blog.footoo.org/?p=115 FooToo.org] Install OpenMoko Emulator&lt;br /&gt;
* [http://www.jollen.org/blog/2007/01/openmoko_announce.html Jollen.org] OpenMoko Kick-Off&lt;br /&gt;
* [http://zh.wikipedia.org/wiki/OpenMoko Wikipedia.org] OpenMoko Chinese Wiki&lt;br /&gt;
* [http://tw.myblog.yahoo.com/champ_yen/article?mid=211&amp;amp;prev=212&amp;amp;next=-1 Yahoo.com.tw] Forget about iPhone, Hail OpenMoko &lt;br /&gt;
* [http://www.jollen.org/blog/2006/11/mobile_20_openmoko_linux_smart.html Jollen.org] OpenMoko Linux Smartphone&lt;br /&gt;
* [http://blog.roodo.com/ystuan/archives/2733869.html Roodo.com] OpenMoko&lt;/div&gt;</summary>
		<author><name>Jserv</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/OpenMoko_under_QEMU</id>
		<title>OpenMoko under QEMU</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/OpenMoko_under_QEMU"/>
				<updated>2007-05-14T19:31:59Z</updated>
		
		<summary type="html">&lt;p&gt;Jserv: /* Pre-built binaries */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;QEMU can basically be used in three ways to run [[OpenMoko]]. Depending on the purpose that you are going to use the emulator for, you should decide on the target platform.&lt;br /&gt;
&lt;br /&gt;
*''PC'' - OpenMoko can be built to run on regular i386 hardware, 32- or 64-bit and this is probably the fastest way to get OpenMoko running if you want to get an impression of how it looks.  In this scenario QEMU would only serve for isolating your [[OpenMoko]] installation from your normal system, or, if you're not on a UNIX system, QEMU provides a non-intrusive way to get Linux up quickly. More information can be found in the [[FAQ]] and [[Getting Openmoko working on host with Xoo|here]].&lt;br /&gt;
&lt;br /&gt;
*''Integrator/CP'' - this is the default ARM-based machine that QEMU knows about. This target is used with MACHINE=&amp;quot;qemuarm&amp;quot; and it is sufficient to run the original OpenMoko rootfs image, although it doesn't emulate any of the [[:Category:Neo1973 Hardware | Neo1973 Hardware]] except the very CPU core. Read more in the [[FAQ#Q:_Is_there_an_emulator_available_for_OpenMoko.3F|FAQ]].&lt;br /&gt;
&lt;br /&gt;
*''Neo1973'' - the QEMU tree available from OpenMoko repositories is also capable of emulating most of the actual [[Neo1973]] hardware, although not all of it at this moment. It is a work-in-progress and when it's more mature it is going to be submitted for merging to the main QEMU development tree.&lt;br /&gt;
&lt;br /&gt;
== Neo1973 emulation ==&lt;br /&gt;
&lt;br /&gt;
This target will (obviously) run original OpenMoko rootfs images, but then it should also be able to run the original u-boot and kernel images, the same ones that a real Neo1973 uses. Among other differences you will notice between this approach and the Integrator/CP target is you also get correct screen resolution, some (fake) battery readings, and other goodness. Currently missing parts of the emulator are: [[GSM]] modem, [[Hardware:AGPS|AGPS]] and [[Bluetooth]] - these things will still be worked on, as well as general usability. Even with these things missing, QEMU should provide substantial help in debugging kernel and u-boot issues to developers.&lt;br /&gt;
&lt;br /&gt;
What QEMU can '''*not*''' be used for, and probably no other emulator can, is speed measures and getting the general feel of OpenMoko performance. Code running in qemu runs with the maximum speed your host computer can provide with an overhead of translating target code to host code, and this overhead is not uniform across different instructions. This means that even if your virtual Neo reports near 100 BogoMIPS (which is the speed of a real Neo), different actions performed in the emulator will not run with the same speed. On most PCs you will notice the virtual Neo running faster than a real one (Audio related operations may be one of the exceptions).&lt;br /&gt;
&lt;br /&gt;
=== What hardware is supported ===&lt;br /&gt;
&lt;br /&gt;
Rough status for each of the components that need emulation, following the outline of [[:Category:Neo1973 Hardware | Neo1973 Hardware]] page.&lt;br /&gt;
{|&lt;br /&gt;
! Hardware !! Status !! Usage notes&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeedd;&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot;|S3C2410A Processor&lt;br /&gt;
|-&lt;br /&gt;
|ARM920T core || Works || Already in mainline QEMU.&lt;br /&gt;
|-&lt;br /&gt;
|Basic guts || Work || This includes GPIO interface, DMA, Interrupt Controller, Timers, NAND controller, MMC/SD host, [[I2C]] and IIS interfaces, Memory &amp;amp; Clock &amp;amp; Power management controllers, RAM.&lt;br /&gt;
|-&lt;br /&gt;
|Serial ports || Work || Use the &amp;quot;-serial&amp;quot; switch (maybe be specified multiple times) to tell QEMU where serial input/output should go to. GSM module will be connected on UART0.&lt;br /&gt;
|-&lt;br /&gt;
|RTC || Works || On start QEMU will load it with current time/date - the Neo1973 [[kernel]] doesn't use it for time/date source currently.&lt;br /&gt;
|-&lt;br /&gt;
|SPI || Works || The guest kernel can drive it using either the SPI interface or raw GPIO bitbanging.&lt;br /&gt;
|-&lt;br /&gt;
|LCD || Works || The virtual LCD will display as in QEMU window iff &amp;quot;-nographic&amp;quot; is not specified.&lt;br /&gt;
|-&lt;br /&gt;
|ADC || Works || Mouse events in QEMU window generate what would be touchscreen events on a Neo1973 and are passed to the guest OS through the on-chip ADC.&lt;br /&gt;
|-&lt;br /&gt;
|OHCI USB || Works || This part is in mainline QEMU. Use the &amp;quot;-usb&amp;quot; switch to enable the controller and &amp;quot;usb_add&amp;quot; in QEMU monitor to attach new virtual or physical USB devices.&lt;br /&gt;
|-&lt;br /&gt;
|Slave USB || Works || Linux's dummy HCD in conjunction with gadget filesystem API is used to make the virtual Neo appear as a real one connected to the host computer. See [[#Setting up USB connection|Setting up USB connection]] below. (Experimental)&lt;br /&gt;
|-&lt;br /&gt;
|Watchdog&lt;br /&gt;
|style=&amp;quot;background-color:#ffcccc;&amp;quot;|To Do&lt;br /&gt;
|This is one of the less important on-chip peripherals in S3C2410. It is however used by Linux for rebooting the board.&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeedd;&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot;|[[I2C]] bus peripherals&lt;br /&gt;
|-&lt;br /&gt;
|[[PCF50606]]||Works||(Aka PMU) Fakes the battery charge level (set at 88%), POWER button, etc. Also contains and RTC, also unused by Linux.&lt;br /&gt;
|-&lt;br /&gt;
|[[LM4857]]||Works&lt;br /&gt;
|-&lt;br /&gt;
|[[WM8753L]]||Works||The CODEC is also connect to the CPU's IIS port. Basic [[Neo1973 Audio Subsystem|audio functionality]] is supported - see QEMU documentation on getting audio input/output from the emulator. Volume control has no effects.&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeedd;&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot;|Other peripherals&lt;br /&gt;
|-&lt;br /&gt;
|NAND Flash||Works||However, some pieces are not confirmed to be completely compatible with the real hardware because of lack thereof. Use &amp;quot;-mtdblock flashimagefilenamehere&amp;quot; switch to point QEMU to your flash image. The file should be at least 69206016 bytes big.&lt;br /&gt;
|-&lt;br /&gt;
|JBT6K74-AS(PI)||Works|| (Aka LCM) Wired to the SPI channel 1&lt;br /&gt;
|-&lt;br /&gt;
|Buttons||Work||Enter is the AUX button, Space is the POWER button. Wired to on-chip GPIO and PCF50606.&lt;br /&gt;
|-&lt;br /&gt;
|SD card||Works||This part is already in mainline QEMU. Use the &amp;quot;-sd cardimagegoeshere&amp;quot; switch to point QEMU to the card image. The regular QEMU monitor commands for removable media can also be used. The card works, however the on-chip host controller gave block length errors on heavy I/O despite working as described in specification. I suspect the kernel driver. DMA operation is not tested.&lt;br /&gt;
|-&lt;br /&gt;
|Bluetooth&lt;br /&gt;
|style=&amp;quot;background-color:#ffcccc;&amp;quot;|To Do&lt;br /&gt;
|Will require implementing the Delta DBFM chip and connecting it to USB. The ROM will likely be replaced with code to translate communication directly to TCP/UDP networking (like Slirp). A real bluetooth dongle can also be attached to the emulator (see USB documentation in QEMU).&lt;br /&gt;
|-&lt;br /&gt;
|[[GSM]]&lt;br /&gt;
|style=&amp;quot;background-color:#ffcccc;&amp;quot;|In Progress&lt;br /&gt;
|A fake modem will be connected to UART0 with as much functionality as possible (basic AT commands understanding, fake GPRS connections and SMS send/receive). This way all parts of the phone subsystem (CALYPSO, TWL3014, TRF6151) will not have to be emulated. There is a possibility to wire a real GSM modem to QEMU's serial port.&lt;br /&gt;
|-&lt;br /&gt;
|[[Hardware:AGPS|AGPS]]&lt;br /&gt;
|style=&amp;quot;background-color:#ffcccc;&amp;quot;|To Do&lt;br /&gt;
|There are obvious difficulties emulating the chip, but hopefully it can be made to present the guest OS with some fixed coordinates later when more is known about the chip. Again a real chip could be connected to QEMU's serial port.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Current development is aiming for [[:Category:Neo1973_Hardware#GTA01Bv4 | GTA01Bv4]] compatibility; [[:Category:Neo1973_Hardware#GTA01Bv3 | earlier revisions]] can also be emulated if needed. The differences between the hardware revisions currently only manifest themselves in GPIO wiring.&lt;br /&gt;
&lt;br /&gt;
== How to get it running ==&lt;br /&gt;
&lt;br /&gt;
=== Using MokoMakefile ===&lt;br /&gt;
&lt;br /&gt;
This is the easiest way since you won't need to deal with the compiling and flashing processes yourself. See [[MokoMakefile#QEMU|MokoMakefile]] for details.&lt;br /&gt;
&lt;br /&gt;
=== Manual setup ===&lt;br /&gt;
&lt;br /&gt;
To obtain the latest source code for the emulator, you will want to do something like the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ svn checkout https://svn.openmoko.org/trunk/src/host/qemu-neo1973&lt;br /&gt;
$ cd qemu-neo1973&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now, we're going to configure and build the emulator (Note [[#Requirements|Requirements]] below):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ./configure --target-list=arm-softmmu  # GCC 3.x will be required, see --cc=&lt;br /&gt;
$ make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
See other available options for the configure script by appending &amp;quot;--help&amp;quot;.&lt;br /&gt;
Now you should have a working emulator under the name &amp;quot;arm-softmmu/qemu-system-arm&amp;quot;. To run OpenMoko you will also need to somehow install OpenMoko on your virtual phone, which is totally clean of any software at this moment. There are several block devices to choose from, the best option is probably to do exactly what the Neo1973 manufacturer does before it ships the device to the final user. This process is described in [[Bootloader]], [[Kernel]], [[NAND bad blocks]] and [[Devirginator]] but you don't need to know all the details. Two scripts are provided to generate a firmware for your phone, as realistic as possible. First run&lt;br /&gt;
&amp;lt;pre&amp;gt;$ openmoko/download.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
which will look up the list of latest available OpenMoko snapshot builds from buildhost.openmoko.org and choose the most recent [[u-boot]], Kernel, and root filesystem images, and download the images (unless they are already found in the openmoko/ directory). These binaries will be used by the next command:&lt;br /&gt;
&amp;lt;pre&amp;gt;$ openmoko/flash.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
which runs the emulator, loads u-boot into it and then uses u-boot's capability to program the Flash memory to install all the necessary parts of the system into the virtual Flash. It will also set up all the bootloading process including a boot menu (ENTER is [AUX] and SPACE is [POWER]), splash, u-boot environment and some default kernel parameters. If everything goes OK, the script should print a command which you can use to start using the emulator.&lt;br /&gt;
&lt;br /&gt;
QEMU has '''*tons*''' of commandline switches and things that can be configured. You can look them up in [http://www.qemu.org/user-doc.html QEMU user docs]. You will probably want to use the &amp;quot;-snapshot&amp;quot; switch, among other ones.&lt;br /&gt;
&lt;br /&gt;
=== Pre-built binaries ===&lt;br /&gt;
&lt;br /&gt;
Win32 binaries shipped with firmware can be downloaded from [http://mdk.linux.org.tw/~jserv/openmoko/openmoko-emulator-win32-bin-20070514.zip openmoko-emulator-win32-bin-20070514.zip]. Tested on MS Windows XP.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
&lt;br /&gt;
This QEMU tree has only been tested on GNU/Linux. To get graphical (not counting VNC) and/or audio output from the emulator you will need either SDL or Cocoa installed on your computer. To enable audio, see the available switches to the ./configure script.&lt;br /&gt;
&lt;br /&gt;
The scripts that sit in openmoko/ require lynx, wget, python and most GNU base utilities installed in standard locations.&lt;br /&gt;
&lt;br /&gt;
All of the build-time and run-time requirements listed in [http://www.qemu.org/user-doc.html QEMU documentation] apply. This includes zlib, etc. On distributions that use binary packages, remember that you need the packages ending in '''-dev''' or '''-devel'''.&lt;br /&gt;
&lt;br /&gt;
== QEMU and GNU debugger ==&lt;br /&gt;
&lt;br /&gt;
QEMU lets you debug operating system kernels and bootloaders like you debug all other programs. To do this you will need a debugger that speaks the GDB remote debugging protocol - [http://sourceware.org/gdb/ GDB] is the obvious choice. Some cross toolchains come with GDB already set up. Otherwise building cross-GDB yourself is quick and easy (compared to building binutils and cross-gcc).&lt;br /&gt;
&lt;br /&gt;
To debug u-boot, load the file &amp;quot;u-boot&amp;quot; into gdb (not &amp;quot;u-boot.bin&amp;quot;) that is produced by &amp;quot;make&amp;quot; when building u-boot. To debug a Linux kernel, load the file &amp;quot;vmlinux&amp;quot; from the main source directory into gdb. These files are in ELF format and contain all the symbol information and are not stripped of debugging data until you run &amp;quot;strip&amp;quot; on them, unlike &amp;quot;u-boot.bin&amp;quot; and &amp;quot;Image&amp;quot;/&amp;quot;zImage&amp;quot;/&amp;quot;uImage&amp;quot;. Next, tell QEMU to enable the gdbserver by appending the &amp;quot;-s&amp;quot; switch or issuing &amp;quot;gdbserver&amp;quot; in the monitor. Use the command &amp;lt;pre&amp;gt;(gdb) target remote localhost:1234&amp;lt;/pre&amp;gt; to make a connection to the emulator. From there you should be able to use all the usual GDB commands, including stepping instructions, setting breakpoints, watchpoints, inspecting stack, variables, registers and more. If gdb is running in the same directory from which it grabbed the ELF executable, the &amp;quot;edit&amp;quot; command should work so you can jump right to the source line which is executing.&lt;br /&gt;
&lt;br /&gt;
== Setting up USB connection ==&lt;br /&gt;
&lt;br /&gt;
It is possible (although not very straight forward, probably about the complexity of tun-tap networking) to connect the virtual, emulated Neo1973 to the Linux PC on which the emulator is running, and work with it as if a real Neo1973 was plugged into the computer's USB port, but no twiddling with cables is needed. If you're testing your applications on the Neo, it may be worth setting up this kind of connection because it lets you enable normal [[USB_Networking|networking between the PC and the phone and ssh into it]] (which is much more comfortable than typing commands into the OpenMoko's terminal emulator via on-screen keyboard). Here's what you will need in order to get this working:&lt;br /&gt;
&lt;br /&gt;
A Linux host with a 2.6 series kernel. The following drivers compiled-in or in modules: dummy_hcd, gadgetfs, usbnet, cdc_ether. Note that you need root access to perform most actions described here. Here's how to enable them in menuconfig.&lt;br /&gt;
&lt;br /&gt;
Find and enable '''Device Drivers''' -&amp;gt; '''USB support''' -&amp;gt; '''USB Gadget Support''' -&amp;gt; '''Support for USB Gadgets'''&lt;br /&gt;
&lt;br /&gt;
Find '''Device Drivers''' -&amp;gt; '''USB support''' -&amp;gt; '''USB Gadget Support''' -&amp;gt; '''USB Peripheral Controller''' and set it to '''Dummy HCD (DEVELOPMENT)'''&lt;br /&gt;
&lt;br /&gt;
Find and enable '''Device Drivers''' -&amp;gt; '''USB support''' -&amp;gt; '''USB Gadget Support''' -&amp;gt; '''Gadget Filesystem (EXPERIMENTAL)''' (this one is good to have as a module)&lt;br /&gt;
&lt;br /&gt;
Find and enable '''Device Drivers''' -&amp;gt; '''USB support''' -&amp;gt; '''USB Network Adapters''' -&amp;gt; '''Multi-purpose USB Networking Framework'''&lt;br /&gt;
&lt;br /&gt;
Find and enable '''Device Drivers''' -&amp;gt; '''USB support''' -&amp;gt; '''USB Network Adapters''' -&amp;gt; '''CDC Ethernet support (smart devices such as cable modems)'''&lt;br /&gt;
&lt;br /&gt;
These last two drivers are the same [[Getting Started with your Neo1973#By using Ethernet emulation over a USB cable|drivers that you need to work with a real Neo over USB network]]. After you've built the drivers, make sure that the copy of kernel headers in /usr/include/linux is up to date. In particular the file /usr/include/linux/usb_gadgetfs.h needs to be present and if your distribution came with headers older than 2.6.18 or so, then you need tell the package manager to update them, or you can do that manually with&lt;br /&gt;
&amp;lt;pre&amp;gt; # cp -a /usr/src/linux/include/linux/* /usr/include/linux/&amp;lt;/pre&amp;gt;&lt;br /&gt;
(assuming that your kernel sources are in /usr/src/linux). It is important that this is done before building qemu because the build system checks if these headers are functional and in case they aren't found it will disable the USB Slave functionality.&lt;br /&gt;
&lt;br /&gt;
After building qemu and before running it, make sure that the modules are loaded into the kernel. I found it useful to load gadgetfs with the following command:&lt;br /&gt;
&amp;lt;pre&amp;gt; # modprobe gadgetfs default_uid=1000  # assuming my User ID is 1000&amp;lt;/pre&amp;gt;&lt;br /&gt;
and added the following line to my /etc/fstab:&lt;br /&gt;
&amp;lt;pre&amp;gt;gadget         /dev/gadget    gadgetfs   noauto,user,group         0   0&amp;lt;/pre&amp;gt;&lt;br /&gt;
Make sure that the mountpoint /dev/gadget exists:&lt;br /&gt;
&amp;lt;pre&amp;gt; # mkdir -p /dev/gadget&amp;lt;/pre&amp;gt;&lt;br /&gt;
After that the rest of the procedure can be performed from your regular user account. Mounting gadgetfs is done with:&lt;br /&gt;
&amp;lt;pre&amp;gt; $ mount /dev/gadget&amp;lt;/pre&amp;gt;&lt;br /&gt;
The &amp;quot;default_uid&amp;quot; parameter changes the ownership on all files under /dev/gadget to your own and since the files there are created and destroyed dynamically, there's no easy way to have that performed by ''udev''. Now running qemu as you usually do but appending &amp;quot;-usb -usbgadget&amp;quot; should enable the USB Slave functionality. The qemu monitor commands &amp;quot;info usbslave&amp;quot; and &amp;quot;usb_add gadget&amp;quot; will be useful. The former instruction asks the OS running under the emulator (OpenMoko) to describe its slave features (that's what ''lsusb'' does after a Neo1973 is connected to a PC). You can see the available USB configurations in this command's output. Since gadgetfs allows only one configuration, we will need to choose the desired configuration - most device have only one such configuration, in which case you can use just &amp;quot;usb_add gadget&amp;quot; to connect to host; CDC ethernet devices however usually include a second configuration for RNDIS networking (i.e. Ms Windows compatibility) and so does OpenMoko when using the g_ether driver. Hence, to get this right, wait for OpenMoko to fully boot up and execute the following in QEMU monitor:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
QEMU 0.9.0 monitor - type 'help' for more information&lt;br /&gt;
(qemu) info usbslave &lt;br /&gt;
USB2.2 device 1457:5122:&lt;br /&gt;
Manufacturer: Linux 2.6.20.7-moko8/s3c2410_udc&lt;br /&gt;
Product: RNDIS/Ethernet Gadget&lt;br /&gt;
Configuration 0: RNDIS&lt;br /&gt;
Configuration 1: CDC Ethernet&lt;br /&gt;
(qemu) &lt;br /&gt;
(qemu) usb_add gadget:1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The &amp;quot;1&amp;quot; in &amp;quot;usb_add gadget:N&amp;quot; is the number of the USB configuration that we want to use. If everything went correctly - you can check that in dmesg - you should now have a new network interface called ''usb0'' on the PC, through which you can talk to the OpenMoko running in QEMU:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 $ dmesg | tail&lt;br /&gt;
&amp;lt;6&amp;gt;gadgetfs: bound to dummy_udc driver&lt;br /&gt;
&amp;lt;7&amp;gt;hub 3-0:1.0: debounce: port 1: total 100ms stable 100ms status 0x101&lt;br /&gt;
&amp;lt;6&amp;gt;usb 3-1: new high speed USB device using dummy_hcd and address 3&lt;br /&gt;
&amp;lt;6&amp;gt;gadgetfs: connected&lt;br /&gt;
&amp;lt;7&amp;gt;usb 3-1: default language 0x0409&lt;br /&gt;
&amp;lt;7&amp;gt;usb 3-1: new device strings: Mfr=1, Product=2, SerialNumber=0&lt;br /&gt;
&amp;lt;6&amp;gt;usb 3-1: Product: RNDIS/Ethernet Gadget&lt;br /&gt;
&amp;lt;6&amp;gt;usb 3-1: Manufacturer: Linux 2.6.20.7-moko8/s3c2410_udc&lt;br /&gt;
&amp;lt;6&amp;gt;usb 3-1: configuration #1 chosen from 1 choice&lt;br /&gt;
&amp;lt;7&amp;gt;usb 3-1: adding 3-1:1.0 (config #1, interface 0)&lt;br /&gt;
&amp;lt;7&amp;gt;usb 3-1:1.0: uevent&lt;br /&gt;
&amp;lt;7&amp;gt;cdc_ether 3-1:1.0: usb_probe_interface - got id&lt;br /&gt;
&amp;lt;7&amp;gt;cdc_ether 3-1:1.0: status ep3in, 16 bytes period 14&lt;br /&gt;
&amp;lt;7&amp;gt;usb 3-1: adding 3-1:1.1 (config #1, interface 1)&lt;br /&gt;
&amp;lt;7&amp;gt;usb 3-1:1.1: uevent&lt;br /&gt;
 $ su -&lt;br /&gt;
Password:&lt;br /&gt;
 # tail /var/log/everything/current&lt;br /&gt;
May  8 19:25:32 [kernel] gadgetfs: connected&lt;br /&gt;
May  8 19:25:32 [kernel] gadgetfs: disconnected&lt;br /&gt;
May  8 19:25:32 [kernel] gadgetfs: configuration #1&lt;br /&gt;
May  8 19:25:32 [kernel] usb0: register 'cdc_ether' at usb-dummy_hcd-1, CDC Ethernet Device, 52:e7:eb:76:0a:d0&lt;br /&gt;
 # lsusb -vvv&lt;br /&gt;
Bus 003 Device 003: ID 1457:5122  &lt;br /&gt;
Device Descriptor:&lt;br /&gt;
  bLength                18&lt;br /&gt;
  bDescriptorType         1&lt;br /&gt;
  bcdUSB               2.00&lt;br /&gt;
  bDeviceClass            2 Communications&lt;br /&gt;
  bDeviceSubClass         0 &lt;br /&gt;
  bDeviceProtocol         0 &lt;br /&gt;
  bMaxPacketSize0        64&lt;br /&gt;
  idVendor           0x1457 &lt;br /&gt;
  idProduct          0x5122 &lt;br /&gt;
  bcdDevice            2.12&lt;br /&gt;
  iManufacturer           1 Linux 2.6.20.7-moko8/s3c2410_udc&lt;br /&gt;
  iProduct                2 RNDIS/Ethernet Gadget&lt;br /&gt;
  iSerial                 0 &lt;br /&gt;
  bNumConfigurations      1&lt;br /&gt;
  Configuration Descriptor:&lt;br /&gt;
    bLength                 9&lt;br /&gt;
    bDescriptorType         2&lt;br /&gt;
    wTotalLength           80&lt;br /&gt;
    bNumInterfaces          2&lt;br /&gt;
    bConfigurationValue     1&lt;br /&gt;
    iConfiguration          7 CDC Ethernet&lt;br /&gt;
    bmAttributes         0xc0&lt;br /&gt;
      Self Powered&lt;br /&gt;
    MaxPower                0mA&lt;br /&gt;
    Interface Descriptor:&lt;br /&gt;
      bLength                 9&lt;br /&gt;
      bDescriptorType         4&lt;br /&gt;
      bInterfaceNumber        0&lt;br /&gt;
      bAlternateSetting       0&lt;br /&gt;
      bNumEndpoints           1&lt;br /&gt;
      bInterfaceClass         2 Communications&lt;br /&gt;
      bInterfaceSubClass      6 Ethernet Networking&lt;br /&gt;
      bInterfaceProtocol      0 &lt;br /&gt;
      iInterface              5 CDC Communications Control&lt;br /&gt;
      CDC Header:&lt;br /&gt;
        bcdCDC               1.10&lt;br /&gt;
      CDC Union:&lt;br /&gt;
        bMasterInterface        0&lt;br /&gt;
        bSlaveInterface         1 &lt;br /&gt;
      CDC Ethernet:&lt;br /&gt;
        iMacAddress                      3 52E7EB760AD0&lt;br /&gt;
        bmEthernetStatistics    0x00000000&lt;br /&gt;
        wMaxSegmentSize               1514&lt;br /&gt;
        wNumberMCFilters            0x0000&lt;br /&gt;
        bNumberPowerFilters              0&lt;br /&gt;
      Endpoint Descriptor:&lt;br /&gt;
        bLength                 7&lt;br /&gt;
        bDescriptorType         5&lt;br /&gt;
        bEndpointAddress     0x83  EP 3 IN&lt;br /&gt;
        bmAttributes            3&lt;br /&gt;
          Transfer Type            Interrupt&lt;br /&gt;
          Synch Type               None&lt;br /&gt;
          Usage Type               Data&lt;br /&gt;
        wMaxPacketSize     0x0010  1x 16 bytes&lt;br /&gt;
        bInterval              14&lt;br /&gt;
    Interface Descriptor:&lt;br /&gt;
      bLength                 9&lt;br /&gt;
      bDescriptorType         4&lt;br /&gt;
      bInterfaceNumber        1&lt;br /&gt;
      bAlternateSetting       0&lt;br /&gt;
      bNumEndpoints           0&lt;br /&gt;
      bInterfaceClass        10 Data&lt;br /&gt;
      bInterfaceSubClass      0 Unused&lt;br /&gt;
      bInterfaceProtocol      0 &lt;br /&gt;
      iInterface              0 &lt;br /&gt;
    Interface Descriptor:&lt;br /&gt;
      bLength                 9&lt;br /&gt;
      bDescriptorType         4&lt;br /&gt;
      bInterfaceNumber        1&lt;br /&gt;
      bAlternateSetting       1&lt;br /&gt;
      bNumEndpoints           2&lt;br /&gt;
      bInterfaceClass        10 Data&lt;br /&gt;
      bInterfaceSubClass      0 Unused&lt;br /&gt;
      bInterfaceProtocol      0 &lt;br /&gt;
      iInterface              4 Ethernet Data&lt;br /&gt;
      Endpoint Descriptor:&lt;br /&gt;
        bLength                 7&lt;br /&gt;
        bDescriptorType         5&lt;br /&gt;
        bEndpointAddress     0x81  EP 1 IN&lt;br /&gt;
        bmAttributes            2&lt;br /&gt;
          Transfer Type            Bulk&lt;br /&gt;
          Synch Type               None&lt;br /&gt;
          Usage Type               Data&lt;br /&gt;
        wMaxPacketSize     0x0040  1x 64 bytes&lt;br /&gt;
        bInterval               0&lt;br /&gt;
      Endpoint Descriptor:&lt;br /&gt;
        bLength                 7&lt;br /&gt;
        bDescriptorType         5&lt;br /&gt;
        bEndpointAddress     0x02  EP 2 OUT&lt;br /&gt;
        bmAttributes            2&lt;br /&gt;
          Transfer Type            Bulk&lt;br /&gt;
          Synch Type               None&lt;br /&gt;
          Usage Type               Data&lt;br /&gt;
        wMaxPacketSize     0x0040  1x 64 bytes&lt;br /&gt;
        bInterval               0&lt;br /&gt;
Device Qualifier (for other device speed):&lt;br /&gt;
  bLength                10&lt;br /&gt;
  bDescriptorType         6&lt;br /&gt;
  bcdUSB               2.00&lt;br /&gt;
  bDeviceClass            2 Communications&lt;br /&gt;
  bDeviceSubClass         0 &lt;br /&gt;
  bDeviceProtocol         0 &lt;br /&gt;
  bMaxPacketSize0        64&lt;br /&gt;
  bNumConfigurations      1&lt;br /&gt;
&lt;br /&gt;
 # ifconfig usb0 inet 192.168.0.200 netmask 255.255.255.0&lt;br /&gt;
 # exit&lt;br /&gt;
 $ ssh root@192.168.0.202&lt;br /&gt;
The authenticity of host '192.168.0.202 (192.168.0.202)' can't be established.&lt;br /&gt;
RSA key fingerprint is de:21:87:93:52:1c:6b:c7:69:29:6c:af:66:50:02:02.&lt;br /&gt;
Are you sure you want to continue connecting (yes/no)? yes&lt;br /&gt;
Warning: Permanently added '192.168.0.202' (RSA) to the list of known hosts.&lt;br /&gt;
root@192.168.0.202's password: &lt;br /&gt;
root@fic-gta01:~$ uname -a&lt;br /&gt;
Linux fic-gta01 2.6.20.7-moko8 #1 PREEMPT Wed Apr 25 11:13:52 UTC 2007 armv4tl unknown&lt;/div&gt;</summary>
		<author><name>Jserv</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/OpenMoko_under_QEMU</id>
		<title>OpenMoko under QEMU</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/OpenMoko_under_QEMU"/>
				<updated>2007-04-17T09:59:10Z</updated>
		
		<summary type="html">&lt;p&gt;Jserv: Added &amp;quot;Pre-built binaries&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;QEMU can basically be used in three ways to run [[OpenMoko]]. Depending on the purpose that you are going to use the emulator for, you should decide on the target platform.&lt;br /&gt;
&lt;br /&gt;
*PC - OpenMoko can be built to run on regular i386 hardware, 32- or 64-bit and this is probably the fastest way to get OpenMoko running if you want to get an impression of how it looks.  In this scenario QEMU would only serve for isolating your [[OpenMoko]] installation from your normal system, or, if you're not on a UNIX system, QEMU provides a non-intrusive way to get Linux up quickly. More information can be found in the [[FAQ]] and [[Getting Openmoko working on host with Xoo|here]].&lt;br /&gt;
&lt;br /&gt;
*Integrator/CP - this is the default ARM-based machine that QEMU knows about. This target is used with MACHINE=&amp;quot;qemuarm&amp;quot; and it is sufficient to run the original OpenMoko rootfs image, although it doesn't emulate any of the [[:Category:Neo1973 Hardware | Neo1973 Hardware]] except the CPU. Read more in the [[FAQ#Q:_Is_there_an_emulator_available_for_OpenMoko.3F|FAQ]].&lt;br /&gt;
&lt;br /&gt;
*Neo1973 - the QEMU tree available from OpenMoko repositories is also capable of emulating most of the actual [[Neo1973]] hardware, although not all of it at this moment. It is a work-in-progress and when it's more mature it is going to be submitted for merging to the main QEMU development tree.&lt;br /&gt;
&lt;br /&gt;
== Neo1973 emulation ==&lt;br /&gt;
This target will (obviously) run original OpenMoko rootfs images, but then it should also be able to run the original u-boot and kernel images, the same ones that a real Neo1973 uses. Among other differences you will notice between this approach and the Integrator/CP target is you also get correct screen resolution, some (fake) battery readings, and other goodness. Currently missing parts of the emulator are: [[GSM]] modem, [[Hardware:AGPS|AGPS]] and [[Bluetooth]], as well as the USB slave functionality - these things will still be worked on, as well as general usability. Even with these things missing, QEMU should provide substantial help in debugging kernel and u-boot issues to developers.&lt;br /&gt;
&lt;br /&gt;
What QEMU can *not* be used for, and probably no other emulator can, is speed measures and getting the general feel of OpenMoko performance. Code running in qemu runs with the maximum speed your host computer can provide with an overhead of translating target code to host code, and this overhead is not uniform across different instructions. This means that even if your virtual Neo reports near 100 BogoMIPS (which is the speed of a real Neo), different actions performed in the emulator will not run with the same speed. On most PCs you will notice the virtual Neo running faster than a real one (Audio related operations may be one of the exceptions).&lt;br /&gt;
&lt;br /&gt;
=== What hardware is supported ===&lt;br /&gt;
&lt;br /&gt;
Rough status for each of the components that need emulation, following the outline of [[:Category:Neo1973 Hardware | Neo1973 Hardware]] page.&lt;br /&gt;
{|&lt;br /&gt;
! Hardware !! Status !! Usage notes&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeedd;&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot;|S3C2410A Processor&lt;br /&gt;
|-&lt;br /&gt;
|ARM920T core || Works || Already in mainline QEMU.&lt;br /&gt;
|-&lt;br /&gt;
|Basic guts || Work || This includes GPIO interface, DMA, Interrupt Controller, Timers, NAND controller, MMC/SD host, [[I2C]] and IIS interfaces, Memory &amp;amp; Clock &amp;amp; Power management controllers, RAM.&lt;br /&gt;
|-&lt;br /&gt;
|Serial ports || Work || Use the &amp;quot;-serial&amp;quot; switch (maybe be specified multiple times) to tell QEMU where serial input/output should go to. GSM module will be connected on UART0.&lt;br /&gt;
|-&lt;br /&gt;
|RTC || Works || On start QEMU will load it with current time/date - the Neo1973 [[kernel]] doesn't use it for time/date source currently.&lt;br /&gt;
|-&lt;br /&gt;
|SPI || Works || The guest kernel can drive it using either the SPI interface or raw GPIO bitbanging.&lt;br /&gt;
|-&lt;br /&gt;
|LCD || Works || The virtual LCD will display as in QEMU window iff &amp;quot;-nographic&amp;quot; is not specified.&lt;br /&gt;
|-&lt;br /&gt;
|ADC || Works || Mouse events in QEMU window generate what would be touchscreen events on a Neo1973 and are passed to the guest OS through the on-chip ADC.&lt;br /&gt;
|-&lt;br /&gt;
|OHCI USB || Works || This part is in mainline QEMU. Use the &amp;quot;-usb&amp;quot; switch to enable the controller and &amp;quot;usb_add&amp;quot; in QEMU monitor to attach new virtual or physical USB devices.&lt;br /&gt;
|-&lt;br /&gt;
|Slave USB&lt;br /&gt;
|style=&amp;quot;background-color:#ffcccc;&amp;quot;|To Do&lt;br /&gt;
|Possibly Linux's dummy HCD in conjunction with gadget filesystem API can be make the virtual Neo appear as a real one connected to your computer. Otherwise different host functions (usbtty, usbnet) could be emulated.&lt;br /&gt;
|-&lt;br /&gt;
|Watchdog&lt;br /&gt;
|style=&amp;quot;background-color:#ffcccc;&amp;quot;|To Do&lt;br /&gt;
|This is one of the less important on-chip peripherals in S3C2410. It is however used by Linux for rebooting the board.&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeedd;&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot;|[[I2C]] bus peripherals&lt;br /&gt;
|-&lt;br /&gt;
|[[PCF50606]]||Works||(Aka PMU) Fakes the battery charge level (set at 88%), POWER button, etc. Also contains and RTC, also unused by Linux.&lt;br /&gt;
|-&lt;br /&gt;
|[[LM4857]]||Works&lt;br /&gt;
|-&lt;br /&gt;
|[[WM8753L]]||Works||The CODEC is also connect to the CPU's IIS port. Basic [[Neo1973 Audio Subsystem|audio functionality]] is supported - see QEMU documentation on getting audio input/output from the emulator. Volume control has no effects.&lt;br /&gt;
|- style=&amp;quot;background-color:#eeeedd;&amp;quot;&lt;br /&gt;
! colspan=&amp;quot;3&amp;quot;|Other peripherals&lt;br /&gt;
|-&lt;br /&gt;
|NAND Flash||Works||However, some pieces are not confirmed to be completely compatible with the real hardware because of lack thereof. Use &amp;quot;-mtdblock flashimagefilenamehere&amp;quot; switch to point QEMU to your flash image. The file should be at least 69206016 bytes big.&lt;br /&gt;
|-&lt;br /&gt;
|JBT6K74-AS(PI)||Works|| (Aka LCM) Wired to the SPI channel 1&lt;br /&gt;
|-&lt;br /&gt;
|Buttons||Work||Enter is the AUX button, Space is the POWER button. Wired to on-chip GPIO and PCF50606.&lt;br /&gt;
|-&lt;br /&gt;
|SD card||Works||This part is already in mainline QEMU. Use the &amp;quot;-sd cardimagegoeshere&amp;quot; switch to point QEMU to the card image. The regular QEMU monitor commands for removable media can also be used. The card works, however the on-chip host controller gave block length errors on heavy I/O despite working as described in specification. I suspect the kernel driver. DMA operation is not tested.&lt;br /&gt;
|-&lt;br /&gt;
|Bluetooth&lt;br /&gt;
|style=&amp;quot;background-color:#ffcccc;&amp;quot;|To Do&lt;br /&gt;
|Will require implementing the Delta DBFM chip and connecting it to USB. The ROM will likely be replaced with code to translate communication directly to TCP/UDP networking (like Slirp). A real bluetooth dongle can also be attached to the emulator (see USB documentation in QEMU).&lt;br /&gt;
|-&lt;br /&gt;
|[[GSM]]&lt;br /&gt;
|style=&amp;quot;background-color:#ffcccc;&amp;quot;|In Progress&lt;br /&gt;
|A fake modem will be connected to UART0 with as much functionality as possible (basic AT commands understanding, fake GPRS connections and SMS send/receive). This way all parts of the phone subsystem (CALYPSO, TWL3014, TRF6151) will not have to be emulated. There is a possibility to wire a real GSM modem to QEMU's serial port.&lt;br /&gt;
|-&lt;br /&gt;
|[[Hardware:AGPS|AGPS]]&lt;br /&gt;
|style=&amp;quot;background-color:#ffcccc;&amp;quot;|To Do&lt;br /&gt;
|There are obvious difficulties emulating the chip, but hopefully it can be made to present the guest OS with some fixed coordinates later when more is known about the chip. Again a real chip could be connected to QEMU's serial port.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== How to get it running ==&lt;br /&gt;
&lt;br /&gt;
=== Using MokoMakefile ===&lt;br /&gt;
&lt;br /&gt;
This is the recommended way since you won't need to deal with the compiling and flashing processes yourself. See [[MokoMakefile#QEMU|MokoMakefile]] for details.&lt;br /&gt;
&lt;br /&gt;
=== Building the environment manually ===&lt;br /&gt;
To obtain the latest source code for the emulator, you will want to do something like the following:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ svn checkout https://svn.openmoko.org/trunk/src/host/qemu-neo1973&lt;br /&gt;
$ cd qemu-neo1973&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Now, we're going to configure and build the emulator:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ ./configure --target-list=arm-softmmu  # GCC 3.x will be required&lt;br /&gt;
$ make&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
See other available options for the configure script by appending &amp;quot;--help&amp;quot;.&lt;br /&gt;
Now you have should have a working emulator under the name &amp;quot;arm-softmmu/qemu-system-arm&amp;quot;. To run OpenMoko you will also need to somehow install OpenMoko on your virtual phone, which is totally clean of any software at this moment. There are several block devices to choose from, the best option is probably to do exactly what the Neo1973 manufacturer does before it ships the device to the final user. This process is described in [[Bootloader]], [[Kernel]], [[NAND bad blocks]] and [[Devirginator]] but you don't need to know all the details. Two scripts are provided to generate a firmware for your phone, as realistic as possible. First, run&lt;br /&gt;
&amp;lt;pre&amp;gt;$ openmoko/download.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
which will look up the list of latest available OpenMoko snapshot builds from buildhost.openmoko.org and choose the most recent [[u-boot]], Kernel, and root filesystem images, and download the images (unless they are already found in the openmoko/ directory). These binaries will be used by the next command:&lt;br /&gt;
&amp;lt;pre&amp;gt;$ openmoko/flash.sh&amp;lt;/pre&amp;gt;&lt;br /&gt;
which runs the emulator, loads u-boot into it and then uses u-boot's capability to program the Flash memory to install all the necessary parts of the system into the virtual Flash. It will also set up all the bootloading process including a boot menu, splash, u-boot environment and some default kernel parameters. If everything goes OK, the script should print a command which you can use to start using the emulator.&lt;br /&gt;
&lt;br /&gt;
QEMU has *tons* of commandline switches and things that can be configured. You can look them up in [http://www.qemu.org/user-doc.html QEMU user docs]. You will probably want to use the &amp;quot;-snapshot&amp;quot; switch, among other ones.&lt;br /&gt;
&lt;br /&gt;
== Requirements ==&lt;br /&gt;
The QEMU tree has only been tested on GNU/Linux. To get graphical and/or audio output from the emulator you will need SDL installed on your computer. To enable audio, see the available switches to the ./configure script.&lt;br /&gt;
All of the requirements listed in [http://www.qemu.org/user-doc.html QEMU documentation] apply.&lt;br /&gt;
&lt;br /&gt;
== QEMU and GNU debugger ==&lt;br /&gt;
QEMU lets you debug operating system kernels and bootloaders like you debug all other programs. To do this you will need a debugger that speaks the GDB remote debugging protocol - [http://sourceware.org/gdb/ GDB] is the obvious choice. Some cross toolchains come with GDB already set up. Otherwise building cross-GDB yourself is quick and easy (compared to building binutils and cross-gcc).&lt;br /&gt;
&lt;br /&gt;
To debug u-boot, load the file &amp;quot;u-boot&amp;quot; into gdb (not &amp;quot;u-boot.bin&amp;quot;) that is produced by &amp;quot;make&amp;quot; when building u-boot. To debug a Linux kernel, load the file &amp;quot;vmlinux&amp;quot; from the main source directory into gdb. These files are in ELF format and contain all the symbol information and are not stripped of debugging data until you run &amp;quot;strip&amp;quot; on them, unlike &amp;quot;u-boot.bin&amp;quot; and &amp;quot;Image&amp;quot;/&amp;quot;zImage&amp;quot;/&amp;quot;uImage&amp;quot;. Next, tell QEMU to enable the gdbserver by appending the &amp;quot;-s&amp;quot; switch or issuing &amp;quot;gdbserver&amp;quot; in the monitor. Use the command &amp;lt;pre&amp;gt;(gdb) target remote localhost:1234&amp;lt;/pre&amp;gt; to make a connection to the emulator. From there you should be able to use all the usual GDB commands, including stepping instructions, setting breakpoints, watchpoints, inspecting stack, variables, registers and more. If gdb is running in the same directory from which it grabbed the ELF executable, the &amp;quot;edit&amp;quot; command should work so you can jump right to the source line which is executing.&lt;br /&gt;
&lt;br /&gt;
== Pre-built binaries ==&lt;br /&gt;
&lt;br /&gt;
Win32 binaries shipped with firmware could be downloaded: [http://mdk.linux.org.tw/~jserv/openmoko/openmoko-emulator-win32-bin-20070416.zip openmoko-emulator-win32-bin-20070416.zip]. Tested on Windows XP. Screenshot:&lt;br /&gt;
[[Image:MokoWin32Emu.jpg|OpenMoko emulator running on Windows XP]]&lt;/div&gt;</summary>
		<author><name>Jserv</name></author>	</entry>

	</feed>