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

	<entry>
		<id>http://wiki.openmoko.org/wiki/Mac_OS_X</id>
		<title>Mac OS X</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Mac_OS_X"/>
				<updated>2007-09-20T20:39:57Z</updated>
		
		<summary type="html">&lt;p&gt;Eric: /* Using virtualization software */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the OpenMoko page devoted to MacOS X users!&lt;br /&gt;
&lt;br /&gt;
Here you can find notes of using Neo1973 (and maybe other OM devices) with Mac.&lt;br /&gt;
&lt;br /&gt;
= Flashing to your device =&lt;br /&gt;
To operate the Phase 1 devices, you need to flash a root file system first.&lt;br /&gt;
&lt;br /&gt;
NOTE: you need an Intel Mac to run [[dfu-util]] since it is currently broken on big-endian machines (PowerPC).&lt;br /&gt;
&lt;br /&gt;
Here is a detailed instruction:&lt;br /&gt;
# If you don't have Mac OS X 10.4.10 (Apple already ships a more stable CDC ECM driver, and DFU through libusb doesn't need a driver at all):&lt;br /&gt;
## download the latest version of AJZaurusUSB from http://www.dsitri.de/wiki.php?page=AJZaurusUSB&lt;br /&gt;
## install&lt;br /&gt;
## run 'sudo kextload /System/Library/Extensions/AJZaurusUSB.kext' from Terminal (or reboot your Mac as described - but you do not need to configure AJZaurusUSB it before flashing the OpenMoko)&lt;br /&gt;
# download the latest version of OpenMoko Flasher from http://www.dsitri.de/wiki.php?page=OpenMoko%20Flasher&lt;br /&gt;
# [V1.0 only: create a new Folder at &amp;quot;~/Library/Caches/OpenMoko Flasher&amp;quot;]&lt;br /&gt;
# press the Refresh button (which loads the list of packages on the server)&lt;br /&gt;
# select and load the rootfs (takes some minutes for approx. 40 MByte)&lt;br /&gt;
# [V1.0 and V1.1 only: open the Console application and show the console.log]&lt;br /&gt;
# Now, on your OpenMoko, hold the AUX button while pressing the Power button for 5 seconds&lt;br /&gt;
# the BOOT menu should appear&lt;br /&gt;
# connect the USB cable&lt;br /&gt;
# Press the Flash button&lt;br /&gt;
# the BOOT menu screen on the OM should show an indication that it has been switched to DFU mode&lt;br /&gt;
# if it fails), unplug the OpenMoko shortly and replug and try again (experience shows that it is needed up to three times)&lt;br /&gt;
# if it successfully flashed, you should be able to boot the OpenMoko and continue configuring AJZaurusUSB&lt;br /&gt;
&lt;br /&gt;
The dfu-utils tool is included in the OpenMoko Flasher application; you can access it as ''OpenMoko Flasher.app/Contents/MacOS/dfu-util'' ; alternatively, you can compile dfu-util manually as described at http://wiki.openmoko.org/wiki/User:SNMoore&lt;br /&gt;
&lt;br /&gt;
= Connecting to your device =&lt;br /&gt;
&lt;br /&gt;
== USB Serial ==&lt;br /&gt;
&lt;br /&gt;
It is possible to access the U-Boot [[Bootloader]] serial console from a Mac.  You can use the Terminal application on Mac OS X, or &amp;lt;tt&amp;gt;minicom&amp;lt;/tt&amp;gt; from [http://finkproject.org/ Fink] or [http://www.macports.org/ MacPorts] (formerly Darwin Ports.)&lt;br /&gt;
&lt;br /&gt;
The USB driver creates cu and tty character devices, for example&lt;br /&gt;
 $ ls -la /dev/tty.usb*&lt;br /&gt;
 crw-rw-rw-   1 root  wheel   10,  18 Aug 23 14:10 /dev/tty.usbmodem00000001&lt;br /&gt;
 $ ls -la /dev/cu.usb*&lt;br /&gt;
 crw-rw-rw-   1 root  wheel   10,  19 Aug 23 14:10 /dev/cu.usbmodem00000001&lt;br /&gt;
&lt;br /&gt;
=== USB Serial with screen ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;code&amp;gt;screen&amp;lt;/code&amp;gt; program is included with Mac OS X, and can be used from the terminal command line to connect to the serial console.   To do this, simply get to a shell prompt in the terminal and invoke &amp;lt;code&amp;gt;screen&amp;lt;/code&amp;gt; as follows:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
% screen /dev/ttyusbmodem00000001&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You should find yourself at the U-boot serial console prompt.   To get out, type &amp;lt;code&amp;gt;control+a&amp;lt;/code&amp;gt; followed by &amp;lt;code&amp;gt;control+backslash&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
=== USB Serial with minicom ===&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;tt&amp;gt;minicom&amp;lt;/tt&amp;gt; program from the [http://www.macports.org/ MacPorts] collection can be used to access the USB serial port &amp;lt;tt&amp;gt;/dev/cu.usbmodem00000001&amp;lt;/tt&amp;gt; (numbering may vary.)&lt;br /&gt;
&lt;br /&gt;
First install the program (assuming you already have MacPorts installed):&lt;br /&gt;
&lt;br /&gt;
 sudo port install minicom&lt;br /&gt;
&lt;br /&gt;
Then launch it in configuration mode (the -s flag):&lt;br /&gt;
&lt;br /&gt;
 sudo minicom -s&lt;br /&gt;
&lt;br /&gt;
Under &amp;quot;Serial Port Setup&amp;quot;, set the Device to &amp;quot;/dev/cu.usbmodem00000001&amp;quot; and set Bps to &amp;quot;115200 8N1&amp;quot;. Under &amp;quot;Modem and Dialing&amp;quot;, enter empty strings for &amp;quot;Init string&amp;quot;, &amp;quot;Reset string&amp;quot;, and &amp;quot;Hang-up string&amp;quot;. Save the setup as default (&amp;quot;dfl&amp;quot;) then Exit. &lt;br /&gt;
&lt;br /&gt;
You should now be able to access the bootloader console. You should exit from Minicom before disconnecting the smartphone, or else you will get an error about unplugging a USB device while it is in use.&lt;br /&gt;
&lt;br /&gt;
=== USB Serial with Terminal ===&lt;br /&gt;
&lt;br /&gt;
The built in Mac Terminal application &amp;lt;tt&amp;gt;Terminal.app&amp;lt;/tt&amp;gt; can be used to access the USB serial port &amp;lt;tt&amp;gt;/dev/tty.usbmodem00000001&amp;lt;/tt&amp;gt; (numbering may vary.)&lt;br /&gt;
&lt;br /&gt;
An easy way to do this is to configure the terminal with Script Editor, as described in the short article, [http://www.macosxhints.com/article.php?story=20061109133825654 ''Use 'screen' as a serial terminal emulator''](macosxhints.com).  Then,&lt;br /&gt;
&lt;br /&gt;
# Press and hold {{aux}} and then press and hold {{power}} for 5 seconds&lt;br /&gt;
# Press {{aux}} to select &amp;lt;tt&amp;gt;Set console to USB&amp;lt;/tt&amp;gt; in the U-Boot menu, and {{power}} to execute it&lt;br /&gt;
# Start the serial terminal application.  You should see a U-Boot command line prompt, such as&lt;br /&gt;
 In:    usbtty&lt;br /&gt;
 Out:   usbtty&lt;br /&gt;
 Err:   usbtty&lt;br /&gt;
 DEVICE_CONFIGURED: 1&lt;br /&gt;
 Enabling automatic fast charge&lt;br /&gt;
 GTA01Bv4 #&lt;br /&gt;
When you boot Linux on the smartphone, or if the smartphone powers down, Mac OS X will show a USB Device Unplug Notice, &amp;quot;The USB device has been unplugged while an application was still active. This can result in loss of data.&amp;quot; This error is probably harmless.&lt;br /&gt;
&lt;br /&gt;
== USB Networking ==&lt;br /&gt;
&lt;br /&gt;
You can telnet, SSH, SMB or do whatever you want if you install software that enables you to set up TCP/IP network over your USB connection.&lt;br /&gt;
&lt;br /&gt;
MacOS X does not provide such a driver for RNDIS/Ethernet Gadget. But you can use an open source (GPL) universal driver http://www.dsitri.de/wiki.php?page=AJZaurusUSB which is developed for handheld devices like iPAQ, Sharp Zaurus, and Motorola A760. Download it and install according to manual found inside of the package.&lt;br /&gt;
&lt;br /&gt;
After reboot, you should have a new Ethernet interface in your System Preferences/Network. Set up the network manually for that interface by using these addresses:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
IP-V4: manual&lt;br /&gt;
IP-Addr:  192.168.0.200&lt;br /&gt;
Subnet:  255.255.255.0&lt;br /&gt;
Router: 192.168.0.202&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This might conflict with some WLAN routers which also use the 192.168.0.0 network.&lt;br /&gt;
&lt;br /&gt;
You should be able to connect to your Neo! Try using ping 192.168.0.202 and the roundtrip time should be between 1 and 2 ms.&lt;br /&gt;
&lt;br /&gt;
NOTE: the software is sometimes a bit flaky, and a reboot of the Mac seems to bring it back. It is especially critical about hot unplugging the OM and sleep modes of MacBooks. This may even result in a Kernel Panic.&lt;br /&gt;
&lt;br /&gt;
== Telnet, ssh, SMB ==&lt;br /&gt;
&lt;br /&gt;
To Be Done.&lt;br /&gt;
&lt;br /&gt;
=== ssh ===&lt;br /&gt;
&lt;br /&gt;
After making the USB connection work, start ssh:&lt;br /&gt;
&lt;br /&gt;
ssh -l root 192.168.0.202&lt;br /&gt;
&lt;br /&gt;
If you don't have installed the key, it will ask for a &amp;quot;yes&amp;quot; on the first connection and for a password on each other. This is &amp;quot;root&amp;quot; unless you change it.&lt;br /&gt;
&lt;br /&gt;
 MacBook-hns:~ hns$ ssh -l root 192.168.0.202&lt;br /&gt;
 root@192.168.0.202's password: &lt;br /&gt;
 root@fic-gta01:~$ hostname&lt;br /&gt;
 fic-gta01&lt;br /&gt;
 root@fic-gta01:~$&lt;br /&gt;
&lt;br /&gt;
NOTE: the ssh daemon (dropbear 0.49) on the OpenMoko appears to have a bug when sending the exit status back to the client. From time to time you receive an exit status of 255.&lt;br /&gt;
&lt;br /&gt;
== Bluetooth ==&lt;br /&gt;
&lt;br /&gt;
To Be Done. See also: [[Bluetooth_Support#PPP_Networking]].&lt;br /&gt;
&lt;br /&gt;
== WiFi ==&lt;br /&gt;
&lt;br /&gt;
To Be Done.&lt;br /&gt;
&lt;br /&gt;
= Synchronizing =&lt;br /&gt;
&lt;br /&gt;
This is not done yet. Possible solutions are SyncML or ZMacSync http://www.dsitri.de/wiki.php?page=ZMacSync&lt;br /&gt;
&lt;br /&gt;
ZMacSync does not yet synchronize but allows more easy access to the OpenMoko through Terminal/ssh.&lt;br /&gt;
&lt;br /&gt;
= Sharing connection =&lt;br /&gt;
&lt;br /&gt;
== Mac as a server ==&lt;br /&gt;
&lt;br /&gt;
Here is described how to enable your Mac to serve as a internet router for your OpenMoko device.&lt;br /&gt;
&lt;br /&gt;
Go to Control Panel, click Sharing and click the Internet tab. Check all the ethernet (en) interfaces you want to enable Internet access for.&lt;br /&gt;
&lt;br /&gt;
SSH into your Neo and create /etc/resolv.conf, specify your Internet router IP address as the name server.&lt;br /&gt;
&lt;br /&gt;
Example:&lt;br /&gt;
&lt;br /&gt;
nameserver 192.168.1.200&lt;br /&gt;
&lt;br /&gt;
=== Bluetooth ===&lt;br /&gt;
&lt;br /&gt;
This could help: &lt;br /&gt;
&lt;br /&gt;
http://wiki.openmoko.org/wiki/Bluetooth_Support#Networking&lt;br /&gt;
&lt;br /&gt;
http://www.macosxhints.com/article.php?story=20051220221237711&lt;br /&gt;
&lt;br /&gt;
=== USB ===&lt;br /&gt;
&lt;br /&gt;
If you install AJZaurusUSB driver you should be able to set up your Mac as a router (not tested).&lt;br /&gt;
&lt;br /&gt;
== Neo1973 as a server ==&lt;br /&gt;
&lt;br /&gt;
To Be Done.&lt;br /&gt;
&lt;br /&gt;
= Developing software =&lt;br /&gt;
&lt;br /&gt;
== Using virtualization software==&lt;br /&gt;
&lt;br /&gt;
You can use Parallels or VMWare to install your favourite Linux distribution and then develop just as on Linux.&lt;br /&gt;
&lt;br /&gt;
There are some drawback since AFAIK dfu-util may not work correctly in such environments. &lt;br /&gt;
&lt;br /&gt;
Don't bother with Parallels Desktop for Mac (&amp;lt;=3), the current USB support is terrible and USB storage keys don't even work so there was no way I would try dfu-util. USB keys work under VMWare Fusion for Mac though I have yet to try dfu-util in an VM under VMWare Fusion as there is OpenMoko Flasher for Mac. -- [[User: Eric|Eric]]&lt;br /&gt;
&lt;br /&gt;
== Natively ==&lt;br /&gt;
&lt;br /&gt;
There are some efforts to get through process of compiling OE and OpenMoko under mac: [[OpenMoko_under_QEMU_on_MacOSX]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer software]]&lt;br /&gt;
&lt;br /&gt;
= Other Resources =&lt;br /&gt;
&lt;br /&gt;
== Search Software Repositories ==&lt;br /&gt;
&lt;br /&gt;
[[http://www.versiontracker.com/php/qs.php?action=search&amp;amp;str=openmoko&amp;amp;srchArea=macosx Keyword OpenMoko]] at VersionTracker&lt;br /&gt;
&lt;br /&gt;
== Discussion Fora ==&lt;br /&gt;
&lt;br /&gt;
[[http://www.oesf.org/forums/index.php?showforum=63 Mac Issues Forum]] at Open Embedded Software Foundation (was Zaurus User Group)&lt;/div&gt;</summary>
		<author><name>Eric</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Openmoko_Local_Groups:_Montreal</id>
		<title>Openmoko Local Groups: Montreal</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Openmoko_Local_Groups:_Montreal"/>
				<updated>2007-09-10T08:39:44Z</updated>
		
		<summary type="html">&lt;p&gt;Eric: reorganized, added a meetings section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the Montreal OpenMoko Enthusiasts page!&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Please update this page with any information about local OpenMoko happenings that you might know about.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Meetings ==&lt;br /&gt;
The following are a list of past and present meetups and demos in and around Montreal.&lt;br /&gt;
&lt;br /&gt;
=== Future ===&lt;br /&gt;
&lt;br /&gt;
{|border=1&lt;br /&gt;
!Date&lt;br /&gt;
!Type&lt;br /&gt;
!Host&lt;br /&gt;
!Location&lt;br /&gt;
!Remarks&lt;br /&gt;
|-&lt;br /&gt;
|2007-10-14&lt;br /&gt;
|MeetUp&lt;br /&gt;
|[[User:Eric|Eric Preston]]&lt;br /&gt;
|Mile End, Montreal&lt;br /&gt;
|I'm hosting regular, informal OpenMoko sessions at my apartment in Mile End. I plan to have one at least every month. Goto http://eric.linuxmontreal.com/contact to send me an email asking for directions and to reserve your spot. There is room for about 6-8 people.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== Past ===&lt;br /&gt;
&lt;br /&gt;
{|border=1&lt;br /&gt;
!Date&lt;br /&gt;
!Type&lt;br /&gt;
!Host&lt;br /&gt;
!Location&lt;br /&gt;
!Remarks&lt;br /&gt;
|-&lt;br /&gt;
|2007-09-09&lt;br /&gt;
| Meetup&lt;br /&gt;
|[[User:Eric|Eric Preston]]&lt;br /&gt;
|Mile End, Montreal&lt;br /&gt;
|A couple of people met up at Eric's place to check out his Neo1973 GTA01Bv4 kits.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== People ==&lt;br /&gt;
The following is a list of people interested in OpenMoko from in and around Montreal.&lt;br /&gt;
{|border=1&lt;br /&gt;
!Name&lt;br /&gt;
!Skills&lt;br /&gt;
!Level of Interest&lt;br /&gt;
!Location&lt;br /&gt;
!Other&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Eric|Eric Preston]]&lt;br /&gt;
|Freelance Developer&lt;br /&gt;
|Owner, Neo1973 Advanced, Base&lt;br /&gt;
|Montreal&lt;br /&gt;
|Organizing meetups as discussed above.&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Opampca|Richard Lussier]]&lt;br /&gt;
|Community networking&lt;br /&gt;
|Getting a free phone developped for ISF network&lt;br /&gt;
|Montreal&lt;br /&gt;
|Part of [http://www.ilesansfil.org/ Ile Sans Fil]&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Skwid|Benjamin Crulli]]&lt;br /&gt;
|Programming&lt;br /&gt;
|Developing some apps related to wifi hotspots&lt;br /&gt;
|Montreal&lt;br /&gt;
|Part of [http://www.ilesansfil.org/ Ile Sans Fil]&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Youlian|Youlian Troyanov]]&lt;br /&gt;
|Programming&lt;br /&gt;
|Developing apps&lt;br /&gt;
|Montreal&lt;br /&gt;
|Mobile c++/java developer&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Avoine|Patrick Hétu]]&lt;br /&gt;
|Programming&lt;br /&gt;
|Developing apps&lt;br /&gt;
|Montreal&lt;br /&gt;
|C/Python developer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
See [[Talk:OpenMoko_Local_Groups:_Montreal|discussion]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Eric</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Openmoko_Local_Groups:_Montreal</id>
		<title>Openmoko Local Groups: Montreal</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Openmoko_Local_Groups:_Montreal"/>
				<updated>2007-07-30T18:32:11Z</updated>
		
		<summary type="html">&lt;p&gt;Eric: contact info&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the Montreal openmoko page!&lt;br /&gt;
&lt;br /&gt;
Hopefully we'll be able to organise an event for when a few of us get the neos - please also keep the page updated with any interest you get from your local LUGs.&lt;br /&gt;
&lt;br /&gt;
{|border=1&lt;br /&gt;
!Name&lt;br /&gt;
!Skills&lt;br /&gt;
!Level of Interest&lt;br /&gt;
!Location&lt;br /&gt;
!Other&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Eric|Eric Preston]]&lt;br /&gt;
|Freelance Developer&lt;br /&gt;
|Owner, Neo1973 Advanced&lt;br /&gt;
|Montreal&lt;br /&gt;
|http://www.linuxmontreal.com, Willing to organize event immediately, drop me an email from my website.&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Opampca|Richard Lussier]]&lt;br /&gt;
|Community networking&lt;br /&gt;
|Getting a free phone developped for ISF network&lt;br /&gt;
|Montreal&lt;br /&gt;
|Part of [http://www.ilesansfil.org/ Ile Sans Fil]&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Skwid|Benjamin Crulli]]&lt;br /&gt;
|Programming&lt;br /&gt;
|Developing some apps related to wifi hotspots&lt;br /&gt;
|Montreal&lt;br /&gt;
|Part of [http://www.ilesansfil.org/ Ile Sans Fil]&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Youlian|Youlian Troyanov]]&lt;br /&gt;
|Programming&lt;br /&gt;
|Developing apps&lt;br /&gt;
|Montreal&lt;br /&gt;
|Mobile c++/java developer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
See [[Talk:OpenMoko_Local_Groups:_Montreal|discussion]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Eric</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Openmoko_Local_Groups:_Montreal</id>
		<title>Openmoko Local Groups: Montreal</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Openmoko_Local_Groups:_Montreal"/>
				<updated>2007-07-30T18:27:42Z</updated>
		
		<summary type="html">&lt;p&gt;Eric: got my phone this morning&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the Montreal openmoko page!&lt;br /&gt;
&lt;br /&gt;
Hopefully we'll be able to organise an event for when a few of us get the neos - please also keep the page updated with any interest you get from your local LUGs.&lt;br /&gt;
&lt;br /&gt;
{|border=1&lt;br /&gt;
!Name&lt;br /&gt;
!Skills&lt;br /&gt;
!Level of Interest&lt;br /&gt;
!Location&lt;br /&gt;
!Other&lt;br /&gt;
|-&lt;br /&gt;
&lt;br /&gt;
|[[User:Eric|Eric Preston]]&lt;br /&gt;
|Driver/Developer&lt;br /&gt;
|Owner, Neo1973 Advanced&lt;br /&gt;
|Montreal&lt;br /&gt;
|http://www.linuxmontreal.com, Willing to organize event immediately!}&lt;br /&gt;
-&lt;br /&gt;
|[[User:Opampca|Richard Lussier]]&lt;br /&gt;
|Community networking&lt;br /&gt;
|Getting a free phone developped for ISF network&lt;br /&gt;
|Montreal&lt;br /&gt;
|Part of [http://www.ilesansfil.org/ Ile Sans Fil]&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Skwid|Benjamin Crulli]]&lt;br /&gt;
|Programming&lt;br /&gt;
|Developing some apps related to wifi hotspots&lt;br /&gt;
|Montreal&lt;br /&gt;
|Part of [http://www.ilesansfil.org/ Ile Sans Fil]&lt;br /&gt;
|-&lt;br /&gt;
|[[User:Youlian|Youlian Troyanov]]&lt;br /&gt;
|Programming&lt;br /&gt;
|Developing apps&lt;br /&gt;
|Montreal&lt;br /&gt;
|Mobile c++/java developer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
See [[Talk:OpenMoko_Local_Groups:_Montreal|discussion]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Eric</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Building_OpenMoko_2007.1_from_scratch</id>
		<title>Building OpenMoko 2007.1 from scratch</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Building_OpenMoko_2007.1_from_scratch"/>
				<updated>2007-07-10T13:44:00Z</updated>
		
		<summary type="html">&lt;p&gt;Eric: /* OpenEmbedded build */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|align=right&lt;br /&gt;
 |__TOC__&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{{warning|This is still a preliminary version, which will take some more days until it has all the updates.}}&lt;br /&gt;
&lt;br /&gt;
This is a guide describing how to set up a running OpenMoko&lt;br /&gt;
system from scratch.&lt;br /&gt;
&lt;br /&gt;
If you just want to run OpenMoko applications on your PC, just perform the&lt;br /&gt;
&amp;quot;Obtaining OpenMoko SVN tree&amp;quot; step below and then go to&lt;br /&gt;
[[How to run OpenMoko Apps on PC]]. If you want to autoinstall all required tools and resources, consider using [[MokoMakefile]] -- script developed by Rod Whitby.&lt;br /&gt;
&lt;br /&gt;
Do not treat this as a linear script! There are various configuration items you&lt;br /&gt;
need to set (or skip, as it may be), operations that depend on how your&lt;br /&gt;
host(s) is/are set up, and also on the hardware revision of the target platform&lt;br /&gt;
(i.e., the phone).&lt;br /&gt;
&lt;br /&gt;
Instead, look at each step, read the instructions, copy and paste what&lt;br /&gt;
makes sense for you, and adapt what you disagree with. Links to original and&lt;br /&gt;
background material in the Wiki are included wherever useful.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Preparation ==&lt;br /&gt;
&lt;br /&gt;
===  Roles  ===&lt;br /&gt;
&lt;br /&gt;
The build process may spread over multiple machines. They have the following&lt;br /&gt;
roles:&lt;br /&gt;
&lt;br /&gt;
;'''BUILD''': build host, with quick access to the files and CPU power. Must have Internet access.&lt;br /&gt;
;'''LAB''': lab machine connected to the debug board (serial and JTAG) and to USB on the Neo (since this will probably be just a single machine, the roles are not further divided)&lt;br /&gt;
;'''CARD''': machine with a USB-attached SD/MMC card reader&lt;br /&gt;
&lt;br /&gt;
All machines are assumed to share the same filesystem layout. At the beginning of&lt;br /&gt;
each of the sections below, the respective role is indicated. &amp;quot;('''all''')&amp;quot; is for&lt;br /&gt;
settings that apply to all machines, or that - for simplicity - can be&lt;br /&gt;
applied to all of them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Directory layout ===&lt;br /&gt;
'''(Roles: all)'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$OMDIR (/home/moko)	base directory for the whole tree&lt;br /&gt;
  openmoko/		files from OpenMoko subversion (SVN) repository&lt;br /&gt;
  openembedded/		files from OpenEmbedded (OE) Monotone repository&lt;br /&gt;
  sources/		cached downloads of OE&lt;br /&gt;
  build/		OE build directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===  Environment variables ===&lt;br /&gt;
'''(Roles: all)'''&lt;br /&gt;
&lt;br /&gt;
For simplicity, we just set these environment variables on all hosts&lt;br /&gt;
involved. If you're not comfortable with this, feel free to weed out the ones&lt;br /&gt;
you don't need.&lt;br /&gt;
&lt;br /&gt;
Our base directory (configure this for local arrangements):&lt;br /&gt;
&lt;br /&gt;
 export OMDIR=/home/moko&lt;br /&gt;
&lt;br /&gt;
The search path for BitBake files. Note that the order is of vital&lt;br /&gt;
importance.&lt;br /&gt;
&lt;br /&gt;
 export BBPATH=$OMDIR/build:$OMDIR/openmoko/trunk/oe:$OMDIR/openembedded&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===  Permissions  ===&lt;br /&gt;
'''(Role: BUILD)'''&lt;br /&gt;
&lt;br /&gt;
In order to perform the build process, you have to obtain the following&lt;br /&gt;
permissions:&lt;br /&gt;
&lt;br /&gt;
* write access to the OpenMoko SVN repository (in principle, it should be possible to simplify this to read access. For further study.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===  Build host prerequisites  ===&lt;br /&gt;
'''(Role: BUILD)'''&lt;br /&gt;
&lt;br /&gt;
There must be at least 7 GB of free space on $OMDIR.&lt;br /&gt;
&lt;br /&gt;
In addition to the traditional development tools (gcc, patch, etc.), the&lt;br /&gt;
following packages must be installed on the build host:&lt;br /&gt;
&lt;br /&gt;
;subversion: version control system used by OpenMoko and others. &lt;br /&gt;
;quilt:	patch management system used by the Linux kernel and others&lt;br /&gt;
;monotone: version control system used by OpenEmbedded. This should be a recent version, e.g., 0.32, although also 0.31 should work.&lt;br /&gt;
;diffstat: the OE build process wants this&lt;br /&gt;
;texi2html: this too&lt;br /&gt;
;git: version control system used by the Linux kernel and others. Do not confuse this with the &amp;quot;GNU Interactive Tools&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Furthermore, the following package can be installed optionally:&lt;br /&gt;
;psyco: Python just-in-time compiler. Speeds up OpenEmbedded builds (with BitBake) considerably. Strongly recommended.&lt;br /&gt;
&lt;br /&gt;
==== Distro Specific Software Installation ====&lt;br /&gt;
;Gentoo: Gentoo users can obtain all this with (note that, at the time of writing, Monotone 0.32 isn't available without setting the ~x86 keyword):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo 'dev-util/monotone ~'`readlink /etc/make.profile | awk -F / '{print $6}'`\&lt;br /&gt;
  &amp;gt;&amp;gt;/etc/portage/package.keywords&lt;br /&gt;
emerge -u subversion quilt monotone diffstat texi2html dev-util/git psyco&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
;Other Distos: [http://www.openembedded.org/wiki/OEandYourDistro  Instructions for installing prerequisites in other distributions]&lt;br /&gt;
&lt;br /&gt;
===  Lab host prerequisites  ===&lt;br /&gt;
'''(Role: LAB)'''&lt;br /&gt;
&lt;br /&gt;
The following package must be installed on the lab host:&lt;br /&gt;
;xc: a simple communications program for the serial port&lt;br /&gt;
&lt;br /&gt;
Gentoo users can obtain this with:&lt;br /&gt;
 emerge -u xc&lt;br /&gt;
&lt;br /&gt;
Note that similar communications programs, such as &amp;quot;cu&amp;quot; or &amp;quot;minicom&amp;quot;, may be used as well.&lt;br /&gt;
&lt;br /&gt;
===  Assumptions  ===&lt;br /&gt;
'''(Roles: LAB, CARD)'''&lt;br /&gt;
&lt;br /&gt;
We make the following assumptions about hardware setup and devices:&lt;br /&gt;
&lt;br /&gt;
* the serial console of the Neo phone is connected to /dev/ttyS0 on '''LAB''' (see [[Debug_Board]])&lt;br /&gt;
* the JTAG [[wiggler]] is connected to /dev/parport0 on '''LAB'''. See [[Debug Board]] and  [[Connecting_GTA01Bv2_with_Debug_Board]]&lt;br /&gt;
* cards inserted in the SD/MMC card reader appear as /dev/uba on '''CARD''' and can be mounted on /mnt/tmp (we'll specify the mount point explicitly, so the directory has to be there, but we don't need to specify the mount point in /etc/fstab). If in doubt,&lt;br /&gt;
 mkdir -p /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
== Obtaining Sources and build system ==&lt;br /&gt;
&lt;br /&gt;
===  OpenEmbedded build: initial downloads  ===&lt;br /&gt;
&lt;br /&gt;
First, we obtain a snapshot of the OpenEmbedded-based tree used by OpenMoko, plus the OE build tool called BitBake.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Obtaining OpenMoko SVN tree ====&lt;br /&gt;
'''(Role: BUILD)'''&lt;br /&gt;
&lt;br /&gt;
Obtain the latest revision of the OpenMoko tree. Unfortunately, at some places, &amp;quot;current&amp;quot; versions of upstream packages may get included, thus the build may still fail. If it does, you may wish to inform the authorities.&lt;br /&gt;
&lt;br /&gt;
The checkout should take about 45 minutes over an Internet connection with a round-trip time to svn.openmoko.org of 350 ms.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $OMDIR&lt;br /&gt;
svn co http://svn.openmoko.org/ openmoko&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{note|If the local user name does not match the user name with which you access SVN, you can put your username in the url you use to checkout:&lt;br /&gt;
 svn+ssh://joe@stuff.org/svn/stuff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Installing BitBake ====&lt;br /&gt;
'''(Role: BUILD)'''&lt;br /&gt;
&lt;br /&gt;
Install version 1.6 of BitBake, the build tool of OE. (This is quick.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://svn.berlios.de/svnroot/repos/bitbake/branches/bitbake-1.6/ bitbake&lt;br /&gt;
cd bitbake&lt;br /&gt;
./setup.py install&lt;br /&gt;
cd ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Obtaining OpenEmbedded snapshot ====&lt;br /&gt;
'''(Role: BUILD)'''&lt;br /&gt;
&lt;br /&gt;
Obtain a snapshot of the Monotone repository of OpenEmbedded, then update it&lt;br /&gt;
to the latest version, and finally check out our &amp;quot;known to be good&amp;quot; revision.&lt;br /&gt;
We extract things into $OMDIR/openembedded. OE.mtn.bz2 is about 100 MB.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget http://www.openembedded.org/snapshots/OE.mtn.bz2&lt;br /&gt;
bunzip2 OE.mtn.bz2&lt;br /&gt;
mtn --db=OE.mtn pull monotone.openembedded.org org.openembedded.dev&lt;br /&gt;
mtn --db=OE.mtn checkout --branch=org.openembedded.dev \&lt;br /&gt;
  -r e2dbb52fe39df7ef786b6068f6178f29508dfded openembedded&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{note|For advanced users: if you ever want to update to the latest version of the repository, you would do a &amp;quot;pull&amp;quot; (see above), followed by:&lt;br /&gt;
 cd $OMDIR/openembedded &amp;amp;&amp;amp; mtn update}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Set up the directories for the cache of upstream files and all material&lt;br /&gt;
related to local builds, then put our configuration file there (see also&lt;br /&gt;
[[OpenMoko#Setting_up_an_OpenMoko_SDK]]):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p sources build/conf&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;build/conf/local.conf&lt;br /&gt;
MACHINE = &amp;quot;fic-gta01&amp;quot;&lt;br /&gt;
DISTRO = &amp;quot;openmoko&amp;quot;&lt;br /&gt;
BUILD_ARCH = &amp;quot;`uname -m`&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OpenEmbedded build: fixes ===&lt;br /&gt;
'''(Role: BUILD)'''&lt;br /&gt;
&lt;br /&gt;
There are unfortunately some problems in the build process. &lt;br /&gt;
The following fixes work around them:&lt;br /&gt;
&lt;br /&gt;
 cd $OMDIR/sources&lt;br /&gt;
 mkdir -p ../build/tmp/stamps/armv4t-linux&lt;br /&gt;
&lt;br /&gt;
* upstream moves old packages away, gratuitously breaking downstreams&lt;br /&gt;
&lt;br /&gt;
 wget http://ftp.mozilla.org/pub/mozilla.org/js/older-packages/js-1.5.tar.gz&lt;br /&gt;
 touch ../build/tmp/stamps/armv4t-linux/js-1.5-r0.do_fetch&lt;br /&gt;
&lt;br /&gt;
* us2.samba.org mirror has vanished&lt;br /&gt;
&lt;br /&gt;
 wget http://us4.samba.org/samba/ftp/stable/samba-3.0.14a.tar.gz&lt;br /&gt;
 touch ../build/tmp/stamps/armv4t-linux/samba-3.0.14a-r15.do_fetch&lt;br /&gt;
&lt;br /&gt;
* ghastly patch with CRLF and trailing blanks&lt;br /&gt;
&lt;br /&gt;
 perl -pi.orig -e 's/ *$//;s/\r//g' \&lt;br /&gt;
   ../openembedded/packages/gcc/gcc-4.1.1/gcc-4.1.1-pr13685-1.patch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Building ==&lt;br /&gt;
&lt;br /&gt;
=== OpenEmbedded build ===&lt;br /&gt;
'''(Role: BUILD)'''&lt;br /&gt;
&lt;br /&gt;
openmoko/trunk/oe/conf/site.conf expects the OpenMoko-specific OE packages in $OMDIR/oe&lt;br /&gt;
&lt;br /&gt;
 cd $OMDIR&lt;br /&gt;
 ln -s openmoko/trunk/oe ./oe&lt;br /&gt;
&lt;br /&gt;
We're now ready to run the build. This will take a while.&lt;br /&gt;
&lt;br /&gt;
 cd $OMDIR/build&lt;br /&gt;
 bitbake openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
Note that the build will stop several times to ask for SVN access and whether&lt;br /&gt;
to accept certificates. If you're not quick enough to respond, the underlying&lt;br /&gt;
session may time out. In this case, just restart &amp;quot;bitbake&lt;br /&gt;
openmoko-devel-image&amp;quot; and it will pick up from where it left off.&lt;br /&gt;
&lt;br /&gt;
The whole build process involves numerous downloads, takes about 7 hours&lt;br /&gt;
on an Athlon 64 3200+ (about 1.5h of delays were caused by ftp.debian.org not&lt;br /&gt;
working properly during this test run), and ends with a message like this:&lt;br /&gt;
&lt;br /&gt;
 Build statistics:&lt;br /&gt;
   Attempted builds: 4&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== Flash boot loader into NAND ===&lt;br /&gt;
'''(Role: LAB)'''&lt;br /&gt;
&lt;br /&gt;
As a first step, we transfer the u-boot bootloader into NAND Flash, through&lt;br /&gt;
the JTAG interface. We use JTAG, since this is the most basic way for doing&lt;br /&gt;
this, ensuring that we only depend on as little to work on the Neo as&lt;br /&gt;
possible.&lt;br /&gt;
&lt;br /&gt;
For this, the u-boot image for the right board version and the desired&lt;br /&gt;
build date must be chosen. E.g., an image built for a gta01bv2 board on&lt;br /&gt;
February 3, 2007 at 13:40:41 would be called&lt;br /&gt;
u-boot_nand-gta01bv2-20070203134041.bin&lt;br /&gt;
&lt;br /&gt;
The name is composed as follows:&lt;br /&gt;
;u-boot: the name of the component&lt;br /&gt;
;nand: it is it be loaded from NAND (not directly from RAM, see also [[Bootloader#Using_JTAG_to_boot_from_RAM]])&lt;br /&gt;
;gta01bv2: the hardware revision of the board&lt;br /&gt;
;20070203134041: the build date and time&lt;br /&gt;
;.bin: this is a binary suitable for flashing/loading&lt;br /&gt;
&lt;br /&gt;
If this is the first build, there will only be one image for each board&lt;br /&gt;
version, thus we can use wildcards. Change the gta01bv2 below to gta01v3 or&lt;br /&gt;
gta01v4, if necessary.&lt;br /&gt;
&lt;br /&gt;
See also: [[Sjf2410-linux]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $OMDIR/build/tmp/deploy/images&lt;br /&gt;
&lt;br /&gt;
( echo 0; echo 0; echo 0; echo 3; ) |&lt;br /&gt;
  ./sjf2410 -b -f `echo u-boot_nand-gta01bv2-*.bin`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will take approximately 12 minutes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Copy kernel and root FS to microSD card ===&lt;br /&gt;
'''(Role: CARD)'''&lt;br /&gt;
&lt;br /&gt;
There are several ways to provide the Neo with its kernel and the root file&lt;br /&gt;
system. (See [[Bootloader]] for some of them.)&lt;br /&gt;
The most self-contained way is to put everything into NAND Flash.&lt;br /&gt;
To transfer the files to the Neo, we first place them on the microSD card.&lt;br /&gt;
&lt;br /&gt;
Memory cards, including microSD, usually come pre-formatted with VFAT. We&lt;br /&gt;
prefer ext2 (e.g., because we may want to store a real Linux file system on the&lt;br /&gt;
card as well). The following steps are needed to convert the card from VFAT to&lt;br /&gt;
ext2:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sfdisk -c /dev/uba 1 83&lt;br /&gt;
mke2fs -m0 /dev/uba1&lt;br /&gt;
tune2fs -c0 -i0 /dev/uba1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, we copy the kernel uImage and the root file system image to the card.&lt;br /&gt;
As discussed in the previous section, we can use wildcards if this is our&lt;br /&gt;
first build.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $OMDIR/build/tmp/deploy/images&lt;br /&gt;
mount /dev/uba1 /mnt/tmp&lt;br /&gt;
cp uImage-2.6-moko7-r1-fic-gta01-*.bin /mnt/tmp/uImage&lt;br /&gt;
cp openmoko-devel-image-fic-gta01-*.rootfs.jffs2 /mnt/tmp/rootfs.jffs2&lt;br /&gt;
umount /mnt/tmp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, insert the microSD card into the Neo, but don't power it on yet.&lt;br /&gt;
(If you did anyway, don't worry. We'll power cycle it later.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Serial console ===&lt;br /&gt;
'''(Role: LAB)'''&lt;br /&gt;
&lt;br /&gt;
We use a serial console connecting through the debug board. This example uses&lt;br /&gt;
&amp;quot;xc&amp;quot;, which is a small and simple communications program. Many people prefer&lt;br /&gt;
&amp;quot;cu&amp;quot; or the considerably more bloated &amp;quot;minicom&amp;quot;, which will work as well.&lt;br /&gt;
&lt;br /&gt;
* Prepare xc configuration&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;$HOME/xc.init&lt;br /&gt;
set bps 115200&lt;br /&gt;
terminal&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Connect to the target&lt;br /&gt;
 xc -l /dev/ttyS0 -t&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Start the Neo and enter the boot prompt ===&lt;br /&gt;
'''(Role: LAB)'''&lt;br /&gt;
&lt;br /&gt;
Our first interaction with the target. If this doesn't work, please check&lt;br /&gt;
that the debug board is connected properly to the serial port.&lt;br /&gt;
&lt;br /&gt;
Disconnect power and USB from the phone, wait a couple of minutes, then connect power.&lt;br /&gt;
You may have to press and hold the power button on the Neo for a few seconds to turn it on.&lt;br /&gt;
The power button is located next to the USB port.&lt;br /&gt;
&lt;br /&gt;
Some people have observed stability issues if the device was reset without&lt;br /&gt;
power cycling or if USB was not disconnected when power cycling, yet details of what is really happening aren't very clear yet.&lt;br /&gt;
&lt;br /&gt;
On the serial console, a message like this should appear:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
U-Boot 1.2.0 (Feb  3 2007 - 13:07:21)&lt;br /&gt;
Press any key to enter the boot prompt:&lt;br /&gt;
GTA01Bv2 #&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the boot prompt changes with the hardware revision you have. If the&lt;br /&gt;
message does not appear after a few seconds, try power cycling again.&lt;br /&gt;
&lt;br /&gt;
If xc responds to pressing a button with&lt;br /&gt;
&amp;quot;Verify that you are trying to use a valid and operational tty port.&amp;quot;&lt;br /&gt;
the port may be stuck, waiting for DCD to be asserted. The quickest way to&lt;br /&gt;
get out of this situation is to disconnect the serial cable from the debug&lt;br /&gt;
board, run the following command&lt;br /&gt;
 while ! stty -F /dev/ttyS0 clocal; do : ; done&lt;br /&gt;
&lt;br /&gt;
stick something metallic, e.g., a paper clip or a screwdriver, into the plug on the cable,&lt;br /&gt;
and keep on fumbling with&lt;br /&gt;
it until DCD gets set and the loop above stops spitting out error messages.&lt;br /&gt;
&lt;br /&gt;
=== Flash kernel and root FS into NAND ===&lt;br /&gt;
'''(Role: LAB)'''&lt;br /&gt;
&lt;br /&gt;
We now load the kernel and the root FS from the microSD card into memory and&lt;br /&gt;
subsequently transfer them to NAND Flash. All this is done by entering&lt;br /&gt;
commands at the boot prompt.&lt;br /&gt;
&lt;br /&gt;
Each time we want to write new data to the NAND Flash, we first have to erase&lt;br /&gt;
the previous content. We do this individually for each partition. While it would&lt;br /&gt;
also be possible to erase some or all relevant partitions in one step, this would&lt;br /&gt;
require the user to look up addresses from the partition table and to perform&lt;br /&gt;
calculations which are inconvenient at best.&lt;br /&gt;
&lt;br /&gt;
See also: [[U-boot]]&lt;br /&gt;
&lt;br /&gt;
* Initialize the SD/MMC interface. The &amp;quot;Product Name&amp;quot; shown will be just binary garbage. This is expected behaviour.&lt;br /&gt;
&lt;br /&gt;
 GTA01Bv2 # mmc&lt;br /&gt;
&lt;br /&gt;
* Load the uImage file into memory. &amp;quot;ext2load&amp;quot; stores the number of bytes read as a hexadecimal number in the environment variable &amp;quot;filesize&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 GTA01Bv2 # ext2load mmc 0 0x32000000 uImage&lt;br /&gt;
&lt;br /&gt;
* Erase the kernel partition and write the uImage from memory to NAND Flash&lt;br /&gt;
&lt;br /&gt;
 GTA01Bv2 # nand erase kernel&lt;br /&gt;
 GTA01Bv2 # nand write.e 0x32000000 kernel ${filesize}&lt;br /&gt;
&lt;br /&gt;
* The root file system is next. We need to specify the correct size, which is shown at the end of &amp;quot;ext2load&amp;quot;, e.g., &amp;quot;0x1608000)&amp;quot; in this case:&lt;br /&gt;
&lt;br /&gt;
 GTA01Bv2 # ext2load mmc 0 0x32000000 rootfs.jffs2&lt;br /&gt;
 23101440 (0x1608000) bytes read&lt;br /&gt;
 GTA01Bv2 # nand erase rootfs&lt;br /&gt;
 GTA01Bv2 # nand write.e 0x32000000 rootfs ${filesize}&lt;br /&gt;
&lt;br /&gt;
=== Configure the boot loader ===&lt;br /&gt;
'''(Role: LAB)'''&lt;br /&gt;
&lt;br /&gt;
Last but not least, we have to set up the boot loader to automatically boot&lt;br /&gt;
from Flash. For this, we use the default environment settings, which we obtain&lt;br /&gt;
by erasing the old content of the environment, and letting u-boot restore the&lt;br /&gt;
settings after a restart.&lt;br /&gt;
&lt;br /&gt;
Before touching the environment, you may have to update the environment offset.&lt;br /&gt;
Please see [[Migration_to_bad_block_tolerant_builds#Partition_sizing]] for details.&lt;br /&gt;
(We may simplify this particularly awkward and error-prone procedure in the&lt;br /&gt;
future.)&lt;br /&gt;
&lt;br /&gt;
* First, remove erase the old environment:&lt;br /&gt;
 GTA01Bv2 # nand erase env&lt;br /&gt;
&lt;br /&gt;
* We reset to force the boot loader to use the default settings.&lt;br /&gt;
 GTA01Bv2 # reset&lt;br /&gt;
&lt;br /&gt;
Wait until the &amp;quot;U-Boot [...]&amp;quot; message, then hit a key. It will display &lt;br /&gt;
 *** Warning - bad CRC or NAND, using default environment&lt;br /&gt;
&lt;br /&gt;
* Re-generate the partition information in the environment variable &amp;quot;mtdparts&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 GTA01Bv2 # dynpart&lt;br /&gt;
&lt;br /&gt;
* Save the restored settings in NAND&lt;br /&gt;
 GTA01Bv2 # saveenv&lt;br /&gt;
&lt;br /&gt;
* Power cycle to boot the Neo (see remarks above)&lt;br /&gt;
&lt;br /&gt;
==  END ==&lt;br /&gt;
&lt;br /&gt;
'''Congratulations !''' You've just completed level 1 of the OpenMoko adventure.&lt;/div&gt;</summary>
		<author><name>Eric</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Building_OpenMoko_2007.1_from_scratch</id>
		<title>Building OpenMoko 2007.1 from scratch</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Building_OpenMoko_2007.1_from_scratch"/>
				<updated>2007-07-10T13:18:44Z</updated>
		
		<summary type="html">&lt;p&gt;Eric: doh, my bad. is still masked.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|align=right&lt;br /&gt;
 |__TOC__&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{{warning|This is still a preliminary version, which will take some more days until it has all the updates.}}&lt;br /&gt;
&lt;br /&gt;
This is a guide describing how to set up a running OpenMoko&lt;br /&gt;
system from scratch.&lt;br /&gt;
&lt;br /&gt;
If you just want to run OpenMoko applications on your PC, just perform the&lt;br /&gt;
&amp;quot;Obtaining OpenMoko SVN tree&amp;quot; step below and then go to&lt;br /&gt;
[[How to run OpenMoko Apps on PC]]. If you want to autoinstall all required tools and resources, consider using [[MokoMakefile]] -- script developed by Rod Whitby.&lt;br /&gt;
&lt;br /&gt;
Do not treat this as a linear script! There are various configuration items you&lt;br /&gt;
need to set (or skip, as it may be), operations that depend on how your&lt;br /&gt;
host(s) is/are set up, and also on the hardware revision of the target platform&lt;br /&gt;
(i.e., the phone).&lt;br /&gt;
&lt;br /&gt;
Instead, look at each step, read the instructions, copy and paste what&lt;br /&gt;
makes sense for you, and adapt what you disagree with. Links to original and&lt;br /&gt;
background material in the Wiki are included wherever useful.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Preparation ==&lt;br /&gt;
&lt;br /&gt;
===  Roles  ===&lt;br /&gt;
&lt;br /&gt;
The build process may spread over multiple machines. They have the following&lt;br /&gt;
roles:&lt;br /&gt;
&lt;br /&gt;
;'''BUILD''': build host, with quick access to the files and CPU power. Must have Internet access.&lt;br /&gt;
;'''LAB''': lab machine connected to the debug board (serial and JTAG) and to USB on the Neo (since this will probably be just a single machine, the roles are not further divided)&lt;br /&gt;
;'''CARD''': machine with a USB-attached SD/MMC card reader&lt;br /&gt;
&lt;br /&gt;
All machines are assumed to share the same filesystem layout. At the beginning of&lt;br /&gt;
each of the sections below, the respective role is indicated. &amp;quot;('''all''')&amp;quot; is for&lt;br /&gt;
settings that apply to all machines, or that - for simplicity - can be&lt;br /&gt;
applied to all of them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Directory layout ===&lt;br /&gt;
'''(Roles: all)'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$OMDIR (/home/moko)	base directory for the whole tree&lt;br /&gt;
  openmoko/		files from OpenMoko subversion (SVN) repository&lt;br /&gt;
  openembedded/		files from OpenEmbedded (OE) Monotone repository&lt;br /&gt;
  sources/		cached downloads of OE&lt;br /&gt;
  build/		OE build directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===  Environment variables ===&lt;br /&gt;
'''(Roles: all)'''&lt;br /&gt;
&lt;br /&gt;
For simplicity, we just set these environment variables on all hosts&lt;br /&gt;
involved. If you're not comfortable with this, feel free to weed out the ones&lt;br /&gt;
you don't need.&lt;br /&gt;
&lt;br /&gt;
Our base directory (configure this for local arrangements):&lt;br /&gt;
&lt;br /&gt;
 export OMDIR=/home/moko&lt;br /&gt;
&lt;br /&gt;
The search path for BitBake files. Note that the order is of vital&lt;br /&gt;
importance.&lt;br /&gt;
&lt;br /&gt;
 export BBPATH=$OMDIR/build:$OMDIR/openmoko/trunk/oe:$OMDIR/openembedded&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===  Permissions  ===&lt;br /&gt;
'''(Role: BUILD)'''&lt;br /&gt;
&lt;br /&gt;
In order to perform the build process, you have to obtain the following&lt;br /&gt;
permissions:&lt;br /&gt;
&lt;br /&gt;
* write access to the OpenMoko SVN repository (in principle, it should be possible to simplify this to read access. For further study.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===  Build host prerequisites  ===&lt;br /&gt;
'''(Role: BUILD)'''&lt;br /&gt;
&lt;br /&gt;
There must be at least 7 GB of free space on $OMDIR.&lt;br /&gt;
&lt;br /&gt;
In addition to the traditional development tools (gcc, patch, etc.), the&lt;br /&gt;
following packages must be installed on the build host:&lt;br /&gt;
&lt;br /&gt;
;subversion: version control system used by OpenMoko and others. &lt;br /&gt;
;quilt:	patch management system used by the Linux kernel and others&lt;br /&gt;
;monotone: version control system used by OpenEmbedded. This should be a recent version, e.g., 0.32, although also 0.31 should work.&lt;br /&gt;
;diffstat: the OE build process wants this&lt;br /&gt;
;texi2html: this too&lt;br /&gt;
;git: version control system used by the Linux kernel and others. Do not confuse this with the &amp;quot;GNU Interactive Tools&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Furthermore, the following package can be installed optionally:&lt;br /&gt;
;psyco: Python just-in-time compiler. Speeds up OpenEmbedded builds (with BitBake) considerably. Strongly recommended.&lt;br /&gt;
&lt;br /&gt;
==== Distro Specific Software Installation ====&lt;br /&gt;
;Gentoo: Gentoo users can obtain all this with (note that, at the time of writing, Monotone 0.32 isn't available without setting the ~x86 keyword):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo 'dev-util/monotone ~'`readlink /etc/make.profile | awk -F / '{print $6}'`\&lt;br /&gt;
  &amp;gt;&amp;gt;/etc/portage/package.keywords&lt;br /&gt;
emerge -u subversion quilt monotone diffstat texi2html dev-util/git psyco&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
;Other Distos: [http://www.openembedded.org/wiki/OEandYourDistro  Instructions for installing prerequisites in other distributions]&lt;br /&gt;
&lt;br /&gt;
===  Lab host prerequisites  ===&lt;br /&gt;
'''(Role: LAB)'''&lt;br /&gt;
&lt;br /&gt;
The following package must be installed on the lab host:&lt;br /&gt;
;xc: a simple communications program for the serial port&lt;br /&gt;
&lt;br /&gt;
Gentoo users can obtain this with:&lt;br /&gt;
 emerge -u xc&lt;br /&gt;
&lt;br /&gt;
Note that similar communications programs, such as &amp;quot;cu&amp;quot; or &amp;quot;minicom&amp;quot;, may be used as well.&lt;br /&gt;
&lt;br /&gt;
===  Assumptions  ===&lt;br /&gt;
'''(Roles: LAB, CARD)'''&lt;br /&gt;
&lt;br /&gt;
We make the following assumptions about hardware setup and devices:&lt;br /&gt;
&lt;br /&gt;
* the serial console of the Neo phone is connected to /dev/ttyS0 on '''LAB''' (see [[Debug_Board]])&lt;br /&gt;
* the JTAG [[wiggler]] is connected to /dev/parport0 on '''LAB'''. See [[Debug Board]] and  [[Connecting_GTA01Bv2_with_Debug_Board]]&lt;br /&gt;
* cards inserted in the SD/MMC card reader appear as /dev/uba on '''CARD''' and can be mounted on /mnt/tmp (we'll specify the mount point explicitly, so the directory has to be there, but we don't need to specify the mount point in /etc/fstab). If in doubt,&lt;br /&gt;
 mkdir -p /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
== Obtaining Sources and build system ==&lt;br /&gt;
&lt;br /&gt;
===  OpenEmbedded build: initial downloads  ===&lt;br /&gt;
&lt;br /&gt;
First, we obtain a snapshot of the OpenEmbedded-based tree used by OpenMoko, plus the OE build tool called BitBake.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Obtaining OpenMoko SVN tree ====&lt;br /&gt;
'''(Role: BUILD)'''&lt;br /&gt;
&lt;br /&gt;
Obtain the latest revision of the OpenMoko tree. Unfortunately, at some places, &amp;quot;current&amp;quot; versions of upstream packages may get included, thus the build may still fail. If it does, you may wish to inform the authorities.&lt;br /&gt;
&lt;br /&gt;
The checkout should take about 45 minutes over an Internet connection with a round-trip time to svn.openmoko.org of 350 ms.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $OMDIR&lt;br /&gt;
svn co http://svn.openmoko.org/ openmoko&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{note|If the local user name does not match the user name with which you access SVN, you can put your username in the url you use to checkout:&lt;br /&gt;
 svn+ssh://joe@stuff.org/svn/stuff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Installing BitBake ====&lt;br /&gt;
'''(Role: BUILD)'''&lt;br /&gt;
&lt;br /&gt;
Install version 1.6 of BitBake, the build tool of OE. (This is quick.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://svn.berlios.de/svnroot/repos/bitbake/branches/bitbake-1.6/ bitbake&lt;br /&gt;
cd bitbake&lt;br /&gt;
./setup.py install&lt;br /&gt;
cd ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Obtaining OpenEmbedded snapshot ====&lt;br /&gt;
'''(Role: BUILD)'''&lt;br /&gt;
&lt;br /&gt;
Obtain a snapshot of the Monotone repository of OpenEmbedded, then update it&lt;br /&gt;
to the latest version, and finally check out our &amp;quot;known to be good&amp;quot; revision.&lt;br /&gt;
We extract things into $OMDIR/openembedded. OE.mtn.bz2 is about 100 MB.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget http://www.openembedded.org/snapshots/OE.mtn.bz2&lt;br /&gt;
bunzip2 OE.mtn.bz2&lt;br /&gt;
mtn --db=OE.mtn pull monotone.openembedded.org org.openembedded.dev&lt;br /&gt;
mtn --db=OE.mtn checkout --branch=org.openembedded.dev \&lt;br /&gt;
  -r e2dbb52fe39df7ef786b6068f6178f29508dfded openembedded&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{note|For advanced users: if you ever want to update to the latest version of the repository, you would do a &amp;quot;pull&amp;quot; (see above), followed by:&lt;br /&gt;
 cd $OMDIR/openembedded &amp;amp;&amp;amp; mtn update}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Set up the directories for the cache of upstream files and all material&lt;br /&gt;
related to local builds, then put our configuration file there (see also&lt;br /&gt;
[[OpenMoko#Setting_up_an_OpenMoko_SDK]]):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p sources build/conf&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;build/conf/local.conf&lt;br /&gt;
MACHINE = &amp;quot;fic-gta01&amp;quot;&lt;br /&gt;
DISTRO = &amp;quot;openmoko&amp;quot;&lt;br /&gt;
BUILD_ARCH = &amp;quot;`uname -m`&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OpenEmbedded build: fixes ===&lt;br /&gt;
'''(Role: BUILD)'''&lt;br /&gt;
&lt;br /&gt;
There are unfortunately some problems in the build process. &lt;br /&gt;
The following fixes work around them:&lt;br /&gt;
&lt;br /&gt;
 cd $OMDIR/sources&lt;br /&gt;
 mkdir -p ../build/tmp/stamps/armv4t-linux&lt;br /&gt;
&lt;br /&gt;
* upstream moves old packages away, gratuitously breaking downstreams&lt;br /&gt;
&lt;br /&gt;
 wget http://ftp.mozilla.org/pub/mozilla.org/js/older-packages/js-1.5.tar.gz&lt;br /&gt;
 touch ../build/tmp/stamps/armv4t-linux/js-1.5-r0.do_fetch&lt;br /&gt;
&lt;br /&gt;
* us2.samba.org mirror has vanished&lt;br /&gt;
&lt;br /&gt;
 wget http://us4.samba.org/samba/ftp/stable/samba-3.0.14a.tar.gz&lt;br /&gt;
 touch ../build/tmp/stamps/armv4t-linux/samba-3.0.14a-r15.do_fetch&lt;br /&gt;
&lt;br /&gt;
* ghastly patch with CRLF and trailing blanks&lt;br /&gt;
&lt;br /&gt;
 perl -pi.orig -e 's/ *$//;s/\r//g' \&lt;br /&gt;
   ../openembedded/packages/gcc/gcc-4.1.1/gcc-4.1.1-pr13685-1.patch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Building ==&lt;br /&gt;
&lt;br /&gt;
=== OpenEmbedded build ===&lt;br /&gt;
'''(Role: BUILD)'''&lt;br /&gt;
&lt;br /&gt;
openmoko/trunk/oe/conf/site.conf expects the OpenMoko-specific OE packages in $OMDIR/oe&lt;br /&gt;
&lt;br /&gt;
 cd $OMDIR&lt;br /&gt;
 ln -s openmoko/trunk/oe .&lt;br /&gt;
&lt;br /&gt;
We're now ready to run the build. This will take a while.&lt;br /&gt;
&lt;br /&gt;
 cd $OMDIR/build&lt;br /&gt;
 bitbake openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
Note that the build will stop several times to ask for SVN access and whether&lt;br /&gt;
to accept certificates. If you're not quick enough to respond, the underlying&lt;br /&gt;
session may time out. In this case, just restart &amp;quot;bitbake&lt;br /&gt;
openmoko-devel-image&amp;quot; and it will pick up from where it left off.&lt;br /&gt;
&lt;br /&gt;
The whole build process involves numerous downloads, takes about 7 hours&lt;br /&gt;
on an Athlon 64 3200+ (about 1.5h of delays were caused by ftp.debian.org not&lt;br /&gt;
working properly during this test run), and ends with a message like this:&lt;br /&gt;
&lt;br /&gt;
 Build statistics:&lt;br /&gt;
   Attempted builds: 4&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== Flash boot loader into NAND ===&lt;br /&gt;
'''(Role: LAB)'''&lt;br /&gt;
&lt;br /&gt;
As a first step, we transfer the u-boot bootloader into NAND Flash, through&lt;br /&gt;
the JTAG interface. We use JTAG, since this is the most basic way for doing&lt;br /&gt;
this, ensuring that we only depend on as little to work on the Neo as&lt;br /&gt;
possible.&lt;br /&gt;
&lt;br /&gt;
For this, the u-boot image for the right board version and the desired&lt;br /&gt;
build date must be chosen. E.g., an image built for a gta01bv2 board on&lt;br /&gt;
February 3, 2007 at 13:40:41 would be called&lt;br /&gt;
u-boot_nand-gta01bv2-20070203134041.bin&lt;br /&gt;
&lt;br /&gt;
The name is composed as follows:&lt;br /&gt;
;u-boot: the name of the component&lt;br /&gt;
;nand: it is it be loaded from NAND (not directly from RAM, see also [[Bootloader#Using_JTAG_to_boot_from_RAM]])&lt;br /&gt;
;gta01bv2: the hardware revision of the board&lt;br /&gt;
;20070203134041: the build date and time&lt;br /&gt;
;.bin: this is a binary suitable for flashing/loading&lt;br /&gt;
&lt;br /&gt;
If this is the first build, there will only be one image for each board&lt;br /&gt;
version, thus we can use wildcards. Change the gta01bv2 below to gta01v3 or&lt;br /&gt;
gta01v4, if necessary.&lt;br /&gt;
&lt;br /&gt;
See also: [[Sjf2410-linux]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $OMDIR/build/tmp/deploy/images&lt;br /&gt;
&lt;br /&gt;
( echo 0; echo 0; echo 0; echo 3; ) |&lt;br /&gt;
  ./sjf2410 -b -f `echo u-boot_nand-gta01bv2-*.bin`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will take approximately 12 minutes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Copy kernel and root FS to microSD card ===&lt;br /&gt;
'''(Role: CARD)'''&lt;br /&gt;
&lt;br /&gt;
There are several ways to provide the Neo with its kernel and the root file&lt;br /&gt;
system. (See [[Bootloader]] for some of them.)&lt;br /&gt;
The most self-contained way is to put everything into NAND Flash.&lt;br /&gt;
To transfer the files to the Neo, we first place them on the microSD card.&lt;br /&gt;
&lt;br /&gt;
Memory cards, including microSD, usually come pre-formatted with VFAT. We&lt;br /&gt;
prefer ext2 (e.g., because we may want to store a real Linux file system on the&lt;br /&gt;
card as well). The following steps are needed to convert the card from VFAT to&lt;br /&gt;
ext2:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sfdisk -c /dev/uba 1 83&lt;br /&gt;
mke2fs -m0 /dev/uba1&lt;br /&gt;
tune2fs -c0 -i0 /dev/uba1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, we copy the kernel uImage and the root file system image to the card.&lt;br /&gt;
As discussed in the previous section, we can use wildcards if this is our&lt;br /&gt;
first build.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $OMDIR/build/tmp/deploy/images&lt;br /&gt;
mount /dev/uba1 /mnt/tmp&lt;br /&gt;
cp uImage-2.6-moko7-r1-fic-gta01-*.bin /mnt/tmp/uImage&lt;br /&gt;
cp openmoko-devel-image-fic-gta01-*.rootfs.jffs2 /mnt/tmp/rootfs.jffs2&lt;br /&gt;
umount /mnt/tmp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, insert the microSD card into the Neo, but don't power it on yet.&lt;br /&gt;
(If you did anyway, don't worry. We'll power cycle it later.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Serial console ===&lt;br /&gt;
'''(Role: LAB)'''&lt;br /&gt;
&lt;br /&gt;
We use a serial console connecting through the debug board. This example uses&lt;br /&gt;
&amp;quot;xc&amp;quot;, which is a small and simple communications program. Many people prefer&lt;br /&gt;
&amp;quot;cu&amp;quot; or the considerably more bloated &amp;quot;minicom&amp;quot;, which will work as well.&lt;br /&gt;
&lt;br /&gt;
* Prepare xc configuration&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;$HOME/xc.init&lt;br /&gt;
set bps 115200&lt;br /&gt;
terminal&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Connect to the target&lt;br /&gt;
 xc -l /dev/ttyS0 -t&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Start the Neo and enter the boot prompt ===&lt;br /&gt;
'''(Role: LAB)'''&lt;br /&gt;
&lt;br /&gt;
Our first interaction with the target. If this doesn't work, please check&lt;br /&gt;
that the debug board is connected properly to the serial port.&lt;br /&gt;
&lt;br /&gt;
Disconnect power and USB from the phone, wait a couple of minutes, then connect power.&lt;br /&gt;
You may have to press and hold the power button on the Neo for a few seconds to turn it on.&lt;br /&gt;
The power button is located next to the USB port.&lt;br /&gt;
&lt;br /&gt;
Some people have observed stability issues if the device was reset without&lt;br /&gt;
power cycling or if USB was not disconnected when power cycling, yet details of what is really happening aren't very clear yet.&lt;br /&gt;
&lt;br /&gt;
On the serial console, a message like this should appear:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
U-Boot 1.2.0 (Feb  3 2007 - 13:07:21)&lt;br /&gt;
Press any key to enter the boot prompt:&lt;br /&gt;
GTA01Bv2 #&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the boot prompt changes with the hardware revision you have. If the&lt;br /&gt;
message does not appear after a few seconds, try power cycling again.&lt;br /&gt;
&lt;br /&gt;
If xc responds to pressing a button with&lt;br /&gt;
&amp;quot;Verify that you are trying to use a valid and operational tty port.&amp;quot;&lt;br /&gt;
the port may be stuck, waiting for DCD to be asserted. The quickest way to&lt;br /&gt;
get out of this situation is to disconnect the serial cable from the debug&lt;br /&gt;
board, run the following command&lt;br /&gt;
 while ! stty -F /dev/ttyS0 clocal; do : ; done&lt;br /&gt;
&lt;br /&gt;
stick something metallic, e.g., a paper clip or a screwdriver, into the plug on the cable,&lt;br /&gt;
and keep on fumbling with&lt;br /&gt;
it until DCD gets set and the loop above stops spitting out error messages.&lt;br /&gt;
&lt;br /&gt;
=== Flash kernel and root FS into NAND ===&lt;br /&gt;
'''(Role: LAB)'''&lt;br /&gt;
&lt;br /&gt;
We now load the kernel and the root FS from the microSD card into memory and&lt;br /&gt;
subsequently transfer them to NAND Flash. All this is done by entering&lt;br /&gt;
commands at the boot prompt.&lt;br /&gt;
&lt;br /&gt;
Each time we want to write new data to the NAND Flash, we first have to erase&lt;br /&gt;
the previous content. We do this individually for each partition. While it would&lt;br /&gt;
also be possible to erase some or all relevant partitions in one step, this would&lt;br /&gt;
require the user to look up addresses from the partition table and to perform&lt;br /&gt;
calculations which are inconvenient at best.&lt;br /&gt;
&lt;br /&gt;
See also: [[U-boot]]&lt;br /&gt;
&lt;br /&gt;
* Initialize the SD/MMC interface. The &amp;quot;Product Name&amp;quot; shown will be just binary garbage. This is expected behaviour.&lt;br /&gt;
&lt;br /&gt;
 GTA01Bv2 # mmc&lt;br /&gt;
&lt;br /&gt;
* Load the uImage file into memory. &amp;quot;ext2load&amp;quot; stores the number of bytes read as a hexadecimal number in the environment variable &amp;quot;filesize&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 GTA01Bv2 # ext2load mmc 0 0x32000000 uImage&lt;br /&gt;
&lt;br /&gt;
* Erase the kernel partition and write the uImage from memory to NAND Flash&lt;br /&gt;
&lt;br /&gt;
 GTA01Bv2 # nand erase kernel&lt;br /&gt;
 GTA01Bv2 # nand write.e 0x32000000 kernel ${filesize}&lt;br /&gt;
&lt;br /&gt;
* The root file system is next. We need to specify the correct size, which is shown at the end of &amp;quot;ext2load&amp;quot;, e.g., &amp;quot;0x1608000)&amp;quot; in this case:&lt;br /&gt;
&lt;br /&gt;
 GTA01Bv2 # ext2load mmc 0 0x32000000 rootfs.jffs2&lt;br /&gt;
 23101440 (0x1608000) bytes read&lt;br /&gt;
 GTA01Bv2 # nand erase rootfs&lt;br /&gt;
 GTA01Bv2 # nand write.e 0x32000000 rootfs ${filesize}&lt;br /&gt;
&lt;br /&gt;
=== Configure the boot loader ===&lt;br /&gt;
'''(Role: LAB)'''&lt;br /&gt;
&lt;br /&gt;
Last but not least, we have to set up the boot loader to automatically boot&lt;br /&gt;
from Flash. For this, we use the default environment settings, which we obtain&lt;br /&gt;
by erasing the old content of the environment, and letting u-boot restore the&lt;br /&gt;
settings after a restart.&lt;br /&gt;
&lt;br /&gt;
Before touching the environment, you may have to update the environment offset.&lt;br /&gt;
Please see [[Migration_to_bad_block_tolerant_builds#Partition_sizing]] for details.&lt;br /&gt;
(We may simplify this particularly awkward and error-prone procedure in the&lt;br /&gt;
future.)&lt;br /&gt;
&lt;br /&gt;
* First, remove erase the old environment:&lt;br /&gt;
 GTA01Bv2 # nand erase env&lt;br /&gt;
&lt;br /&gt;
* We reset to force the boot loader to use the default settings.&lt;br /&gt;
 GTA01Bv2 # reset&lt;br /&gt;
&lt;br /&gt;
Wait until the &amp;quot;U-Boot [...]&amp;quot; message, then hit a key. It will display &lt;br /&gt;
 *** Warning - bad CRC or NAND, using default environment&lt;br /&gt;
&lt;br /&gt;
* Re-generate the partition information in the environment variable &amp;quot;mtdparts&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 GTA01Bv2 # dynpart&lt;br /&gt;
&lt;br /&gt;
* Save the restored settings in NAND&lt;br /&gt;
 GTA01Bv2 # saveenv&lt;br /&gt;
&lt;br /&gt;
* Power cycle to boot the Neo (see remarks above)&lt;br /&gt;
&lt;br /&gt;
==  END ==&lt;br /&gt;
&lt;br /&gt;
'''Congratulations !''' You've just completed level 1 of the OpenMoko adventure.&lt;/div&gt;</summary>
		<author><name>Eric</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Building_OpenMoko_2007.1_from_scratch</id>
		<title>Building OpenMoko 2007.1 from scratch</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Building_OpenMoko_2007.1_from_scratch"/>
				<updated>2007-07-10T13:01:30Z</updated>
		
		<summary type="html">&lt;p&gt;Eric: monotone 0.35 is no longer masked ~x86&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|align=right&lt;br /&gt;
 |__TOC__&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
{{warning|This is still a preliminary version, which will take some more days until it has all the updates.}}&lt;br /&gt;
&lt;br /&gt;
This is a guide describing how to set up a running OpenMoko&lt;br /&gt;
system from scratch.&lt;br /&gt;
&lt;br /&gt;
If you just want to run OpenMoko applications on your PC, just perform the&lt;br /&gt;
&amp;quot;Obtaining OpenMoko SVN tree&amp;quot; step below and then go to&lt;br /&gt;
[[How to run OpenMoko Apps on PC]]. If you want to autoinstall all required tools and resources, consider using [[MokoMakefile]] -- script developed by Rod Whitby.&lt;br /&gt;
&lt;br /&gt;
Do not treat this as a linear script! There are various configuration items you&lt;br /&gt;
need to set (or skip, as it may be), operations that depend on how your&lt;br /&gt;
host(s) is/are set up, and also on the hardware revision of the target platform&lt;br /&gt;
(i.e., the phone).&lt;br /&gt;
&lt;br /&gt;
Instead, look at each step, read the instructions, copy and paste what&lt;br /&gt;
makes sense for you, and adapt what you disagree with. Links to original and&lt;br /&gt;
background material in the Wiki are included wherever useful.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Preparation ==&lt;br /&gt;
&lt;br /&gt;
===  Roles  ===&lt;br /&gt;
&lt;br /&gt;
The build process may spread over multiple machines. They have the following&lt;br /&gt;
roles:&lt;br /&gt;
&lt;br /&gt;
;'''BUILD''': build host, with quick access to the files and CPU power. Must have Internet access.&lt;br /&gt;
;'''LAB''': lab machine connected to the debug board (serial and JTAG) and to USB on the Neo (since this will probably be just a single machine, the roles are not further divided)&lt;br /&gt;
;'''CARD''': machine with a USB-attached SD/MMC card reader&lt;br /&gt;
&lt;br /&gt;
All machines are assumed to share the same filesystem layout. At the beginning of&lt;br /&gt;
each of the sections below, the respective role is indicated. &amp;quot;('''all''')&amp;quot; is for&lt;br /&gt;
settings that apply to all machines, or that - for simplicity - can be&lt;br /&gt;
applied to all of them.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Directory layout ===&lt;br /&gt;
'''(Roles: all)'''&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$OMDIR (/home/moko)	base directory for the whole tree&lt;br /&gt;
  openmoko/		files from OpenMoko subversion (SVN) repository&lt;br /&gt;
  openembedded/		files from OpenEmbedded (OE) Monotone repository&lt;br /&gt;
  sources/		cached downloads of OE&lt;br /&gt;
  build/		OE build directory&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===  Environment variables ===&lt;br /&gt;
'''(Roles: all)'''&lt;br /&gt;
&lt;br /&gt;
For simplicity, we just set these environment variables on all hosts&lt;br /&gt;
involved. If you're not comfortable with this, feel free to weed out the ones&lt;br /&gt;
you don't need.&lt;br /&gt;
&lt;br /&gt;
Our base directory (configure this for local arrangements):&lt;br /&gt;
&lt;br /&gt;
 export OMDIR=/home/moko&lt;br /&gt;
&lt;br /&gt;
The search path for BitBake files. Note that the order is of vital&lt;br /&gt;
importance.&lt;br /&gt;
&lt;br /&gt;
 export BBPATH=$OMDIR/build:$OMDIR/openmoko/trunk/oe:$OMDIR/openembedded&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===  Permissions  ===&lt;br /&gt;
'''(Role: BUILD)'''&lt;br /&gt;
&lt;br /&gt;
In order to perform the build process, you have to obtain the following&lt;br /&gt;
permissions:&lt;br /&gt;
&lt;br /&gt;
* write access to the OpenMoko SVN repository (in principle, it should be possible to simplify this to read access. For further study.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===  Build host prerequisites  ===&lt;br /&gt;
'''(Role: BUILD)'''&lt;br /&gt;
&lt;br /&gt;
There must be at least 7 GB of free space on $OMDIR.&lt;br /&gt;
&lt;br /&gt;
In addition to the traditional development tools (gcc, patch, etc.), the&lt;br /&gt;
following packages must be installed on the build host:&lt;br /&gt;
&lt;br /&gt;
;subversion: version control system used by OpenMoko and others. &lt;br /&gt;
;quilt:	patch management system used by the Linux kernel and others&lt;br /&gt;
;monotone: version control system used by OpenEmbedded. This should be a recent version, e.g., 0.32, although also 0.31 should work.&lt;br /&gt;
;diffstat: the OE build process wants this&lt;br /&gt;
;texi2html: this too&lt;br /&gt;
;git: version control system used by the Linux kernel and others. Do not confuse this with the &amp;quot;GNU Interactive Tools&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Furthermore, the following package can be installed optionally:&lt;br /&gt;
;psyco: Python just-in-time compiler. Speeds up OpenEmbedded builds (with BitBake) considerably. Strongly recommended.&lt;br /&gt;
&lt;br /&gt;
==== Distro Specific Software Installation ====&lt;br /&gt;
;Gentoo: Gentoo users can obtain all this with:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
emerge -u subversion quilt monotone diffstat texi2html dev-util/git psyco&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Other Distos: [http://www.openembedded.org/wiki/OEandYourDistro  Instructions for installing prerequisites in other distributions]&lt;br /&gt;
&lt;br /&gt;
===  Lab host prerequisites  ===&lt;br /&gt;
'''(Role: LAB)'''&lt;br /&gt;
&lt;br /&gt;
The following package must be installed on the lab host:&lt;br /&gt;
;xc: a simple communications program for the serial port&lt;br /&gt;
&lt;br /&gt;
Gentoo users can obtain this with:&lt;br /&gt;
 emerge -u xc&lt;br /&gt;
&lt;br /&gt;
Note that similar communications programs, such as &amp;quot;cu&amp;quot; or &amp;quot;minicom&amp;quot;, may be used as well.&lt;br /&gt;
&lt;br /&gt;
===  Assumptions  ===&lt;br /&gt;
'''(Roles: LAB, CARD)'''&lt;br /&gt;
&lt;br /&gt;
We make the following assumptions about hardware setup and devices:&lt;br /&gt;
&lt;br /&gt;
* the serial console of the Neo phone is connected to /dev/ttyS0 on '''LAB''' (see [[Debug_Board]])&lt;br /&gt;
* the JTAG [[wiggler]] is connected to /dev/parport0 on '''LAB'''. See [[Debug Board]] and  [[Connecting_GTA01Bv2_with_Debug_Board]]&lt;br /&gt;
* cards inserted in the SD/MMC card reader appear as /dev/uba on '''CARD''' and can be mounted on /mnt/tmp (we'll specify the mount point explicitly, so the directory has to be there, but we don't need to specify the mount point in /etc/fstab). If in doubt,&lt;br /&gt;
 mkdir -p /mnt/tmp&lt;br /&gt;
&lt;br /&gt;
== Obtaining Sources and build system ==&lt;br /&gt;
&lt;br /&gt;
===  OpenEmbedded build: initial downloads  ===&lt;br /&gt;
&lt;br /&gt;
First, we obtain a snapshot of the OpenEmbedded-based tree used by OpenMoko, plus the OE build tool called BitBake.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Obtaining OpenMoko SVN tree ====&lt;br /&gt;
'''(Role: BUILD)'''&lt;br /&gt;
&lt;br /&gt;
Obtain the latest revision of the OpenMoko tree. Unfortunately, at some places, &amp;quot;current&amp;quot; versions of upstream packages may get included, thus the build may still fail. If it does, you may wish to inform the authorities.&lt;br /&gt;
&lt;br /&gt;
The checkout should take about 45 minutes over an Internet connection with a round-trip time to svn.openmoko.org of 350 ms.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $OMDIR&lt;br /&gt;
svn co http://svn.openmoko.org/ openmoko&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{note|If the local user name does not match the user name with which you access SVN, you can put your username in the url you use to checkout:&lt;br /&gt;
 svn+ssh://joe@stuff.org/svn/stuff&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==== Installing BitBake ====&lt;br /&gt;
'''(Role: BUILD)'''&lt;br /&gt;
&lt;br /&gt;
Install version 1.6 of BitBake, the build tool of OE. (This is quick.)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
svn co http://svn.berlios.de/svnroot/repos/bitbake/branches/bitbake-1.6/ bitbake&lt;br /&gt;
cd bitbake&lt;br /&gt;
./setup.py install&lt;br /&gt;
cd ..&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Obtaining OpenEmbedded snapshot ====&lt;br /&gt;
'''(Role: BUILD)'''&lt;br /&gt;
&lt;br /&gt;
Obtain a snapshot of the Monotone repository of OpenEmbedded, then update it&lt;br /&gt;
to the latest version, and finally check out our &amp;quot;known to be good&amp;quot; revision.&lt;br /&gt;
We extract things into $OMDIR/openembedded. OE.mtn.bz2 is about 100 MB.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
wget http://www.openembedded.org/snapshots/OE.mtn.bz2&lt;br /&gt;
bunzip2 OE.mtn.bz2&lt;br /&gt;
mtn --db=OE.mtn pull monotone.openembedded.org org.openembedded.dev&lt;br /&gt;
mtn --db=OE.mtn checkout --branch=org.openembedded.dev \&lt;br /&gt;
  -r e2dbb52fe39df7ef786b6068f6178f29508dfded openembedded&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{note|For advanced users: if you ever want to update to the latest version of the repository, you would do a &amp;quot;pull&amp;quot; (see above), followed by:&lt;br /&gt;
 cd $OMDIR/openembedded &amp;amp;&amp;amp; mtn update}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Set up the directories for the cache of upstream files and all material&lt;br /&gt;
related to local builds, then put our configuration file there (see also&lt;br /&gt;
[[OpenMoko#Setting_up_an_OpenMoko_SDK]]):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir -p sources build/conf&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;build/conf/local.conf&lt;br /&gt;
MACHINE = &amp;quot;fic-gta01&amp;quot;&lt;br /&gt;
DISTRO = &amp;quot;openmoko&amp;quot;&lt;br /&gt;
BUILD_ARCH = &amp;quot;`uname -m`&amp;quot;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== OpenEmbedded build: fixes ===&lt;br /&gt;
'''(Role: BUILD)'''&lt;br /&gt;
&lt;br /&gt;
There are unfortunately some problems in the build process. &lt;br /&gt;
The following fixes work around them:&lt;br /&gt;
&lt;br /&gt;
 cd $OMDIR/sources&lt;br /&gt;
 mkdir -p ../build/tmp/stamps/armv4t-linux&lt;br /&gt;
&lt;br /&gt;
* upstream moves old packages away, gratuitously breaking downstreams&lt;br /&gt;
&lt;br /&gt;
 wget http://ftp.mozilla.org/pub/mozilla.org/js/older-packages/js-1.5.tar.gz&lt;br /&gt;
 touch ../build/tmp/stamps/armv4t-linux/js-1.5-r0.do_fetch&lt;br /&gt;
&lt;br /&gt;
* us2.samba.org mirror has vanished&lt;br /&gt;
&lt;br /&gt;
 wget http://us4.samba.org/samba/ftp/stable/samba-3.0.14a.tar.gz&lt;br /&gt;
 touch ../build/tmp/stamps/armv4t-linux/samba-3.0.14a-r15.do_fetch&lt;br /&gt;
&lt;br /&gt;
* ghastly patch with CRLF and trailing blanks&lt;br /&gt;
&lt;br /&gt;
 perl -pi.orig -e 's/ *$//;s/\r//g' \&lt;br /&gt;
   ../openembedded/packages/gcc/gcc-4.1.1/gcc-4.1.1-pr13685-1.patch&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Building ==&lt;br /&gt;
&lt;br /&gt;
=== OpenEmbedded build ===&lt;br /&gt;
'''(Role: BUILD)'''&lt;br /&gt;
&lt;br /&gt;
openmoko/trunk/oe/conf/site.conf expects the OpenMoko-specific OE packages in $OMDIR/oe&lt;br /&gt;
&lt;br /&gt;
 cd $OMDIR&lt;br /&gt;
 ln -s openmoko/trunk/oe .&lt;br /&gt;
&lt;br /&gt;
We're now ready to run the build. This will take a while.&lt;br /&gt;
&lt;br /&gt;
 cd $OMDIR/build&lt;br /&gt;
 bitbake openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
Note that the build will stop several times to ask for SVN access and whether&lt;br /&gt;
to accept certificates. If you're not quick enough to respond, the underlying&lt;br /&gt;
session may time out. In this case, just restart &amp;quot;bitbake&lt;br /&gt;
openmoko-devel-image&amp;quot; and it will pick up from where it left off.&lt;br /&gt;
&lt;br /&gt;
The whole build process involves numerous downloads, takes about 7 hours&lt;br /&gt;
on an Athlon 64 3200+ (about 1.5h of delays were caused by ftp.debian.org not&lt;br /&gt;
working properly during this test run), and ends with a message like this:&lt;br /&gt;
&lt;br /&gt;
 Build statistics:&lt;br /&gt;
   Attempted builds: 4&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
=== Flash boot loader into NAND ===&lt;br /&gt;
'''(Role: LAB)'''&lt;br /&gt;
&lt;br /&gt;
As a first step, we transfer the u-boot bootloader into NAND Flash, through&lt;br /&gt;
the JTAG interface. We use JTAG, since this is the most basic way for doing&lt;br /&gt;
this, ensuring that we only depend on as little to work on the Neo as&lt;br /&gt;
possible.&lt;br /&gt;
&lt;br /&gt;
For this, the u-boot image for the right board version and the desired&lt;br /&gt;
build date must be chosen. E.g., an image built for a gta01bv2 board on&lt;br /&gt;
February 3, 2007 at 13:40:41 would be called&lt;br /&gt;
u-boot_nand-gta01bv2-20070203134041.bin&lt;br /&gt;
&lt;br /&gt;
The name is composed as follows:&lt;br /&gt;
;u-boot: the name of the component&lt;br /&gt;
;nand: it is it be loaded from NAND (not directly from RAM, see also [[Bootloader#Using_JTAG_to_boot_from_RAM]])&lt;br /&gt;
;gta01bv2: the hardware revision of the board&lt;br /&gt;
;20070203134041: the build date and time&lt;br /&gt;
;.bin: this is a binary suitable for flashing/loading&lt;br /&gt;
&lt;br /&gt;
If this is the first build, there will only be one image for each board&lt;br /&gt;
version, thus we can use wildcards. Change the gta01bv2 below to gta01v3 or&lt;br /&gt;
gta01v4, if necessary.&lt;br /&gt;
&lt;br /&gt;
See also: [[Sjf2410-linux]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $OMDIR/build/tmp/deploy/images&lt;br /&gt;
&lt;br /&gt;
( echo 0; echo 0; echo 0; echo 3; ) |&lt;br /&gt;
  ./sjf2410 -b -f `echo u-boot_nand-gta01bv2-*.bin`&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This will take approximately 12 minutes.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Copy kernel and root FS to microSD card ===&lt;br /&gt;
'''(Role: CARD)'''&lt;br /&gt;
&lt;br /&gt;
There are several ways to provide the Neo with its kernel and the root file&lt;br /&gt;
system. (See [[Bootloader]] for some of them.)&lt;br /&gt;
The most self-contained way is to put everything into NAND Flash.&lt;br /&gt;
To transfer the files to the Neo, we first place them on the microSD card.&lt;br /&gt;
&lt;br /&gt;
Memory cards, including microSD, usually come pre-formatted with VFAT. We&lt;br /&gt;
prefer ext2 (e.g., because we may want to store a real Linux file system on the&lt;br /&gt;
card as well). The following steps are needed to convert the card from VFAT to&lt;br /&gt;
ext2:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sfdisk -c /dev/uba 1 83&lt;br /&gt;
mke2fs -m0 /dev/uba1&lt;br /&gt;
tune2fs -c0 -i0 /dev/uba1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Next, we copy the kernel uImage and the root file system image to the card.&lt;br /&gt;
As discussed in the previous section, we can use wildcards if this is our&lt;br /&gt;
first build.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cd $OMDIR/build/tmp/deploy/images&lt;br /&gt;
mount /dev/uba1 /mnt/tmp&lt;br /&gt;
cp uImage-2.6-moko7-r1-fic-gta01-*.bin /mnt/tmp/uImage&lt;br /&gt;
cp openmoko-devel-image-fic-gta01-*.rootfs.jffs2 /mnt/tmp/rootfs.jffs2&lt;br /&gt;
umount /mnt/tmp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Now, insert the microSD card into the Neo, but don't power it on yet.&lt;br /&gt;
(If you did anyway, don't worry. We'll power cycle it later.)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Serial console ===&lt;br /&gt;
'''(Role: LAB)'''&lt;br /&gt;
&lt;br /&gt;
We use a serial console connecting through the debug board. This example uses&lt;br /&gt;
&amp;quot;xc&amp;quot;, which is a small and simple communications program. Many people prefer&lt;br /&gt;
&amp;quot;cu&amp;quot; or the considerably more bloated &amp;quot;minicom&amp;quot;, which will work as well.&lt;br /&gt;
&lt;br /&gt;
* Prepare xc configuration&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
cat &amp;lt;&amp;lt;EOF &amp;gt;$HOME/xc.init&lt;br /&gt;
set bps 115200&lt;br /&gt;
terminal&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Connect to the target&lt;br /&gt;
 xc -l /dev/ttyS0 -t&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Start the Neo and enter the boot prompt ===&lt;br /&gt;
'''(Role: LAB)'''&lt;br /&gt;
&lt;br /&gt;
Our first interaction with the target. If this doesn't work, please check&lt;br /&gt;
that the debug board is connected properly to the serial port.&lt;br /&gt;
&lt;br /&gt;
Disconnect power and USB from the phone, wait a couple of minutes, then connect power.&lt;br /&gt;
You may have to press and hold the power button on the Neo for a few seconds to turn it on.&lt;br /&gt;
The power button is located next to the USB port.&lt;br /&gt;
&lt;br /&gt;
Some people have observed stability issues if the device was reset without&lt;br /&gt;
power cycling or if USB was not disconnected when power cycling, yet details of what is really happening aren't very clear yet.&lt;br /&gt;
&lt;br /&gt;
On the serial console, a message like this should appear:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
U-Boot 1.2.0 (Feb  3 2007 - 13:07:21)&lt;br /&gt;
Press any key to enter the boot prompt:&lt;br /&gt;
GTA01Bv2 #&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the boot prompt changes with the hardware revision you have. If the&lt;br /&gt;
message does not appear after a few seconds, try power cycling again.&lt;br /&gt;
&lt;br /&gt;
If xc responds to pressing a button with&lt;br /&gt;
&amp;quot;Verify that you are trying to use a valid and operational tty port.&amp;quot;&lt;br /&gt;
the port may be stuck, waiting for DCD to be asserted. The quickest way to&lt;br /&gt;
get out of this situation is to disconnect the serial cable from the debug&lt;br /&gt;
board, run the following command&lt;br /&gt;
 while ! stty -F /dev/ttyS0 clocal; do : ; done&lt;br /&gt;
&lt;br /&gt;
stick something metallic, e.g., a paper clip or a screwdriver, into the plug on the cable,&lt;br /&gt;
and keep on fumbling with&lt;br /&gt;
it until DCD gets set and the loop above stops spitting out error messages.&lt;br /&gt;
&lt;br /&gt;
=== Flash kernel and root FS into NAND ===&lt;br /&gt;
'''(Role: LAB)'''&lt;br /&gt;
&lt;br /&gt;
We now load the kernel and the root FS from the microSD card into memory and&lt;br /&gt;
subsequently transfer them to NAND Flash. All this is done by entering&lt;br /&gt;
commands at the boot prompt.&lt;br /&gt;
&lt;br /&gt;
Each time we want to write new data to the NAND Flash, we first have to erase&lt;br /&gt;
the previous content. We do this individually for each partition. While it would&lt;br /&gt;
also be possible to erase some or all relevant partitions in one step, this would&lt;br /&gt;
require the user to look up addresses from the partition table and to perform&lt;br /&gt;
calculations which are inconvenient at best.&lt;br /&gt;
&lt;br /&gt;
See also: [[U-boot]]&lt;br /&gt;
&lt;br /&gt;
* Initialize the SD/MMC interface. The &amp;quot;Product Name&amp;quot; shown will be just binary garbage. This is expected behaviour.&lt;br /&gt;
&lt;br /&gt;
 GTA01Bv2 # mmc&lt;br /&gt;
&lt;br /&gt;
* Load the uImage file into memory. &amp;quot;ext2load&amp;quot; stores the number of bytes read as a hexadecimal number in the environment variable &amp;quot;filesize&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
 GTA01Bv2 # ext2load mmc 0 0x32000000 uImage&lt;br /&gt;
&lt;br /&gt;
* Erase the kernel partition and write the uImage from memory to NAND Flash&lt;br /&gt;
&lt;br /&gt;
 GTA01Bv2 # nand erase kernel&lt;br /&gt;
 GTA01Bv2 # nand write.e 0x32000000 kernel ${filesize}&lt;br /&gt;
&lt;br /&gt;
* The root file system is next. We need to specify the correct size, which is shown at the end of &amp;quot;ext2load&amp;quot;, e.g., &amp;quot;0x1608000)&amp;quot; in this case:&lt;br /&gt;
&lt;br /&gt;
 GTA01Bv2 # ext2load mmc 0 0x32000000 rootfs.jffs2&lt;br /&gt;
 23101440 (0x1608000) bytes read&lt;br /&gt;
 GTA01Bv2 # nand erase rootfs&lt;br /&gt;
 GTA01Bv2 # nand write.e 0x32000000 rootfs ${filesize}&lt;br /&gt;
&lt;br /&gt;
=== Configure the boot loader ===&lt;br /&gt;
'''(Role: LAB)'''&lt;br /&gt;
&lt;br /&gt;
Last but not least, we have to set up the boot loader to automatically boot&lt;br /&gt;
from Flash. For this, we use the default environment settings, which we obtain&lt;br /&gt;
by erasing the old content of the environment, and letting u-boot restore the&lt;br /&gt;
settings after a restart.&lt;br /&gt;
&lt;br /&gt;
Before touching the environment, you may have to update the environment offset.&lt;br /&gt;
Please see [[Migration_to_bad_block_tolerant_builds#Partition_sizing]] for details.&lt;br /&gt;
(We may simplify this particularly awkward and error-prone procedure in the&lt;br /&gt;
future.)&lt;br /&gt;
&lt;br /&gt;
* First, remove erase the old environment:&lt;br /&gt;
 GTA01Bv2 # nand erase env&lt;br /&gt;
&lt;br /&gt;
* We reset to force the boot loader to use the default settings.&lt;br /&gt;
 GTA01Bv2 # reset&lt;br /&gt;
&lt;br /&gt;
Wait until the &amp;quot;U-Boot [...]&amp;quot; message, then hit a key. It will display &lt;br /&gt;
 *** Warning - bad CRC or NAND, using default environment&lt;br /&gt;
&lt;br /&gt;
* Re-generate the partition information in the environment variable &amp;quot;mtdparts&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
 GTA01Bv2 # dynpart&lt;br /&gt;
&lt;br /&gt;
* Save the restored settings in NAND&lt;br /&gt;
 GTA01Bv2 # saveenv&lt;br /&gt;
&lt;br /&gt;
* Power cycle to boot the Neo (see remarks above)&lt;br /&gt;
&lt;br /&gt;
==  END ==&lt;br /&gt;
&lt;br /&gt;
'''Congratulations !''' You've just completed level 1 of the OpenMoko adventure.&lt;/div&gt;</summary>
		<author><name>Eric</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Hardware:Neo1973:Alternate_Cases:Steampunk</id>
		<title>Hardware:Neo1973:Alternate Cases:Steampunk</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Hardware:Neo1973:Alternate_Cases:Steampunk"/>
				<updated>2007-07-10T10:30:20Z</updated>
		
		<summary type="html">&lt;p&gt;Eric: /* Interest */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Steampunk influenced case mod for the Neo1973&lt;br /&gt;
&lt;br /&gt;
==Rendered images==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3D model==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Materials==&lt;br /&gt;
Brass/copper&lt;br /&gt;
Felt&lt;br /&gt;
&lt;br /&gt;
==Processes==&lt;br /&gt;
[http://steampunkworkshop.com/electroetch.shtml Electrolytic etching]&lt;br /&gt;
&lt;br /&gt;
==Interest==&lt;br /&gt;
Leave your nickname here if you are interested in having one made. This is not an order form, but is intended to gauge interest before effort is expended designing the case.&amp;lt;br&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
!No  !! Nick !!&lt;br /&gt;
|-&lt;br /&gt;
|1. ||[[User:ScaredyCat|Scaredycat]]&lt;br /&gt;
|-&lt;br /&gt;
|2. ||[[User:Eric|Eric]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Neo1973_alternate_cases]]&lt;/div&gt;</summary>
		<author><name>Eric</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Hardware:Neo1973:Alternate_Cases:Steampunk</id>
		<title>Hardware:Neo1973:Alternate Cases:Steampunk</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Hardware:Neo1973:Alternate_Cases:Steampunk"/>
				<updated>2007-07-10T10:30:04Z</updated>
		
		<summary type="html">&lt;p&gt;Eric: /* Interest */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Steampunk influenced case mod for the Neo1973&lt;br /&gt;
&lt;br /&gt;
==Rendered images==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==3D model==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Materials==&lt;br /&gt;
Brass/copper&lt;br /&gt;
Felt&lt;br /&gt;
&lt;br /&gt;
==Processes==&lt;br /&gt;
[http://steampunkworkshop.com/electroetch.shtml Electrolytic etching]&lt;br /&gt;
&lt;br /&gt;
==Interest==&lt;br /&gt;
Leave your nickname here if you are interested in having one made. This is not an order form, but is intended to gauge interest before effort is expended designing the case.&amp;lt;br&amp;gt;&lt;br /&gt;
{|&lt;br /&gt;
!No  !! Nick !!&lt;br /&gt;
|-&lt;br /&gt;
|1. ||[[User:ScaredyCat|Scaredycat]]&lt;br /&gt;
|-&lt;br /&gt;
|1. ||[[User:Eric|Eric]]&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:Neo1973_alternate_cases]]&lt;/div&gt;</summary>
		<author><name>Eric</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Main_Page</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Main_Page"/>
				<updated>2007-07-08T23:56:01Z</updated>
		
		<summary type="html">&lt;p&gt;Eric: purcased is not purchased&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;big&amp;gt;'''Welcome to the [[OpenMoko]] public Wiki'''&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;small&amp;gt;For other languages see the &amp;lt;/small&amp;gt;[[#bottom|bottom]]&amp;lt;small&amp;gt; of this page.&amp;lt;/small&amp;gt; &lt;br /&gt;
&lt;br /&gt;
[[Image:FIC-neo1973_small.jpg|200px|right|frontside]]&lt;br /&gt;
[[OpenMoko]] is an [http://en.wikipedia.org/wiki/Open_source Open Source] project to create the world's first free mobile phone operating system.&lt;br /&gt;
&lt;br /&gt;
The [[OpenMoko]] project is a community that anyone can join, to help design their ideal phone.&lt;br /&gt;
&lt;br /&gt;
The long term goal is that phone software won't be tied to a phone. You can install any OpenMoko software over the whole range of phones, and if you upgrade your phone, you don't lose the software. Bugs fixed on one phone are fixed on all.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;em&amp;gt;Currently it is not suitable for users.&amp;lt;/em&amp;gt; The state of the software at the moment is pre-alpha. If you order a Neo1973, DO NOT expect to be able to use it as an everyday phone for several months.&lt;br /&gt;
&lt;br /&gt;
The [[Neo1973]] from [[FIC]] is the first of many phones that [[OpenMoko]] will run on. It can be purchased from [https://direct.openmoko.com/]. To show that OpenMoko the phone stack is not tied to the Neo1973, here is a report from somebody who seems to have OpenMoko [http://blog.mikeasoft.com/2007/07/01/openmoko-on-a-treo-650/ up and limping on the Palm Treo680]!&lt;br /&gt;
&lt;br /&gt;
Please join us in collaborating on the [[OpenMoko | OpenMoko project]] through any of the [[Development resources | project resources]] including the [[Main Page | OpenMoko wiki]]. Please see the [[Help:Contents | wiki editing help page]] for information on making contributions to this wiki.  A [[Meet the Core Team | core team of developers funded by FIC, Inc.]] leads the project.&lt;br /&gt;
&lt;br /&gt;
An [[Introduction | introduction page]] is available, with both [[Introduction#Photos|photos]] and [[Introduction#Videos|videos]].  Moreover, the usual [[FAQ | Frequently Asked Questions, FAQ, page]] might be helpful.  Developers may find the [[ChangeLog | daily software change log]] an important resource.&lt;br /&gt;
&lt;br /&gt;
The members of the [[OpenMoko]] community would like to thank [[FIC|FIC Inc.]] for showing leadership and initiating the [[OpenMoko]] project.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[OpenMoko]] Areas of Interest ==&lt;br /&gt;
&lt;br /&gt;
* [[Basic End-user]] - Information for end users that want basic functionality and no surprises&lt;br /&gt;
* [[Advanced End-user]] - Information for advanced end-users that want advanced and experimental functionality but who are not programmers&lt;br /&gt;
* [[Development resources | Project Resources]] page provides a centralized location of all resources such as [[Development resources#Mailing_Lists|mailing lists]], [[Development resources#IRC | communication tools]], and other software development oriented resources.&lt;br /&gt;
* [[Application Developer]] - Information for application developers, including ideas and specifications for applications, and tools to build them&lt;br /&gt;
* [[System Developer]] - Information for system developers, including bootloader, kernel, and libraries&lt;br /&gt;
* [[Hardware Developer]] - Information for hardware developers, including hardware specs and debug board&lt;br /&gt;
* [[Community Events]] - Information on both [[Community Events#Past Events | past ]] and [[Community Events#Past Events#FIC / OpenMoko at Events | future]] events where FIC or [[OpenMoko]] had or will have a presence.&lt;br /&gt;
&lt;br /&gt;
== Developer's Documentation ==&lt;br /&gt;
&lt;br /&gt;
=== Hands-on Guides ===&lt;br /&gt;
* [[Getting Started with your Neo1973]]&lt;br /&gt;
* [[MokoMakefile|Building OpenMoko using the MokoMakefile]] &lt;br /&gt;
* [[Building OpenMoko from scratch]]&lt;br /&gt;
** Old [[Building OpenMoko from scratch (pre-BBT)]]&lt;br /&gt;
* [[Migration to bad block tolerant builds]]&lt;br /&gt;
* [[Running OpenMoko on PC]]&lt;br /&gt;
** [[Getting OpenMoko working on host with Xoo]]&lt;br /&gt;
** [[Getting OpenMoko working on host with Xephyr]]&lt;br /&gt;
** [[How to run OpenMoko Apps on PC]]&lt;br /&gt;
** [[OpenMoko under QEMU]]&lt;br /&gt;
* [[Booting from SD]]&lt;br /&gt;
&lt;br /&gt;
=== Hardware Reference Documentation ===&lt;br /&gt;
* All [[:Category:Hardware|Hardware]] related documentation and specifications are found on the [[:Category:Hardware|Hardware page]].&lt;br /&gt;
* The [[:Category:Neo1973 Hardware|Neo1973 Hardware page]] provides an overview of the hardware components used by the [[:Category:Neo1973 Hardware|Neo1973 hardware platform]]. PCB Photographs are also included. A [[Disassembling Neo1973 | photo disassemble story]] may be an interesting starting place.&lt;br /&gt;
* [[:Category:Neo1973 Hardware Debugging | Neo1973 Hardware Debugging]] is assisted with the [[Debug Board | Neo1973 debug board]].   A page discussing [[Connecting Neo1973 with Debug Board v2 | debug board and Neo1973 configurations]] are also provided.&lt;br /&gt;
&lt;br /&gt;
=== Software Reference Documentation ===&lt;br /&gt;
* Architectural&lt;br /&gt;
** [[OpenMokoFramework]] - The OpenMoko Application Framework&lt;br /&gt;
* [[neo1973 host software]]&lt;br /&gt;
* Device Software&lt;br /&gt;
** Low-Level&lt;br /&gt;
*** [[u-boot]] - The bootloader we use, including documentation for our modifications&lt;br /&gt;
*** [[kernel]] - The Linux kernel we use, including documentation for our modifications&lt;br /&gt;
** Userspace&lt;br /&gt;
*** [[binary compatibility]]&lt;br /&gt;
*** [[gsmd]] - the GSM daemon managing the GSM Modem&lt;br /&gt;
*** [[gpsd]] - the AGPS (Assisted GPS) daemon&lt;br /&gt;
&lt;br /&gt;
=== OpenMoko===&lt;br /&gt;
* [[OpenEmbedded]] - The distribution-building framework&lt;br /&gt;
* [[Toolchain]] - The toolchain we use for compilation&lt;br /&gt;
* [[OpenMoko]] - The OpenMoko distribution&lt;br /&gt;
** [[OpenMoko2007]] - The first intended release of it&lt;br /&gt;
** [[Userspace root image]]&lt;br /&gt;
&lt;br /&gt;
==== User Interface Related ====&lt;br /&gt;
* [[Look &amp;amp; Feel]]&lt;br /&gt;
* [[Applications]]&lt;br /&gt;
* [[Widgets]]&lt;br /&gt;
** [[Widget Inheritance Graph]]&lt;br /&gt;
&lt;br /&gt;
=== Misc. Development Related ===&lt;br /&gt;
* [[Freshman todo]]&lt;br /&gt;
* [[Templates]]&lt;br /&gt;
* [[PIM Storage]]&lt;br /&gt;
* [[Coding Guidelines]]&lt;br /&gt;
* [[OpenMoko#Setting_up_an_OpenMoko_SDK|How to setup the OpenMoko SDK]]&lt;br /&gt;
* [[License]] - How we license our code&lt;br /&gt;
* [[Development resources]] - Describes resources for developers (lists, svn, ...)&lt;br /&gt;
* [[Neo1973 Phase 0]] -- Information for Phase 0 device owners&lt;br /&gt;
* [[Wishlist:Neo1973 P0 Review]] -- Impressions of the Phase 0 hardware device, also the Phase 0 FAQ&lt;br /&gt;
&lt;br /&gt;
== Administrative / Organizational ==&lt;br /&gt;
&lt;br /&gt;
* [[Shipping Notes]] - Information to help FIC figure out how to ship products to you, and how much it might cost.&lt;br /&gt;
* [[My Account]] - Ideas for what sort of account-based services FIC should provide with the phone.&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous ==&lt;br /&gt;
* [[WiFi support in OpenMoko]]&lt;br /&gt;
* [[Neo1973 and Windows]] - If you want to commit that offence ;)  (does not work, help!)&lt;br /&gt;
* [[Press Coverage]] - What the press says about the OpenMoko project&lt;br /&gt;
* [[mFAQ]] - The OpenMoko Misinformation FAQ ('''mFAQ''') - What the press '''''incorrectly''''' says about the OpenMoko project&lt;br /&gt;
* [[Wish List]] - A collection of ideas and ideals we'd like to see implemented some day&lt;br /&gt;
* [[Wish List - Hardware]] - A collection of ideas we'd like to see in the next Neo release&lt;br /&gt;
* [[Wishlist:BuiltInScriptingLanguage|Wish List - Built-in Scripting Language]] - Discussion on a suitable scripting language to be included&lt;br /&gt;
* [[Media Content]] - What types of media on the device can we use (that is non-software)?&lt;br /&gt;
* [[Testimonials]] - How did you get to OpenMoko?&lt;br /&gt;
* [[Buying Interest List]] - (Not official and not a pre-order page) Have you have put money aside for Neo1973? Put your nick here.&lt;br /&gt;
* [[iPhone]] -  Comparison between Apple iPhone and FIC Neo1973&lt;br /&gt;
* [[Translation]] -  Translation of OpenMoko&lt;br /&gt;
* [[Summer of code]] - Our page with project applications for Googles Summer of Code&lt;br /&gt;
* [[SWAG]] - Where to purchase openmoko swag (T-Shirts!)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;bottom&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
{{Languages|Main_Page}}&lt;/div&gt;</summary>
		<author><name>Eric</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/PIM_Storage</id>
		<title>PIM Storage</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/PIM_Storage"/>
				<updated>2007-07-08T23:39:51Z</updated>
		
		<summary type="html">&lt;p&gt;Eric: /* Unresolved Issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
PIM storage describes a means of storing data in an extensible and cross-referencable way. &lt;br /&gt;
&lt;br /&gt;
== Goals &amp;amp; Objectives ==&lt;br /&gt;
* Method to exchange data between all applications completely transparent&lt;br /&gt;
* Personal data security / encryption&lt;br /&gt;
* Great bidirectional sync of personal data&lt;br /&gt;
* Easy method for [[Backup|backup]] (ideally this should be automatic)&lt;br /&gt;
* Real-time incremental search&lt;br /&gt;
* Autocomplete of personal data information&lt;br /&gt;
&lt;br /&gt;
== Use Cases ==&lt;br /&gt;
* I would like to attach arbitrary data to a contact (AKA: custom fields)&lt;br /&gt;
* I would like some level of integration with automatic switching of profiles. For example, it would be cool to automatically backup my personal data to my desktop PC when I get home.&lt;br /&gt;
* I want to type the first few numbers of a phone number and be presented a list of matching contacts.&lt;br /&gt;
** I'd rather take a person, choose home/work, choose land-line/mobile and not bother with numbers anymore. Useful when I'm on my way to meet that person, or the person has his/her birthday, i.e. the person is already listed on my screen!&lt;br /&gt;
* I want to add a contact to multiple groups (AKA: categories)&lt;br /&gt;
* I want to be able to send my contact info to other OpenMoko devices over bluetooth&lt;br /&gt;
* I want to be able to two-way sync all calendar, contacts (and tasks) with a GroupDAV server (e.g. Citadel) over-the-air&lt;br /&gt;
&lt;br /&gt;
== Constraints ==&lt;br /&gt;
(TBD)&lt;br /&gt;
&lt;br /&gt;
== Implementation Recommendations ==&lt;br /&gt;
* This will be based on [http://projects.o-hand.com/eds Embedded EDS], this way we will can directly use Evolution data, get OpenSync for free, and eventually be able to talk to a Microsoft Exchange Server using the Novell Connector.&lt;br /&gt;
&lt;br /&gt;
== Interactions ==&lt;br /&gt;
* Embedded EDS needs libglade2, [[dbus]], and libdb.&lt;br /&gt;
&lt;br /&gt;
== Unresolved Issues ==&lt;br /&gt;
* Synchronizing w/ Outlook&lt;br /&gt;
* Synchronizing w/ MacOS X - most Macs have bluetooth builtin and OSX addressbook supports BT sync.&lt;br /&gt;
* Synchronizing w/ Google services&lt;br /&gt;
&lt;br /&gt;
Possible solutions:&lt;br /&gt;
* mokod - An OpenMoko daemon to run on host operating systems&lt;br /&gt;
&lt;br /&gt;
== Questions and Answers ==&lt;br /&gt;
* Q: When will an Embedded EDS specification be available? i.e. How I can get applications to store and retrieve data from in it, in a compatible way?&lt;br /&gt;
* Q: Will it out of the box synchronize with the Kontact PIM suite (KDE)?&lt;/div&gt;</summary>
		<author><name>Eric</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:Eric</id>
		<title>User:Eric</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:Eric"/>
				<updated>2007-07-08T21:05:21Z</updated>
		
		<summary type="html">&lt;p&gt;Eric: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I'm an embedded linux developer who lives in Montreal, Quebec, Canada.&amp;lt;p&amp;gt;&lt;br /&gt;
I'm looking for OpenMoko related work, feel free to contact me.&amp;lt;/p&amp;gt;&lt;br /&gt;
I go by nickname &amp;lt;b&amp;gt;notserpe&amp;lt;/b&amp;gt; on #openmoko.&lt;/div&gt;</summary>
		<author><name>Eric</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:Eric</id>
		<title>User:Eric</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:Eric"/>
				<updated>2007-07-08T21:04:38Z</updated>
		
		<summary type="html">&lt;p&gt;Eric: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I'm an embedded linux developer who lives in Montreal, Quebec, Canada.&amp;lt;p&amp;gt;&lt;br /&gt;
I'm looking for OpenMoko related work, feel free to contact me. &amp;lt;p&amp;gt;&lt;br /&gt;
I go by nickname &amp;lt;b&amp;gt;notserpe&amp;lt;/b&amp;gt; on #openmoko.&lt;/div&gt;</summary>
		<author><name>Eric</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:Eric</id>
		<title>User:Eric</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:Eric"/>
				<updated>2007-07-08T21:04:16Z</updated>
		
		<summary type="html">&lt;p&gt;Eric: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I'm an embedded linux developer who lives in Montreal, Quebec, Canada.&amp;lt;p&amp;gt;&lt;br /&gt;
I'm looking for OpenMoko related work, feel free to contact me.&amp;lt;p&amp;gt;&lt;br /&gt;
I go by nickname &amp;lt;b&amp;gt;notserpe&amp;lt;/b&amp;gt; on #openmoko.&lt;/div&gt;</summary>
		<author><name>Eric</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Wishlist/BuiltInScriptingLanguage</id>
		<title>Wishlist/BuiltInScriptingLanguage</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Wishlist/BuiltInScriptingLanguage"/>
				<updated>2007-07-05T13:51:10Z</updated>
		
		<summary type="html">&lt;p&gt;Eric: /* Java */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Wishlist}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Discussion ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[http://lists.openmoko.org/pipermail/community/2007-January/001909.html There was a discussion on the mailing list about choosing a built-in scripting language.]&lt;br /&gt;
&lt;br /&gt;
Many different scripting languages will be optionally available in the repository.   However,  developers who choose one of these languages for their applications will not be able to see their applications included in the standard ROM nor available for use by those without an external microSD card.&lt;br /&gt;
&lt;br /&gt;
[http://lists.openmoko.org/pipermail/community/2007-January/001945.html As expressed by Corey]:&lt;br /&gt;
&lt;br /&gt;
''It's true that you have the ability to add anything to the phone.''&lt;br /&gt;
&lt;br /&gt;
''There's another important consideration to remember: OpenMoko is a platform also; an inherent aspect of such a platform is that it always come shipped with X standard api's available for developers. This is why FIC had to select a group of components: gcc, glibc, xorg/kdrive, dbus and gtk, for instance.''&lt;br /&gt;
&lt;br /&gt;
''They may decide that a scripting language would also be a necessary or beneficial feature to include in the base/standard platform''&lt;br /&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;br /&gt;
''Choice is good.''&lt;br /&gt;
&lt;br /&gt;
''And so is having a known/standard/default/static api and platform to build from; when I begin writting commercial and/or free software for the OpenMoko, I will design my software according the existing OpenMoko specs, and thereby circumvent the necessity of having to verify that my customers/end users have first installed the necessary scripting language, which would additionally circumvent the probability that your phone will end up with every scripting language known to man.''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''&amp;gt; So having lua on my system would be more or less pointless as I don't use it myself.''&lt;br /&gt;
&lt;br /&gt;
''Less than one meg of space would be potentially wasted, true enough in your case. Know that there is probably plenty of other software on the OpenMoko platform that you, yourself, will not be using.''&lt;br /&gt;
&lt;br /&gt;
''Also realize that though _you_ may not be directly using this hypothetical scripting language, it is more than likely that one or more of the standard apps that ship with the phone will be using it, and that other 3rd party software that you may or may not install may also be using it.''&lt;br /&gt;
&lt;br /&gt;
[http://lists.openmoko.org/pipermail/community/2007-January/001947.html Derek Pressnall also expressed it well:]&lt;br /&gt;
&lt;br /&gt;
''The reason is the same reason the device is being shipped with a given kernel (Linux), a given set of libraries (glibc, gtk), etc.  So that when a developer writes an application, it will be known to be able to run on all shipped devices.  So, in this light, it may be benificial to included a standard interpreted language that can be a known&lt;br /&gt;
target. ''&lt;br /&gt;
&lt;br /&gt;
''The benefits to having an interpreter included (esp. one that has hooks into the gui and other phone functions) are that more apps will be made available -- there are more hackers that can code up quick scripts than ones that will learn &amp;amp; code for a specific gui accessible only from a compiled language.  And, the benefit of having a particular interpreter is that when these little apps / scripts are packaged up, you don't have a dependancy nightmare (even though this can be somewhat mitigated by a good package management system, it is only as good as the backend repository, and having self-contained packages are the simplest of all).  Also, by settling on a single standard, even if it is one that some developers may have to learn, it makes it more worthwhile to learn a new scripting environment that is widely deployed on your target platform.  But for these same reasons, the interpreted language target will need careful consideration, lest we get stuck with something that doesn't adequetly meet most needs.''&lt;br /&gt;
&lt;br /&gt;
''As a secondary issue, if the included interpreter is easily embeddable, then it would be nice to have it as the standard across all the included applets that can use it (i.e., it would be good if the email/sms client, phonebook manager, dialer, etc. were all scriptable).''&lt;br /&gt;
&lt;br /&gt;
''But whatever is decided on (if a single language is picked), a function library should be developed for it that includes access to all the phone specific features (in addition to the gui hooks).''&lt;br /&gt;
&lt;br /&gt;
[[http://lists.openmoko.org/pipermail/community/2007-January/001955.html and Ben Burdette:]]&lt;br /&gt;
&lt;br /&gt;
''That's all well and good when everyone has SPACE for every scripting  language known to man.  But use 10mb here, 10mb there for scripting languages, and suddenly there's nothing left of my 64mb of flash. ''&lt;br /&gt;
&lt;br /&gt;
''I'm all for allowing people to use whatever scripting language they want.  But I'd like the peace of mind of knowing I can write a scripted app that will run on every OpenMoko phone out there, even if they have no memory expansion card.  I don't want the situation where the poor user has to unload someone else's app and scripting environment in order to use mine, or vice versa. ''&lt;br /&gt;
&lt;br /&gt;
Bryan Larsen adds:&lt;br /&gt;
&lt;br /&gt;
''It'll be faster for me to develop my apps in Ruby-GTK2 and then port to C once the application stabilizes, since so much of the actual work involves playing with and discarding various ideas.  Why should I have to go through the totally unnecessary step of transliterating my code into C just so it can be used by mainstream users?  I don't really care if Ruby or Python or even Javascript is chosen, I just want something for rapid development that I can ship without translating!''&lt;br /&gt;
&lt;br /&gt;
For all these reasons, a choice should be made, and it should be made quickly.  A scripting language should be chosen and &amp;quot;blessed&amp;quot;; actual implementation on OpenMoko is a much lower priority as most people will likely be (or should be) prototyping their applications on a PC anyways.&lt;br /&gt;
&lt;br /&gt;
== Factors to Consider ==&lt;br /&gt;
&lt;br /&gt;
# '''How popular is it?''' The fewer people that need to learn a new language, the less whining we'll get on the list when it's chosen.&lt;br /&gt;
# '''How big is the run time environment?'''  This is perhaps the most important question, since we are trying to fit into a very small fraction of the 64MB of space available in the OpenMoko ROM.  We only need the run time environment; it is expected that developers will have a PC or microSD card to compile to the intermediate form used by the scripting language.  It's also presumed that a stripped down, precompiled standard library will be included.&lt;br /&gt;
# '''Is it easy to learn?'''  Assuming that the user has already learned some Algol influenced language, (ie pretty much every language in widespread current use except for Lisp and FORTRAN), how easy is it to learn?&lt;br /&gt;
# '''How advanced is it?'''  We want to include a language that people will use.  Specifically I'm going to look for &amp;quot;closures&amp;quot; and &amp;quot;meta-programming&amp;quot; as a measure of how &amp;quot;advanced&amp;quot; the language is.  These are very arbitrary choices, but they are something I've found useful.  If you have any other pet measures, let me know!&lt;br /&gt;
# '''Does it have bindings to GTK2, OpenMoko-libs and D-BUS?'''  These three things will be required to write applications that look and feel like OpenMoko apps, as well as interact well with the built-in applications.&lt;br /&gt;
# '''How does it perform?'''  Performance is usually not a major concern for a scripting language, but due to the limited horsepower available on phones, it is a concern.&lt;br /&gt;
# '''Is it embeddable?'''  Traditionally in the Unix world, applications were small tools bound together by scripts and pipes.  Traditionally in the Windows world, applications were huge monolothic beasts that were scriptable using a built-in scripting language such as Visual Basic for Applications.  This model is also used in the Unix world, Emacs being the classic example.  A hybrid model has emerged and become popular in modern Unix GUI's such as OSX, Gnome and KDE: applications expose a scripting friendly API via D-BUS, CORBA or Applescript so that external scripts can appear to act as internal scripts.  If the scripting language chosen is easily embeddable, all three models become available on OpenMoko.  It's expected that the third model will be the most popular, but the second model may have size/overhead advantages.&lt;br /&gt;
# '''What major applications of interest''' are available in the language and would be useful on OpenMoko?&lt;br /&gt;
&lt;br /&gt;
== The Languages (already included) ==&lt;br /&gt;
&lt;br /&gt;
=== BASH / Shell scripts ===&lt;br /&gt;
&lt;br /&gt;
# already included, useful for most cases - [http://99-bottles-of-beer.net/language-bash-98.html example]&lt;br /&gt;
# Shell is a very popular scripting language.&lt;br /&gt;
# There will be a shell of some form available on OpenMoko, therefore it is &amp;quot;free&amp;quot;.&lt;br /&gt;
# Shell is idiosyncratic, but all Unix developers know it in at least a very limited degree.&lt;br /&gt;
# Shell is a full language, but can hardly be compared to languages designed monolithically.  :)&lt;br /&gt;
# D-BUS is usable from the command line.  GTK2 may be used via [http://www.gtk-server.org/index.html gtk-server].&lt;br /&gt;
&lt;br /&gt;
=== AWK ===&lt;br /&gt;
&lt;br /&gt;
# already included, very powerful - [http://99-bottles-of-beer.net/language-awk-53.html example]&lt;br /&gt;
&lt;br /&gt;
=== SED ===&lt;br /&gt;
&lt;br /&gt;
# already included, useful together with bash / awk [http://99-bottles-of-beer.net/language-sed-1087.html example1],[http://www.student.northpark.edu/pemente/sed/sed1line.txt example2]&lt;br /&gt;
&lt;br /&gt;
=== Javascript ===&lt;br /&gt;
&lt;br /&gt;
# Javascript is a very popular scripting language because it's the defacto web user-side scripting language.&lt;br /&gt;
# Javascript will be available on whichever web browser is included in the project, therefore it is &amp;quot;free&amp;quot;.&lt;br /&gt;
# Javascript has a straightforward C-style syntax.  Core Javascript is actually a very nice language; it gets a bad rap because of inconsistencies in implementation and bugs in the various browsers.&lt;br /&gt;
# Closures are very popular in Javascript.  Metaprogramming is possible; JSON is an example of a form of such.&lt;br /&gt;
# An incomplete set of bindings for GTK2 are [http://oss.mps.com.sg/GtkJavaScript available here.].  [http://www.gtk-server.org/index.html gtk-server] may be used instead if those bindings are insufficient.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The Languages (not included) ==&lt;br /&gt;
&lt;br /&gt;
''Warning: opinions ahead''&lt;br /&gt;
&lt;br /&gt;
=== Lua ===&lt;br /&gt;
&lt;br /&gt;
# Lua is a moderately popular scripting language popular in video games and in Brazil.  &lt;br /&gt;
# It has a tiny footprint: 150K claimed, the run time environment takes up around 400K in OpenZaurus. It's been successfully shoehorned into tiny embedded platforms (&amp;lt;50Kb RAM).&lt;br /&gt;
# Lua has a simple syntax and is easy to learn.  &lt;br /&gt;
# It has first class closures and coroutines (a.k.a. greenthreads).  A fundamental building block of Lua is the ability to redefine any defined or undefined aspect of the language; this provides very good runtime metaprogramming ability.  [http://metalua.luaforge.net/ metalua] provides full compile-time metaprogramming (a.k.a. Lisp-style macros), if such extremes are needed.  &lt;br /&gt;
# Bindings are available for GTK2.&lt;br /&gt;
# Performance are substantially better than [http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&amp;amp;lang=lua&amp;amp;lang2=python Python's] or [http://shootout.alioth.debian.org/gp4/benchmark.php?test=all&amp;amp;lang=lua Perl's].&lt;br /&gt;
# It is very easy to embed: it's designed for seamless integration with C, in both Lua-&amp;gt;C and C-&amp;gt;Lua directions.&lt;br /&gt;
&lt;br /&gt;
=== Python ===&lt;br /&gt;
&lt;br /&gt;
# Python is an extremely popular scripting language.&lt;br /&gt;
# By stripping down the standard libraries to the edge of usability, it can be made to fit within 1MB.  (claim unverified).   I suspect that 3MB is a more usable number.&lt;br /&gt;
# Designed as an educational language, it is easy to learn.  &lt;br /&gt;
# It has closures, although they were a late addition to the language.  Metaprogramming is very difficult.  &lt;br /&gt;
# Bindings are available for GTK2 and D-BUS.  GTK bindings are part of the Gnome project.&lt;br /&gt;
# Performance is good.  Psyco can make it extremely good, but that is unlikely to be available to OpenMoko.&lt;br /&gt;
# Python can be embedded, although not trivially.&lt;br /&gt;
# OLPC uses Python heavily and may produce applications suitable for porting to OpenMoko&lt;br /&gt;
# Python is the only language besides C / C++ mentioned in GNOME Mobile &amp;amp; Embedded Initiative Mobile Platform&lt;br /&gt;
# Python has been successfully used to create well-working and fast programs for the Nokia 770/800 devices, such as [http://konttoristhoughts.blogspot.com/2007/03/uk-media-player-is-nearing-first-public.html this].&lt;br /&gt;
&lt;br /&gt;
=== Ruby ===&lt;br /&gt;
&lt;br /&gt;
# Ruby is a popular scripting language.  &lt;br /&gt;
# Size is unknown, although comparable to Python, I suspect.  &lt;br /&gt;
# Ruby is seen by many to be an excellent compromise between the terseness and power of Perl and the readability and ease of learning of Python.  &lt;br /&gt;
# It has closures.  Metaprogramming can be hairy, but Rails is an excellent example of the beautiful results it can acheive.  &lt;br /&gt;
# Bindings are available for GTK2 and D-BUS.&lt;br /&gt;
# Performance is worse than Python or Perl in current versions, although the next version of Ruby is likely to be much better.&lt;br /&gt;
&lt;br /&gt;
=== Perl ===&lt;br /&gt;
&lt;br /&gt;
# Perl is an extremely popular scripting language.  &lt;br /&gt;
# Sizewise, it is likely to be a little bit smaller than Python or Ruby.&lt;br /&gt;
# It is not generally considered an easy language to learn.  This is probably mostly due to the idiosyncrasy of typical Perl programs.  Perl is generally easier to write than to read or maintain, most other languages are the other way around.   &lt;br /&gt;
# Perl has first class closures.  Perl's metaprogramming abilities lie between that of Python and Ruby.&lt;br /&gt;
# Perl has existed for a considerable amount of time in comparison to other scripting languages, which means it is stable and boasts an extensive amount of third-party libraries/modules.&lt;br /&gt;
# Bindings are available to GTK2 and D-BUS.  Gtk bindings are part of the GNOME project.&lt;br /&gt;
&lt;br /&gt;
=== Lisp/Scheme/Guile ===&lt;br /&gt;
&lt;br /&gt;
# There are a lot of Lisp variants available.  It is the second oldest high-level programming language available, yet still retains moderate popularity for new projects.&lt;br /&gt;
# Lisp variants have been run on 16K computers.  Usable variants are substantially larger, but will be significantly smaller than Python.&lt;br /&gt;
# Lisp syntax is very simple, and hated by many.  :)&lt;br /&gt;
# Modern lisp variants are more &amp;quot;powerful&amp;quot; than every other language listed here.&lt;br /&gt;
# GTK2 and D-BUS bindings are available&lt;br /&gt;
&lt;br /&gt;
=== Java ===&lt;br /&gt;
&lt;br /&gt;
# Not a scripting language, but Java does offer garbage collection and a few features that make development slightly faster than C.  A J2ME JVM is ubiquitous on competing cell phones so is likely to be included in OpenMoko for purely competitive reasons. (But if we're all lucky, a clear-minded concensus will prevail in everyone's understanding that Java just doesn't belong on an embedded device.)&lt;br /&gt;
# A full J2ME implementation takes about 2 Megabytes of space.  [http://developers.sun.com/techtopics/mobility/getstart/articles/survey/ (reading in between the lines here.  I could be very wrong)].  However since it's likely to be included in the phone for other reasons it can be considered &amp;quot;free&amp;quot;.&lt;br /&gt;
# Java is very C-like.&lt;br /&gt;
# Java is not a scripting language and doesn't support advanced scripting language features. So why is it in this list?&lt;br /&gt;
# libswt-gtk provides uses GTK2 to display SWT java apps, and libgtk-java provides a direct binding.&lt;br /&gt;
&lt;br /&gt;
=== JRuby ===&lt;br /&gt;
&lt;br /&gt;
# JRuby is a version of ruby that runs on the JVM.  Jython is also available although it appears that JRuby is being more actively supported by Sun.&lt;br /&gt;
# If a JVM is on the phone, then JRuby is &amp;quot;free&amp;quot;.&lt;br /&gt;
# JRuby can use the Java bindings to GTK2.&lt;br /&gt;
&lt;br /&gt;
=== Mono/C# ===&lt;br /&gt;
&lt;br /&gt;
# Not a scripting language, but offers garbage collection and other nice features.&lt;br /&gt;
# Already used in a similar setup on Nokia 770/800.&lt;br /&gt;
# Nicely cross-platform; same binary could be run on OpenMoko, Nokia 770/800, Linux, Windows (see [http://www.mdk.org.pl/articles/2007/01/28/clone-wars here]).&lt;br /&gt;
# Has anyone got a good quote on runtime size? (One package was 1.7M for runtime, 1.3M for GTK#, and a whopping 22M for the full classlib.)&lt;br /&gt;
&lt;br /&gt;
== Summary ==&lt;br /&gt;
&lt;br /&gt;
If the space is available, the most popular choices will be Ruby and Python.  Python is currently more popular, however Ruby is gaining ground fast.  The choice between the two is political.  Neither is wrong; you'll offend people making either choice.  However, &amp;quot;both&amp;quot; is a very expensive option, so a choice will have to be made.&lt;br /&gt;
&lt;br /&gt;
If the space is more limited, Lua and Scheme are probably the best choices.  Unless your developers include a large number of grey-bearded Lisp hackers, Lua is probably the best choice.  This may be unfortunate, but it is so.&lt;br /&gt;
&lt;br /&gt;
If an appropriate amount of manpower is available to bring the bindings up to snuff, the &amp;quot;free&amp;quot; choice of Javascript may be the best choice of all.&lt;br /&gt;
&lt;br /&gt;
JRuby is also an interesting choice.  It's very likely that a J2ME JVM will be included in the standard installation for purely competitive reasons, so JRuby is very close to free with a little bit of work.&lt;br /&gt;
&lt;br /&gt;
--[[User:Bryan Larsen|Bryan Larsen]] 21:44, 3 April 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
Well, my beard is still red, and I prefer Common Lisp. Or Scheme. :) --[[User:hrapd|Dmitri Hrapof]] 18 April 2007&lt;br /&gt;
&lt;br /&gt;
By looking at the [http://www.gnome.org/mobile/ GNOME Mobile &amp;amp; Embedded Initiative] page, I see that there is a picture of the [[Neo1973]] and a picture showing the GNOME Mobile Platform with C, C++ and Python mentioned. Is there a strong reason not to pick Python as the language for the device? --[[User:Nakedible|Nakedible]] 12:30, 30 April 2007 (CEST)&lt;br /&gt;
&lt;br /&gt;
[[Category:Ideas]]&lt;/div&gt;</summary>
		<author><name>Eric</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Wish_List_-_Hardware</id>
		<title>Wish List - Hardware</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Wish_List_-_Hardware"/>
				<updated>2007-07-05T10:20:40Z</updated>
		
		<summary type="html">&lt;p&gt;Eric: /* Barcode Scanner */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a page detailing hardware features which some would like to go into future phones similar to the [[Neo1973]].&lt;br /&gt;
&lt;br /&gt;
Openmoko however may run on a large number of devices in the future, some of which may be DVD players, cameras, or convergance devices. Possible features for those devices are listed in [[Wishlist - Hardware - Novel Devices]].&lt;br /&gt;
&lt;br /&gt;
Hardware that is unlikely to appear in any OpenMoko device is listed in [[Wishlist:Unlikely]] - due to it being impossible to fabricate with near-term technology, or other reasons.&lt;br /&gt;
&lt;br /&gt;
Accessories that people would like - initially primarily for the Neo1973 - are listed in [[Wishlist:Accessories]].&lt;br /&gt;
&lt;br /&gt;
==Wireless data networking==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===WiMAX support===&lt;br /&gt;
[http://en.wikipedia.org/wiki/Wimax WiMAX] is a high-speed data service, similar to wifi, though longer range and newer. Where service is available, this would complement WiFi. Unfortunately, unlike wifi, frequencies vary worldwide, so global usage may be complex.&lt;br /&gt;
&lt;br /&gt;
===Emerging Protocols===&lt;br /&gt;
*[http://en.wikipedia.org/wiki/Near_Field_Communication Near Field Communication] has a few centimeter range, useable for keys, ID badges, pairing bluetooth devices and similar uses. Mentioned in newer bluetooth and SD standards. (No products.)&lt;br /&gt;
*[http://en.wikipedia.org/wiki/ZigBee ZigBee] is designed for connecting sensors and switches in buildings, with many options including mesh networks and aggressive power saving compared to bluetooth. (Almost no products available.)&lt;br /&gt;
*The [http://en.wikipedia.org/wiki/ANT_%28network%29 ANT network] is for connecting worn devices. Similar to ZigBee, but much simpler and maybe lower power. ([http://www.thisisant.com/?section=9 Short list] of products.)&lt;br /&gt;
&lt;br /&gt;
==Camera==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* A camera that can take reasonable quality video and pictures is something many want. Applications vary from simple snapping, to gesture interfaces, video conferencing, barcode reading, buisness card reading, healthcare, servicing, and more.&lt;br /&gt;
&lt;br /&gt;
* Some people can't take cameras into work - a model without the camera, or some way of removing the camera would be useful.&lt;br /&gt;
&lt;br /&gt;
* See [[Wishlist:Camera]] for a more detailed wishlist.&lt;br /&gt;
&lt;br /&gt;
==Display==&lt;br /&gt;
===Multitouch screen===&lt;br /&gt;
&lt;br /&gt;
''Main article: [[Wishlist:Spell_weaving|Spell weaving]]''&lt;br /&gt;
&lt;br /&gt;
See also [http://pogue.blogs.nytimes.com/2007/03/27/the-multi-touch-screen/ this page] containing a link to a video demonstration.&lt;br /&gt;
&lt;br /&gt;
A history of multitouch implementations is [http://billbuxton.com/multitouchOverview.html here] ([http://google.com/search?q=cache:billbuxton.com/multitouchOverview.html google cache version])&lt;br /&gt;
&lt;br /&gt;
===Video acceleration===&lt;br /&gt;
Hardware acceleration for video playback.&lt;br /&gt;
===3D acceleration===&lt;br /&gt;
3D hardware acceleration for 3D games, GUIs, etc. (maybe a PowerVR MBX Lite ?).&lt;br /&gt;
&lt;br /&gt;
===EPD===&lt;br /&gt;
Or electronic paper display, EPD is used in many new devices such as the new Motorola motofone, sonys new e-reader and Irex's iliad. The technology provides thin, flexible, power saving screens using new eink technology. This technology could cut the weight of the phone and its power usage. For more info see: [http://www.eink.com eink's website].&lt;br /&gt;
&lt;br /&gt;
===Transreflective===&lt;br /&gt;
It would be nice to have (the option of) a transreflective display, which while being less bright, is readable without needing to power the backlight. Then again, it depends on how much power the backlight uses compared to everything else...&lt;br /&gt;
&lt;br /&gt;
===&amp;quot;Slightly&amp;quot; Larger Screen===&lt;br /&gt;
43mm x 57mm (2.8inch diagonal) is tiny.  A 53mm x 71mm (3.5 inch diagonal) like on the TD035STEE1 would be a nice improvement.  A widescreen format at about 53mm x 82.5mminstead of the 3:4 aspect ratio would be even cooler (if one could be found).&lt;br /&gt;
&lt;br /&gt;
==Input devices==&lt;br /&gt;
&lt;br /&gt;
===Just a few more Buttons===&lt;br /&gt;
&lt;br /&gt;
2 buttons more, 3 buttons total, mounted sideways would be enough. You could use them for play/pause and loudness controll while the phone remains in your pocket (display locked, ...), reading mails, rss, ebooks,... without wasting display space and so on.&lt;br /&gt;
&lt;br /&gt;
With 5 buttons in total you could possibly emulate a keyboard (2^5 = 32 combinations) for those who know how to play a flute. Useable onehanded, not wasting display space and faster than t9. (It's not faster than T9 - I've used this system with the microwriter agenda --[[User:Speedevil|Speedevil]] 00:00, 2 July 2007 (CEST)) Hopefully this is not patented already.&lt;br /&gt;
&lt;br /&gt;
===D-Pad and Buttons===&lt;br /&gt;
*Adding a D-pad (to the bottom of the phone) and 2 to 4 buttons (to the top) would provide some tactile input controls, in addition to the touchscreen. They could be used as shortcut keys in the menu, or playback control when playing media. When the phone is held sideways, they can be used as games controls. (With touchscreen alone, gameplay options are limited)&lt;br /&gt;
&lt;br /&gt;
Game buttons would be best on both sides of the screen. The larger the buttons, the better. 2x 4 buttons in up-down-left-right configuration + some extra buttons separately a bit lower on the device would be good for many for emulation games. &lt;br /&gt;
&lt;br /&gt;
Here is a concept drawing of a possible neo1973 gaming version: &lt;br /&gt;
(This has a 4-way direction pad, 8 way may be better for gaming)&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Image:Neogame90.jpg]]&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
Shoulder buttons would be a great addition, too. It would be interesting if there was a total 4 of them, one for every corner. It would make the phone very flexible for rotating and 2 to 6 players playing on one device.&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Thumb keyboard or keyboard attachment accessory===&lt;br /&gt;
*Could be slide out or clamshell (hinge on long side) design with an external OLED. The keyboard should be protected when not in use.&lt;br /&gt;
*Could be a clip on keyboard that attaches to the serial port or communicates by bluetooth (not preferred for permanent keyboard users).&lt;br /&gt;
*Cheap clippable miniusb keyboard&lt;br /&gt;
*One of the layouts proposed in [[Hardware:Keyboards]]&lt;br /&gt;
* What about virtual keyboard? [[http://www.extremetech.com/article2/0,3973,539778,00.asp Keyboard]]&lt;br /&gt;
&lt;br /&gt;
===Trackball===&lt;br /&gt;
A trackball would provide an efficient mouse-like interface in a very compact package.  As exemplified in the newer Blackberry&amp;amp;reg; models.&lt;br /&gt;
Maybe instead an optical sensor as are used in mice could be used so that the whole phone can be moved over a surface just like a mouse. The same sensor might be usable as a barcode reader&lt;br /&gt;
&lt;br /&gt;
===Analog Joystick===&lt;br /&gt;
A joystick, or [http://www.extremetech.com/article2/0,1697,1772689,00.asp Rollermouse]-like device would provide additional control, compared with touchscreen only.&lt;br /&gt;
&lt;br /&gt;
===TV/radio receiver===&lt;br /&gt;
[[Digital Television]], [[Digital Radio]] or even normal analogue TV/radio is available widely in the world. Though unfortunately in various different forms. In markets where one standard is widespread, and hardware is suitable, it would be a great extension of the phone to a general entertainment device for when you're away from home. Multi standard devices would be ideal, but may not be small, low-power, or cheap.&lt;br /&gt;
&lt;br /&gt;
===Accelerometer=== &lt;br /&gt;
This enables the phone to sense which direction 'down' is, and to sense any movements the phone makes.&lt;br /&gt;
&lt;br /&gt;
See [[Accelerometer Fundamentals]] for more information on accelerometers as they may be used in phones.&lt;br /&gt;
&lt;br /&gt;
In some cases integrated gyroscopes may also be needed.&lt;br /&gt;
&lt;br /&gt;
*[[Wishlist:3D Viewport|3D Viewport]]&lt;br /&gt;
*[[Wishlist:Computer Mouse|Computer Mouse]]&lt;br /&gt;
*[[Wishlist:Determine Position|Determine Position]]&lt;br /&gt;
*[[Wishlist:Dynamic Screen Orientation|Dynamic Screen Orientation]]&lt;br /&gt;
*Change media player playlist when jogging vs walking. &lt;br /&gt;
*Attempt to use to stabilise any future camera. &lt;br /&gt;
&lt;br /&gt;
===Side-Mounted Touch Strip===&lt;br /&gt;
Add a &amp;quot;touch strip&amp;quot; sensor onto the side of the phone which can be used to scroll. By having it on the side you can use your thumb to scroll comfortably while holding the phone one-handed. An 8-element capacitive sensor would work wonderfully and be easy to fab using either a Quantum QT411 (http://www.qprox.com/products/qslide_qt411.php) or Analog Devices AD7143 (http://www.analog.com/en/prod/0,2877,AD7143,00.html) controller. The Analog Devices chip seems better suited due to it's smaller allowable element size. With the AD7143 you can have an 8-element (128-position) 25mm long strip - Perfect!.&lt;br /&gt;
&lt;br /&gt;
===Heart Rate Compatibility=== &lt;br /&gt;
&lt;br /&gt;
An RF interface to receive data from popular heart rate straps (Polar, Garmin, Sigma, Suunto, etc.). This would go along well with the existing GPS functionality and possible future Accelerometer functionality to make for a full-blown workout tool.&lt;br /&gt;
&lt;br /&gt;
Software can be written to track heart rate along a running, cycling, skiing, swimming loop, to monitor max and min heart rate, to match heart rate data to GPS coordinates and print map data w/ relevant data.&lt;br /&gt;
&lt;br /&gt;
===Digital compass=== &lt;br /&gt;
A digital compass is useful for orienting maps to the terrain when the user is standing still (regardless of GPS reception) and for following a bearing when GPS reception is poor.&lt;br /&gt;
&lt;br /&gt;
===Thermometer===&lt;br /&gt;
An electronic thermometer might become handy for some users.&lt;br /&gt;
&lt;br /&gt;
There are very small [[I2C]] devices available, that could easily integrate to the existing bus. For example [http://focus.ti.com/docs/prod/folders/print/tmp100.html this one from ti].&lt;br /&gt;
&lt;br /&gt;
===Barometer and Variometer===&lt;br /&gt;
&lt;br /&gt;
A Barometer measures air pressure. This can be used to give weather information, and also as a variometer, to sense relative altitude. Variometers are commonly used in flying microlight and ultralight aircraft, to get accurate relative altitude.&lt;br /&gt;
&lt;br /&gt;
See [[Wish List - Hardware - Atmospheric]] for more information.&lt;br /&gt;
&lt;br /&gt;
===Finger print sensor===&lt;br /&gt;
A fingerprint sensor gives easy and fast access to the phone, could lock the touchscreen etc. An example of this device can be found at [http://www.sonystyle.com/is-bin/INTERSHOP.enfinity/eCS/Store/en/-/USD/SY_BrowseCatalog-Start?CategoryName=cpu_VAIONotebookComputers_UX_Series&amp;amp;Dept=computers Sony UX17].&lt;br /&gt;
&lt;br /&gt;
Most fingerprint sensors in the embedded market include a navigation mode, where they work similar to either a touch-stick or touch-pad of a laptop.&lt;br /&gt;
&lt;br /&gt;
===Barcode Scanner===&lt;br /&gt;
*less cpu intensive and more reliable than camera+ocr&lt;br /&gt;
*though, bluetooth-enabled readers are already available.&lt;br /&gt;
&lt;br /&gt;
===Light Sensor===&lt;br /&gt;
Ability to sense ambient light, and act accordingly. i.e if it's 3am and LightValue&amp;lt;.1 then Ring Quietly.&lt;br /&gt;
&lt;br /&gt;
==Expansion==&lt;br /&gt;
&lt;br /&gt;
===MMC/SD/SDIO slot (rather than?) miniSD or microSD===&lt;br /&gt;
*Cheaper, more durable cards in a widely accepted format.&lt;br /&gt;
*Cards are harder to lose&lt;br /&gt;
*Wider selection of accessories, including SDIO accessories.&lt;br /&gt;
*Make externally available so that larger length SDIO cards can be used (thinking about SDIO WLAN here)&lt;br /&gt;
&lt;br /&gt;
===Two SD slots===&lt;br /&gt;
*Micro SD for /home partition.&lt;br /&gt;
*Hot swappable mini or normal SD for movie, music etc.&lt;br /&gt;
&lt;br /&gt;
=== USB ===&lt;br /&gt;
* USB 2.0&lt;br /&gt;
* Powered, to avoid having to carry around a hub for when you want to occasionally plug in a memory stick. Many powered hubs will not recognize a totally unpowered host.&lt;br /&gt;
* OTG (is this maybe supported already ?)&lt;br /&gt;
* Bootable USB device emulation: the possibility to boot any computer on a bootable flagged partition of the transflash.&lt;br /&gt;
&lt;br /&gt;
===Wireless USB support===&lt;br /&gt;
[http://en.wikipedia.org/wiki/Wireless_USB Wireless USB] is the wireless version of USB offering data-rates up to 480 Mbit/s over short distances (&amp;lt;3 meter). Chipsets suitable for a phone are likely to take some time to be available.&lt;br /&gt;
&lt;br /&gt;
===SIR/FIR transceiver (Serial Infrared) / IR remote control ===&lt;br /&gt;
*An infrared transceiver is cheap, small, and useful for sync with many laptops and mobile phones. &lt;br /&gt;
**FIR would be a nice option, as it's some 40 times faster than SIR.&lt;br /&gt;
Other uses.&lt;br /&gt;
*Learning infra-red remote control with macros.&lt;br /&gt;
*Detecting reflections from inside of a caddy, and switching from active mode.&lt;br /&gt;
*FIR would be a nice option, as it's some 40 times faster than SIR.&lt;br /&gt;
&lt;br /&gt;
===I2C breakout===&lt;br /&gt;
[[I2C]] is an internal 2-3 wire bus in the phone. It is low powered, and can be daisy-chained. It would be  a great candidate to bring out into the [[Expansion Back]] with an additional connector.&lt;br /&gt;
&lt;br /&gt;
Readily available [[I2C]] chips range from temperature sensing, digital input/output chips to 1-wire bridge chips (which is designed for external switches, ID, sensing, ...)&lt;br /&gt;
&lt;br /&gt;
==Output devices==&lt;br /&gt;
&lt;br /&gt;
===LED===&lt;br /&gt;
*A blinking LED would be a cheap, low power way to inform the user of new SMS/Email....&lt;br /&gt;
**An alternative to this would be for one small part of the LCD to be separately backlit.&lt;br /&gt;
**This requires the CPU and LCD to be somewhat active, to keep the LCD refreshed, but gives much more information.&lt;br /&gt;
&lt;br /&gt;
*For example a multicolor LED which pulses yellow for GSM/GPRS transmit, blue for Bluetooth/Wifi, green to indicate non-urgent information - missed call etc, red to indicate battery low or other urgent notices.&lt;br /&gt;
&lt;br /&gt;
**The LED and button ideas could be combined: illuminated buttons.&lt;br /&gt;
**It must be possible to completely disable the LED to save power or other personal preferences.&lt;br /&gt;
&lt;br /&gt;
=== Flashlight ===&lt;br /&gt;
For finding keys, or any other application. May also optionally pulse in time with ring, to make phone more visible.&lt;br /&gt;
&lt;br /&gt;
=== FM transmitter ===&lt;br /&gt;
Small FM transmitter to output to car, and other nearby radios.&lt;br /&gt;
&lt;br /&gt;
==Mobile Communication options==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Faster/better mobile connectivity.===&lt;br /&gt;
[http://en.wikipedia.org/wiki/Gsm GSM]/[http://en.wikipedia.org/wiki/GPRS GPRS] is at best slow. Ideally supporting [http://en.wikipedia.org/wiki/EDGE EDGE ]- which is an evolved form of GPRS. [http://en.wikipedia.org/wiki/UMTS UMTS] - which is widespread in Europe, [http://en.wikipedia.org/wiki/HSDPA HSDPA] (asia) and any other mobile standards would be nice for faster data connectivity and coverage.&lt;br /&gt;
It is unlikely that all of these will be supported initially, but it is a goal.&lt;br /&gt;
Until that goal is reached, it is likely that some phones will be brought out for various specific markets - Europe, Asia, US.&lt;br /&gt;
&lt;br /&gt;
===Ability to use multiple SIMs/networks===&lt;br /&gt;
* External SIM sockets are widely available in China, a dual external socket would be a very good solution.&lt;br /&gt;
* [http://www.fonefunshop.co.uk/dualsim/digital.htm Dual SIM card kit] - two SIMs are trimmed and combined, software supportwould be needed, and both can't be used at once...&lt;br /&gt;
* Some networks support multiple numbers on one SIM. Unfortunately this won't allow split networks.&lt;br /&gt;
* A second/dual GSM module would allow full use of both sims at all times.&lt;br /&gt;
* As a hack, [http://wiki.openmoko.org/wiki/Wish_List#Bluetooth_powered_Multi-SIM_support use another mobile via BT].&lt;br /&gt;
&lt;br /&gt;
===PMR446/FRS Radio===&lt;br /&gt;
* Include a PMR/FRS Radio.&lt;br /&gt;
* A two-way walkie talkie lets you use the phone to communicate with friends without requiring a GSM connection (crowded networks at festivals, at locations with no GSM coverage).&lt;br /&gt;
&lt;br /&gt;
===DECT/GAP===&lt;br /&gt;
* Include a DECT/GAP transceiver so you can use your home and/or office PSTN line&lt;br /&gt;
&lt;br /&gt;
==Casing==&lt;br /&gt;
===[[Expansion Back]]===&lt;br /&gt;
* Replacement backs with additional features ranging from solar power, larger batteries, extra hardware, ...&lt;br /&gt;
&lt;br /&gt;
===Space efficient Lanyard===&lt;br /&gt;
The hole at the bottom of the phone takes a lot of space. A Kensington Security Slot could be used instead.&lt;br /&gt;
&lt;br /&gt;
=== Ruggedized version ===&lt;br /&gt;
We need something you can drop from 4 feet in to a puddle of dirty water on construction site. You know the big ugly pseudo military version.&lt;br /&gt;
&lt;br /&gt;
=== Transparent ===&lt;br /&gt;
Make a transparent, see-through casing. Why do we need a closed casing for open hardware and open software? Show the world it is a truly Free/Open source phone.&lt;br /&gt;
&lt;br /&gt;
==Accessories==&lt;br /&gt;
Some of the ideas mentioned below would make great accessories which could be sold separately.&lt;br /&gt;
&lt;br /&gt;
===Special covers===&lt;br /&gt;
Different special covers could be made available with features like:&lt;br /&gt;
* A standard slip-on or clip-on template (possibly with buttons) to make the touch-screen blind accessible&lt;br /&gt;
* Small metal frame for protection (like Siemens M65, only with more style)&lt;br /&gt;
* Case with mirror on the back, for putting on makeup/checking appearance or helping with self-portraits with an integrated camera.&lt;br /&gt;
* Option to completely design printable case styles, perhaps with engraving. Ability to share these on a 'community' site.&lt;br /&gt;
* Solar powered recharger (perhaps as extendable/unfoldable [[Expansion Back]]).&lt;br /&gt;
* Rubber protection like available for iPod, of course in different colors and transparency.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Car kit===&lt;br /&gt;
A car kit with a cradle which simultaneously recharges the device.&lt;br /&gt;
&lt;br /&gt;
===Charger conversion connector===&lt;br /&gt;
A flexible converter allowing you to recharge the Neo1973 with power from many DC sources such as other devices chargers.&lt;br /&gt;
Problems are that it may overload the DC source. It may require sensing of the input voltage, and reducing load if the voltage drops by a factor. Ideally the device should accept input voltage in the range of around 3.3v-28V in either polarity.&lt;br /&gt;
&lt;br /&gt;
==Misc==&lt;br /&gt;
===Galileo/GLONASS/GPS receiver===&lt;br /&gt;
*A multi-standard satellite positioning module would be nice eventually, it does not seem to be near-term due to chipset availability problems. Galileo is the to be launched (2011) European positioning system. GLONASS is the already existing Russian one.&lt;br /&gt;
&lt;br /&gt;
===X10 RF Remote===&lt;br /&gt;
Many PC-based media centers are being equipped with an RF (433 MHz) / X10-based remote control. The [http://en.wikipedia.org/wiki/X10_(industry_standard) X10] protocol also facilitates home automation to control lamps, switches, etc.&lt;br /&gt;
The advantages of using RF for control instead of Infra-red this that it also works when furniture, walls, or doors are blocking the path between RF remote and the equipment or device. [http://www.lirc.org/ Lirc] supports X10-based RF remotes (but expects having an USB RF receiver attached to the media center).&lt;br /&gt;
&lt;br /&gt;
===RFID tag/RFID Reader===&lt;br /&gt;
* Implementation/Cooperation with: [http://www.rfidguardian.org/ RFID-Guardian]&lt;br /&gt;
*An enable-able tag would be of use - for example being able to use the phone to open doors, or cars. Unfortunately, it's moderately hard to do secure programmable tags that are compatible with existing systems, for obvious reasons.&lt;br /&gt;
&lt;br /&gt;
===Standard 3.5mm headphone jack===&lt;br /&gt;
The Neo1973 uses a 4-conductor 2.5mm jack for stereo headphones and a microphone. 2.5mm jacks are the commonest headset format. &lt;br /&gt;
&lt;br /&gt;
Adapters to 2.5mm are of course available, but 3.5mm jacks are much more robust.&lt;br /&gt;
&lt;br /&gt;
There is an emerging convention used in the Nokia N800 and some other devices. A 4-conductor 3.5mm jack that can use a microphone with special headsets, but can also be used with off-the-shelf 3.5mm stereo headphones.&lt;br /&gt;
&lt;br /&gt;
Neglecting space limitations, multiple sockets - 2.5mm and 3.5mm would be nice. Probably not practical in a phone.&lt;br /&gt;
Other expanded plugs might allow remote controls.&lt;br /&gt;
&lt;br /&gt;
Other uses might be better met using bluetooth, or USB audio.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Laser Pointer===&lt;br /&gt;
Include a built in laser pointer.  Everything is better with lasers.&lt;br /&gt;
&lt;br /&gt;
===Completely free hardware===&lt;br /&gt;
Consider selling one device with absolutely no non-free components in it, even if that means dropping the GSM support.  I believe having one such device available would be good, because then it could be recommended by organizations like the FSF which typically never recommends anything if it has even a little non-free code in it.&lt;br /&gt;
&lt;br /&gt;
=== Consider economy / inexpensive / less featured edition ===&lt;br /&gt;
Some people want less features, because they do not need them. Leaving out some features either lets the phone get smaller or possibly enhances battery live.&lt;br /&gt;
&lt;br /&gt;
One big suggestion in this area is a b/w lower res display instead of the big colour display.&lt;/div&gt;</summary>
		<author><name>Eric</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:Eric</id>
		<title>User:Eric</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:Eric"/>
				<updated>2007-07-05T07:59:02Z</updated>
		
		<summary type="html">&lt;p&gt;Eric: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;That's right. It's me.&lt;/div&gt;</summary>
		<author><name>Eric</name></author>	</entry>

	</feed>