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

	<entry>
		<id>http://wiki.openmoko.org/wiki/GTA02_bass_fix</id>
		<title>GTA02 bass fix</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/GTA02_bass_fix"/>
				<updated>2009-03-08T22:05:59Z</updated>
		
		<summary type="html">&lt;p&gt;Warmcat: /* Rework performed by Andy Green */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GTA02 bass issues and possible ways to fix it.&lt;br /&gt;
&lt;br /&gt;
The lack of bass issue has been discussed several times on Community and Hardware lists, including by [[User:jOERG|Joerg Reisenweber]] (e.g. in this mailing list post: http://lists.openmoko.org/pipermail/hardware/2008-September/000552.html , and Andy Green).&lt;br /&gt;
&lt;br /&gt;
== The problem description ==&lt;br /&gt;
A known issue is that output decoupling capacitors are too small, only 1uF (4.7uF in v7). This results in a very high cut-off frequency practically eliminating a possibility to use freerunner as a portable musical player. The possible fix is to add some decent 100uF C in parallel. (The other discussed way to do it was to short the original caps and instead place the big ones near the headset receptable or inside the headphone jack; this has multiple drawbacks as jack insert detection might no longer work, possible damage to U4401 and the like; in this case you should also remove R4116, R4117 and place them after your caps).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Rework performed by [[User:PaulFertser|Paul Fertser]] ===&lt;br /&gt;
'''Resulting sound is good with 32Ohm headphones (AKG K-55). With proper shielding GSM interference is very low or non existent. Effect on Bluetooth range is not yet measured!'''  (Due to placement of the caps next to the Bluetooth antenna, it's possible this will reduce performance there).&lt;br /&gt;
&lt;br /&gt;
Here i'll try to describe my take on rework that should radically improve the ability to use FreeRunner as a portable music player.&lt;br /&gt;
&lt;br /&gt;
I used two 100uF 10V tantalum caps. They should be connected in parallel to C4110 and C4111. Make sure you connect the plus terminal (marked with a thick line) to the side that goes to U4101.&lt;br /&gt;
&lt;br /&gt;
The can should be lifted very carefully. Use a pin-pointed knife for that and try to lift a little in every point you can reach going in circle. After several rounds the can will be easily dismounted. It can take about 10 minutes, please be patient. You can use a plastic sim-holder for a lever, but be very careful.&lt;br /&gt;
&lt;br /&gt;
To avoid interference from GSM going into the can, use a piece of aluminium foil isolated from the caps with paper. I used a candypaper and it eliminated the audible GSM interference (i could listen to GSM call via headphones on loud volume without hearing any buzz). Be sure to provide electrical connection between the foil and the can (the more points you connect, the better shielding you get; don't be shy to experiment, EMI is a black magic sometimes). Placing small ferrite bead on every twisted pair just before it enters the can is recommended.&lt;br /&gt;
&lt;br /&gt;
After the rework Bass and Treble regulators in mixer should be placed at the middle as it corresponds to 0db attenuation (and the bass boost set to Linear Control).&lt;br /&gt;
&lt;br /&gt;
[[Image:Can_opened.jpg|800px]]&lt;br /&gt;
[[Image:bass_rework_can_closed.jpg|800px]]&lt;br /&gt;
[[Image:bass_rework_whole_picture.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Rework performed by [[User:warmcat|Andy Green]] ===&lt;br /&gt;
This document describes another type of rework where caps are placed inside the can: http://people.openmoko.org/andy/additional-headset-audio-caps.pdf . Among its strong points is that the signal doesn't go outside the can, therefore avoiding any possibility of interference with other hardware functions; unlike the modification described above the connections to the caps are very short and no modifications are needed to the can.&lt;br /&gt;
&lt;br /&gt;
[[Image:Rnsop-00002.jpg]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Rnsop-00003.jpg]]&lt;br /&gt;
&lt;br /&gt;
[[Image:Rnsop-00004.jpg]]&lt;br /&gt;
&lt;br /&gt;
The weak points are that the maximum capacity is limited to 47uF due to the size; again due to the size constraint of being in the can only ceramic caps can be used (which can distort sound because of piezoceramic properties, although for X7R dialectric the effect is minimal).&lt;br /&gt;
&lt;br /&gt;
=== Untested Notes and Suggestions ===&lt;br /&gt;
&lt;br /&gt;
One possible solution is to place the additional caps outside the can, near the Bluetooth antenna; the other possibility is to build a cap from 20 pieces 4.7uF along a wire grid 4x5 which makes a nice high quality very flat 100uF. This would easily fit anywhere &amp;quot;1.floor&amp;quot; of can interior, just isolate it with a scotch film patch and throw them inside the can.&lt;br /&gt;
&lt;br /&gt;
Also shorting R4407 and R4405 might worth trying (as well as throwing out the useless U4401).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another idea proposed by [[User:jOERG|Joerg]] is to perform a modification similar to the popular iPod mod:&lt;br /&gt;
&lt;br /&gt;
The purpose of the diyMod is to simplify the signal path from the DAC to the amp. To achieve this goal, the audio signal is taken directly after the DAC and sent to the amp. This path must include the DC blocking, also known as coupling, caps. By necessity, we place DC blocking caps behind the DAC to protect our listening apparatuses. Ensure that nothing lies between your DAC and amp but wires and traces.&lt;br /&gt;
&lt;br /&gt;
Nobody has tried to implement it on FreeRunner yet, but this description along with published schematics should be enough: http://www.head-fi.org/forums/f6/apple-diymod-my-take-famous-imod-56k-killer-featuring-3g-4g-5g-nano-1g-269604/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Neo_FreeRunner_Hardware]]&lt;/div&gt;</summary>
		<author><name>Warmcat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/File:Rnsop-00004.jpg</id>
		<title>File:Rnsop-00004.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/File:Rnsop-00004.jpg"/>
				<updated>2009-03-08T22:05:29Z</updated>
		
		<summary type="html">&lt;p&gt;Warmcat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Warmcat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/File:Rnsop-00003.jpg</id>
		<title>File:Rnsop-00003.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/File:Rnsop-00003.jpg"/>
				<updated>2009-03-08T22:04:42Z</updated>
		
		<summary type="html">&lt;p&gt;Warmcat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Warmcat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/File:Rnsop-00002.jpg</id>
		<title>File:Rnsop-00002.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/File:Rnsop-00002.jpg"/>
				<updated>2009-03-08T22:03:03Z</updated>
		
		<summary type="html">&lt;p&gt;Warmcat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Warmcat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/File:Rnsop00001.jpg</id>
		<title>File:Rnsop00001.jpg</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/File:Rnsop00001.jpg"/>
				<updated>2009-03-08T22:02:46Z</updated>
		
		<summary type="html">&lt;p&gt;Warmcat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Warmcat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/GTA02_bass_fix</id>
		<title>GTA02 bass fix</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/GTA02_bass_fix"/>
				<updated>2009-03-08T22:00:44Z</updated>
		
		<summary type="html">&lt;p&gt;Warmcat: Reordered tested mods first; corrections&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GTA02 bass issues and possible ways to fix it.&lt;br /&gt;
&lt;br /&gt;
The lack of bass issue has been discussed several times on Community and Hardware lists, including by [[User:jOERG|Joerg Reisenweber]] (e.g. in this mailing list post: http://lists.openmoko.org/pipermail/hardware/2008-September/000552.html , and Andy Green).&lt;br /&gt;
&lt;br /&gt;
== The problem description ==&lt;br /&gt;
A known issue is that output decoupling capacitors are too small, only 1uF (4.7uF in v7). This results in a very high cut-off frequency practically eliminating a possibility to use freerunner as a portable musical player. The possible fix is to add some decent 100uF C in parallel. (The other discussed way to do it was to short the original caps and instead place the big ones near the headset receptable or inside the headphone jack; this has multiple drawbacks as jack insert detection might no longer work, possible damage to U4401 and the like; in this case you should also remove R4116, R4117 and place them after your caps).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Rework performed by [[User:PaulFertser|Paul Fertser]] ===&lt;br /&gt;
'''Resulting sound is good with 32Ohm headphones (AKG K-55). With proper shielding GSM interference is very low or non existent. Effect on Bluetooth range is not yet measured!'''  (Due to placement of the caps next to the Bluetooth antenna, it's possible this will reduce performance there).&lt;br /&gt;
&lt;br /&gt;
Here i'll try to describe my take on rework that should radically improve the ability to use FreeRunner as a portable music player.&lt;br /&gt;
&lt;br /&gt;
I used two 100uF 10V tantalum caps. They should be connected in parallel to C4110 and C4111. Make sure you connect the plus terminal (marked with a thick line) to the side that goes to U4101.&lt;br /&gt;
&lt;br /&gt;
The can should be lifted very carefully. Use a pin-pointed knife for that and try to lift a little in every point you can reach going in circle. After several rounds the can will be easily dismounted. It can take about 10 minutes, please be patient. You can use a plastic sim-holder for a lever, but be very careful.&lt;br /&gt;
&lt;br /&gt;
To avoid interference from GSM going into the can, use a piece of aluminium foil isolated from the caps with paper. I used a candypaper and it eliminated the audible GSM interference (i could listen to GSM call via headphones on loud volume without hearing any buzz). Be sure to provide electrical connection between the foil and the can (the more points you connect, the better shielding you get; don't be shy to experiment, EMI is a black magic sometimes). Placing small ferrite bead on every twisted pair just before it enters the can is recommended.&lt;br /&gt;
&lt;br /&gt;
After the rework Bass and Treble regulators in mixer should be placed at the middle as it corresponds to 0db attenuation (and the bass boost set to Linear Control).&lt;br /&gt;
&lt;br /&gt;
[[Image:Can_opened.jpg|800px]]&lt;br /&gt;
[[Image:bass_rework_can_closed.jpg|800px]]&lt;br /&gt;
[[Image:bass_rework_whole_picture.jpg|800px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Rework performed by [[User:warmcat|Andy Green]] ===&lt;br /&gt;
This document describes another type of rework where caps are placed inside the can: http://people.openmoko.org/andy/additional-headset-audio-caps.pdf . Among its strong points is that the signal doesn't go outside the can, therefore avoiding any possibility of interference with other hardware functions; unlike the modification described above the connections to the caps are very short and no modifications are needed to the can.&lt;br /&gt;
&lt;br /&gt;
The weak points are that the maximum capacity is limited to 47uF due to the size; again due to the size constraint of being in the can only ceramic caps can be used (which can distort sound because of piezoceramic properties, although for X7R dialectric the effect is minimal).&lt;br /&gt;
&lt;br /&gt;
=== Untested Notes and Suggestions ===&lt;br /&gt;
&lt;br /&gt;
One possible solution is to place the additional caps outside the can, near the Bluetooth antenna; the other possibility is to build a cap from 20 pieces 4.7uF along a wire grid 4x5 which makes a nice high quality very flat 100uF. This would easily fit anywhere &amp;quot;1.floor&amp;quot; of can interior, just isolate it with a scotch film patch and throw them inside the can.&lt;br /&gt;
&lt;br /&gt;
Also shorting R4407 and R4405 might worth trying (as well as throwing out the useless U4401).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Another idea proposed by [[User:jOERG|Joerg]] is to perform a modification similar to the popular iPod mod:&lt;br /&gt;
&lt;br /&gt;
The purpose of the diyMod is to simplify the signal path from the DAC to the amp. To achieve this goal, the audio signal is taken directly after the DAC and sent to the amp. This path must include the DC blocking, also known as coupling, caps. By necessity, we place DC blocking caps behind the DAC to protect our listening apparatuses. Ensure that nothing lies between your DAC and amp but wires and traces.&lt;br /&gt;
&lt;br /&gt;
Nobody has tried to implement it on FreeRunner yet, but this description along with published schematics should be enough: http://www.head-fi.org/forums/f6/apple-diymod-my-take-famous-imod-56k-killer-featuring-3g-4g-5g-nano-1g-269604/&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Neo_FreeRunner_Hardware]]&lt;/div&gt;</summary>
		<author><name>Warmcat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Qi</id>
		<title>Qi</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Qi"/>
				<updated>2009-02-19T07:27:19Z</updated>
		
		<summary type="html">&lt;p&gt;Warmcat: /* Booting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:Screenshot-Qi.png|frame|Qi Boot messages]] Qi is a lightweight replacement for the [[Uboot|uBoot]] bootloader with everything that doesn't assist &amp;quot;loading&amp;quot; and &amp;quot;booting&amp;quot; Linux stripped out.&lt;br /&gt;
&lt;br /&gt;
Its advantages comparing to [[Uboot|u-boot]] are:&lt;br /&gt;
* actively developed (u-boot on GTA02 is deprecated)&lt;br /&gt;
* easier configuration, more robust and predictable&lt;br /&gt;
* SD and SDHC cards supported properly with partitions of any size&lt;br /&gt;
* kernel size is detected by checking the start of the kernel image, so large (&amp;gt;2M) kernels are supported without tweaking or loading more than needed&lt;br /&gt;
* Very fast, simple boot direct to Linux&lt;br /&gt;
&lt;br /&gt;
==About Qi==&lt;br /&gt;
===Requirements===&lt;br /&gt;
There is a [[Neo1973|GTA01]] build of Qi, but using it without a debug board is not recommended because Qi itself does not support DFU, so updating or going back to U-Boot is a difficult process.&lt;br /&gt;
&lt;br /&gt;
[[Freerunner|GTA02 Hardware]] has NOR U-Boot always available to update Qi so it's safe to try it out.&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
* booting from primary SD partitions (1st, 2nd or 3rd) in /boot directory&lt;br /&gt;
* booting from NAND (compatible with U-Boot's dynparts scheme)&lt;br /&gt;
* configuration per rootfs, by files in /boot in the rootfs&lt;br /&gt;
* automatically choose correct kernel for device hardware so rootfs can be used on multiple device types&lt;br /&gt;
* automatically tell kernel correct root= for rootfs kernel image came from, simplifying update&lt;br /&gt;
* ext2/3 are supported&lt;br /&gt;
* symlinks are supported&lt;br /&gt;
* parses identity partition and appends kernel commandline with device identity information&lt;br /&gt;
* zero &amp;quot;environment&amp;quot; or private persistent state - operation is completely deterministic&lt;br /&gt;
&lt;br /&gt;
===Limitations===&lt;br /&gt;
* no DFU-Mode - USB is not initialized at all&lt;br /&gt;
* no boot menu&lt;br /&gt;
* FAT partitions are ignored&lt;br /&gt;
&lt;br /&gt;
Both the lack of DFU and the boot menu are planned to be addressed by the backup / recovery rootfs.&lt;br /&gt;
&lt;br /&gt;
FAT is not supported because it can't provide a rootfs, and Qi wants the kernel to come from the rootfs.&lt;br /&gt;
&lt;br /&gt;
===Defaults===&lt;br /&gt;
If the kernel is found on uSD, Qi assumes the rootfs to be on the same partition as the kernel. In case of boot from NAND, it assumes that rootfs is also on NAND (just as u-boot does). See [[#/boot-Partition|below]] for help with an extra /boot-partition. The default rootdelay is 1 second.&lt;br /&gt;
&lt;br /&gt;
===Files===&lt;br /&gt;
; /boot/uImage-GTA0[123].bin&lt;br /&gt;
: Kernel images, Qi will look for (can be in either uImage (u-boot image) or zImage format, file name should still be uImage-GTA0[123].bin) &lt;br /&gt;
; /boot/append-GTA0[123]&lt;br /&gt;
: Additional kernel arguments. All arguments should be on the first and the only line separated by spaces, for example: &amp;quot;&amp;lt;tt&amp;gt;loglevel=8 rootdelay=5 &amp;lt;/tt&amp;gt;&amp;quot; . Make sure you have an extra space after the last argument (space is no longer needed if the version is from 31 Jan or older)!&lt;br /&gt;
; /boot/noboot-GTA0[123]&lt;br /&gt;
: make Qi skip this partition&lt;br /&gt;
&lt;br /&gt;
===Boot Order===&lt;br /&gt;
[[image:Qi-drawings-bootsequence.png|frame|Qi GTA02 Booting order]]&lt;br /&gt;
# SD Partition 1&lt;br /&gt;
# SD Partition 2&lt;br /&gt;
# SD Partition 3&lt;br /&gt;
# NAND&lt;br /&gt;
# Memory Test&lt;br /&gt;
&lt;br /&gt;
Qi will try to mount each SD partition as ext2 / 3, if that succeeds it will look for the kernel as /boot/uImage-GTA02.bin.  If that is found, it'll be fetched, its CRC is checked and then it's booted into with a generated kernel commandline.&lt;br /&gt;
&lt;br /&gt;
===Kernel Commandline Generation===&lt;br /&gt;
[[image:Qi-commandline-composition.png‎|frame|Qi commandline composition]]&lt;br /&gt;
Because Qi has no private stored state, it infers and composes a suitable kernel commandline on each boot.&lt;br /&gt;
&lt;br /&gt;
One of its tasks is to scan NAND memory using the U-Boot dynparts rules to determine the start offset&lt;br /&gt;
of the NAND partitions on this device, from that it forms the mtdparts kernel parameter that sets Linux's&lt;br /&gt;
view of NAND partitioning.&lt;br /&gt;
&lt;br /&gt;
The other thing it does is mount the &amp;quot;identity&amp;quot; partition and get from there the globally unique MAC&lt;br /&gt;
address for the USB over Ethernet function instead of the random one that is otherwise used.&lt;br /&gt;
&lt;br /&gt;
===LED and Vibrator Signals===&lt;br /&gt;
* AUX LED is turned on either on:&lt;br /&gt;
** Successful partition mount&lt;br /&gt;
** Successful kernel pull&lt;br /&gt;
** Successful initramfs pull&lt;br /&gt;
* AUX LED is turned off and vibrator runs briefly either on:&lt;br /&gt;
** Fail of kernel pull&lt;br /&gt;
** Fail of initramfs pull&lt;br /&gt;
** Fail of mount partition&lt;br /&gt;
** Skipping of current boot possibility&lt;br /&gt;
* AUX LED is turned off either on:&lt;br /&gt;
** Start of the kernel&lt;br /&gt;
** Start of the mem test&lt;br /&gt;
** Start of the kernel pull&lt;br /&gt;
** Start of the initramfs pull&lt;br /&gt;
* One Blue shine every ~10 second: did not find any valid kernel to boot&lt;br /&gt;
* About four RED shines per second: kernel panic.&lt;br /&gt;
&lt;br /&gt;
===Booting===&lt;br /&gt;
A short press on the power button is enough to make Qi start booting. In a few seconds the backlight will be lit, but the kernel will not spew any console messages unless something is wrong. It may take up to 2 minutes (depends on distribution) until X is started during which there will be no visual feedback. Please be patient.&lt;br /&gt;
&lt;br /&gt;
You can force debug messages on the LCM console by holding in the power button before Linux starts.&lt;br /&gt;
&lt;br /&gt;
===Choosing a Kernel===&lt;br /&gt;
If a user presses the AUX button after successful partition mount and&lt;br /&gt;
before start of the kernel pull (that is, while the red LED is on),&lt;br /&gt;
this boot possibility is skipped (and GTA02 owners can feel&lt;br /&gt;
vibration).&lt;br /&gt;
&lt;br /&gt;
On versions newer than Jan 18 if a user holds the POWER button just before start of the kernel,&lt;br /&gt;
debugging parameters are added to the kernel command line and a lot of information is output to the screen.&lt;br /&gt;
&lt;br /&gt;
===Boot Menu===&lt;br /&gt;
Qi's concept is to leave everything possible to Linux, that includes even the video init. Therefore Qi does NOT provide a boot menu. This should rather be implemented by a minimal Kernel, initramfs and menu system. It may be more comfortable for some users and may get them to switch from uboot to Qi. This does not exist yet (it's already implemented for some Angstrom-supported devices and for Zaurus, so porting should be relatively easy).&lt;br /&gt;
&lt;br /&gt;
===Download and installation===&lt;br /&gt;
The daily download is a ''qi-s3cXXXX-andy_somenumber.udfu'' file at http://people.openmoko.org/andy/ .&lt;br /&gt;
Use the file appropriate to your device:&lt;br /&gt;
*GTA01 -&amp;gt; qi-s3c2410&lt;br /&gt;
*GTA02 -&amp;gt; qi-s3c2442&lt;br /&gt;
*GTA03 -&amp;gt; qi-s3c6410&lt;br /&gt;
&lt;br /&gt;
The installation should be flashing like (do it in DFU mode of NOR u-boot):&lt;br /&gt;
 # dfu-util -a u-boot -R -D qi-s3c6410-andy_8589b40295653557.udfu&lt;br /&gt;
&lt;br /&gt;
===Source code===&lt;br /&gt;
git://git.openmoko.org/git/qi.git , http://git.openmoko.org/?p=qi.git;a=summary .&lt;br /&gt;
One can also just use strings(1) on the .udfu file to get an idea of where Qi currently looks for files.&lt;br /&gt;
&lt;br /&gt;
===README===&lt;br /&gt;
The latest README file can be found in the git as well:http://git.openmoko.org/?p=qi.git;a=blob;f=README;hb=HEAD&lt;br /&gt;
&lt;br /&gt;
==Tips, Tricks, Tweaks==&lt;br /&gt;
===General troubleshooting===&lt;br /&gt;
Qi does not bring up the LCD backlight.  If the backlight is lit, it means you have succeeded to boot into Linux.&lt;br /&gt;
&lt;br /&gt;
If nothing else is happening or there is a panic, enable debugging messages as described below.&lt;br /&gt;
&lt;br /&gt;
===Enabling console messages===&lt;br /&gt;
&lt;br /&gt;
You can just hold in the power button, this automatically appends verbose debugging to the kernel commandline (loglevel=8).&lt;br /&gt;
&lt;br /&gt;
If you always want verbose &amp;quot;dmesg&amp;quot; type debugging messages, you can do it like this:&lt;br /&gt;
&lt;br /&gt;
[http://lists.openmoko.org/pipermail/openmoko-kernel/2008-November/006812.html]&lt;br /&gt;
If it's SD Card boot, just create a text file, e.g., for a [[GTA02]] use&lt;br /&gt;
 /boot/append-GTA02&lt;br /&gt;
on the rootfs in question, put in there&lt;br /&gt;
 loglevel=8&lt;br /&gt;
and you'll see the messages on boot.  If it's NAND right now you need to edit the default commandline in Qi for gta02.&lt;br /&gt;
&lt;br /&gt;
===/boot-Partition===&lt;br /&gt;
If you have a separate partition for /boot, so that your kernel and rootfs are not in fact on the same partition, you will need to append a root= entry on the kernel commandline to override the default action of trying to use the partition where the kernel came from as the rootfs.&lt;br /&gt;
&lt;br /&gt;
Add this in /boot/append-GTA0[123]:&lt;br /&gt;
 root=/dev/mmcblk0p2&lt;br /&gt;
for a rootfs on the second partition.&lt;br /&gt;
&lt;br /&gt;
Note that a default Debian installation puts the kernel straight in the root of /dev/mmcblk0p1, not in a boot subdirectory, expecting u-boot to mount it as /boot. In order for Qi to recognise this, create a boot subdirectory with a symlink to the kernel.&lt;br /&gt;
&lt;br /&gt;
===SD Initialisation===&lt;br /&gt;
If you don't specify loglevel=8 in append-GTAXX, and booting fails with a &amp;quot;VFS: Cannot open root device &amp;quot;mmcblk0p1&amp;quot; or unknown-block(2,0)&amp;quot;, the SD card needs a little bit more time to initialise.&lt;br /&gt;
&lt;br /&gt;
Put a &amp;quot;rootdelay=5&amp;quot; in append-GTAXX like so:&lt;br /&gt;
 rootdelay=5&lt;br /&gt;
&lt;br /&gt;
== Testing speed improvements ==&lt;br /&gt;
&lt;br /&gt;
Stopwatch results on Qi (error is approx ±1/2 second):&lt;br /&gt;
&lt;br /&gt;
Booting SHR image with uBoot:&lt;br /&gt;
* 0:00 power button held down&lt;br /&gt;
* 0:07 splash screen appears&lt;br /&gt;
* 0:15 drops to console showing kernel messages scrolling by for ~1 minute&lt;br /&gt;
* 1:18 Openmoko 'please wait' splash&lt;br /&gt;
* 1:31 desktop animated splash&lt;br /&gt;
* 2:38 finished booting&lt;br /&gt;
&lt;br /&gt;
Booting identical setup with Qi flashed over uBoot:&lt;br /&gt;
* 0:00 power button held down&lt;br /&gt;
* 0:06 backlit black&lt;br /&gt;
* 0:13 please wait booting... (only this text on console for next 38 seconds)&lt;br /&gt;
* 0:51 Angstrom console message (at the end of kernel output with uBoot, but ONLY text display to appear throughout this stage with Qi)&lt;br /&gt;
* 0:54 Openmoko 'please wait' splash&lt;br /&gt;
* 1:05 desktop animated splash&lt;br /&gt;
* 1:54 finished booting&lt;br /&gt;
&lt;br /&gt;
So for this particular configuration, it reduced time-to-desktop by about 28%, about 44 seconds.  Surprisingly, the later segments of booting (desktop) were also noticeably faster than with uBoot - One would have expected just the fist stages up until init (kernel finished establishing itself) to be faster.&lt;br /&gt;
&lt;br /&gt;
[[Category:System Developers]]&lt;/div&gt;</summary>
		<author><name>Warmcat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Qi</id>
		<title>Qi</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Qi"/>
				<updated>2009-02-19T07:26:11Z</updated>
		
		<summary type="html">&lt;p&gt;Warmcat: /* Enabling console messages */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:Screenshot-Qi.png|frame|Qi Boot messages]] Qi is a lightweight replacement for the [[Uboot|uBoot]] bootloader with everything that doesn't assist &amp;quot;loading&amp;quot; and &amp;quot;booting&amp;quot; Linux stripped out.&lt;br /&gt;
&lt;br /&gt;
Its advantages comparing to [[Uboot|u-boot]] are:&lt;br /&gt;
* actively developed (u-boot on GTA02 is deprecated)&lt;br /&gt;
* easier configuration, more robust and predictable&lt;br /&gt;
* SD and SDHC cards supported properly with partitions of any size&lt;br /&gt;
* kernel size is detected by checking the start of the kernel image, so large (&amp;gt;2M) kernels are supported without tweaking or loading more than needed&lt;br /&gt;
* Very fast, simple boot direct to Linux&lt;br /&gt;
&lt;br /&gt;
==About Qi==&lt;br /&gt;
===Requirements===&lt;br /&gt;
There is a [[Neo1973|GTA01]] build of Qi, but using it without a debug board is not recommended because Qi itself does not support DFU, so updating or going back to U-Boot is a difficult process.&lt;br /&gt;
&lt;br /&gt;
[[Freerunner|GTA02 Hardware]] has NOR U-Boot always available to update Qi so it's safe to try it out.&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
* booting from primary SD partitions (1st, 2nd or 3rd) in /boot directory&lt;br /&gt;
* booting from NAND (compatible with U-Boot's dynparts scheme)&lt;br /&gt;
* configuration per rootfs, by files in /boot in the rootfs&lt;br /&gt;
* automatically choose correct kernel for device hardware so rootfs can be used on multiple device types&lt;br /&gt;
* automatically tell kernel correct root= for rootfs kernel image came from, simplifying update&lt;br /&gt;
* ext2/3 are supported&lt;br /&gt;
* symlinks are supported&lt;br /&gt;
* parses identity partition and appends kernel commandline with device identity information&lt;br /&gt;
* zero &amp;quot;environment&amp;quot; or private persistent state - operation is completely deterministic&lt;br /&gt;
&lt;br /&gt;
===Limitations===&lt;br /&gt;
* no DFU-Mode - USB is not initialized at all&lt;br /&gt;
* no boot menu&lt;br /&gt;
* FAT partitions are ignored&lt;br /&gt;
&lt;br /&gt;
Both the lack of DFU and the boot menu are planned to be addressed by the backup / recovery rootfs.&lt;br /&gt;
&lt;br /&gt;
FAT is not supported because it can't provide a rootfs, and Qi wants the kernel to come from the rootfs.&lt;br /&gt;
&lt;br /&gt;
===Defaults===&lt;br /&gt;
If the kernel is found on uSD, Qi assumes the rootfs to be on the same partition as the kernel. In case of boot from NAND, it assumes that rootfs is also on NAND (just as u-boot does). See [[#/boot-Partition|below]] for help with an extra /boot-partition. The default rootdelay is 1 second.&lt;br /&gt;
&lt;br /&gt;
===Files===&lt;br /&gt;
; /boot/uImage-GTA0[123].bin&lt;br /&gt;
: Kernel images, Qi will look for (can be in either uImage (u-boot image) or zImage format, file name should still be uImage-GTA0[123].bin) &lt;br /&gt;
; /boot/append-GTA0[123]&lt;br /&gt;
: Additional kernel arguments. All arguments should be on the first and the only line separated by spaces, for example: &amp;quot;&amp;lt;tt&amp;gt;loglevel=8 rootdelay=5 &amp;lt;/tt&amp;gt;&amp;quot; . Make sure you have an extra space after the last argument (space is no longer needed if the version is from 31 Jan or older)!&lt;br /&gt;
; /boot/noboot-GTA0[123]&lt;br /&gt;
: make Qi skip this partition&lt;br /&gt;
&lt;br /&gt;
===Boot Order===&lt;br /&gt;
[[image:Qi-drawings-bootsequence.png|frame|Qi GTA02 Booting order]]&lt;br /&gt;
# SD Partition 1&lt;br /&gt;
# SD Partition 2&lt;br /&gt;
# SD Partition 3&lt;br /&gt;
# NAND&lt;br /&gt;
# Memory Test&lt;br /&gt;
&lt;br /&gt;
Qi will try to mount each SD partition as ext2 / 3, if that succeeds it will look for the kernel as /boot/uImage-GTA02.bin.  If that is found, it'll be fetched, its CRC is checked and then it's booted into with a generated kernel commandline.&lt;br /&gt;
&lt;br /&gt;
===Kernel Commandline Generation===&lt;br /&gt;
[[image:Qi-commandline-composition.png‎|frame|Qi commandline composition]]&lt;br /&gt;
Because Qi has no private stored state, it infers and composes a suitable kernel commandline on each boot.&lt;br /&gt;
&lt;br /&gt;
One of its tasks is to scan NAND memory using the U-Boot dynparts rules to determine the start offset&lt;br /&gt;
of the NAND partitions on this device, from that it forms the mtdparts kernel parameter that sets Linux's&lt;br /&gt;
view of NAND partitioning.&lt;br /&gt;
&lt;br /&gt;
The other thing it does is mount the &amp;quot;identity&amp;quot; partition and get from there the globally unique MAC&lt;br /&gt;
address for the USB over Ethernet function instead of the random one that is otherwise used.&lt;br /&gt;
&lt;br /&gt;
===LED and Vibrator Signals===&lt;br /&gt;
* AUX LED is turned on either on:&lt;br /&gt;
** Successful partition mount&lt;br /&gt;
** Successful kernel pull&lt;br /&gt;
** Successful initramfs pull&lt;br /&gt;
* AUX LED is turned off and vibrator runs briefly either on:&lt;br /&gt;
** Fail of kernel pull&lt;br /&gt;
** Fail of initramfs pull&lt;br /&gt;
** Fail of mount partition&lt;br /&gt;
** Skipping of current boot possibility&lt;br /&gt;
* AUX LED is turned off either on:&lt;br /&gt;
** Start of the kernel&lt;br /&gt;
** Start of the mem test&lt;br /&gt;
** Start of the kernel pull&lt;br /&gt;
** Start of the initramfs pull&lt;br /&gt;
* One Blue shine every ~10 second: did not find any valid kernel to boot&lt;br /&gt;
* About four RED shines per second: kernel panic.&lt;br /&gt;
&lt;br /&gt;
===Booting===&lt;br /&gt;
A short press on the power button is enough to make Qi start booting. In a few seconds the backlight will be lit, but the kernel will not spew any console messages unless something is wrong. It may take up to 2 minutes (depends on distribution) until X is started during which there will be no visual feedback. Please be patient.&lt;br /&gt;
&lt;br /&gt;
===Choosing a Kernel===&lt;br /&gt;
If a user presses the AUX button after successful partition mount and&lt;br /&gt;
before start of the kernel pull (that is, while the red LED is on),&lt;br /&gt;
this boot possibility is skipped (and GTA02 owners can feel&lt;br /&gt;
vibration).&lt;br /&gt;
&lt;br /&gt;
On versions newer than Jan 18 if a user holds the POWER button just before start of the kernel,&lt;br /&gt;
debugging parameters are added to the kernel command line and a lot of information is output to the screen.&lt;br /&gt;
&lt;br /&gt;
===Boot Menu===&lt;br /&gt;
Qi's concept is to leave everything possible to Linux, that includes even the video init. Therefore Qi does NOT provide a boot menu. This should rather be implemented by a minimal Kernel, initramfs and menu system. It may be more comfortable for some users and may get them to switch from uboot to Qi. This does not exist yet (it's already implemented for some Angstrom-supported devices and for Zaurus, so porting should be relatively easy).&lt;br /&gt;
&lt;br /&gt;
===Download and installation===&lt;br /&gt;
The daily download is a ''qi-s3cXXXX-andy_somenumber.udfu'' file at http://people.openmoko.org/andy/ .&lt;br /&gt;
Use the file appropriate to your device:&lt;br /&gt;
*GTA01 -&amp;gt; qi-s3c2410&lt;br /&gt;
*GTA02 -&amp;gt; qi-s3c2442&lt;br /&gt;
*GTA03 -&amp;gt; qi-s3c6410&lt;br /&gt;
&lt;br /&gt;
The installation should be flashing like (do it in DFU mode of NOR u-boot):&lt;br /&gt;
 # dfu-util -a u-boot -R -D qi-s3c6410-andy_8589b40295653557.udfu&lt;br /&gt;
&lt;br /&gt;
===Source code===&lt;br /&gt;
git://git.openmoko.org/git/qi.git , http://git.openmoko.org/?p=qi.git;a=summary .&lt;br /&gt;
One can also just use strings(1) on the .udfu file to get an idea of where Qi currently looks for files.&lt;br /&gt;
&lt;br /&gt;
===README===&lt;br /&gt;
The latest README file can be found in the git as well:http://git.openmoko.org/?p=qi.git;a=blob;f=README;hb=HEAD&lt;br /&gt;
&lt;br /&gt;
==Tips, Tricks, Tweaks==&lt;br /&gt;
===General troubleshooting===&lt;br /&gt;
Qi does not bring up the LCD backlight.  If the backlight is lit, it means you have succeeded to boot into Linux.&lt;br /&gt;
&lt;br /&gt;
If nothing else is happening or there is a panic, enable debugging messages as described below.&lt;br /&gt;
&lt;br /&gt;
===Enabling console messages===&lt;br /&gt;
&lt;br /&gt;
You can just hold in the power button, this automatically appends verbose debugging to the kernel commandline (loglevel=8).&lt;br /&gt;
&lt;br /&gt;
If you always want verbose &amp;quot;dmesg&amp;quot; type debugging messages, you can do it like this:&lt;br /&gt;
&lt;br /&gt;
[http://lists.openmoko.org/pipermail/openmoko-kernel/2008-November/006812.html]&lt;br /&gt;
If it's SD Card boot, just create a text file, e.g., for a [[GTA02]] use&lt;br /&gt;
 /boot/append-GTA02&lt;br /&gt;
on the rootfs in question, put in there&lt;br /&gt;
 loglevel=8&lt;br /&gt;
and you'll see the messages on boot.  If it's NAND right now you need to edit the default commandline in Qi for gta02.&lt;br /&gt;
&lt;br /&gt;
===/boot-Partition===&lt;br /&gt;
If you have a separate partition for /boot, so that your kernel and rootfs are not in fact on the same partition, you will need to append a root= entry on the kernel commandline to override the default action of trying to use the partition where the kernel came from as the rootfs.&lt;br /&gt;
&lt;br /&gt;
Add this in /boot/append-GTA0[123]:&lt;br /&gt;
 root=/dev/mmcblk0p2&lt;br /&gt;
for a rootfs on the second partition.&lt;br /&gt;
&lt;br /&gt;
Note that a default Debian installation puts the kernel straight in the root of /dev/mmcblk0p1, not in a boot subdirectory, expecting u-boot to mount it as /boot. In order for Qi to recognise this, create a boot subdirectory with a symlink to the kernel.&lt;br /&gt;
&lt;br /&gt;
===SD Initialisation===&lt;br /&gt;
If you don't specify loglevel=8 in append-GTAXX, and booting fails with a &amp;quot;VFS: Cannot open root device &amp;quot;mmcblk0p1&amp;quot; or unknown-block(2,0)&amp;quot;, the SD card needs a little bit more time to initialise.&lt;br /&gt;
&lt;br /&gt;
Put a &amp;quot;rootdelay=5&amp;quot; in append-GTAXX like so:&lt;br /&gt;
 rootdelay=5&lt;br /&gt;
&lt;br /&gt;
== Testing speed improvements ==&lt;br /&gt;
&lt;br /&gt;
Stopwatch results on Qi (error is approx ±1/2 second):&lt;br /&gt;
&lt;br /&gt;
Booting SHR image with uBoot:&lt;br /&gt;
* 0:00 power button held down&lt;br /&gt;
* 0:07 splash screen appears&lt;br /&gt;
* 0:15 drops to console showing kernel messages scrolling by for ~1 minute&lt;br /&gt;
* 1:18 Openmoko 'please wait' splash&lt;br /&gt;
* 1:31 desktop animated splash&lt;br /&gt;
* 2:38 finished booting&lt;br /&gt;
&lt;br /&gt;
Booting identical setup with Qi flashed over uBoot:&lt;br /&gt;
* 0:00 power button held down&lt;br /&gt;
* 0:06 backlit black&lt;br /&gt;
* 0:13 please wait booting... (only this text on console for next 38 seconds)&lt;br /&gt;
* 0:51 Angstrom console message (at the end of kernel output with uBoot, but ONLY text display to appear throughout this stage with Qi)&lt;br /&gt;
* 0:54 Openmoko 'please wait' splash&lt;br /&gt;
* 1:05 desktop animated splash&lt;br /&gt;
* 1:54 finished booting&lt;br /&gt;
&lt;br /&gt;
So for this particular configuration, it reduced time-to-desktop by about 28%, about 44 seconds.  Surprisingly, the later segments of booting (desktop) were also noticeably faster than with uBoot - One would have expected just the fist stages up until init (kernel finished establishing itself) to be faster.&lt;br /&gt;
&lt;br /&gt;
[[Category:System Developers]]&lt;/div&gt;</summary>
		<author><name>Warmcat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Qi</id>
		<title>Qi</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Qi"/>
				<updated>2009-02-05T14:51:58Z</updated>
		
		<summary type="html">&lt;p&gt;Warmcat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:Screenshot-Qi.png|frame|Qi Boot messages]] Qi is a lightweight replacement for the [[Uboot|uBoot]] bootloader with everything that doesn't assist &amp;quot;loading&amp;quot; and &amp;quot;booting&amp;quot; Linux stripped out.&lt;br /&gt;
&lt;br /&gt;
Its advantages comparing to [[Uboot|u-boot]] are:&lt;br /&gt;
* actively developed (u-boot on GTA02 is deprecated)&lt;br /&gt;
* easier configuration, more robust and predictable&lt;br /&gt;
* SD and SDHC cards supported properly with partitions of any size&lt;br /&gt;
* kernel size is detected by checking the start of the kernel image, so large (&amp;gt;2M) kernels are supported without tweaking or loading more than needed&lt;br /&gt;
* Very fast, simple boot direct to Linux&lt;br /&gt;
&lt;br /&gt;
==About Qi==&lt;br /&gt;
===Requirements===&lt;br /&gt;
There is a [[Neo1973|GTA01]] build of Qi, but using it without a debug board is not recommended because Qi itself does not support DFU, so updating or going back to U-Boot is a difficult process.&lt;br /&gt;
&lt;br /&gt;
[[Freerunner|GTA02 Hardware]] has NOR U-Boot always available to update Qi so it's safe to try it out.&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
* booting from primary SD partitions (1st, 2nd or 3rd) in /boot directory&lt;br /&gt;
* booting from NAND (compatible with U-Boot's dynparts scheme)&lt;br /&gt;
* configuration per rootfs, by files in /boot in the rootfs&lt;br /&gt;
* automatically choose correct kernel for device hardware so rootfs can be used on multiple device types&lt;br /&gt;
* automatically tell kernel correct root= for rootfs kernel image came from, simplifying update&lt;br /&gt;
* ext2/3 are supported&lt;br /&gt;
* symlinks are supported&lt;br /&gt;
* parses identity partition and appends kernel commandline with device identity information&lt;br /&gt;
* zero &amp;quot;environment&amp;quot; or private persistent state - operation is completely deterministic&lt;br /&gt;
&lt;br /&gt;
===Limitations===&lt;br /&gt;
* no DFU-Mode - USB is not initialized at all&lt;br /&gt;
* no boot menu&lt;br /&gt;
* FAT partitions are ignored&lt;br /&gt;
&lt;br /&gt;
Both the lack of DFU and the boot menu are planned to be addressed by the backup / recovery rootfs.&lt;br /&gt;
&lt;br /&gt;
FAT is not supported because it can't provide a rootfs, and Qi wants the kernel to come from the rootfs.&lt;br /&gt;
&lt;br /&gt;
===Defaults===&lt;br /&gt;
If the kernel is found on uSD, Qi assumes the rootfs to be on the same partition as the kernel. In case of boot from NAND, it assumes that rootfs is also on NAND (just as u-boot does). See [[#/boot-Partition|below]] for help with an extra /boot-partition. The default rootdelay is 1 second.&lt;br /&gt;
&lt;br /&gt;
===Files===&lt;br /&gt;
; /boot/uImage-GTA0[123].bin&lt;br /&gt;
: Kernel images, Qi will look for (can be in either uImage (u-boot image) or zImage format, file name should still be uImage-GTA0[123].bin) &lt;br /&gt;
; /boot/append-GTA0[123]&lt;br /&gt;
: Additional kernel arguments. All arguments should be on the first and the only line separated by spaces, for example: &amp;quot;&amp;lt;tt&amp;gt;loglevel=8 rootdelay=5 &amp;lt;/tt&amp;gt;&amp;quot; . Make sure you have an extra space after the last argument (space is no longer needed if the version is from 31 Jan or older)!&lt;br /&gt;
; /boot/noboot-GTA0[123]&lt;br /&gt;
: make Qi skip this partition&lt;br /&gt;
&lt;br /&gt;
===Boot Order===&lt;br /&gt;
[[image:Qi-drawings-bootsequence.png|frame|Qi GTA02 Booting order]]&lt;br /&gt;
# SD Partition 1&lt;br /&gt;
# SD Partition 2&lt;br /&gt;
# SD Partition 3&lt;br /&gt;
# NAND&lt;br /&gt;
# Memory Test&lt;br /&gt;
&lt;br /&gt;
Qi will try to mount each SD partition as ext2 / 3, if that succeeds it will look for the kernel as /boot/uImage-GTA02.bin.  If that is found, it'll be fetched, its CRC is checked and then it's booted into with a generated kernel commandline.&lt;br /&gt;
&lt;br /&gt;
===Kernel Commandline Generation===&lt;br /&gt;
[[image:Qi-commandline-composition.png‎|frame|Qi commandline composition]]&lt;br /&gt;
Because Qi has no private stored state, it infers and composes a suitable kernel commandline on each boot.&lt;br /&gt;
&lt;br /&gt;
One of its tasks is to scan NAND memory using the U-Boot dynparts rules to determine the start offset&lt;br /&gt;
of the NAND partitions on this device, from that it forms the mtdparts kernel parameter that sets Linux's&lt;br /&gt;
view of NAND partitioning.&lt;br /&gt;
&lt;br /&gt;
The other thing it does is mount the &amp;quot;identity&amp;quot; partition and get from there the globally unique MAC&lt;br /&gt;
address for the USB over Ethernet function instead of the random one that is otherwise used.&lt;br /&gt;
&lt;br /&gt;
===LED and Vibrator Signals===&lt;br /&gt;
* AUX LED is turned on either on:&lt;br /&gt;
** Successful partition mount&lt;br /&gt;
** Successful kernel pull&lt;br /&gt;
** Successful initramfs pull&lt;br /&gt;
* AUX LED is turned off and vibrator runs briefly either on:&lt;br /&gt;
** Fail of kernel pull&lt;br /&gt;
** Fail of initramfs pull&lt;br /&gt;
** Fail of mount partition&lt;br /&gt;
** Skipping of current boot possibility&lt;br /&gt;
* AUX LED is turned off either on:&lt;br /&gt;
** Start of the kernel&lt;br /&gt;
** Start of the mem test&lt;br /&gt;
** Start of the kernel pull&lt;br /&gt;
** Start of the initramfs pull&lt;br /&gt;
* One Blue shine every ~10 second: did not find any valid kernel to boot&lt;br /&gt;
* About four RED shines per second: kernel panic.&lt;br /&gt;
&lt;br /&gt;
===Booting===&lt;br /&gt;
A short press on the power button is enough to make Qi start booting. In a few seconds the backlight will be lit, but the kernel will not spew any console messages unless something is wrong. It may take up to 2 minutes (depends on distribution) until X is started during which there will be no visual feedback. Please be patient.&lt;br /&gt;
&lt;br /&gt;
===Choosing a Kernel===&lt;br /&gt;
If a user presses the AUX button after successful partition mount and&lt;br /&gt;
before start of the kernel pull (that is, while the red LED is on),&lt;br /&gt;
this boot possibility is skipped (and GTA02 owners can feel&lt;br /&gt;
vibration).&lt;br /&gt;
&lt;br /&gt;
On versions newer than Jan 18 if a user holds the POWER button just before start of the kernel,&lt;br /&gt;
debugging parameters are added to the kernel command line and a lot of information is output to the screen.&lt;br /&gt;
&lt;br /&gt;
===Boot Menu===&lt;br /&gt;
Qi's concept is to leave everything possible to Linux, that includes even the video init. Therefore Qi does NOT provide a boot menu. This should rather be implemented by a minimal Kernel, initramfs and menu system. It may be more comfortable for some users and may get them to switch from uboot to Qi. This does not exist yet (it's already implemented for some Angstrom-supported devices and for Zaurus, so porting should be relatively easy).&lt;br /&gt;
&lt;br /&gt;
===Download and installation===&lt;br /&gt;
The daily download is a ''qi-s3cXXXX-andy_somenumber.udfu'' file at http://people.openmoko.org/andy/ .&lt;br /&gt;
Use the file appropriate to your device:&lt;br /&gt;
*GTA01 -&amp;gt; qi-s3c2410&lt;br /&gt;
*GTA02 -&amp;gt; qi-s3c2442&lt;br /&gt;
*GTA03 -&amp;gt; qi-s3c6410&lt;br /&gt;
&lt;br /&gt;
The installation should be flashing like (do it in DFU mode of NOR u-boot):&lt;br /&gt;
 # dfu-util -a u-boot -R -D qi-s3c6410-andy_8589b40295653557.udfu&lt;br /&gt;
&lt;br /&gt;
===Source code===&lt;br /&gt;
git://git.openmoko.org/git/qi.git , http://git.openmoko.org/?p=qi.git;a=summary .&lt;br /&gt;
One can also just use strings(1) on the .udfu file to get an idea of where Qi currently looks for files.&lt;br /&gt;
&lt;br /&gt;
===README===&lt;br /&gt;
The latest README file can be found in the git as well:http://git.openmoko.org/?p=qi.git;a=blob;f=README;hb=HEAD&lt;br /&gt;
&lt;br /&gt;
==Tips, Tricks, Tweaks==&lt;br /&gt;
===General troubleshooting===&lt;br /&gt;
Qi does not bring up the LCD backlight.  If the backlight is lit, it means you have succeeded to boot into Linux.&lt;br /&gt;
&lt;br /&gt;
If nothing else is happening or there is a panic, enable debugging messages as described below.&lt;br /&gt;
&lt;br /&gt;
===Enabling console messages===&lt;br /&gt;
[http://lists.openmoko.org/pipermail/openmoko-kernel/2008-November/006812.html]&lt;br /&gt;
If it's SD Card boot, just create a text file, e.g., for a [[GTA02]] use&lt;br /&gt;
 /boot/append-GTA02&lt;br /&gt;
on the rootfs in question, put in there&lt;br /&gt;
 loglevel=8&lt;br /&gt;
and you'll see the messages on boot.  If it's NAND right now you need to edit the default commandline in Qi for gta02.&lt;br /&gt;
&lt;br /&gt;
===/boot-Partition===&lt;br /&gt;
If you have a separate partition for /boot, so that your kernel and rootfs are not in fact on the same partition, you will need to append a root= entry on the kernel commandline to override the default action of trying to use the partition where the kernel came from as the rootfs.&lt;br /&gt;
&lt;br /&gt;
Add this in /boot/append-GTA0[123]:&lt;br /&gt;
 root=/dev/mmcblk0p2&lt;br /&gt;
for a rootfs on the second partition.&lt;br /&gt;
&lt;br /&gt;
Note that a default Debian installation puts the kernel straight in the root of /dev/mmcblk0p1, not in a boot subdirectory, expecting u-boot to mount it as /boot. In order for Qi to recognise this, create a boot subdirectory with a symlink to the kernel.&lt;br /&gt;
&lt;br /&gt;
===SD Initialisation===&lt;br /&gt;
If you don't specify loglevel=8 in append-GTAXX, and booting fails with a &amp;quot;VFS: Cannot open root device &amp;quot;mmcblk0p1&amp;quot; or unknown-block(2,0)&amp;quot;, the SD card needs a little bit more time to initialise.&lt;br /&gt;
&lt;br /&gt;
Put a &amp;quot;rootdelay=5&amp;quot; in append-GTAXX like so:&lt;br /&gt;
 rootdelay=5&lt;br /&gt;
&lt;br /&gt;
== Testing speed improvements ==&lt;br /&gt;
&lt;br /&gt;
Stopwatch results on Qi (error is approx ±1/2 second):&lt;br /&gt;
&lt;br /&gt;
Booting SHR image with uBoot:&lt;br /&gt;
* 0:00 power button held down&lt;br /&gt;
* 0:07 splash screen appears&lt;br /&gt;
* 0:15 drops to console showing kernel messages scrolling by for ~1 minute&lt;br /&gt;
* 1:18 Openmoko 'please wait' splash&lt;br /&gt;
* 1:31 desktop animated splash&lt;br /&gt;
* 2:38 finished booting&lt;br /&gt;
&lt;br /&gt;
Booting identical setup with Qi flashed over uBoot:&lt;br /&gt;
* 0:00 power button held down&lt;br /&gt;
* 0:06 backlit black&lt;br /&gt;
* 0:13 please wait booting... (only this text on console for next 38 seconds)&lt;br /&gt;
* 0:51 Angstrom console message (at the end of kernel output with uBoot, but ONLY text display to appear throughout this stage with Qi)&lt;br /&gt;
* 0:54 Openmoko 'please wait' splash&lt;br /&gt;
* 1:05 desktop animated splash&lt;br /&gt;
* 1:54 finished booting&lt;br /&gt;
&lt;br /&gt;
So for this particular configuration, it reduced time-to-desktop by about 28%, about 44 seconds.  Surprisingly, the later segments of booting (desktop) were also noticeably faster than with uBoot - One would have expected just the fist stages up until init (kernel finished establishing itself) to be faster.&lt;br /&gt;
&lt;br /&gt;
[[Category:System Developers]]&lt;/div&gt;</summary>
		<author><name>Warmcat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/File:Qi-drawings-bootsequence.png</id>
		<title>File:Qi-drawings-bootsequence.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/File:Qi-drawings-bootsequence.png"/>
				<updated>2009-02-05T12:21:26Z</updated>
		
		<summary type="html">&lt;p&gt;Warmcat: uploaded a new version of &amp;quot;Image:Qi-drawings-bootsequence.png&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Warmcat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/File:Qi-commandline-composition.png</id>
		<title>File:Qi-commandline-composition.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/File:Qi-commandline-composition.png"/>
				<updated>2009-02-05T12:14:54Z</updated>
		
		<summary type="html">&lt;p&gt;Warmcat: uploaded a new version of &amp;quot;Image:Qi-commandline-composition.png&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Warmcat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/File:Qi-commandline-composition.png</id>
		<title>File:Qi-commandline-composition.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/File:Qi-commandline-composition.png"/>
				<updated>2009-02-05T12:14:04Z</updated>
		
		<summary type="html">&lt;p&gt;Warmcat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Warmcat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/File:Screenshot-Qi.png</id>
		<title>File:Screenshot-Qi.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/File:Screenshot-Qi.png"/>
				<updated>2009-02-05T11:24:57Z</updated>
		
		<summary type="html">&lt;p&gt;Warmcat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Warmcat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/File:Qi-drawings-bootsequence.png</id>
		<title>File:Qi-drawings-bootsequence.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/File:Qi-drawings-bootsequence.png"/>
				<updated>2009-02-01T21:09:22Z</updated>
		
		<summary type="html">&lt;p&gt;Warmcat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Warmcat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Qi</id>
		<title>Qi</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Qi"/>
				<updated>2009-02-01T21:07:04Z</updated>
		
		<summary type="html">&lt;p&gt;Warmcat: /* Limitations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Qi is a replacement for the [[Uboot|uBoot]] bootloader reduced to the core bootloader functions.&lt;br /&gt;
&lt;br /&gt;
Its advantages comparing to [[Uboot|u-boot]] are:&lt;br /&gt;
* actively developed (u-boot on GTA02 is not maintained lately)&lt;br /&gt;
* easier configuration, more robust and predictable&lt;br /&gt;
* large uSD cards support&lt;br /&gt;
* large (&amp;gt;2M) kernels support without tweaking&lt;br /&gt;
&lt;br /&gt;
==About Qi==&lt;br /&gt;
===Requirements===&lt;br /&gt;
[[Freerunner|GTA02 Hardware]] is recommended over [[Neo1973|GTA01]], since GTA02 does have a fallback u-boot in nor that provides DFU-Mode. Qi does NOT provide DFU-Mode so GTA01-Users will have no (easy) way to flash their device!&lt;br /&gt;
&lt;br /&gt;
===Features===&lt;br /&gt;
* booting from primary SD partitions (1st, 2nd or 3rd)&lt;br /&gt;
* booting from NAND&lt;br /&gt;
* configuration by files in /boot&lt;br /&gt;
* automatically choose correct kernel for device hardware&lt;br /&gt;
* ext2/3 are supported&lt;br /&gt;
* symlinks are supported&lt;br /&gt;
&lt;br /&gt;
===Limitations===&lt;br /&gt;
* no DFU-Mode&lt;br /&gt;
* no boot menu&lt;br /&gt;
* FAT partitions are ignored&lt;br /&gt;
&lt;br /&gt;
Both the lack of DFU and the boot menu are planned to be addressed by the backup / recovery rootfs.  FAT is not supported because it can't provide a rootfs, and Qi wants the kernel to come from the rootfs.&lt;br /&gt;
&lt;br /&gt;
===Defaults===&lt;br /&gt;
If the kernel is found on uSD, Qi assumes the rootfs to be on the same partition as the kernel. In case of boot from NAND, it assumes that rootfs is also on NAND (just as u-boot does). See [[#/boot-Partition|below]] for help with an extra /boot-partition. The default rootdelay is 1 second.&lt;br /&gt;
&lt;br /&gt;
===Files===&lt;br /&gt;
; /boot/uImage-GTA0[123].bin&lt;br /&gt;
: Kernel images, Qi will look for (can be in either uImage (u-boot image) or zImage format, file name should still be uImage-GTA0[123].bin) &lt;br /&gt;
; /boot/append-GTA0[123]&lt;br /&gt;
: Additional kernel arguments. All arguments should be on the first and the only line separated by spaces, for example: &amp;quot;&amp;lt;tt&amp;gt;loglevel=8 rootdelay=5 &amp;lt;/tt&amp;gt;&amp;quot; . Make sure you have an extra space after the last argument (space is no longer needed if the version is from 31 Jan or older)!&lt;br /&gt;
; /boot/noboot-GTA0[123]&lt;br /&gt;
: make Qi skip this partition&lt;br /&gt;
&lt;br /&gt;
===Boot Order===&lt;br /&gt;
# SD Partition 1&lt;br /&gt;
# SD Partition 2&lt;br /&gt;
# SD Partition 3&lt;br /&gt;
# NAND&lt;br /&gt;
# Memory Test&lt;br /&gt;
&lt;br /&gt;
===LED and Vibrator Signals===&lt;br /&gt;
* AUX LED is turned on either on:&lt;br /&gt;
** Successful partition mount&lt;br /&gt;
** Successful kernel pull&lt;br /&gt;
** Successful initramfs pull&lt;br /&gt;
* AUX LED is turned off and vibrator runs briefly either on:&lt;br /&gt;
** Fail of kernel pull&lt;br /&gt;
** Fail of initramfs pull&lt;br /&gt;
** Fail of mount partition&lt;br /&gt;
** Skipping of current boot possibility&lt;br /&gt;
* AUX LED is turned off either on:&lt;br /&gt;
** Start of the kernel&lt;br /&gt;
** Start of the mem test&lt;br /&gt;
** Start of the kernel pull&lt;br /&gt;
** Start of the initramfs pull&lt;br /&gt;
* One Blue shine every ~10 second: did not find any valid kernel to boot&lt;br /&gt;
* About four RED shines per second: kernel panic.&lt;br /&gt;
&lt;br /&gt;
===Booting===&lt;br /&gt;
A short press on the power button is enough to make Qi start booting. In a few seconds the backlight will be lit, but the kernel will not spew any console messages unless something is wrong. It may take up to 2 minutes (depends on distribution) until X is started during which there will be no visual feedback. Please be patient.&lt;br /&gt;
&lt;br /&gt;
===Choosing a Kernel===&lt;br /&gt;
If a user presses the AUX button after successful partition mount and&lt;br /&gt;
before start of the kernel pull (that is, while the red LED is on),&lt;br /&gt;
this boot possibility is skipped (and GTA02 owners can feel&lt;br /&gt;
vibration).&lt;br /&gt;
&lt;br /&gt;
On versions newer than Jan 18 if a user holds the POWER button just before start of the kernel,&lt;br /&gt;
debugging parameters are added to the kernel command line and a lot of information is output to the screen.&lt;br /&gt;
&lt;br /&gt;
===Boot Menu===&lt;br /&gt;
Qi's concept is to leave everything possible to Linux, that includes even the video init. Therefore Qi does NOT provide a boot menu. This should rather be implemented by a minimal Kernel, initramfs and menu system. It may be more comfortable for some users and may get them to switch from uboot to Qi. This does not exist yet (it's already implemented for some Angstrom-supported devices and for Zaurus, so porting should be relatively easy).&lt;br /&gt;
&lt;br /&gt;
===Download and installation===&lt;br /&gt;
The daily download is a ''qi-s3cXXXX-andy_somenumber.udfu'' file at http://people.openmoko.org/andy/ .&lt;br /&gt;
Use the file appropriate to your device:&lt;br /&gt;
*GTA01 -&amp;gt; qi-s3c2410&lt;br /&gt;
*GTA02 -&amp;gt; qi-s3c2442&lt;br /&gt;
*GTA03 -&amp;gt; qi-s3c6410&lt;br /&gt;
&lt;br /&gt;
The installation should be flashing like (do it in DFU mode of NOR u-boot):&lt;br /&gt;
 # dfu-util -a u-boot -R -D qi-s3c6410-andy_8589b40295653557.udfu&lt;br /&gt;
&lt;br /&gt;
===Source code===&lt;br /&gt;
git://git.openmoko.org/git/qi.git , http://git.openmoko.org/?p=qi.git;a=summary .&lt;br /&gt;
One can also just use strings(1) on the .udfu file to get an idea of where Qi currently looks for files.&lt;br /&gt;
&lt;br /&gt;
===README===&lt;br /&gt;
The latest README file can be found in the git as well:http://git.openmoko.org/?p=qi.git;a=blob;f=README;hb=HEAD&lt;br /&gt;
&lt;br /&gt;
==Tips, Tricks, Tweaks==&lt;br /&gt;
===Enabling console messages===&lt;br /&gt;
[http://lists.openmoko.org/pipermail/openmoko-kernel/2008-November/006812.html]&lt;br /&gt;
If it's SD Card boot, just create a text file, e.g., for a [[GTA02]] use&lt;br /&gt;
 /boot/append-GTA02&lt;br /&gt;
on the rootfs in question, put in there&lt;br /&gt;
 loglevel=8&lt;br /&gt;
and you'll see the messages on boot.  If it's NAND right now you need to edit the default commandline in Qi for gta02.&lt;br /&gt;
&lt;br /&gt;
===/boot-Partition===&lt;br /&gt;
If you have a Partition for /boot, you will need to add a argument for the kernel to know which partition is the rootfs.&lt;br /&gt;
Add this in /boot/append-GTA0[123]:&lt;br /&gt;
 root=/dev/mmcblk0p2&lt;br /&gt;
for a rootfs on the second partition.&lt;br /&gt;
&lt;br /&gt;
Note that a default Debian installation puts the kernel straight in the root of /dev/mmcblk0p1, not in a boot subdirectory, expecting u-boot to mount it as /boot. In order for Qi to recognise this, create a boot subdirectory with a symlink to the kernel.&lt;br /&gt;
&lt;br /&gt;
===SD Initialisation===&lt;br /&gt;
If you don't specify loglevel=8 in append-GTAXX, and booting fails with a &amp;quot;VFS: Cannot open root device &amp;quot;mmcblk0p1&amp;quot; or unknown-block(2,0)&amp;quot;, the SD card needs a little bit more time to initialise.&lt;br /&gt;
&lt;br /&gt;
Put a &amp;quot;rootdelay=5&amp;quot; in append-GTAXX like so:&lt;br /&gt;
 rootdelay=5&lt;br /&gt;
&lt;br /&gt;
== Testing speed improvements ==&lt;br /&gt;
&lt;br /&gt;
Stopwatch results on Qi (error is approx ±1/2 second):&lt;br /&gt;
&lt;br /&gt;
Booting SHR image with uBoot:&lt;br /&gt;
* 0:00 power button held down&lt;br /&gt;
* 0:07 splash screen appears&lt;br /&gt;
* 0:15 drops to console showing kernel messages scrolling by for ~1 minute&lt;br /&gt;
* 1:18 Openmoko 'please wait' splash&lt;br /&gt;
* 1:31 desktop animated splash&lt;br /&gt;
* 2:38 finished booting&lt;br /&gt;
&lt;br /&gt;
Booting identical setup with Qi flashed over uBoot:&lt;br /&gt;
* 0:00 power button held down&lt;br /&gt;
* 0:06 backlit black&lt;br /&gt;
* 0:13 please wait booting... (only this text on console for next 38 seconds)&lt;br /&gt;
* 0:51 Angstrom console message (at the end of kernel output with uBoot, but ONLY text display to appear throughout this stage with Qi)&lt;br /&gt;
* 0:54 Openmoko 'please wait' splash&lt;br /&gt;
* 1:05 desktop animated splash&lt;br /&gt;
* 1:54 finished booting&lt;br /&gt;
&lt;br /&gt;
So for this particular configuration, it reduced time-to-desktop by about 28%, about 44 seconds.  Surprisingly, the later segments of booting (desktop) were also noticeably faster than with uBoot - One would have expected just the fist stages up until init (kernel finished establishing itself) to be faster.&lt;br /&gt;
&lt;br /&gt;
[[Category:System Developers]]&lt;/div&gt;</summary>
		<author><name>Warmcat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Hints_on_using_GIT_and_stgit</id>
		<title>Hints on using GIT and stgit</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Hints_on_using_GIT_and_stgit"/>
				<updated>2008-10-05T12:37:01Z</updated>
		
		<summary type="html">&lt;p&gt;Warmcat: /* Cloning a remote git repo and adding stgit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Overview: stgit and git=&lt;br /&gt;
Linus Torvalds invented git and uses it heavily in Linux development, most people would take that as an impressive suggestion it might be useful in kernel and similar development work.&lt;br /&gt;
&lt;br /&gt;
* '''git''' is a lightweight distributed revision control system.  In practical terms, it adds a ./.git directory in the top level of your project, git stores everything in there about your project including all the revisions.  The commands all start &amp;quot;git &amp;lt;something&amp;gt;&amp;quot;.  ''Nice feature: if you create tarball of your project directory, you will also capture all your project history as it will archive ./.git''&lt;br /&gt;
&lt;br /&gt;
* '''stgit''' does a similar job to quilt, using the same kind of verbs like top, push, pop, refresh and so on, but it is internally completely aware it is running on top of git, and it too stores all its files down ./.git so you backup stgit's state completely with tar too.  The commands all start &amp;quot;stg &amp;lt;something&amp;gt;&amp;quot;.  ''Nice feature: while quilt makes you do &amp;quot;quilt add&amp;quot; before you modify a file, stgit does not need it: it knows what you changed without being told by checking because of its integration with git.  (You still have to do &amp;quot;stg add&amp;quot; if you created a new file though; that also adds it to git.)''&lt;br /&gt;
&lt;br /&gt;
'''Your stgit patch stack appears in your local git repo in a synchronized way, without explicit commits''' -- as you add, edit and remove patches in stgit your git repo is making the same moves, without losing the patch stack.&lt;br /&gt;
&lt;br /&gt;
When you use the two together, you have a fast and flexible system for dealing with many branches of large source trees, rebasing them in a controlled way, and generating and managing patches to export elsewhere.&lt;br /&gt;
&lt;br /&gt;
=Setting up your development box=&lt;br /&gt;
You just need to install the '''git''' and '''stgit''' packages for your distribution.  There are GUI tools like '''qgit''' that can be helpful to navigate projects that you can install too.&lt;br /&gt;
&lt;br /&gt;
You can optionally edit your ~/.bashrc to define some environment variables to control your commit identity for git&lt;br /&gt;
&lt;br /&gt;
* export GIT_AUTHOR_NAME=yourhandle&lt;br /&gt;
* export GIT_COMMITTER_NAME=yourhandle&lt;br /&gt;
* export GIT_AUTHOR_EMAIL=&amp;quot;your@email&amp;quot;&lt;br /&gt;
* export GIT_COMMITTER_EMAIL=&amp;quot;your@email&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Beginning with git and stgit=&lt;br /&gt;
&lt;br /&gt;
==Adding git and stgit to an existing project of your own==&lt;br /&gt;
# cd to the top level of your project&lt;br /&gt;
# '''git init''' -- this creates an empty ./.git tree with a &amp;quot;master&amp;quot; branch only&lt;br /&gt;
# '''make distclean''' -- or equivalent - clean out all generated files&lt;br /&gt;
# '''git add *''' -- prepares to make an initial commit of all your stuff&lt;br /&gt;
# '''git commit''' -- takes a commit message (like, &amp;quot;initial commit&amp;quot;) in vi and stores all the added files into the repo&lt;br /&gt;
# '''stg init''' -- initializes the stgit state for the new branch&lt;br /&gt;
&lt;br /&gt;
The git init command should have created a default ''.gitignore'' file at the top level directory of your project -- you can edit this to ensure that any generated files other than the default *.o and so on are ignored by git if you need to, normally the default ones are enough.&lt;br /&gt;
&lt;br /&gt;
==Cloning a remote git repo and adding stgit==&lt;br /&gt;
If you want to work on a tree that already existed in a remote repo, the first move is to '''clone''' it.  This is different than &amp;quot;checking it out&amp;quot;, when you clone it you are not just getting HEAD but *all revisions* of the project.  (If the remote repo lost everything about that project tomorrow, what you cloned would be a full replacement for what it had.)&lt;br /&gt;
&lt;br /&gt;
# '''git clone git://git.openmoko.org/git/kernel.git linux-2.6''' -- this example shows how to pull the 2.6 tracking project into a new local directory called &amp;quot;linux-2.6&amp;quot;&lt;br /&gt;
# '''git branch -a''' -- list all the branches available in the repo we just pulled&lt;br /&gt;
# '''git checkout origin/andy''' -- configures the source files in the directory to reflect the state of the origin/andy branch instead of the default master branch.  The &amp;quot;origin/&amp;quot; part is added in your local copy of the repo only for branches coming from upstream.&lt;br /&gt;
# '''git checkout -b fix-andys-bugs''' -- create a local branch based on origin/andy so you can do work on top of it&lt;br /&gt;
# '''stg init''' -- prepare your fix-andys-bugs branch to be used with stgit&lt;br /&gt;
&lt;br /&gt;
What you end up there is a local branch fix-andys-bugs which has no patch stack, but is at exactly the state of origin/andy.  So when you add local patches, they are against current origin/andy.&lt;br /&gt;
&lt;br /&gt;
==Safe experimentation==&lt;br /&gt;
Don't forget to tarball up your project directory before doing an experiment with git and stgit, until you are used to it.  The tarball will fully capture and restore the project and git / stgit state, so you can try things without worrying about how to &amp;quot;hit undo&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=Workflow=&lt;br /&gt;
==Basic stgit Workflow==&lt;br /&gt;
Using stgit is a great deal like using quilt.&lt;br /&gt;
&lt;br /&gt;
* '''stg new my-patch-description.patch''' -- adds a new empty patch to the top of the stack and opens vi to add a description for the patch -- you need to ensure the first line of the description is &amp;quot;my-patch-description.patch&amp;quot;, to avoid the patch filename getting lost if the patch is later pulled from git directly&lt;br /&gt;
&lt;br /&gt;
* '''stg series''' lets you see the patch stack and where you are on it&lt;br /&gt;
&lt;br /&gt;
* '''stg top''' lets you see the current top patch you would be modifying&lt;br /&gt;
&lt;br /&gt;
* Then you just start editing files.  If you create any new files, you should do '''stg add &amp;lt;filepath&amp;gt;''' which adds the file to git and the current stgit patch.  If you deleted a file from the project as part of this patch, you can do '''stg rm &amp;lt;filepath&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* If you are worried about ensuring that you included any new files with stg add, you can do '''stg status''' at any time to see if there are files around that git does not know about&lt;br /&gt;
&lt;br /&gt;
* '''stg refresh''' -- regenerates the top patch by finding all the edits you made&lt;br /&gt;
&lt;br /&gt;
* '''stg show''' -- displays the top patch in vi&lt;br /&gt;
&lt;br /&gt;
* '''stg pop''' and '''stg push''' move up and down the patch stack&lt;br /&gt;
&lt;br /&gt;
* '''stg pop --all''' and '''stg push --all''' pop or push to the start or end of the series in one action&lt;br /&gt;
&lt;br /&gt;
* '''stg goto &amp;lt;patchname&amp;gt;''' is a nice feature that pushes or pops as needed to get the requested patch to be the current top one.  &amp;lt;patchname&amp;gt; is a name that appears in the series, eg, my-patch.patch&lt;br /&gt;
&lt;br /&gt;
* '''stg delete &amp;lt;patchname&amp;gt;''' or, eg '''stg delete `stg top`''' will pop and delete the given patch (or the current top patch in the second example).&lt;br /&gt;
&lt;br /&gt;
==Clearing merge problems==&lt;br /&gt;
If you experience a genuine merge problem during an stg push for example, stgit will tell you about which source file had the problem, and where it put a copy of the merge diff.  When you cleared the problem, you must run&lt;br /&gt;
&lt;br /&gt;
'''stg resolved &amp;lt;filepath&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
to tell stgit that you have resolved the merge problem in &amp;lt;filepath&amp;gt;.  Then you will be able to do&lt;br /&gt;
&lt;br /&gt;
'''stg refresh'''&lt;br /&gt;
&lt;br /&gt;
to capture the changes under that patch and go on about your business.&lt;br /&gt;
&lt;br /&gt;
==Exporting patches==&lt;br /&gt;
Exporting patches is super easy&lt;br /&gt;
&lt;br /&gt;
'''stg export'''&lt;br /&gt;
&lt;br /&gt;
will very rapidly export your whole patch stack in a directory ./patches-&amp;lt;branch&amp;gt; and create a series file in there as well.  If you append a patch name to stg export, it just exports that one to the same directory.&lt;br /&gt;
&lt;br /&gt;
==Importing patches==&lt;br /&gt;
You can import individual patches with&lt;br /&gt;
&lt;br /&gt;
'''stg import &amp;lt;path to patch&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
or a whole series at a time by pointing it to the series&lt;br /&gt;
&lt;br /&gt;
'''stg import -i -s &amp;lt;path to series file&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
The patches are imported to be above the current applied patch top, which doesn't have to be the top of your patch series.&lt;br /&gt;
&lt;br /&gt;
BUT stgit is picky about patch formatting on import.&lt;br /&gt;
&lt;br /&gt;
* The first line of the patch file should be the patch's own filename, eg, my-patch.patch should have a first line of my-patch.patch.  This is so that later recovery of the patch from git into stgit will result in the same filename used for the patch, and a consistent name is shown in gitweb (the web interface for git repos as used in git.openmoko.org)&lt;br /&gt;
&lt;br /&gt;
* It will spew warnings about whitespace problems in the patch according to kernel rules, then quench them and report the total (thousands in the case of the YAFFS patch...).  Kernel folks take the whitespace rules seriously, but the import will proceed okay.&lt;br /&gt;
&lt;br /&gt;
* A serious one -- stgit has a bug at the moment where it will fail to recognize some diff headers sometimes.  The workaround is to add a line&lt;br /&gt;
&lt;br /&gt;
:''Index: blah''&lt;br /&gt;
&lt;br /&gt;
:after the patch description and the first patch header, which allows it to match.  You have to watch closely for this one because you only get a warning &amp;quot;''Warning: No diff found, creating empty patch''&amp;quot;, and stgit has imported the whole patch silently as a long description with no diff!  The diff appears in the description though so if you didn't know about the problem, it looks like a diff is in there!  However, you can find these bad imports easily enough -- do an stg pop --all, then stg push one at a time.  If a patch had this problem on import, the stg push will give a result like this&lt;br /&gt;
&lt;br /&gt;
:''Pushing patch &amp;quot;gta01-no_nand_partitions.patch&amp;quot; ... done (empty patch)''&lt;br /&gt;
&lt;br /&gt;
:You should do an '''stg remove `stg top`''', edit the patch to add the &amp;quot;Index: blah&amp;quot; workaround, and then re-import with '''stg import &amp;lt;path to patch&amp;gt;'''.  You can then go on with pushing the other patches.&lt;br /&gt;
&lt;br /&gt;
:Patches that are produced by git should be fine -- they have the Index: line already attached.  I guess the stgit guys are only using patches from other git users and that is why this bug survives.&lt;br /&gt;
&lt;br /&gt;
* Another serious one -- no fuzz is allowed in the incoming patch matching by default.  It means that an incoming patch that will apply with the patch utility will claim to be a failure during '''stg import'''.  The procedure to cope with this is to iteratively '''stg import -i -s &amp;lt;path to series file&amp;gt;''', and when you have a failure due to fuzz&lt;br /&gt;
&lt;br /&gt;
::a=&amp;lt;path to patches dir&amp;gt;/`stg top`; patch -p1 &amp;lt;$a &amp;amp;&amp;amp; if [ ! -z &amp;quot;`grep -- \-\-\-\ \/dev\/null $a`&amp;quot; ] ; then stg add `cat $a | sed -n '/\-\-\-\ \/dev\/null/{n;p;}' | cut -d' ' -f2 | cut -f1 | cut -d'/' -f2-` ; fi &amp;amp;&amp;amp; stg refresh&lt;br /&gt;
&lt;br /&gt;
:then resume the series import by repeating that command.  If the patch itself really didn't apply fully, you can either merge it by hand if it is a genuine issue, or you can back out that import and fully recover by '''stg refresh''' then '''stg delete `stg top`''' and you can try to fix the patch and re-import it again.&lt;br /&gt;
&lt;br /&gt;
Typically you are importing external patches once, but if you need to accept patches on a continuing basis you should export any patches that caused trouble from stgit once they are imported, and provide these versions back to where your imported patches came from so that ongoing patch updates will go in without difficulty next time.  Most times you are in fact removing fuzz from the patches by doing this.&lt;br /&gt;
&lt;br /&gt;
==Identifying patches that changed a file==&lt;br /&gt;
Sometimes you see there is a problem in a source file you need to fix, but you want to make sure the fix goes in the right patch and you don't know which is the right one.&lt;br /&gt;
&lt;br /&gt;
'''stg patches &amp;lt;file&amp;gt;''' will list all the patches ''in the current branch patch stack'' that modfied &amp;lt;file&amp;gt;.  You can then use '''stg goto &amp;lt;patch name&amp;gt;''' to move to that patch in the patch stack and make the edit in that context.&lt;br /&gt;
&lt;br /&gt;
=Branches and rebasing=&lt;br /&gt;
==Introducing branches==&lt;br /&gt;
You can make hierarchies of branched versions in git/stgit really easily with minimal disturbance.  The main thing you have to watch is that your &amp;quot;current working directory&amp;quot; as it were, the current branch you are in, is the one you think it is.  You can check that with&lt;br /&gt;
&lt;br /&gt;
* '''git branch''' or '''stg branch''' if the branch is initialized with stgit&lt;br /&gt;
&lt;br /&gt;
You can move to an existing stgit-initialized branch with&lt;br /&gt;
&lt;br /&gt;
* '''stg branch mybranch'''&lt;br /&gt;
&lt;br /&gt;
:what this does is literally add, delete and modify the files in the project directory so they correspond to the state you left the &amp;quot;mybranch&amp;quot; branch at.  Because of that, stgit takes care to first check there are no un-refreshed changes in the current branch before allowing the move to the different branch.&lt;br /&gt;
&lt;br /&gt;
:It also configures stgit with ''that branch's'' patch stack, leaving the patch stack for whatever branch you were on safely with that branch.&lt;br /&gt;
&lt;br /&gt;
* '''git branch mynewbranch'''&lt;br /&gt;
* '''stg branch mynewbranch'''&lt;br /&gt;
* '''stg init'''&lt;br /&gt;
&lt;br /&gt;
:creates a new branch if the branch &amp;quot;mynewbranch&amp;quot; didn't already exist -- this new branch is &amp;quot;based on&amp;quot; the branch you were on when you created it.&lt;br /&gt;
&lt;br /&gt;
* '''git branch -d myoldbranch''' deletes myoldbranch when you're finished with it&lt;br /&gt;
&lt;br /&gt;
==Rebasing==&lt;br /&gt;
The branching stuff initially sounds like it can be a can of worms, because once you made these easy, cheap branches, what do you do when the thing you based it on gets new patches and commits?  Your stuff is still based on the parent's version at the time you branched it, right?  Isn't it just a big mess?&lt;br /&gt;
&lt;br /&gt;
It's true that your branch will stay at the parent's version at the time it was branched, even if new commits come into the parent branch -- until you '''rebase''' it.  Git and stgit together make rebasing almost as easy as spawning the new branch.  Let's say we had the default &amp;quot;master&amp;quot; branch and we made a new branch from it&lt;br /&gt;
&lt;br /&gt;
* '''stg branch master''' -- go to the master branch&lt;br /&gt;
* '''git branch newbranch''' -- create a branch off of master called newbranch&lt;br /&gt;
* '''stg branch newbranch''' -- move stgit to the new child branch&lt;br /&gt;
* '''stg init''' -- prepare newbranch to work with stgit&lt;br /&gt;
* '''stg series''' -- observe there are no patches yet in the new child branch&lt;br /&gt;
&lt;br /&gt;
Then we did lots of work on newbranch&lt;br /&gt;
&lt;br /&gt;
* '''stg new my-super-patch.patch'''&lt;br /&gt;
* &amp;lt;edits&amp;gt;&lt;br /&gt;
* '''stg refresh'''&lt;br /&gt;
* '''stg new another-awesome-patch.patch'''&lt;br /&gt;
* &amp;lt;edits&amp;gt;&lt;br /&gt;
* '''stg refresh'''&lt;br /&gt;
&lt;br /&gt;
But then we decided we needed to update master (in this example master pulls from a remote repo to get updates) perhaps to get a bugfix&lt;br /&gt;
&lt;br /&gt;
* '''stg branch master''' -- go to the master branch&lt;br /&gt;
* '''stg pull''' -- collect any new commits&lt;br /&gt;
* '''stg branch newbranch''' -- go back to newbranch (it's unchanged)&lt;br /&gt;
&lt;br /&gt;
and we wanted those updates on newbranch too.  Easy (we are in newbranch again remember)&lt;br /&gt;
&lt;br /&gt;
* '''stg pop --all''' -- pop all our newbranch patches&lt;br /&gt;
* '''git reset --hard master''' -- reset our branch to current master&lt;br /&gt;
* '''stg push --all''' -- push all our newbranch patches back on&lt;br /&gt;
&lt;br /&gt;
So we are able to update master and reset newbranch to start from the new master HEAD without disturbing the patch series associated with newbranch, except we have to push them back on and deal with any failures to merge due to conflicting edits in the new patches... but that's what we have to do anyway, and we can do it inside the patch stack system.&lt;br /&gt;
&lt;br /&gt;
==Practical use for branches==&lt;br /&gt;
The kernel trees in git currently use branches in a structured way to allow staged rebasing.  &lt;br /&gt;
&lt;br /&gt;
* The default '''master''' branch is just the vanilla kernel.org kernel, either tracking git or at a fixed stable version.&lt;br /&gt;
&lt;br /&gt;
* A '''mokopatches''' branch off master contains the current Openmoko kernel patchset for the kernel&lt;br /&gt;
&lt;br /&gt;
* A '''development''' (or some other names) branch(es) off '''mokopatches''' then contains just the patch stack that is being worked on in that branch for whatever reason&lt;br /&gt;
&lt;br /&gt;
This allows master to be pulled from kernel.org or otherwise updated when needed, separately the moko patchset can be updated when needed and lastly the working branches can be rebased as described above when needed&lt;br /&gt;
&lt;br /&gt;
=stgit and branch history=&lt;br /&gt;
==stgit uses git history to track applied patches==&lt;br /&gt;
stgit has a very tight coupling to git commits -- when you stg pop a patch the patch is undone on the files and the commit history for the patch is '''erased''', not reverted.  This works great for local use, since the patch stack retains the information needed to bring the patch back with stg push again and you didn't care about tracking your history of pushing and popping patches from the stack since you do it all the time randomly.  The git 'history' in the local case is just reflecting the currently applied patchset rather than any actual 'history'.&lt;br /&gt;
&lt;br /&gt;
==Public trees use git history as history to sync against==&lt;br /&gt;
The problems start when another repo, say a public repo you push to, or pull from, will have its own commit history for that project.  If you clone the remote repo locally and then use stgit directly on the branches, say to stg uncommit and then stg delete a patch, your git history for that branch is no longer an unbroken thread in agreement with the origin: the uncommit snipped a bit of the history off on your version.  You won't be able to push any more to the other repo: git will give you an error.&lt;br /&gt;
&lt;br /&gt;
==Either: 1: Only use stgit on local-only or temporary branches==&lt;br /&gt;
The only way to maintain a consistent public history for people to work with is to never erase history with stgit on those shared branches.  It means that you have to work on a temporary branch and export the patches, importing them into your stable branch in a single action without using stgit... but if you have to remove a patch that was committed to the stable branch, use '''git revert''' to issue an anti-patch.&lt;br /&gt;
&lt;br /&gt;
==Or: 2: Your public repo branch is a &amp;quot;mirror&amp;quot;==&lt;br /&gt;
The other way to deal with this is to accept that the public repo isn't there to maintain a project history but to make public your branch in a &amp;quot;snapshot&amp;quot; kind of mode.&lt;br /&gt;
&lt;br /&gt;
You do this by pushing your local branch using this syntax:&lt;br /&gt;
&lt;br /&gt;
'''git push ssh://git@git.openmoko.org/var/cache/git/&amp;lt;projectname&amp;gt;.git +&amp;lt;remote-branch-name&amp;gt;:&amp;lt;local-branch-name&amp;gt;;'''&lt;br /&gt;
&lt;br /&gt;
...this will overwrite &amp;lt;remote-branch-name&amp;gt; with the contents of &amp;lt;local-branch-name&amp;gt;.  So when you want to expose a snapshot of your branch state on the public repo, you run the line above to force the remote branch into sync with yours.&lt;br /&gt;
&lt;br /&gt;
=Making your tree public on git.openmoko.org=&lt;br /&gt;
# Send your ssh key to Gismo.  He will add it to the git user authorized_keys, so you can ssh in&lt;br /&gt;
# '''ssh git@git.openmoko.org'''&lt;br /&gt;
# '''cd /var/cache/git'''&lt;br /&gt;
# '''./ADD_NEW_REPO &amp;lt;your-project-name&amp;gt;''' -- without the .git on the end&lt;br /&gt;
# in your project directory, execute the suggested git push command shown by the ADD_NEW_REPO script&lt;br /&gt;
# '''vi &amp;lt;your-project-name&amp;gt;.git/description''' -- change to a few words describing your project&lt;br /&gt;
# You can immediately see your tree on http://git.openmoko.org/ and browse it&lt;br /&gt;
&lt;br /&gt;
Keep a copy of the git push command, you can use it without the --all to update the remote git repo with changes to your local git&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, you can fully delete your project on there with&lt;br /&gt;
&lt;br /&gt;
'''rm -rf /var/cache/git/&amp;lt;your-project-name&amp;gt;.git'''&lt;br /&gt;
&lt;br /&gt;
and start over from step 3.&lt;br /&gt;
&lt;br /&gt;
You can backup your remote repo either on the git.openmoko.org box by using:&lt;br /&gt;
&lt;br /&gt;
'''tar czf /home/git/&amp;lt;project&amp;gt;-backup.tar.gz /var/cache/git/&amp;lt;project&amp;gt;.git'''&lt;br /&gt;
&lt;br /&gt;
or remotely by something like:&lt;br /&gt;
&lt;br /&gt;
'''rsync -avz --delete git@git.openmoko.org:/var/cache/git/&amp;lt;project&amp;gt;.git &amp;lt;project&amp;gt;-backup'''&lt;br /&gt;
&lt;br /&gt;
[[Category:System Developers]]&lt;br /&gt;
[[Category:Application Developer]]&lt;/div&gt;</summary>
		<author><name>Warmcat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Hints_on_using_GIT_and_stgit</id>
		<title>Hints on using GIT and stgit</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Hints_on_using_GIT_and_stgit"/>
				<updated>2008-10-05T12:33:35Z</updated>
		
		<summary type="html">&lt;p&gt;Warmcat: /* Cloning a remote git repo and adding stgit */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=Overview: stgit and git=&lt;br /&gt;
Linus Torvalds invented git and uses it heavily in Linux development, most people would take that as an impressive suggestion it might be useful in kernel and similar development work.&lt;br /&gt;
&lt;br /&gt;
* '''git''' is a lightweight distributed revision control system.  In practical terms, it adds a ./.git directory in the top level of your project, git stores everything in there about your project including all the revisions.  The commands all start &amp;quot;git &amp;lt;something&amp;gt;&amp;quot;.  ''Nice feature: if you create tarball of your project directory, you will also capture all your project history as it will archive ./.git''&lt;br /&gt;
&lt;br /&gt;
* '''stgit''' does a similar job to quilt, using the same kind of verbs like top, push, pop, refresh and so on, but it is internally completely aware it is running on top of git, and it too stores all its files down ./.git so you backup stgit's state completely with tar too.  The commands all start &amp;quot;stg &amp;lt;something&amp;gt;&amp;quot;.  ''Nice feature: while quilt makes you do &amp;quot;quilt add&amp;quot; before you modify a file, stgit does not need it: it knows what you changed without being told by checking because of its integration with git.  (You still have to do &amp;quot;stg add&amp;quot; if you created a new file though; that also adds it to git.)''&lt;br /&gt;
&lt;br /&gt;
'''Your stgit patch stack appears in your local git repo in a synchronized way, without explicit commits''' -- as you add, edit and remove patches in stgit your git repo is making the same moves, without losing the patch stack.&lt;br /&gt;
&lt;br /&gt;
When you use the two together, you have a fast and flexible system for dealing with many branches of large source trees, rebasing them in a controlled way, and generating and managing patches to export elsewhere.&lt;br /&gt;
&lt;br /&gt;
=Setting up your development box=&lt;br /&gt;
You just need to install the '''git''' and '''stgit''' packages for your distribution.  There are GUI tools like '''qgit''' that can be helpful to navigate projects that you can install too.&lt;br /&gt;
&lt;br /&gt;
You can optionally edit your ~/.bashrc to define some environment variables to control your commit identity for git&lt;br /&gt;
&lt;br /&gt;
* export GIT_AUTHOR_NAME=yourhandle&lt;br /&gt;
* export GIT_COMMITTER_NAME=yourhandle&lt;br /&gt;
* export GIT_AUTHOR_EMAIL=&amp;quot;your@email&amp;quot;&lt;br /&gt;
* export GIT_COMMITTER_EMAIL=&amp;quot;your@email&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=Beginning with git and stgit=&lt;br /&gt;
&lt;br /&gt;
==Adding git and stgit to an existing project of your own==&lt;br /&gt;
# cd to the top level of your project&lt;br /&gt;
# '''git init''' -- this creates an empty ./.git tree with a &amp;quot;master&amp;quot; branch only&lt;br /&gt;
# '''make distclean''' -- or equivalent - clean out all generated files&lt;br /&gt;
# '''git add *''' -- prepares to make an initial commit of all your stuff&lt;br /&gt;
# '''git commit''' -- takes a commit message (like, &amp;quot;initial commit&amp;quot;) in vi and stores all the added files into the repo&lt;br /&gt;
# '''stg init''' -- initializes the stgit state for the new branch&lt;br /&gt;
&lt;br /&gt;
The git init command should have created a default ''.gitignore'' file at the top level directory of your project -- you can edit this to ensure that any generated files other than the default *.o and so on are ignored by git if you need to, normally the default ones are enough.&lt;br /&gt;
&lt;br /&gt;
==Cloning a remote git repo and adding stgit==&lt;br /&gt;
If you want to work on a tree that already existed in a remote repo, the first move is to '''clone''' it.  This is different than &amp;quot;checking it out&amp;quot;, when you clone it you are not just getting HEAD but *all revisions* of the project.  (If the remote repo lost everything about that project tomorrow, what you cloned would be a full replacement for what it had.)&lt;br /&gt;
&lt;br /&gt;
# '''git clone git://git.openmoko.org/git/kernel.git linux-2.6''' -- this example shows how to pull the 2.6 tracking project into a new local directory called &amp;quot;linux-2.6&amp;quot;&lt;br /&gt;
# '''git branch -a''' -- list all the branches available in the repo we just pulled&lt;br /&gt;
# '''git checkout origin/andy''' -- configures the source files in the directory to reflect the state of the origin/andy branch instead of the default master branch&lt;br /&gt;
# '''git checkout -b fix-andys-bugs''' -- create a local branch based on origin/andy so you can do work on top of it&lt;br /&gt;
# '''stg init''' -- prepare your fix-andys-bugs branch to be used with stgit&lt;br /&gt;
&lt;br /&gt;
What you end up there is a local branch fix-andys-bugs which has no patch stack, but is at exactly the state of origin/andy.  So when you add local patches, they are against current origin/andy.&lt;br /&gt;
&lt;br /&gt;
==Safe experimentation==&lt;br /&gt;
Don't forget to tarball up your project directory before doing an experiment with git and stgit, until you are used to it.  The tarball will fully capture and restore the project and git / stgit state, so you can try things without worrying about how to &amp;quot;hit undo&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=Workflow=&lt;br /&gt;
==Basic stgit Workflow==&lt;br /&gt;
Using stgit is a great deal like using quilt.&lt;br /&gt;
&lt;br /&gt;
* '''stg new my-patch-description.patch''' -- adds a new empty patch to the top of the stack and opens vi to add a description for the patch -- you need to ensure the first line of the description is &amp;quot;my-patch-description.patch&amp;quot;, to avoid the patch filename getting lost if the patch is later pulled from git directly&lt;br /&gt;
&lt;br /&gt;
* '''stg series''' lets you see the patch stack and where you are on it&lt;br /&gt;
&lt;br /&gt;
* '''stg top''' lets you see the current top patch you would be modifying&lt;br /&gt;
&lt;br /&gt;
* Then you just start editing files.  If you create any new files, you should do '''stg add &amp;lt;filepath&amp;gt;''' which adds the file to git and the current stgit patch.  If you deleted a file from the project as part of this patch, you can do '''stg rm &amp;lt;filepath&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
* If you are worried about ensuring that you included any new files with stg add, you can do '''stg status''' at any time to see if there are files around that git does not know about&lt;br /&gt;
&lt;br /&gt;
* '''stg refresh''' -- regenerates the top patch by finding all the edits you made&lt;br /&gt;
&lt;br /&gt;
* '''stg show''' -- displays the top patch in vi&lt;br /&gt;
&lt;br /&gt;
* '''stg pop''' and '''stg push''' move up and down the patch stack&lt;br /&gt;
&lt;br /&gt;
* '''stg pop --all''' and '''stg push --all''' pop or push to the start or end of the series in one action&lt;br /&gt;
&lt;br /&gt;
* '''stg goto &amp;lt;patchname&amp;gt;''' is a nice feature that pushes or pops as needed to get the requested patch to be the current top one.  &amp;lt;patchname&amp;gt; is a name that appears in the series, eg, my-patch.patch&lt;br /&gt;
&lt;br /&gt;
* '''stg delete &amp;lt;patchname&amp;gt;''' or, eg '''stg delete `stg top`''' will pop and delete the given patch (or the current top patch in the second example).&lt;br /&gt;
&lt;br /&gt;
==Clearing merge problems==&lt;br /&gt;
If you experience a genuine merge problem during an stg push for example, stgit will tell you about which source file had the problem, and where it put a copy of the merge diff.  When you cleared the problem, you must run&lt;br /&gt;
&lt;br /&gt;
'''stg resolved &amp;lt;filepath&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
to tell stgit that you have resolved the merge problem in &amp;lt;filepath&amp;gt;.  Then you will be able to do&lt;br /&gt;
&lt;br /&gt;
'''stg refresh'''&lt;br /&gt;
&lt;br /&gt;
to capture the changes under that patch and go on about your business.&lt;br /&gt;
&lt;br /&gt;
==Exporting patches==&lt;br /&gt;
Exporting patches is super easy&lt;br /&gt;
&lt;br /&gt;
'''stg export'''&lt;br /&gt;
&lt;br /&gt;
will very rapidly export your whole patch stack in a directory ./patches-&amp;lt;branch&amp;gt; and create a series file in there as well.  If you append a patch name to stg export, it just exports that one to the same directory.&lt;br /&gt;
&lt;br /&gt;
==Importing patches==&lt;br /&gt;
You can import individual patches with&lt;br /&gt;
&lt;br /&gt;
'''stg import &amp;lt;path to patch&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
or a whole series at a time by pointing it to the series&lt;br /&gt;
&lt;br /&gt;
'''stg import -i -s &amp;lt;path to series file&amp;gt;'''&lt;br /&gt;
&lt;br /&gt;
The patches are imported to be above the current applied patch top, which doesn't have to be the top of your patch series.&lt;br /&gt;
&lt;br /&gt;
BUT stgit is picky about patch formatting on import.&lt;br /&gt;
&lt;br /&gt;
* The first line of the patch file should be the patch's own filename, eg, my-patch.patch should have a first line of my-patch.patch.  This is so that later recovery of the patch from git into stgit will result in the same filename used for the patch, and a consistent name is shown in gitweb (the web interface for git repos as used in git.openmoko.org)&lt;br /&gt;
&lt;br /&gt;
* It will spew warnings about whitespace problems in the patch according to kernel rules, then quench them and report the total (thousands in the case of the YAFFS patch...).  Kernel folks take the whitespace rules seriously, but the import will proceed okay.&lt;br /&gt;
&lt;br /&gt;
* A serious one -- stgit has a bug at the moment where it will fail to recognize some diff headers sometimes.  The workaround is to add a line&lt;br /&gt;
&lt;br /&gt;
:''Index: blah''&lt;br /&gt;
&lt;br /&gt;
:after the patch description and the first patch header, which allows it to match.  You have to watch closely for this one because you only get a warning &amp;quot;''Warning: No diff found, creating empty patch''&amp;quot;, and stgit has imported the whole patch silently as a long description with no diff!  The diff appears in the description though so if you didn't know about the problem, it looks like a diff is in there!  However, you can find these bad imports easily enough -- do an stg pop --all, then stg push one at a time.  If a patch had this problem on import, the stg push will give a result like this&lt;br /&gt;
&lt;br /&gt;
:''Pushing patch &amp;quot;gta01-no_nand_partitions.patch&amp;quot; ... done (empty patch)''&lt;br /&gt;
&lt;br /&gt;
:You should do an '''stg remove `stg top`''', edit the patch to add the &amp;quot;Index: blah&amp;quot; workaround, and then re-import with '''stg import &amp;lt;path to patch&amp;gt;'''.  You can then go on with pushing the other patches.&lt;br /&gt;
&lt;br /&gt;
:Patches that are produced by git should be fine -- they have the Index: line already attached.  I guess the stgit guys are only using patches from other git users and that is why this bug survives.&lt;br /&gt;
&lt;br /&gt;
* Another serious one -- no fuzz is allowed in the incoming patch matching by default.  It means that an incoming patch that will apply with the patch utility will claim to be a failure during '''stg import'''.  The procedure to cope with this is to iteratively '''stg import -i -s &amp;lt;path to series file&amp;gt;''', and when you have a failure due to fuzz&lt;br /&gt;
&lt;br /&gt;
::a=&amp;lt;path to patches dir&amp;gt;/`stg top`; patch -p1 &amp;lt;$a &amp;amp;&amp;amp; if [ ! -z &amp;quot;`grep -- \-\-\-\ \/dev\/null $a`&amp;quot; ] ; then stg add `cat $a | sed -n '/\-\-\-\ \/dev\/null/{n;p;}' | cut -d' ' -f2 | cut -f1 | cut -d'/' -f2-` ; fi &amp;amp;&amp;amp; stg refresh&lt;br /&gt;
&lt;br /&gt;
:then resume the series import by repeating that command.  If the patch itself really didn't apply fully, you can either merge it by hand if it is a genuine issue, or you can back out that import and fully recover by '''stg refresh''' then '''stg delete `stg top`''' and you can try to fix the patch and re-import it again.&lt;br /&gt;
&lt;br /&gt;
Typically you are importing external patches once, but if you need to accept patches on a continuing basis you should export any patches that caused trouble from stgit once they are imported, and provide these versions back to where your imported patches came from so that ongoing patch updates will go in without difficulty next time.  Most times you are in fact removing fuzz from the patches by doing this.&lt;br /&gt;
&lt;br /&gt;
==Identifying patches that changed a file==&lt;br /&gt;
Sometimes you see there is a problem in a source file you need to fix, but you want to make sure the fix goes in the right patch and you don't know which is the right one.&lt;br /&gt;
&lt;br /&gt;
'''stg patches &amp;lt;file&amp;gt;''' will list all the patches ''in the current branch patch stack'' that modfied &amp;lt;file&amp;gt;.  You can then use '''stg goto &amp;lt;patch name&amp;gt;''' to move to that patch in the patch stack and make the edit in that context.&lt;br /&gt;
&lt;br /&gt;
=Branches and rebasing=&lt;br /&gt;
==Introducing branches==&lt;br /&gt;
You can make hierarchies of branched versions in git/stgit really easily with minimal disturbance.  The main thing you have to watch is that your &amp;quot;current working directory&amp;quot; as it were, the current branch you are in, is the one you think it is.  You can check that with&lt;br /&gt;
&lt;br /&gt;
* '''git branch''' or '''stg branch''' if the branch is initialized with stgit&lt;br /&gt;
&lt;br /&gt;
You can move to an existing stgit-initialized branch with&lt;br /&gt;
&lt;br /&gt;
* '''stg branch mybranch'''&lt;br /&gt;
&lt;br /&gt;
:what this does is literally add, delete and modify the files in the project directory so they correspond to the state you left the &amp;quot;mybranch&amp;quot; branch at.  Because of that, stgit takes care to first check there are no un-refreshed changes in the current branch before allowing the move to the different branch.&lt;br /&gt;
&lt;br /&gt;
:It also configures stgit with ''that branch's'' patch stack, leaving the patch stack for whatever branch you were on safely with that branch.&lt;br /&gt;
&lt;br /&gt;
* '''git branch mynewbranch'''&lt;br /&gt;
* '''stg branch mynewbranch'''&lt;br /&gt;
* '''stg init'''&lt;br /&gt;
&lt;br /&gt;
:creates a new branch if the branch &amp;quot;mynewbranch&amp;quot; didn't already exist -- this new branch is &amp;quot;based on&amp;quot; the branch you were on when you created it.&lt;br /&gt;
&lt;br /&gt;
* '''git branch -d myoldbranch''' deletes myoldbranch when you're finished with it&lt;br /&gt;
&lt;br /&gt;
==Rebasing==&lt;br /&gt;
The branching stuff initially sounds like it can be a can of worms, because once you made these easy, cheap branches, what do you do when the thing you based it on gets new patches and commits?  Your stuff is still based on the parent's version at the time you branched it, right?  Isn't it just a big mess?&lt;br /&gt;
&lt;br /&gt;
It's true that your branch will stay at the parent's version at the time it was branched, even if new commits come into the parent branch -- until you '''rebase''' it.  Git and stgit together make rebasing almost as easy as spawning the new branch.  Let's say we had the default &amp;quot;master&amp;quot; branch and we made a new branch from it&lt;br /&gt;
&lt;br /&gt;
* '''stg branch master''' -- go to the master branch&lt;br /&gt;
* '''git branch newbranch''' -- create a branch off of master called newbranch&lt;br /&gt;
* '''stg branch newbranch''' -- move stgit to the new child branch&lt;br /&gt;
* '''stg init''' -- prepare newbranch to work with stgit&lt;br /&gt;
* '''stg series''' -- observe there are no patches yet in the new child branch&lt;br /&gt;
&lt;br /&gt;
Then we did lots of work on newbranch&lt;br /&gt;
&lt;br /&gt;
* '''stg new my-super-patch.patch'''&lt;br /&gt;
* &amp;lt;edits&amp;gt;&lt;br /&gt;
* '''stg refresh'''&lt;br /&gt;
* '''stg new another-awesome-patch.patch'''&lt;br /&gt;
* &amp;lt;edits&amp;gt;&lt;br /&gt;
* '''stg refresh'''&lt;br /&gt;
&lt;br /&gt;
But then we decided we needed to update master (in this example master pulls from a remote repo to get updates) perhaps to get a bugfix&lt;br /&gt;
&lt;br /&gt;
* '''stg branch master''' -- go to the master branch&lt;br /&gt;
* '''stg pull''' -- collect any new commits&lt;br /&gt;
* '''stg branch newbranch''' -- go back to newbranch (it's unchanged)&lt;br /&gt;
&lt;br /&gt;
and we wanted those updates on newbranch too.  Easy (we are in newbranch again remember)&lt;br /&gt;
&lt;br /&gt;
* '''stg pop --all''' -- pop all our newbranch patches&lt;br /&gt;
* '''git reset --hard master''' -- reset our branch to current master&lt;br /&gt;
* '''stg push --all''' -- push all our newbranch patches back on&lt;br /&gt;
&lt;br /&gt;
So we are able to update master and reset newbranch to start from the new master HEAD without disturbing the patch series associated with newbranch, except we have to push them back on and deal with any failures to merge due to conflicting edits in the new patches... but that's what we have to do anyway, and we can do it inside the patch stack system.&lt;br /&gt;
&lt;br /&gt;
==Practical use for branches==&lt;br /&gt;
The kernel trees in git currently use branches in a structured way to allow staged rebasing.  &lt;br /&gt;
&lt;br /&gt;
* The default '''master''' branch is just the vanilla kernel.org kernel, either tracking git or at a fixed stable version.&lt;br /&gt;
&lt;br /&gt;
* A '''mokopatches''' branch off master contains the current Openmoko kernel patchset for the kernel&lt;br /&gt;
&lt;br /&gt;
* A '''development''' (or some other names) branch(es) off '''mokopatches''' then contains just the patch stack that is being worked on in that branch for whatever reason&lt;br /&gt;
&lt;br /&gt;
This allows master to be pulled from kernel.org or otherwise updated when needed, separately the moko patchset can be updated when needed and lastly the working branches can be rebased as described above when needed&lt;br /&gt;
&lt;br /&gt;
=stgit and branch history=&lt;br /&gt;
==stgit uses git history to track applied patches==&lt;br /&gt;
stgit has a very tight coupling to git commits -- when you stg pop a patch the patch is undone on the files and the commit history for the patch is '''erased''', not reverted.  This works great for local use, since the patch stack retains the information needed to bring the patch back with stg push again and you didn't care about tracking your history of pushing and popping patches from the stack since you do it all the time randomly.  The git 'history' in the local case is just reflecting the currently applied patchset rather than any actual 'history'.&lt;br /&gt;
&lt;br /&gt;
==Public trees use git history as history to sync against==&lt;br /&gt;
The problems start when another repo, say a public repo you push to, or pull from, will have its own commit history for that project.  If you clone the remote repo locally and then use stgit directly on the branches, say to stg uncommit and then stg delete a patch, your git history for that branch is no longer an unbroken thread in agreement with the origin: the uncommit snipped a bit of the history off on your version.  You won't be able to push any more to the other repo: git will give you an error.&lt;br /&gt;
&lt;br /&gt;
==Either: 1: Only use stgit on local-only or temporary branches==&lt;br /&gt;
The only way to maintain a consistent public history for people to work with is to never erase history with stgit on those shared branches.  It means that you have to work on a temporary branch and export the patches, importing them into your stable branch in a single action without using stgit... but if you have to remove a patch that was committed to the stable branch, use '''git revert''' to issue an anti-patch.&lt;br /&gt;
&lt;br /&gt;
==Or: 2: Your public repo branch is a &amp;quot;mirror&amp;quot;==&lt;br /&gt;
The other way to deal with this is to accept that the public repo isn't there to maintain a project history but to make public your branch in a &amp;quot;snapshot&amp;quot; kind of mode.&lt;br /&gt;
&lt;br /&gt;
You do this by pushing your local branch using this syntax:&lt;br /&gt;
&lt;br /&gt;
'''git push ssh://git@git.openmoko.org/var/cache/git/&amp;lt;projectname&amp;gt;.git +&amp;lt;remote-branch-name&amp;gt;:&amp;lt;local-branch-name&amp;gt;;'''&lt;br /&gt;
&lt;br /&gt;
...this will overwrite &amp;lt;remote-branch-name&amp;gt; with the contents of &amp;lt;local-branch-name&amp;gt;.  So when you want to expose a snapshot of your branch state on the public repo, you run the line above to force the remote branch into sync with yours.&lt;br /&gt;
&lt;br /&gt;
=Making your tree public on git.openmoko.org=&lt;br /&gt;
# Send your ssh key to Gismo.  He will add it to the git user authorized_keys, so you can ssh in&lt;br /&gt;
# '''ssh git@git.openmoko.org'''&lt;br /&gt;
# '''cd /var/cache/git'''&lt;br /&gt;
# '''./ADD_NEW_REPO &amp;lt;your-project-name&amp;gt;''' -- without the .git on the end&lt;br /&gt;
# in your project directory, execute the suggested git push command shown by the ADD_NEW_REPO script&lt;br /&gt;
# '''vi &amp;lt;your-project-name&amp;gt;.git/description''' -- change to a few words describing your project&lt;br /&gt;
# You can immediately see your tree on http://git.openmoko.org/ and browse it&lt;br /&gt;
&lt;br /&gt;
Keep a copy of the git push command, you can use it without the --all to update the remote git repo with changes to your local git&lt;br /&gt;
&lt;br /&gt;
If something goes wrong, you can fully delete your project on there with&lt;br /&gt;
&lt;br /&gt;
'''rm -rf /var/cache/git/&amp;lt;your-project-name&amp;gt;.git'''&lt;br /&gt;
&lt;br /&gt;
and start over from step 3.&lt;br /&gt;
&lt;br /&gt;
You can backup your remote repo either on the git.openmoko.org box by using:&lt;br /&gt;
&lt;br /&gt;
'''tar czf /home/git/&amp;lt;project&amp;gt;-backup.tar.gz /var/cache/git/&amp;lt;project&amp;gt;.git'''&lt;br /&gt;
&lt;br /&gt;
or remotely by something like:&lt;br /&gt;
&lt;br /&gt;
'''rsync -avz --delete git@git.openmoko.org:/var/cache/git/&amp;lt;project&amp;gt;.git &amp;lt;project&amp;gt;-backup'''&lt;br /&gt;
&lt;br /&gt;
[[Category:System Developers]]&lt;br /&gt;
[[Category:Application Developer]]&lt;/div&gt;</summary>
		<author><name>Warmcat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Who_is_Who</id>
		<title>Who is Who</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Who_is_Who"/>
				<updated>2008-08-07T12:52:04Z</updated>
		
		<summary type="html">&lt;p&gt;Warmcat: /* Officials members of the Openmoko Team */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;If you subscribe to a mailing list, you will see people speaking, answering some questions, but you may ask:&lt;br /&gt;
* Who is who?&lt;br /&gt;
* Who can I trust when they say something?&lt;br /&gt;
&lt;br /&gt;
So I propose to fill out this list to help people get to know each other.&lt;br /&gt;
&lt;br /&gt;
== Officials members of the Openmoko Team ==&lt;br /&gt;
&lt;br /&gt;
The Openmoko team (alphabetical by last name):&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;margin: 0em &amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Name !! email !! Wiki username !! IRC nickname !! Position&lt;br /&gt;
|-&lt;br /&gt;
| Allen Chang || || {{user|allen_chang}} || || GTA Hardware Engineer&lt;br /&gt;
|-&lt;br /&gt;
| Andy Green || ''andy'' at openmoko dot ''com'' || {{user|warmcat}} || agreen || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Anthony Chang || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Candy Chou || || {{user|candy_chou}} || || GTA/HXD Hardware Engineer&lt;br /&gt;
|-&lt;br /&gt;
| Dkay Chen || || {{user|dkay_chen}} || || GTA/HXD Hardware Engineer&lt;br /&gt;
|-&lt;br /&gt;
| Jeremy Chang || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Jollen Chen || || || ||  Marketing&lt;br /&gt;
|-&lt;br /&gt;
| Tick Chen || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Guillaume 'Charlie' Chereau || ''charlie'' at openmoko dot ''org'' || || ||&lt;br /&gt;
|-&lt;br /&gt;
| Julian Chu || ''julian_chu'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Holger 'Zecke' Freyther || ''zecke'' at openmoko dot ''org'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Graeme Gregory || ''graeme'' at openmoko dot ''org'' || || XorA ||&lt;br /&gt;
|-&lt;br /&gt;
| Carsten Haitzler || ''raster'' at openmoko dot ''org'' || || raster || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Matt Hsu || || {{user|Matt}} || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Wendy Hung || || || || Testing&lt;br /&gt;
|-&lt;br /&gt;
| Regina Kim || || || || Testing&lt;br /&gt;
|-&lt;br /&gt;
| William Lai || ''will'' at openmoko dot ''com'' || || || Design Team Project Manager&lt;br /&gt;
|-&lt;br /&gt;
| Michael 'Mickey' Lauer || || {{user|Mickey}} || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| John Lee || || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Tim Lee || || {{user|Tim}} || || Hardware Manager&lt;br /&gt;
|-&lt;br /&gt;
| Marek Lindner || ''marek'' at openmoko dot ''com'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Xiangfu Liu || ''xiangfu'' at openmoko dot ''org'' || || || Software Developer &lt;br /&gt;
|-&lt;br /&gt;
| Jan 'Shoragan' Luebbe || || || || Openmoko student (part-time)&lt;br /&gt;
|-&lt;br /&gt;
| Steven Mosher || || {{user|steve}} || || Vice President of Marketing&lt;br /&gt;
|-&lt;br /&gt;
| Sean Moss-Pultz || || {{user|Sean}} || || CEO&lt;br /&gt;
|-&lt;br /&gt;
| Shawn Lin || || {{user|shawn_lin}} || || RF Engineer&lt;br /&gt;
|-&lt;br /&gt;
| Joerg Reisenweber || || {{user|jOERG}} || || Hardware Engineer&lt;br /&gt;
|-&lt;br /&gt;
| Michael Shiloh || ''michael'' at openmoko dot ''org'' || {{user|Michaelshiloh}} || || Head of Developer Relations&lt;br /&gt;
|-&lt;br /&gt;
| Wolfgang Spraul || ''wolfgang'' at openmoko dot ''com'' || || || Vice President of Engineering&lt;br /&gt;
|-&lt;br /&gt;
| Joachim Steiger || || {{user|Roh}} || roh || Central Services&lt;br /&gt;
|-&lt;br /&gt;
| Harry Tsai || ''harry'' at openmoko dot ''com'' || || || Vice President of Sales&lt;br /&gt;
|-&lt;br /&gt;
| Neng-Yu 'Tony' Tu || || {{user|Tony Tu}} || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Brenda Wang || ''brenda_wang'' at openmoko dot ''com'' || {{user|Coolcat}} || || Wiki editor&lt;br /&gt;
|-&lt;br /&gt;
| Harald Welte || ''laforge'' at openmoko dot ''org'' || {{user|HaraldWelte}} || LaF0rge || (Left Openmoko. Here for archives.)&lt;br /&gt;
|-&lt;br /&gt;
| Daniel 'Alphaone' Willmann || || {{user|DanielWillmann}} || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Thomas Wood || || {{user|ThomasWood}} || ||&lt;br /&gt;
|-&lt;br /&gt;
| OLV Wu || ''olv'' at openmoko dot ''org'' || || || Software Developer&lt;br /&gt;
|-&lt;br /&gt;
| Erin Yeh || || || || Software Developer&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Proeminent community members ==&lt;br /&gt;
&lt;br /&gt;
Only add people who made a significant contribution to the Openmoko community.&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot; style=&amp;quot;margin: 0em &amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Name !! email !! Wiki username !! IRC nickname !! Position&lt;br /&gt;
|-&lt;br /&gt;
| Lorn Potter || ''lpotter'' at ''trolltech'' dot ''com'' || || lpotter || Qtopia developer&lt;br /&gt;
|-&lt;br /&gt;
| Rod Whitby || || {{user|RodWhitby}} || rwhitby || [[MokoMakefile]] author&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== See also ==&lt;br /&gt;
&lt;br /&gt;
* [[The original core team]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Openmoko Inc]]&lt;/div&gt;</summary>
		<author><name>Warmcat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/FreeRunner_backup_kernel</id>
		<title>FreeRunner backup kernel</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/FreeRunner_backup_kernel"/>
				<updated>2008-08-07T08:14:14Z</updated>
		
		<summary type="html">&lt;p&gt;Warmcat: New page: == Freerunner backup kernel ==  The Freerunner NAND partition for the monolithic kernel is set to be 8MBytes, but currently kernels are around 2MBytes in size.  This allows us to stash a s...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Freerunner backup kernel ==&lt;br /&gt;
&lt;br /&gt;
The Freerunner NAND partition for the monolithic kernel is set to be 8MBytes, but currently kernels are around 2MBytes in size.  This allows us to stash a second, backup kernel in that partition for use in an emergency.  If your USB network connection is unavailable was knocked out for some reason, or the modules in the rootfs are bad and crash on every boot, this can be highly useful to have alongside DFU as a boot menu option eventually.&lt;br /&gt;
&lt;br /&gt;
[[Image:Recovery-kernel.png]]&lt;br /&gt;
&lt;br /&gt;
Since this was only implemented after production, factory Freerunners do not currently have a recovery kernel, but it's possible to add as described here.&lt;br /&gt;
&lt;br /&gt;
Once you installed the recovery kernel, it won't get overwritten by subsequent DFU kernel updates because DFU only erases as far as it writes, which is no more than 2MBytes for normal kernel update.&lt;br /&gt;
&lt;br /&gt;
=== Current packaging compatability issue ===&lt;br /&gt;
&amp;lt;blockquote&amp;gt;Right this second the packaged kernels erase the whole partition on update, but I am requesting that be changed so they won't touch the backup kernel either.&amp;lt;/blockquote&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Installing the backup kernel ==&lt;br /&gt;
&lt;br /&gt;
Recovery kernels are &amp;quot;moredrivers&amp;quot; kernels that include the critical drivers in the main kernel already.  Additionally, because they share a partition with the normal kernel, they are around 6MB in size to get the recovery part at the 4MB offset as shown in the picture above.&lt;br /&gt;
&lt;br /&gt;
You can get a 6MB recovery image from here: [http://warmcat.com/recovery-uImage-moredrivers-stable_507c3c1ba3921bb7.bin 6M recovery kernel image]&lt;br /&gt;
&lt;br /&gt;
Just DFU it in normally to the kernel partition.  When the issue about packaged erase is fixed, subsequent updates by DFU or kernel package will update the first kernel normally, but leave the backup one at +4MBytes alone.&lt;br /&gt;
&lt;br /&gt;
== Selecting the backup kernel in U-Boot ==&lt;br /&gt;
&lt;br /&gt;
This one-liner at the U-Boot prompt will boot you into the backup kernel.  (FIXME: integrate into boot menu to make all this actually useful)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;blockquote&amp;gt;setenv bootcmd  nand read.e 0x32000000 kernel \; setenv bootargs \${mtdparts} rootfstype=jffs2 root=/dev/mtdblock6 console=tty0 console=ttySAC2,115200 loglevel=3 init=/sbin/init \; bootm 0x32400000 ; boot&amp;lt;/blockquote&amp;gt;&lt;/div&gt;</summary>
		<author><name>Warmcat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/File:Recovery-kernel.png</id>
		<title>File:Recovery-kernel.png</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/File:Recovery-kernel.png"/>
				<updated>2008-08-06T22:35:54Z</updated>
		
		<summary type="html">&lt;p&gt;Warmcat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Warmcat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Booting_the_Neo_FreeRunner_from_SD_via_U-Boot</id>
		<title>Booting the Neo FreeRunner from SD via U-Boot</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Booting_the_Neo_FreeRunner_from_SD_via_U-Boot"/>
				<updated>2008-07-30T08:14:28Z</updated>
		
		<summary type="html">&lt;p&gt;Warmcat: /* Add uboot boot entry */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page explains how to boot a Freerunner from the SD card rather than from the built-in NAND flash memory. The SD card shares a bus with the GPU, so it may not perform as well, but it is another option.&lt;br /&gt;
&lt;br /&gt;
{{Warning | Booting from SDHC may cause problems at this time. }} See [http://thread.gmane.org/gmane.comp.handhelds.openmoko.community/19154/focus=19281| this thread.] &lt;br /&gt;
&lt;br /&gt;
== How it Works ==&lt;br /&gt;
&lt;br /&gt;
On the Neo, [[u-boot]] performs a similar role to the 'grub' bootloader on a PC. U-boot loads a kernel image into memory and then passes a list of parameters to the kernel. These parameters specify, among other things, the device on which the root filesystem is located.&lt;br /&gt;
&lt;br /&gt;
As the kernel boots, it initializes the hardware and then mounts the root filesystem. The kernel then runs &amp;quot;/sbin/init&amp;quot;, which handles the rest of the boot-up sequence (such as displaying the splash screen and progress bar).&lt;br /&gt;
&lt;br /&gt;
This sequence is the same whether the device is booting from built-in Flash or from the SD card. The differences are how the kernel is loaded, and which device is mounted as the root filesystem.&lt;br /&gt;
&lt;br /&gt;
The following sections provide additional details.&lt;br /&gt;
&lt;br /&gt;
=== Menu Entries ===&lt;br /&gt;
&lt;br /&gt;
U-boot menu entries are defined by environment variables named &amp;quot;menu_X&amp;quot; (where X is a number). The value of the environment variable is a string &amp;quot;&amp;lt;label&amp;gt;:&amp;lt;commands&amp;gt;&amp;quot;, where &amp;lt;label&amp;gt; is the text shown on the screen, and &amp;lt;commands&amp;gt; is a sequence of u-boot commands (delimited by ';' characters) to be executed when the menu item is selected. When entering a string of commands, the ';' and '$' characters must be backslash-escaped (&amp;quot;\;&amp;quot; and &amp;quot;\$&amp;quot;). &lt;br /&gt;
&lt;br /&gt;
=== Loading the Kernel ===&lt;br /&gt;
&lt;br /&gt;
A pair of u-boot commands must be used to load the kernel from SD. First is &amp;quot;mmcinit&amp;quot;, which will cause u-boot to detect the card. Next is a command to load a file into memory - either &amp;quot;fatload&amp;quot; or &amp;quot;ext2load&amp;quot; depending on whether the kernel is on a FAT filesytem or an ext2/ext3 filesystem.&lt;br /&gt;
&lt;br /&gt;
The command syntax is:&lt;br /&gt;
&lt;br /&gt;
 fatload mmc 1:&amp;amp;lt;p&amp;amp;gt; 0x32000000 &amp;amp;lt;filepath&amp;amp;gt;&lt;br /&gt;
 ext2load mmc 1:&amp;amp;lt;p&amp;amp;gt; 0x32000000 &amp;amp;lt;filepath&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;amp;lt;p&amp;amp;gt; is the partition number, and &amp;amp;lt;filepath&amp;amp;gt; is the path to the file that is to be loaded.&lt;br /&gt;
&lt;br /&gt;
{{Note| The &amp;quot;ext2load&amp;quot; command is broken on u-boot binary earlier than &amp;quot;20080723&amp;quot;, including the one shipped with the first batch of Freerunners, are affected by bug [http://docs.openmoko.org/trac/ticket/799 #799]. If you update your U-Boot and kernel packages you can use direct ext2 / 3 boot all in one partition.}}&lt;br /&gt;
&lt;br /&gt;
{{Warning | Be careful when updating u-boot on a Neo1973 as there is a risk of bricking the device (unless you have a debug board). This is not an issue for the Freerunner as it has a protected copy of u-boot in the NOR flash }}&lt;br /&gt;
&lt;br /&gt;
{{Note| U-Boot only supports SDHC protocol on Freerunner: on the Neo1973, u-boot is unable to access SDHC cards (4G or larger). The kernel does have SDHC support on Neo1973, so it is possible to have the root filesystem on SDHC and the kernel on NAND flash to work around it. }}&lt;br /&gt;
&lt;br /&gt;
=== Root Filesystem Parameters ===&lt;br /&gt;
&lt;br /&gt;
The contents of the &amp;quot;bootargs&amp;quot; environment variable are passed to the kernel. Bootargs is a space-delimited list of &amp;quot;name=value&amp;quot; definitions. The items relevant to SD-booting are &amp;quot;root&amp;quot;, &amp;quot;rootfstype&amp;quot;, and &amp;quot;rootdelay&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
For example, the following parameters would tell the kernel to mount the third partition of the SD-card as an ext3 filesystem:&lt;br /&gt;
&lt;br /&gt;
  root=/dev/mmcblk0p3 rootfstype=ext3 rootdelay=5 &lt;br /&gt;
&lt;br /&gt;
The &amp;quot;rootdelay&amp;quot; parameter allows time for the card to be properly initialized before it is accessed. &lt;br /&gt;
&lt;br /&gt;
Note that the kernel must have built-in support (i.e. not a module) for the filesystem specified in &amp;quot;rootfstype&amp;quot;. The default Openmoko kernel configs as of [http://git.openmoko.org/?p=kernel.git;a=commit;h=642cbda5f3b7e7a61512426e1d30a41ab4691123| 2008-07-17] have built-in support for both ext2 and ext3. You can check the available filesystems with the Linux command&lt;br /&gt;
&lt;br /&gt;
 less /proc/filesystems&lt;br /&gt;
&lt;br /&gt;
It is not possible to use VFAT for the root filesystem.&lt;br /&gt;
&lt;br /&gt;
==== ext2 vs. ext3 ====&lt;br /&gt;
&lt;br /&gt;
Opinion is divided on whether it is better to use ext2 or ext3 for the root filesystem. Ext3 in general is a superior choice, because it is a journalled filesystem and so does not require a long 'fsck' (file system check) after an unclean shutdown. However, if used on a flash device that does not support wear-leveling then ext3 may cause premature wear on the blocks of the card where the journal is stored. SD cards are supposed to support wear leveling, but this can not be guaranteed for all vendors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Acquiring a tarfile rootfs ==&lt;br /&gt;
&lt;br /&gt;
There are two ways of acquiring an rootfs image as a tar archive. You can either build it on your own using the OpenEmbedded Distribution. Or download it from the openmoko buildhost.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Possibility 1: Downloading the rootfs/kernel tar from the Openmoko buildhost ===&lt;br /&gt;
&lt;br /&gt;
Choose and find the rootfs/kernel combo you would like to install at [[Latest Images]].&lt;br /&gt;
&lt;br /&gt;
=== Possibility 2: Building a tarfile distribution using OpenEmbedded ===&lt;br /&gt;
&lt;br /&gt;
Another possibility to get a tar archive of your rootfs is to build it on your own with the OpenEmbedded environment.&lt;br /&gt;
&lt;br /&gt;
To build OM-2007.2 you need to add &amp;quot;tar&amp;quot; to the image types in your ''local.conf'':&lt;br /&gt;
&lt;br /&gt;
 IMAGE_FSTYPES = &amp;quot;jffs2 tar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
After that build a new image by issuing:&lt;br /&gt;
 &lt;br /&gt;
 bitbake openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
or if you are using the MokoMakefile: &lt;br /&gt;
 &lt;br /&gt;
 make openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
After the process finished there will be a ''OpenMoko-....tar'' in the deploy directory, which is your newly created rootfs archive&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Prepare the SD card ==&lt;br /&gt;
&lt;br /&gt;
=== Partioning the SD card ===&lt;br /&gt;
&lt;br /&gt;
u-boot pre-2008-07-23 can only boot from FAT filesystems; if you update u-boot, you can boot from FAT or ext2.&lt;br /&gt;
This example shows how to do an example partition using the fdisk utility. Feel free to use the partitioning utility of your liking for this task.&lt;br /&gt;
&lt;br /&gt;
 fdisk /dev/mmcblk0&lt;br /&gt;
&lt;br /&gt;
'''''Note:''''' The device file might differ on your system. If you are not sure about it, you may check your kernel message log by calling ''dmesg'' to find the correct device.&lt;br /&gt;
&lt;br /&gt;
We will now create a 8 mb partition for our kernel and another one for the rootfs which will take up all the remaining space.&lt;br /&gt;
&lt;br /&gt;
   Command (m for help): d&lt;br /&gt;
   Selected partition 1&lt;br /&gt;
   Command (m for help): n&lt;br /&gt;
   Command action&lt;br /&gt;
      e   extended&lt;br /&gt;
      p   primary partition (1-4)&lt;br /&gt;
   p&lt;br /&gt;
   Partition number (1-4): 1&lt;br /&gt;
   First cylinder (1-983, default 1):&lt;br /&gt;
   Using default value 1&lt;br /&gt;
   Last cylinder or +size or +sizeM or +sizeK (1-983, default 983): +8M&lt;br /&gt;
   Command (m for help): n&lt;br /&gt;
   Command action&lt;br /&gt;
      e   extended&lt;br /&gt;
      p   primary partition (1-4)&lt;br /&gt;
   p&lt;br /&gt;
   Partition number (1-4): 2&lt;br /&gt;
   First cylinder (18-983, default 18):&lt;br /&gt;
   Using default value 18&lt;br /&gt;
   Last cylinder or +size or +sizeM or +sizeK (18-983, default 983):&lt;br /&gt;
   Using default value 983&lt;br /&gt;
   Command (m for help): w&lt;br /&gt;
   The partition table has been altered!&lt;br /&gt;
   Calling ioctl() to re-read partition table.&lt;br /&gt;
   Syncing disks.&lt;br /&gt;
&lt;br /&gt;
=== Formatting the SD card ===&lt;br /&gt;
&lt;br /&gt;
Just issue the following command to create at FAT filesystem:&lt;br /&gt;
&lt;br /&gt;
 mkfs.vfat /dev/mmcblk0p1&lt;br /&gt;
&lt;br /&gt;
Note: if you do not have mkfs.vfat you must find and install the &amp;quot;dosfstools&amp;quot; package. This package does not seem to be in the official feeds, but an unofficial build may be downloaded from http://members.shaw.ca/mmontour/neo/dosfstools_2.11-r0_armv4t.ipk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The second partition is about to be formatted with ext3 (for ext2 to work you need to make sure you compiled the kernel with the correct configuration):&lt;br /&gt;
&lt;br /&gt;
 mkfs.ext3 /dev/mmcblk0p2&lt;br /&gt;
&lt;br /&gt;
== Populate SD card ==&lt;br /&gt;
&lt;br /&gt;
Your sd card is now ready to be filled up with the rootfs and the needed kernel to boot.&lt;br /&gt;
&lt;br /&gt;
Mount the second partition of your SD card somewhere and put the image on it:&lt;br /&gt;
&lt;br /&gt;
 mount /dev/mmcblk0p2 /mnt/moko&lt;br /&gt;
 tar -C /mnt/moko/ -xzvf openmoko-devel-image-fic-gta01-20070313022035.rootfs.tar.gz&lt;br /&gt;
&lt;br /&gt;
'''''Note:''''' As always in this guide the device name as well as the rootfs name needs to be adjusted to your device and filename structure&lt;br /&gt;
&lt;br /&gt;
'''''Note:''''' There's a nice gotcha to take care about if you use your host OS automount.  Some hosts mount these removable devices with &amp;quot;nodev&amp;quot; option by default for security.  If the image you are unpacking has a populated /dev directory, the nodes will fail to create as devices then.  If auomounting the SD on your host, confirm there are no unexpected mount options by using &amp;quot;mount&amp;quot; command alone to list the mounts.&lt;br /&gt;
&lt;br /&gt;
The next step is to mount the first partition of the sd card and install the kernel on it.&lt;br /&gt;
&lt;br /&gt;
 mount /dev/mmcblk0p1 /mnt/mokokernel&lt;br /&gt;
 cp uImage-fic-gta01-latest.bin /mnt/mokokernel/uImage.bin&lt;br /&gt;
&lt;br /&gt;
Make sure your kernel is called ''uImage.bin'' after copying it to the card.&lt;br /&gt;
&lt;br /&gt;
Unmount both the rootfs partition and the kernel partition and make sure all remaining buffers are written to it:&lt;br /&gt;
&lt;br /&gt;
 umount /mnt/moko&lt;br /&gt;
 umount /mnt/mokokernel&lt;br /&gt;
 sync&lt;br /&gt;
&lt;br /&gt;
== Add uboot boot entry ==&lt;br /&gt;
Depending on the revision of the phone and the partition type (ext2/ext3) you are using, it might be necessary to add an entry to the bootmenu to be able to boot the system off your SD card.&lt;br /&gt;
If you are using a Freerunner and have created an FAT kernel/ext2 rootfs partition you should be able to boot from the card right out of the box, because a boot menu entry for this should already exist in the NOR/NAND boot menu.&lt;br /&gt;
In any other case you should at least make sure the needed entry exists in your menu before proceeding.&lt;br /&gt;
You will need to enter the uboot shell of the NAND boot menu for this. A description on how to connect to the uboot loader shell can be found in this article: [[Uboot#Bootloader_prompt]]. Details on howto get into the NAND boot menu can be found [[Booting#Log_into_U-Boot_in_the_NAND_Flash|here]].&lt;br /&gt;
&lt;br /&gt;
After you read these two references you should be connected to your NAND uboot shell right now. The first thing to do is to set the boot menu timeout to a really high value. Unfortunately if you don't do this, the boot loader will continue booting after the default timeout (60 seconds) even if you are connected to the uboot shell. Just enter the following command to the menu prompt:&lt;br /&gt;
&lt;br /&gt;
 setenv boot_menu_timeout 99999&lt;br /&gt;
&lt;br /&gt;
This will set the timeout to 99999 seconds which should definitely enough time for us finish whatever work we want accomplish in the boot loader shell.&lt;br /&gt;
&lt;br /&gt;
Now we will make sure a appropriate menu item for booting from sd exists, or create it otherwise. You can print the defined boot loader environment by issuing the command: &lt;br /&gt;
&lt;br /&gt;
 printenv&lt;br /&gt;
&lt;br /&gt;
If it shows a line beginning with ''menu_'' followed by the commands which are just to follow in this guide, you do not need to create a new menu entry. In any other case please proceed with the following.&lt;br /&gt;
&lt;br /&gt;
Please make sure you are using the correct configuration based on the decisions you made earlier.  For more information on the uboot prompt, see &lt;br /&gt;
 help &lt;br /&gt;
 help &amp;lt;command&amp;gt;&lt;br /&gt;
and [[Bootloader]] and [[Bootloader commands]].&lt;br /&gt;
&lt;br /&gt;
{{Note| The backslashes (\) are important for uboot to set the command as new environment variable (menu_9) instead of just executing them as soon as enter is pressed.}}&lt;br /&gt;
&lt;br /&gt;
{{Note| Copy and paste may not work depending on your terminal emulator. Commi just works or you can use [[NeoCon|neocon]] terminal emulator and add a per-character delay.  Otherwise, you will have to type in the commandline manually.}}&lt;br /&gt;
&lt;br /&gt;
It is important to distinguish between FAT or ext2 kernel partitions and ext2 or ext3 root partitions at this point. &lt;br /&gt;
&lt;br /&gt;
'''Boot entry for FAT kernel+ext3 rootfs partitions:'''&lt;br /&gt;
&lt;br /&gt;
 setenv menu_9 Boot from microSD (FAT+ext3): setenv bootargs \${bootargs_base} rootfstype=ext3 root=/dev/mmcblk0p2 rootdelay=5 \${mtdparts} ro\; mmcinit\; fatload mmc 1 0x32000000 \${sd_image_name}\; bootm 0x32000000&lt;br /&gt;
&lt;br /&gt;
'''Boot entry for FAT kernel+ext2 rootfs partitions:'''&lt;br /&gt;
&lt;br /&gt;
 setenv menu_9 Boot from microSD (FAT+ext2): setenv bootargs \${bootargs_base} rootfstype=ext2 root=/dev/mmcblk0p2 rootdelay=5 \${mtdparts} ro\; mmcinit\; fatload mmc 1 0x32000000 \${sd_image_name}\; bootm 0x32000000&lt;br /&gt;
&lt;br /&gt;
'''Boot entry for ext2 kernel+ext2 rootfs partitions: (requires newer u-boot)'''&lt;br /&gt;
&lt;br /&gt;
 setenv menu_2 Boot from microSD part2 (ext2+ext2): setenv bootargs \${bootargs_base} rootfstype=ext2 root=/dev/mmcblk0p2 rootdelay=5 \${mtdparts} ro\; mmcinit\; ext2load mmc 1 0x32000000 \${sd_image_name}\; bootm 0x32000000&lt;br /&gt;
You are nearly done. Just issue a&lt;br /&gt;
&lt;br /&gt;
 printenv&lt;br /&gt;
&lt;br /&gt;
and verify that your newly created entry is correctly displayed (This time the backslashes are not displayed anyone).&lt;br /&gt;
&lt;br /&gt;
If everything looks fine enter&lt;br /&gt;
&lt;br /&gt;
 saveenv&lt;br /&gt;
&lt;br /&gt;
into the prompt and press enter. The new configuration should now be saved to the NAND.&lt;br /&gt;
&lt;br /&gt;
Shutdown your neo with the following command:&lt;br /&gt;
&lt;br /&gt;
 neo1973 power-off&lt;br /&gt;
&lt;br /&gt;
After you restarted the Neo and got back to the NAND boot menu you should be able to select your newly created menu entry and successfully boot into the rootfs from your SD card.&lt;br /&gt;
&lt;br /&gt;
== Appendix ==&lt;br /&gt;
&lt;br /&gt;
=== Boot from SDHC ===&lt;br /&gt;
&lt;br /&gt;
{{Note|the following text was written for the Neo1973. SDHC and SD should both work in a Freerunner if you have u-boot from 2008-07-23 or later.}}&lt;br /&gt;
&lt;br /&gt;
As SDHC is currently not supported in u-boot you can't use the Booting from SD guide.&lt;br /&gt;
But there's a kind of workaround that is a good option to have at least your rootfs on the microSDHC:&lt;br /&gt;
&lt;br /&gt;
First you can follow Step 1 to get an kernel-image with mmc- and ext2-support. But instead of copying the image to the rootfs you will have to flash it to the Neo's internal NAND-Flash (using [[Dfu-util]]).&lt;br /&gt;
Now you can continue with Step 2 (like mentioned before you do not have to copy your uImage to the rootfs) and follow the instructions to Step 3.&lt;br /&gt;
Instead of the setenv commands in Step 3 you have to enter the following:&lt;br /&gt;
&lt;br /&gt;
 GTA01Bv4 # setenv menu_5 Boot from SDHC: setenv  bootargs root=/dev/mmcblk0p1 console=tty0 rootdelay=5 neo1973-nand:0x00040000(u-boot),0x00004000(u-boot_env),0x00200000(kernel),0x000a0000(splash)\; nand read.e 0x32000000 kernel\; bootm 0x32000000&lt;br /&gt;
 GTA01Bv4 # saveenv&lt;br /&gt;
&lt;br /&gt;
And that's it!&lt;br /&gt;
Now you can use the newly created menu option &amp;quot;Boot from SDHC&amp;quot; to boot the internal kernel, using the root-filesystem on the microSDHC.&lt;br /&gt;
&lt;br /&gt;
=== Autoboot from SDHC ===&lt;br /&gt;
&lt;br /&gt;
Maybe you want to Boot automatically from SDHC: &lt;br /&gt;
Set a new Bootmenu Entry for booting from NAND first&lt;br /&gt;
&lt;br /&gt;
 GTA01Bv4 # setenv menu_6 Boot from NAND: setenv bootargs \${bootargs_base} \${mtdparts}\; nand read.e 0x32000000 kernel\; bootm 0x32000000&lt;br /&gt;
 GTA01Bv4 # saveenv&lt;br /&gt;
&lt;br /&gt;
then Power-off, and enter the Bootmenu to test the new Entry.If you can boot from NAND, shutdown, enter Boot menu, connect to bootloader and set the (auto)bootcmd for boot from SDHC:&lt;br /&gt;
&lt;br /&gt;
 GTA01Bv4 # setenv bootcmd setenv bootargs root=/dev/mmcblk0p1 rootdelay=10 console=tty0 neo1973-nand:0x00040000(u-boot),0x00004000(u-boot_env),0x00200000(kernel),0x000a0000(splash)\; nand read.e 0x32000000 kernel\; bootm 0x32000000 &lt;br /&gt;
 GTA01Bv4 # saveenv&lt;br /&gt;
&lt;br /&gt;
Now you boot from SDHC everytime you press the Power-Button or reboot and if you like to boot from NAND -just use the bootmenu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Fixing udev automount ===&lt;br /&gt;
&lt;br /&gt;
Udev automatically mounts the SD Card in /media/mmcblk0p1/ you can disable this with&lt;br /&gt;
&lt;br /&gt;
 echo /dev/mmcblk &amp;gt;&amp;gt; /etc/udev/mount.blacklist&lt;br /&gt;
&lt;br /&gt;
=== Remarks on Kernel Parameters ===&lt;br /&gt;
&lt;br /&gt;
==== loglevel ====&lt;br /&gt;
&lt;br /&gt;
Some people suggested adding:&lt;br /&gt;
&lt;br /&gt;
 loglevel=8&lt;br /&gt;
&lt;br /&gt;
to the kernel command line. IF you also have &amp;quot;console=tty0&amp;quot; on your kernel commandline this makes the boot process extremely slow because the framebuffer (the neo display in text mode) has to print out tons of lines of debug messages like:&lt;br /&gt;
&lt;br /&gt;
 s3c2410-sdi s3c2410-sdi: ......&lt;br /&gt;
 mmc0: ....&lt;br /&gt;
&lt;br /&gt;
{{Languages|Booting_from_SD}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Guides]]&lt;br /&gt;
[[Category:Flashing Openmoko]]&lt;br /&gt;
[[Category:Documentation]]&lt;br /&gt;
[[Category:System Developers]]&lt;/div&gt;</summary>
		<author><name>Warmcat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Booting_the_Neo_FreeRunner_from_SD_via_U-Boot</id>
		<title>Booting the Neo FreeRunner from SD via U-Boot</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Booting_the_Neo_FreeRunner_from_SD_via_U-Boot"/>
				<updated>2008-07-30T08:10:04Z</updated>
		
		<summary type="html">&lt;p&gt;Warmcat: /* Add uboot boot entry */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page explains how to boot a Freerunner from the SD card rather than from the built-in NAND flash memory. The SD card shares a bus with the GPU, so it may not perform as well, but it is another option.&lt;br /&gt;
&lt;br /&gt;
{{Warning | Booting from SDHC may cause problems at this time. }} See [http://thread.gmane.org/gmane.comp.handhelds.openmoko.community/19154/focus=19281| this thread.] &lt;br /&gt;
&lt;br /&gt;
== How it Works ==&lt;br /&gt;
&lt;br /&gt;
On the Neo, [[u-boot]] performs a similar role to the 'grub' bootloader on a PC. U-boot loads a kernel image into memory and then passes a list of parameters to the kernel. These parameters specify, among other things, the device on which the root filesystem is located.&lt;br /&gt;
&lt;br /&gt;
As the kernel boots, it initializes the hardware and then mounts the root filesystem. The kernel then runs &amp;quot;/sbin/init&amp;quot;, which handles the rest of the boot-up sequence (such as displaying the splash screen and progress bar).&lt;br /&gt;
&lt;br /&gt;
This sequence is the same whether the device is booting from built-in Flash or from the SD card. The differences are how the kernel is loaded, and which device is mounted as the root filesystem.&lt;br /&gt;
&lt;br /&gt;
The following sections provide additional details.&lt;br /&gt;
&lt;br /&gt;
=== Menu Entries ===&lt;br /&gt;
&lt;br /&gt;
U-boot menu entries are defined by environment variables named &amp;quot;menu_X&amp;quot; (where X is a number). The value of the environment variable is a string &amp;quot;&amp;lt;label&amp;gt;:&amp;lt;commands&amp;gt;&amp;quot;, where &amp;lt;label&amp;gt; is the text shown on the screen, and &amp;lt;commands&amp;gt; is a sequence of u-boot commands (delimited by ';' characters) to be executed when the menu item is selected. When entering a string of commands, the ';' and '$' characters must be backslash-escaped (&amp;quot;\;&amp;quot; and &amp;quot;\$&amp;quot;). &lt;br /&gt;
&lt;br /&gt;
=== Loading the Kernel ===&lt;br /&gt;
&lt;br /&gt;
A pair of u-boot commands must be used to load the kernel from SD. First is &amp;quot;mmcinit&amp;quot;, which will cause u-boot to detect the card. Next is a command to load a file into memory - either &amp;quot;fatload&amp;quot; or &amp;quot;ext2load&amp;quot; depending on whether the kernel is on a FAT filesytem or an ext2/ext3 filesystem.&lt;br /&gt;
&lt;br /&gt;
The command syntax is:&lt;br /&gt;
&lt;br /&gt;
 fatload mmc 1:&amp;amp;lt;p&amp;amp;gt; 0x32000000 &amp;amp;lt;filepath&amp;amp;gt;&lt;br /&gt;
 ext2load mmc 1:&amp;amp;lt;p&amp;amp;gt; 0x32000000 &amp;amp;lt;filepath&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;amp;lt;p&amp;amp;gt; is the partition number, and &amp;amp;lt;filepath&amp;amp;gt; is the path to the file that is to be loaded.&lt;br /&gt;
&lt;br /&gt;
{{Note| The &amp;quot;ext2load&amp;quot; command is broken on u-boot binary earlier than &amp;quot;20080723&amp;quot;, including the one shipped with the first batch of Freerunners, are affected by bug [http://docs.openmoko.org/trac/ticket/799 #799]. If you update your U-Boot and kernel packages you can use direct ext2 / 3 boot all in one partition.}}&lt;br /&gt;
&lt;br /&gt;
{{Warning | Be careful when updating u-boot on a Neo1973 as there is a risk of bricking the device (unless you have a debug board). This is not an issue for the Freerunner as it has a protected copy of u-boot in the NOR flash }}&lt;br /&gt;
&lt;br /&gt;
{{Note| U-Boot only supports SDHC protocol on Freerunner: on the Neo1973, u-boot is unable to access SDHC cards (4G or larger). The kernel does have SDHC support on Neo1973, so it is possible to have the root filesystem on SDHC and the kernel on NAND flash to work around it. }}&lt;br /&gt;
&lt;br /&gt;
=== Root Filesystem Parameters ===&lt;br /&gt;
&lt;br /&gt;
The contents of the &amp;quot;bootargs&amp;quot; environment variable are passed to the kernel. Bootargs is a space-delimited list of &amp;quot;name=value&amp;quot; definitions. The items relevant to SD-booting are &amp;quot;root&amp;quot;, &amp;quot;rootfstype&amp;quot;, and &amp;quot;rootdelay&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
For example, the following parameters would tell the kernel to mount the third partition of the SD-card as an ext3 filesystem:&lt;br /&gt;
&lt;br /&gt;
  root=/dev/mmcblk0p3 rootfstype=ext3 rootdelay=5 &lt;br /&gt;
&lt;br /&gt;
The &amp;quot;rootdelay&amp;quot; parameter allows time for the card to be properly initialized before it is accessed. &lt;br /&gt;
&lt;br /&gt;
Note that the kernel must have built-in support (i.e. not a module) for the filesystem specified in &amp;quot;rootfstype&amp;quot;. The default Openmoko kernel configs as of [http://git.openmoko.org/?p=kernel.git;a=commit;h=642cbda5f3b7e7a61512426e1d30a41ab4691123| 2008-07-17] have built-in support for both ext2 and ext3. You can check the available filesystems with the Linux command&lt;br /&gt;
&lt;br /&gt;
 less /proc/filesystems&lt;br /&gt;
&lt;br /&gt;
It is not possible to use VFAT for the root filesystem.&lt;br /&gt;
&lt;br /&gt;
==== ext2 vs. ext3 ====&lt;br /&gt;
&lt;br /&gt;
Opinion is divided on whether it is better to use ext2 or ext3 for the root filesystem. Ext3 in general is a superior choice, because it is a journalled filesystem and so does not require a long 'fsck' (file system check) after an unclean shutdown. However, if used on a flash device that does not support wear-leveling then ext3 may cause premature wear on the blocks of the card where the journal is stored. SD cards are supposed to support wear leveling, but this can not be guaranteed for all vendors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Acquiring a tarfile rootfs ==&lt;br /&gt;
&lt;br /&gt;
There are two ways of acquiring an rootfs image as a tar archive. You can either build it on your own using the OpenEmbedded Distribution. Or download it from the openmoko buildhost.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Possibility 1: Downloading the rootfs/kernel tar from the Openmoko buildhost ===&lt;br /&gt;
&lt;br /&gt;
Choose and find the rootfs/kernel combo you would like to install at [[Latest Images]].&lt;br /&gt;
&lt;br /&gt;
=== Possibility 2: Building a tarfile distribution using OpenEmbedded ===&lt;br /&gt;
&lt;br /&gt;
Another possibility to get a tar archive of your rootfs is to build it on your own with the OpenEmbedded environment.&lt;br /&gt;
&lt;br /&gt;
To build OM-2007.2 you need to add &amp;quot;tar&amp;quot; to the image types in your ''local.conf'':&lt;br /&gt;
&lt;br /&gt;
 IMAGE_FSTYPES = &amp;quot;jffs2 tar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
After that build a new image by issuing:&lt;br /&gt;
 &lt;br /&gt;
 bitbake openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
or if you are using the MokoMakefile: &lt;br /&gt;
 &lt;br /&gt;
 make openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
After the process finished there will be a ''OpenMoko-....tar'' in the deploy directory, which is your newly created rootfs archive&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Prepare the SD card ==&lt;br /&gt;
&lt;br /&gt;
=== Partioning the SD card ===&lt;br /&gt;
&lt;br /&gt;
u-boot pre-2008-07-23 can only boot from FAT filesystems; if you update u-boot, you can boot from FAT or ext2.&lt;br /&gt;
This example shows how to do an example partition using the fdisk utility. Feel free to use the partitioning utility of your liking for this task.&lt;br /&gt;
&lt;br /&gt;
 fdisk /dev/mmcblk0&lt;br /&gt;
&lt;br /&gt;
'''''Note:''''' The device file might differ on your system. If you are not sure about it, you may check your kernel message log by calling ''dmesg'' to find the correct device.&lt;br /&gt;
&lt;br /&gt;
We will now create a 8 mb partition for our kernel and another one for the rootfs which will take up all the remaining space.&lt;br /&gt;
&lt;br /&gt;
   Command (m for help): d&lt;br /&gt;
   Selected partition 1&lt;br /&gt;
   Command (m for help): n&lt;br /&gt;
   Command action&lt;br /&gt;
      e   extended&lt;br /&gt;
      p   primary partition (1-4)&lt;br /&gt;
   p&lt;br /&gt;
   Partition number (1-4): 1&lt;br /&gt;
   First cylinder (1-983, default 1):&lt;br /&gt;
   Using default value 1&lt;br /&gt;
   Last cylinder or +size or +sizeM or +sizeK (1-983, default 983): +8M&lt;br /&gt;
   Command (m for help): n&lt;br /&gt;
   Command action&lt;br /&gt;
      e   extended&lt;br /&gt;
      p   primary partition (1-4)&lt;br /&gt;
   p&lt;br /&gt;
   Partition number (1-4): 2&lt;br /&gt;
   First cylinder (18-983, default 18):&lt;br /&gt;
   Using default value 18&lt;br /&gt;
   Last cylinder or +size or +sizeM or +sizeK (18-983, default 983):&lt;br /&gt;
   Using default value 983&lt;br /&gt;
   Command (m for help): w&lt;br /&gt;
   The partition table has been altered!&lt;br /&gt;
   Calling ioctl() to re-read partition table.&lt;br /&gt;
   Syncing disks.&lt;br /&gt;
&lt;br /&gt;
=== Formatting the SD card ===&lt;br /&gt;
&lt;br /&gt;
Just issue the following command to create at FAT filesystem:&lt;br /&gt;
&lt;br /&gt;
 mkfs.vfat /dev/mmcblk0p1&lt;br /&gt;
&lt;br /&gt;
Note: if you do not have mkfs.vfat you must find and install the &amp;quot;dosfstools&amp;quot; package. This package does not seem to be in the official feeds, but an unofficial build may be downloaded from http://members.shaw.ca/mmontour/neo/dosfstools_2.11-r0_armv4t.ipk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The second partition is about to be formatted with ext3 (for ext2 to work you need to make sure you compiled the kernel with the correct configuration):&lt;br /&gt;
&lt;br /&gt;
 mkfs.ext3 /dev/mmcblk0p2&lt;br /&gt;
&lt;br /&gt;
== Populate SD card ==&lt;br /&gt;
&lt;br /&gt;
Your sd card is now ready to be filled up with the rootfs and the needed kernel to boot.&lt;br /&gt;
&lt;br /&gt;
Mount the second partition of your SD card somewhere and put the image on it:&lt;br /&gt;
&lt;br /&gt;
 mount /dev/mmcblk0p2 /mnt/moko&lt;br /&gt;
 tar -C /mnt/moko/ -xzvf openmoko-devel-image-fic-gta01-20070313022035.rootfs.tar.gz&lt;br /&gt;
&lt;br /&gt;
'''''Note:''''' As always in this guide the device name as well as the rootfs name needs to be adjusted to your device and filename structure&lt;br /&gt;
&lt;br /&gt;
'''''Note:''''' There's a nice gotcha to take care about if you use your host OS automount.  Some hosts mount these removable devices with &amp;quot;nodev&amp;quot; option by default for security.  If the image you are unpacking has a populated /dev directory, the nodes will fail to create as devices then.  If auomounting the SD on your host, confirm there are no unexpected mount options by using &amp;quot;mount&amp;quot; command alone to list the mounts.&lt;br /&gt;
&lt;br /&gt;
The next step is to mount the first partition of the sd card and install the kernel on it.&lt;br /&gt;
&lt;br /&gt;
 mount /dev/mmcblk0p1 /mnt/mokokernel&lt;br /&gt;
 cp uImage-fic-gta01-latest.bin /mnt/mokokernel/uImage.bin&lt;br /&gt;
&lt;br /&gt;
Make sure your kernel is called ''uImage.bin'' after copying it to the card.&lt;br /&gt;
&lt;br /&gt;
Unmount both the rootfs partition and the kernel partition and make sure all remaining buffers are written to it:&lt;br /&gt;
&lt;br /&gt;
 umount /mnt/moko&lt;br /&gt;
 umount /mnt/mokokernel&lt;br /&gt;
 sync&lt;br /&gt;
&lt;br /&gt;
== Add uboot boot entry ==&lt;br /&gt;
Depending on the revision of the phone and the partition type (ext2/ext3) you are using, it might be necessary to add an entry to the bootmenu to be able to boot the system off your SD card.&lt;br /&gt;
If you are using a Freerunner and have created an FAT kernel/ext2 rootfs partition you should be able to boot from the card right out of the box, because a boot menu entry for this should already exist in the NOR/NAND boot menu.&lt;br /&gt;
In any other case you should at least make sure the needed entry exists in your menu before proceeding.&lt;br /&gt;
You will need to enter the uboot shell of the NAND boot menu for this. A description on how to connect to the uboot loader shell can be found in this article: [[Uboot#Bootloader_prompt]]. Details on howto get into the NAND boot menu can be found [[Booting#Log_into_U-Boot_in_the_NAND_Flash|here]].&lt;br /&gt;
&lt;br /&gt;
After you read these two references you should be connected to your NAND uboot shell right now. The first thing to do is to set the boot menu timeout to a really high value. Unfortunately if you don't do this, the boot loader will continue booting after the default timeout (60 seconds) even if you are connected to the uboot shell. Just enter the following command to the menu prompt:&lt;br /&gt;
&lt;br /&gt;
 setenv boot_menu_timeout 99999&lt;br /&gt;
&lt;br /&gt;
This will set the timeout to 99999 seconds which should definitely enough time for us finish whatever work we want accomplish in the boot loader shell.&lt;br /&gt;
&lt;br /&gt;
Now we will make sure a appropriate menu item for booting from sd exists, or create it otherwise. You can print the defined boot loader environment by issuing the command: &lt;br /&gt;
&lt;br /&gt;
 printenv&lt;br /&gt;
&lt;br /&gt;
If it shows a line beginning with ''menu_'' followed by the commands which are just to follow in this guide, you do not need to create a new menu entry. In any other case please proceed with the following.&lt;br /&gt;
&lt;br /&gt;
Please make sure you are using the correct configuration based on the decisions you made earlier.  For more information on the uboot prompt, see &lt;br /&gt;
 help &lt;br /&gt;
 help &amp;lt;command&amp;gt;&lt;br /&gt;
and [[Bootloader]] and [[Bootloader commands]].&lt;br /&gt;
&lt;br /&gt;
{{Note| The backslashes (\) are important for uboot to set the command as new environment variable (menu_9) instead of just executing them as soon as enter is pressed.}}&lt;br /&gt;
&lt;br /&gt;
{{Note| Copy and paste may not work depending on your terminal emulator. Commi (http://linux-source.de/index.php?artid=4&amp;amp;changelang=5) just works or you can use [[NeoCon|neocon]] terminal emulator and add a per-character delay.  Otherwise, you will have to type in the commandline manually.}}&lt;br /&gt;
&lt;br /&gt;
It is important to distinguish between FAT or ext2 kernel partitions and ext2 or ext3 root partitions at this point. &lt;br /&gt;
&lt;br /&gt;
'''Boot entry for FAT kernel+ext3 rootfs partitions:'''&lt;br /&gt;
&lt;br /&gt;
 setenv menu_9 Boot from microSD (FAT+ext3): setenv bootargs \${bootargs_base} rootfstype=ext3 root=/dev/mmcblk0p2 rootdelay=5 \${mtdparts} ro\; mmcinit\; fatload mmc 1 0x32000000 \${sd_image_name}\; bootm 0x32000000&lt;br /&gt;
&lt;br /&gt;
'''Boot entry for FAT kernel+ext2 rootfs partitions:'''&lt;br /&gt;
&lt;br /&gt;
 setenv menu_9 Boot from microSD (FAT+ext2): setenv bootargs \${bootargs_base} rootfstype=ext2 root=/dev/mmcblk0p2 rootdelay=5 \${mtdparts} ro\; mmcinit\; fatload mmc 1 0x32000000 \${sd_image_name}\; bootm 0x32000000&lt;br /&gt;
&lt;br /&gt;
'''Boot entry for ext2 kernel+ext2 rootfs partitions: (requires newer u-boot)'''&lt;br /&gt;
&lt;br /&gt;
 setenv menu_2 Boot from microSD part2 (ext2+ext2): setenv bootargs \${bootargs_base} rootfstype=ext2 root=/dev/mmcblk0p2 rootdelay=5 \${mtdparts} ro\; mmcinit\; ext2load mmc 1 0x32000000 \${sd_image_name}\; bootm 0x32000000&lt;br /&gt;
You are nearly done. Just issue a&lt;br /&gt;
&lt;br /&gt;
 printenv&lt;br /&gt;
&lt;br /&gt;
and verify that your newly created entry is correctly displayed (This time the backslashes are not displayed anyone).&lt;br /&gt;
&lt;br /&gt;
If everything looks fine enter&lt;br /&gt;
&lt;br /&gt;
 saveenv&lt;br /&gt;
&lt;br /&gt;
into the prompt and press enter. The new configuration should now be saved to the NAND.&lt;br /&gt;
&lt;br /&gt;
Shutdown your neo with the following command:&lt;br /&gt;
&lt;br /&gt;
 neo1973 power-off&lt;br /&gt;
&lt;br /&gt;
After you restarted the Neo and got back to the NAND boot menu you should be able to select your newly created menu entry and successfully boot into the rootfs from your SD card.&lt;br /&gt;
&lt;br /&gt;
== Appendix ==&lt;br /&gt;
&lt;br /&gt;
=== Boot from SDHC ===&lt;br /&gt;
&lt;br /&gt;
{{Note|the following text was written for the Neo1973. SDHC and SD should both work in a Freerunner if you have u-boot from 2008-07-23 or later.}}&lt;br /&gt;
&lt;br /&gt;
As SDHC is currently not supported in u-boot you can't use the Booting from SD guide.&lt;br /&gt;
But there's a kind of workaround that is a good option to have at least your rootfs on the microSDHC:&lt;br /&gt;
&lt;br /&gt;
First you can follow Step 1 to get an kernel-image with mmc- and ext2-support. But instead of copying the image to the rootfs you will have to flash it to the Neo's internal NAND-Flash (using [[Dfu-util]]).&lt;br /&gt;
Now you can continue with Step 2 (like mentioned before you do not have to copy your uImage to the rootfs) and follow the instructions to Step 3.&lt;br /&gt;
Instead of the setenv commands in Step 3 you have to enter the following:&lt;br /&gt;
&lt;br /&gt;
 GTA01Bv4 # setenv menu_5 Boot from SDHC: setenv  bootargs root=/dev/mmcblk0p1 console=tty0 rootdelay=5 neo1973-nand:0x00040000(u-boot),0x00004000(u-boot_env),0x00200000(kernel),0x000a0000(splash)\; nand read.e 0x32000000 kernel\; bootm 0x32000000&lt;br /&gt;
 GTA01Bv4 # saveenv&lt;br /&gt;
&lt;br /&gt;
And that's it!&lt;br /&gt;
Now you can use the newly created menu option &amp;quot;Boot from SDHC&amp;quot; to boot the internal kernel, using the root-filesystem on the microSDHC.&lt;br /&gt;
&lt;br /&gt;
=== Autoboot from SDHC ===&lt;br /&gt;
&lt;br /&gt;
Maybe you want to Boot automatically from SDHC: &lt;br /&gt;
Set a new Bootmenu Entry for booting from NAND first&lt;br /&gt;
&lt;br /&gt;
 GTA01Bv4 # setenv menu_6 Boot from NAND: setenv bootargs \${bootargs_base} \${mtdparts}\; nand read.e 0x32000000 kernel\; bootm 0x32000000&lt;br /&gt;
 GTA01Bv4 # saveenv&lt;br /&gt;
&lt;br /&gt;
then Power-off, and enter the Bootmenu to test the new Entry.If you can boot from NAND, shutdown, enter Boot menu, connect to bootloader and set the (auto)bootcmd for boot from SDHC:&lt;br /&gt;
&lt;br /&gt;
 GTA01Bv4 # setenv bootcmd setenv bootargs root=/dev/mmcblk0p1 rootdelay=10 console=tty0 neo1973-nand:0x00040000(u-boot),0x00004000(u-boot_env),0x00200000(kernel),0x000a0000(splash)\; nand read.e 0x32000000 kernel\; bootm 0x32000000 &lt;br /&gt;
 GTA01Bv4 # saveenv&lt;br /&gt;
&lt;br /&gt;
Now you boot from SDHC everytime you press the Power-Button or reboot and if you like to boot from NAND -just use the bootmenu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Fixing udev automount ===&lt;br /&gt;
&lt;br /&gt;
Udev automatically mounts the SD Card in /media/mmcblk0p1/ you can disable this with&lt;br /&gt;
&lt;br /&gt;
 echo /dev/mmcblk &amp;gt;&amp;gt; /etc/udev/mount.blacklist&lt;br /&gt;
&lt;br /&gt;
=== Remarks on Kernel Parameters ===&lt;br /&gt;
&lt;br /&gt;
==== loglevel ====&lt;br /&gt;
&lt;br /&gt;
Some people suggested adding:&lt;br /&gt;
&lt;br /&gt;
 loglevel=8&lt;br /&gt;
&lt;br /&gt;
to the kernel command line. IF you also have &amp;quot;console=tty0&amp;quot; on your kernel commandline this makes the boot process extremely slow because the framebuffer (the neo display in text mode) has to print out tons of lines of debug messages like:&lt;br /&gt;
&lt;br /&gt;
 s3c2410-sdi s3c2410-sdi: ......&lt;br /&gt;
 mmc0: ....&lt;br /&gt;
&lt;br /&gt;
{{Languages|Booting_from_SD}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Guides]]&lt;br /&gt;
[[Category:Flashing Openmoko]]&lt;br /&gt;
[[Category:Documentation]]&lt;br /&gt;
[[Category:System Developers]]&lt;/div&gt;</summary>
		<author><name>Warmcat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Booting_the_Neo_FreeRunner_from_SD_via_U-Boot</id>
		<title>Booting the Neo FreeRunner from SD via U-Boot</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Booting_the_Neo_FreeRunner_from_SD_via_U-Boot"/>
				<updated>2008-07-30T08:06:48Z</updated>
		
		<summary type="html">&lt;p&gt;Warmcat: /* loglevel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page explains how to boot a Freerunner from the SD card rather than from the built-in NAND flash memory. The SD card shares a bus with the GPU, so it may not perform as well, but it is another option.&lt;br /&gt;
&lt;br /&gt;
{{Warning | Booting from SDHC may cause problems at this time. }} See [http://thread.gmane.org/gmane.comp.handhelds.openmoko.community/19154/focus=19281| this thread.] &lt;br /&gt;
&lt;br /&gt;
== How it Works ==&lt;br /&gt;
&lt;br /&gt;
On the Neo, [[u-boot]] performs a similar role to the 'grub' bootloader on a PC. U-boot loads a kernel image into memory and then passes a list of parameters to the kernel. These parameters specify, among other things, the device on which the root filesystem is located.&lt;br /&gt;
&lt;br /&gt;
As the kernel boots, it initializes the hardware and then mounts the root filesystem. The kernel then runs &amp;quot;/sbin/init&amp;quot;, which handles the rest of the boot-up sequence (such as displaying the splash screen and progress bar).&lt;br /&gt;
&lt;br /&gt;
This sequence is the same whether the device is booting from built-in Flash or from the SD card. The differences are how the kernel is loaded, and which device is mounted as the root filesystem.&lt;br /&gt;
&lt;br /&gt;
The following sections provide additional details.&lt;br /&gt;
&lt;br /&gt;
=== Menu Entries ===&lt;br /&gt;
&lt;br /&gt;
U-boot menu entries are defined by environment variables named &amp;quot;menu_X&amp;quot; (where X is a number). The value of the environment variable is a string &amp;quot;&amp;lt;label&amp;gt;:&amp;lt;commands&amp;gt;&amp;quot;, where &amp;lt;label&amp;gt; is the text shown on the screen, and &amp;lt;commands&amp;gt; is a sequence of u-boot commands (delimited by ';' characters) to be executed when the menu item is selected. When entering a string of commands, the ';' and '$' characters must be backslash-escaped (&amp;quot;\;&amp;quot; and &amp;quot;\$&amp;quot;). &lt;br /&gt;
&lt;br /&gt;
=== Loading the Kernel ===&lt;br /&gt;
&lt;br /&gt;
A pair of u-boot commands must be used to load the kernel from SD. First is &amp;quot;mmcinit&amp;quot;, which will cause u-boot to detect the card. Next is a command to load a file into memory - either &amp;quot;fatload&amp;quot; or &amp;quot;ext2load&amp;quot; depending on whether the kernel is on a FAT filesytem or an ext2/ext3 filesystem.&lt;br /&gt;
&lt;br /&gt;
The command syntax is:&lt;br /&gt;
&lt;br /&gt;
 fatload mmc 1:&amp;amp;lt;p&amp;amp;gt; 0x32000000 &amp;amp;lt;filepath&amp;amp;gt;&lt;br /&gt;
 ext2load mmc 1:&amp;amp;lt;p&amp;amp;gt; 0x32000000 &amp;amp;lt;filepath&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;amp;lt;p&amp;amp;gt; is the partition number, and &amp;amp;lt;filepath&amp;amp;gt; is the path to the file that is to be loaded.&lt;br /&gt;
&lt;br /&gt;
{{Note| The &amp;quot;ext2load&amp;quot; command is broken on u-boot binary earlier than &amp;quot;20080723&amp;quot;, including the one shipped with the first batch of Freerunners, are affected by bug [http://docs.openmoko.org/trac/ticket/799 #799]. If you update your U-Boot and kernel packages you can use direct ext2 / 3 boot all in one partition.}}&lt;br /&gt;
&lt;br /&gt;
{{Warning | Be careful when updating u-boot on a Neo1973 as there is a risk of bricking the device (unless you have a debug board). This is not an issue for the Freerunner as it has a protected copy of u-boot in the NOR flash }}&lt;br /&gt;
&lt;br /&gt;
{{Note| U-Boot only supports SDHC protocol on Freerunner: on the Neo1973, u-boot is unable to access SDHC cards (4G or larger). The kernel does have SDHC support on Neo1973, so it is possible to have the root filesystem on SDHC and the kernel on NAND flash to work around it. }}&lt;br /&gt;
&lt;br /&gt;
=== Root Filesystem Parameters ===&lt;br /&gt;
&lt;br /&gt;
The contents of the &amp;quot;bootargs&amp;quot; environment variable are passed to the kernel. Bootargs is a space-delimited list of &amp;quot;name=value&amp;quot; definitions. The items relevant to SD-booting are &amp;quot;root&amp;quot;, &amp;quot;rootfstype&amp;quot;, and &amp;quot;rootdelay&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
For example, the following parameters would tell the kernel to mount the third partition of the SD-card as an ext3 filesystem:&lt;br /&gt;
&lt;br /&gt;
  root=/dev/mmcblk0p3 rootfstype=ext3 rootdelay=5 &lt;br /&gt;
&lt;br /&gt;
The &amp;quot;rootdelay&amp;quot; parameter allows time for the card to be properly initialized before it is accessed. &lt;br /&gt;
&lt;br /&gt;
Note that the kernel must have built-in support (i.e. not a module) for the filesystem specified in &amp;quot;rootfstype&amp;quot;. The default Openmoko kernel configs as of [http://git.openmoko.org/?p=kernel.git;a=commit;h=642cbda5f3b7e7a61512426e1d30a41ab4691123| 2008-07-17] have built-in support for both ext2 and ext3. You can check the available filesystems with the Linux command&lt;br /&gt;
&lt;br /&gt;
 less /proc/filesystems&lt;br /&gt;
&lt;br /&gt;
It is not possible to use VFAT for the root filesystem.&lt;br /&gt;
&lt;br /&gt;
==== ext2 vs. ext3 ====&lt;br /&gt;
&lt;br /&gt;
Opinion is divided on whether it is better to use ext2 or ext3 for the root filesystem. Ext3 in general is a superior choice, because it is a journalled filesystem and so does not require a long 'fsck' (file system check) after an unclean shutdown. However, if used on a flash device that does not support wear-leveling then ext3 may cause premature wear on the blocks of the card where the journal is stored. SD cards are supposed to support wear leveling, but this can not be guaranteed for all vendors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Acquiring a tarfile rootfs ==&lt;br /&gt;
&lt;br /&gt;
There are two ways of acquiring an rootfs image as a tar archive. You can either build it on your own using the OpenEmbedded Distribution. Or download it from the openmoko buildhost.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Possibility 1: Downloading the rootfs/kernel tar from the Openmoko buildhost ===&lt;br /&gt;
&lt;br /&gt;
Choose and find the rootfs/kernel combo you would like to install at [[Latest Images]].&lt;br /&gt;
&lt;br /&gt;
=== Possibility 2: Building a tarfile distribution using OpenEmbedded ===&lt;br /&gt;
&lt;br /&gt;
Another possibility to get a tar archive of your rootfs is to build it on your own with the OpenEmbedded environment.&lt;br /&gt;
&lt;br /&gt;
To build OM-2007.2 you need to add &amp;quot;tar&amp;quot; to the image types in your ''local.conf'':&lt;br /&gt;
&lt;br /&gt;
 IMAGE_FSTYPES = &amp;quot;jffs2 tar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
After that build a new image by issuing:&lt;br /&gt;
 &lt;br /&gt;
 bitbake openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
or if you are using the MokoMakefile: &lt;br /&gt;
 &lt;br /&gt;
 make openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
After the process finished there will be a ''OpenMoko-....tar'' in the deploy directory, which is your newly created rootfs archive&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Prepare the SD card ==&lt;br /&gt;
&lt;br /&gt;
=== Partioning the SD card ===&lt;br /&gt;
&lt;br /&gt;
u-boot pre-2008-07-23 can only boot from FAT filesystems; if you update u-boot, you can boot from FAT or ext2.&lt;br /&gt;
This example shows how to do an example partition using the fdisk utility. Feel free to use the partitioning utility of your liking for this task.&lt;br /&gt;
&lt;br /&gt;
 fdisk /dev/mmcblk0&lt;br /&gt;
&lt;br /&gt;
'''''Note:''''' The device file might differ on your system. If you are not sure about it, you may check your kernel message log by calling ''dmesg'' to find the correct device.&lt;br /&gt;
&lt;br /&gt;
We will now create a 8 mb partition for our kernel and another one for the rootfs which will take up all the remaining space.&lt;br /&gt;
&lt;br /&gt;
   Command (m for help): d&lt;br /&gt;
   Selected partition 1&lt;br /&gt;
   Command (m for help): n&lt;br /&gt;
   Command action&lt;br /&gt;
      e   extended&lt;br /&gt;
      p   primary partition (1-4)&lt;br /&gt;
   p&lt;br /&gt;
   Partition number (1-4): 1&lt;br /&gt;
   First cylinder (1-983, default 1):&lt;br /&gt;
   Using default value 1&lt;br /&gt;
   Last cylinder or +size or +sizeM or +sizeK (1-983, default 983): +8M&lt;br /&gt;
   Command (m for help): n&lt;br /&gt;
   Command action&lt;br /&gt;
      e   extended&lt;br /&gt;
      p   primary partition (1-4)&lt;br /&gt;
   p&lt;br /&gt;
   Partition number (1-4): 2&lt;br /&gt;
   First cylinder (18-983, default 18):&lt;br /&gt;
   Using default value 18&lt;br /&gt;
   Last cylinder or +size or +sizeM or +sizeK (18-983, default 983):&lt;br /&gt;
   Using default value 983&lt;br /&gt;
   Command (m for help): w&lt;br /&gt;
   The partition table has been altered!&lt;br /&gt;
   Calling ioctl() to re-read partition table.&lt;br /&gt;
   Syncing disks.&lt;br /&gt;
&lt;br /&gt;
=== Formatting the SD card ===&lt;br /&gt;
&lt;br /&gt;
Just issue the following command to create at FAT filesystem:&lt;br /&gt;
&lt;br /&gt;
 mkfs.vfat /dev/mmcblk0p1&lt;br /&gt;
&lt;br /&gt;
Note: if you do not have mkfs.vfat you must find and install the &amp;quot;dosfstools&amp;quot; package. This package does not seem to be in the official feeds, but an unofficial build may be downloaded from http://members.shaw.ca/mmontour/neo/dosfstools_2.11-r0_armv4t.ipk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The second partition is about to be formatted with ext3 (for ext2 to work you need to make sure you compiled the kernel with the correct configuration):&lt;br /&gt;
&lt;br /&gt;
 mkfs.ext3 /dev/mmcblk0p2&lt;br /&gt;
&lt;br /&gt;
== Populate SD card ==&lt;br /&gt;
&lt;br /&gt;
Your sd card is now ready to be filled up with the rootfs and the needed kernel to boot.&lt;br /&gt;
&lt;br /&gt;
Mount the second partition of your SD card somewhere and put the image on it:&lt;br /&gt;
&lt;br /&gt;
 mount /dev/mmcblk0p2 /mnt/moko&lt;br /&gt;
 tar -C /mnt/moko/ -xzvf openmoko-devel-image-fic-gta01-20070313022035.rootfs.tar.gz&lt;br /&gt;
&lt;br /&gt;
'''''Note:''''' As always in this guide the device name as well as the rootfs name needs to be adjusted to your device and filename structure&lt;br /&gt;
&lt;br /&gt;
'''''Note:''''' There's a nice gotcha to take care about if you use your host OS automount.  Some hosts mount these removable devices with &amp;quot;nodev&amp;quot; option by default for security.  If the image you are unpacking has a populated /dev directory, the nodes will fail to create as devices then.  If auomounting the SD on your host, confirm there are no unexpected mount options by using &amp;quot;mount&amp;quot; command alone to list the mounts.&lt;br /&gt;
&lt;br /&gt;
The next step is to mount the first partition of the sd card and install the kernel on it.&lt;br /&gt;
&lt;br /&gt;
 mount /dev/mmcblk0p1 /mnt/mokokernel&lt;br /&gt;
 cp uImage-fic-gta01-latest.bin /mnt/mokokernel/uImage.bin&lt;br /&gt;
&lt;br /&gt;
Make sure your kernel is called ''uImage.bin'' after copying it to the card.&lt;br /&gt;
&lt;br /&gt;
Unmount both the rootfs partition and the kernel partition and make sure all remaining buffers are written to it:&lt;br /&gt;
&lt;br /&gt;
 umount /mnt/moko&lt;br /&gt;
 umount /mnt/mokokernel&lt;br /&gt;
 sync&lt;br /&gt;
&lt;br /&gt;
== Add uboot boot entry ==&lt;br /&gt;
Depending on the revision of the phone and the partition type (ext2/ext3) you are using, it might be necessary to add an entry to the bootmenu to be able to boot the system off your SD card.&lt;br /&gt;
If you are using a Freerunner and have created an FAT kernel/ext2 rootfs partition you should be able to boot from the card right out of the box, because a boot menu entry for this should already exist in the NOR/NAND boot menu.&lt;br /&gt;
In any other case you should at least make sure the needed entry exists in your menu before proceeding.&lt;br /&gt;
You will need to enter the uboot shell of the NAND boot menu for this. A description on how to connect to the uboot loader shell can be found in this article: [[Uboot#Bootloader_prompt]]. Details on howto get into the NAND boot menu can be found [[Booting#Log_into_U-Boot_in_the_NAND_Flash|here]].&lt;br /&gt;
&lt;br /&gt;
After you read these two references you should be connected to your NAND uboot shell right now. The first thing to do is to set the boot menu timeout to a really high value. Unfortunately if you don't do this, the boot loader will continue booting after the default timeout (60 seconds) even if you are connected to the uboot shell. Just enter the following command to the menu prompt:&lt;br /&gt;
&lt;br /&gt;
 setenv boot_menu_timeout 99999&lt;br /&gt;
&lt;br /&gt;
This will set the timeout to 99999 seconds which should definitely enough time for us finish whatever work we want accomplish in the boot loader shell.&lt;br /&gt;
&lt;br /&gt;
Now we will make sure a appropriate menu item for booting from sd exists, or create it otherwise. You can print the defined boot loader environment by issuing the command: &lt;br /&gt;
&lt;br /&gt;
 printenv&lt;br /&gt;
&lt;br /&gt;
If it shows a line beginning with ''menu_'' followed by the commands which are just to follow in this guide, you do not need to create a new menu entry. In any other case please proceed with the following.&lt;br /&gt;
&lt;br /&gt;
Please make sure you are using the correct configuration based on the decisions you made earlier.  For more information on the uboot prompt, see &lt;br /&gt;
 help &lt;br /&gt;
 help &amp;lt;command&amp;gt;&lt;br /&gt;
and [[Bootloader]] and [[Bootloader commands]].&lt;br /&gt;
&lt;br /&gt;
{{Note| The backslashes (\) are important for uboot to set the command as new environment variable (menu_9) instead of just executing them as soon as enter is pressed.}}&lt;br /&gt;
&lt;br /&gt;
{{Note| Copy and paste may not work. To get copy/paste working, you will need the [[NeoCon|neocon]] terminal emulator and add a per-character delay.  Otherwise, you will have to type in the commandline manually.}}&lt;br /&gt;
&lt;br /&gt;
It is important to distinguish between FAT or ext2 kernel partitions and ext2 or ext3 root partitions at this point. &lt;br /&gt;
&lt;br /&gt;
'''Boot entry for FAT kernel+ext3 rootfs partitions:'''&lt;br /&gt;
&lt;br /&gt;
 setenv menu_9 Boot from microSD (FAT+ext3): setenv bootargs \${bootargs_base} rootfstype=ext3 root=/dev/mmcblk0p2 rootdelay=5 \${mtdparts} ro\; mmcinit\; fatload mmc 1 0x32000000 \${sd_image_name}\; bootm 0x32000000&lt;br /&gt;
&lt;br /&gt;
'''Boot entry for FAT kernel+ext2 rootfs partitions:'''&lt;br /&gt;
&lt;br /&gt;
 setenv menu_9 Boot from microSD (FAT+ext2): setenv bootargs \${bootargs_base} rootfstype=ext2 root=/dev/mmcblk0p2 rootdelay=5 \${mtdparts} ro\; mmcinit\; fatload mmc 1 0x32000000 \${sd_image_name}\; bootm 0x32000000&lt;br /&gt;
&lt;br /&gt;
'''Boot entry for ext2 kernel+ext2 rootfs partitions: (requires newer u-boot)'''&lt;br /&gt;
&lt;br /&gt;
 setenv menu_2 Boot from microSD part2 (ext2+ext2): setenv bootargs \${bootargs_base} rootfstype=ext2 root=/dev/mmcblk0p2 rootdelay=5 \${mtdparts} ro\; mmcinit\; ext2load mmc 1 0x32000000 \${sd_image_name}\; bootm 0x32000000&lt;br /&gt;
You are nearly done. Just issue a&lt;br /&gt;
&lt;br /&gt;
 printenv&lt;br /&gt;
&lt;br /&gt;
and verify that your newly created entry is correctly displayed (This time the backslashes are not displayed anyone).&lt;br /&gt;
&lt;br /&gt;
If everything looks fine enter&lt;br /&gt;
&lt;br /&gt;
 saveenv&lt;br /&gt;
&lt;br /&gt;
into the prompt and press enter. The new configuration should now be saved to the NAND.&lt;br /&gt;
&lt;br /&gt;
Shutdown your neo with the following command:&lt;br /&gt;
&lt;br /&gt;
 neo1973 power-off&lt;br /&gt;
&lt;br /&gt;
After you restarted the Neo and got back to the NAND boot menu you should be able to select your newly created menu entry and successfully boot into the rootfs from your SD card.&lt;br /&gt;
&lt;br /&gt;
== Appendix ==&lt;br /&gt;
&lt;br /&gt;
=== Boot from SDHC ===&lt;br /&gt;
&lt;br /&gt;
{{Note|the following text was written for the Neo1973. SDHC and SD should both work in a Freerunner if you have u-boot from 2008-07-23 or later.}}&lt;br /&gt;
&lt;br /&gt;
As SDHC is currently not supported in u-boot you can't use the Booting from SD guide.&lt;br /&gt;
But there's a kind of workaround that is a good option to have at least your rootfs on the microSDHC:&lt;br /&gt;
&lt;br /&gt;
First you can follow Step 1 to get an kernel-image with mmc- and ext2-support. But instead of copying the image to the rootfs you will have to flash it to the Neo's internal NAND-Flash (using [[Dfu-util]]).&lt;br /&gt;
Now you can continue with Step 2 (like mentioned before you do not have to copy your uImage to the rootfs) and follow the instructions to Step 3.&lt;br /&gt;
Instead of the setenv commands in Step 3 you have to enter the following:&lt;br /&gt;
&lt;br /&gt;
 GTA01Bv4 # setenv menu_5 Boot from SDHC: setenv  bootargs root=/dev/mmcblk0p1 console=tty0 rootdelay=5 neo1973-nand:0x00040000(u-boot),0x00004000(u-boot_env),0x00200000(kernel),0x000a0000(splash)\; nand read.e 0x32000000 kernel\; bootm 0x32000000&lt;br /&gt;
 GTA01Bv4 # saveenv&lt;br /&gt;
&lt;br /&gt;
And that's it!&lt;br /&gt;
Now you can use the newly created menu option &amp;quot;Boot from SDHC&amp;quot; to boot the internal kernel, using the root-filesystem on the microSDHC.&lt;br /&gt;
&lt;br /&gt;
=== Autoboot from SDHC ===&lt;br /&gt;
&lt;br /&gt;
Maybe you want to Boot automatically from SDHC: &lt;br /&gt;
Set a new Bootmenu Entry for booting from NAND first&lt;br /&gt;
&lt;br /&gt;
 GTA01Bv4 # setenv menu_6 Boot from NAND: setenv bootargs \${bootargs_base} \${mtdparts}\; nand read.e 0x32000000 kernel\; bootm 0x32000000&lt;br /&gt;
 GTA01Bv4 # saveenv&lt;br /&gt;
&lt;br /&gt;
then Power-off, and enter the Bootmenu to test the new Entry.If you can boot from NAND, shutdown, enter Boot menu, connect to bootloader and set the (auto)bootcmd for boot from SDHC:&lt;br /&gt;
&lt;br /&gt;
 GTA01Bv4 # setenv bootcmd setenv bootargs root=/dev/mmcblk0p1 rootdelay=10 console=tty0 neo1973-nand:0x00040000(u-boot),0x00004000(u-boot_env),0x00200000(kernel),0x000a0000(splash)\; nand read.e 0x32000000 kernel\; bootm 0x32000000 &lt;br /&gt;
 GTA01Bv4 # saveenv&lt;br /&gt;
&lt;br /&gt;
Now you boot from SDHC everytime you press the Power-Button or reboot and if you like to boot from NAND -just use the bootmenu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Fixing udev automount ===&lt;br /&gt;
&lt;br /&gt;
Udev automatically mounts the SD Card in /media/mmcblk0p1/ you can disable this with&lt;br /&gt;
&lt;br /&gt;
 echo /dev/mmcblk &amp;gt;&amp;gt; /etc/udev/mount.blacklist&lt;br /&gt;
&lt;br /&gt;
=== Remarks on Kernel Parameters ===&lt;br /&gt;
&lt;br /&gt;
==== loglevel ====&lt;br /&gt;
&lt;br /&gt;
Some people suggested adding:&lt;br /&gt;
&lt;br /&gt;
 loglevel=8&lt;br /&gt;
&lt;br /&gt;
to the kernel command line. IF you also have &amp;quot;console=tty0&amp;quot; on your kernel commandline this makes the boot process extremely slow because the framebuffer (the neo display in text mode) has to print out tons of lines of debug messages like:&lt;br /&gt;
&lt;br /&gt;
 s3c2410-sdi s3c2410-sdi: ......&lt;br /&gt;
 mmc0: ....&lt;br /&gt;
&lt;br /&gt;
{{Languages|Booting_from_SD}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Guides]]&lt;br /&gt;
[[Category:Flashing Openmoko]]&lt;br /&gt;
[[Category:Documentation]]&lt;br /&gt;
[[Category:System Developers]]&lt;/div&gt;</summary>
		<author><name>Warmcat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Booting_the_Neo_FreeRunner_from_SD_via_U-Boot</id>
		<title>Booting the Neo FreeRunner from SD via U-Boot</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Booting_the_Neo_FreeRunner_from_SD_via_U-Boot"/>
				<updated>2008-07-30T07:40:03Z</updated>
		
		<summary type="html">&lt;p&gt;Warmcat: /* Populate SD card */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page explains how to boot a Freerunner from the SD card rather than from the built-in NAND flash memory. The SD card shares a bus with the GPU, so it may not perform as well, but it is another option.&lt;br /&gt;
&lt;br /&gt;
{{Warning | Booting from SDHC may cause problems at this time. }} See [http://thread.gmane.org/gmane.comp.handhelds.openmoko.community/19154/focus=19281| this thread.] &lt;br /&gt;
&lt;br /&gt;
== How it Works ==&lt;br /&gt;
&lt;br /&gt;
On the Neo, [[u-boot]] performs a similar role to the 'grub' bootloader on a PC. U-boot loads a kernel image into memory and then passes a list of parameters to the kernel. These parameters specify, among other things, the device on which the root filesystem is located.&lt;br /&gt;
&lt;br /&gt;
As the kernel boots, it initializes the hardware and then mounts the root filesystem. The kernel then runs &amp;quot;/sbin/init&amp;quot;, which handles the rest of the boot-up sequence (such as displaying the splash screen and progress bar).&lt;br /&gt;
&lt;br /&gt;
This sequence is the same whether the device is booting from built-in Flash or from the SD card. The differences are how the kernel is loaded, and which device is mounted as the root filesystem.&lt;br /&gt;
&lt;br /&gt;
The following sections provide additional details.&lt;br /&gt;
&lt;br /&gt;
=== Menu Entries ===&lt;br /&gt;
&lt;br /&gt;
U-boot menu entries are defined by environment variables named &amp;quot;menu_X&amp;quot; (where X is a number). The value of the environment variable is a string &amp;quot;&amp;lt;label&amp;gt;:&amp;lt;commands&amp;gt;&amp;quot;, where &amp;lt;label&amp;gt; is the text shown on the screen, and &amp;lt;commands&amp;gt; is a sequence of u-boot commands (delimited by ';' characters) to be executed when the menu item is selected. When entering a string of commands, the ';' and '$' characters must be backslash-escaped (&amp;quot;\;&amp;quot; and &amp;quot;\$&amp;quot;). &lt;br /&gt;
&lt;br /&gt;
=== Loading the Kernel ===&lt;br /&gt;
&lt;br /&gt;
A pair of u-boot commands must be used to load the kernel from SD. First is &amp;quot;mmcinit&amp;quot;, which will cause u-boot to detect the card. Next is a command to load a file into memory - either &amp;quot;fatload&amp;quot; or &amp;quot;ext2load&amp;quot; depending on whether the kernel is on a FAT filesytem or an ext2/ext3 filesystem.&lt;br /&gt;
&lt;br /&gt;
The command syntax is:&lt;br /&gt;
&lt;br /&gt;
 fatload mmc 1:&amp;amp;lt;p&amp;amp;gt; 0x32000000 &amp;amp;lt;filepath&amp;amp;gt;&lt;br /&gt;
 ext2load mmc 1:&amp;amp;lt;p&amp;amp;gt; 0x32000000 &amp;amp;lt;filepath&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;amp;lt;p&amp;amp;gt; is the partition number, and &amp;amp;lt;filepath&amp;amp;gt; is the path to the file that is to be loaded.&lt;br /&gt;
&lt;br /&gt;
{{Note| The &amp;quot;ext2load&amp;quot; command is broken on u-boot binary earlier than &amp;quot;20080723&amp;quot;, including the one shipped with the first batch of Freerunners, are affected by bug [http://docs.openmoko.org/trac/ticket/799 #799]. If you update your U-Boot and kernel packages you can use direct ext2 / 3 boot all in one partition.}}&lt;br /&gt;
&lt;br /&gt;
{{Warning | Be careful when updating u-boot on a Neo1973 as there is a risk of bricking the device (unless you have a debug board). This is not an issue for the Freerunner as it has a protected copy of u-boot in the NOR flash }}&lt;br /&gt;
&lt;br /&gt;
{{Note| U-Boot only supports SDHC protocol on Freerunner: on the Neo1973, u-boot is unable to access SDHC cards (4G or larger). The kernel does have SDHC support on Neo1973, so it is possible to have the root filesystem on SDHC and the kernel on NAND flash to work around it. }}&lt;br /&gt;
&lt;br /&gt;
=== Root Filesystem Parameters ===&lt;br /&gt;
&lt;br /&gt;
The contents of the &amp;quot;bootargs&amp;quot; environment variable are passed to the kernel. Bootargs is a space-delimited list of &amp;quot;name=value&amp;quot; definitions. The items relevant to SD-booting are &amp;quot;root&amp;quot;, &amp;quot;rootfstype&amp;quot;, and &amp;quot;rootdelay&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
For example, the following parameters would tell the kernel to mount the third partition of the SD-card as an ext3 filesystem:&lt;br /&gt;
&lt;br /&gt;
  root=/dev/mmcblk0p3 rootfstype=ext3 rootdelay=5 &lt;br /&gt;
&lt;br /&gt;
The &amp;quot;rootdelay&amp;quot; parameter allows time for the card to be properly initialized before it is accessed. &lt;br /&gt;
&lt;br /&gt;
Note that the kernel must have built-in support (i.e. not a module) for the filesystem specified in &amp;quot;rootfstype&amp;quot;. The default Openmoko kernel configs as of [http://git.openmoko.org/?p=kernel.git;a=commit;h=642cbda5f3b7e7a61512426e1d30a41ab4691123| 2008-07-17] have built-in support for both ext2 and ext3. You can check the available filesystems with the Linux command&lt;br /&gt;
&lt;br /&gt;
 less /proc/filesystems&lt;br /&gt;
&lt;br /&gt;
It is not possible to use VFAT for the root filesystem.&lt;br /&gt;
&lt;br /&gt;
==== ext2 vs. ext3 ====&lt;br /&gt;
&lt;br /&gt;
Opinion is divided on whether it is better to use ext2 or ext3 for the root filesystem. Ext3 in general is a superior choice, because it is a journalled filesystem and so does not require a long 'fsck' (file system check) after an unclean shutdown. However, if used on a flash device that does not support wear-leveling then ext3 may cause premature wear on the blocks of the card where the journal is stored. SD cards are supposed to support wear leveling, but this can not be guaranteed for all vendors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Acquiring a tarfile rootfs ==&lt;br /&gt;
&lt;br /&gt;
There are two ways of acquiring an rootfs image as a tar archive. You can either build it on your own using the OpenEmbedded Distribution. Or download it from the openmoko buildhost.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Possibility 1: Downloading the rootfs/kernel tar from the Openmoko buildhost ===&lt;br /&gt;
&lt;br /&gt;
Choose and find the rootfs/kernel combo you would like to install at [[Latest Images]].&lt;br /&gt;
&lt;br /&gt;
=== Possibility 2: Building a tarfile distribution using OpenEmbedded ===&lt;br /&gt;
&lt;br /&gt;
Another possibility to get a tar archive of your rootfs is to build it on your own with the OpenEmbedded environment.&lt;br /&gt;
&lt;br /&gt;
To build OM-2007.2 you need to add &amp;quot;tar&amp;quot; to the image types in your ''local.conf'':&lt;br /&gt;
&lt;br /&gt;
 IMAGE_FSTYPES = &amp;quot;jffs2 tar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
After that build a new image by issuing:&lt;br /&gt;
 &lt;br /&gt;
 bitbake openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
or if you are using the MokoMakefile: &lt;br /&gt;
 &lt;br /&gt;
 make openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
After the process finished there will be a ''OpenMoko-....tar'' in the deploy directory, which is your newly created rootfs archive&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Prepare the SD card ==&lt;br /&gt;
&lt;br /&gt;
=== Partioning the SD card ===&lt;br /&gt;
&lt;br /&gt;
u-boot pre-2008-07-23 can only boot from FAT filesystems; if you update u-boot, you can boot from FAT or ext2.&lt;br /&gt;
This example shows how to do an example partition using the fdisk utility. Feel free to use the partitioning utility of your liking for this task.&lt;br /&gt;
&lt;br /&gt;
 fdisk /dev/mmcblk0&lt;br /&gt;
&lt;br /&gt;
'''''Note:''''' The device file might differ on your system. If you are not sure about it, you may check your kernel message log by calling ''dmesg'' to find the correct device.&lt;br /&gt;
&lt;br /&gt;
We will now create a 8 mb partition for our kernel and another one for the rootfs which will take up all the remaining space.&lt;br /&gt;
&lt;br /&gt;
   Command (m for help): d&lt;br /&gt;
   Selected partition 1&lt;br /&gt;
   Command (m for help): n&lt;br /&gt;
   Command action&lt;br /&gt;
      e   extended&lt;br /&gt;
      p   primary partition (1-4)&lt;br /&gt;
   p&lt;br /&gt;
   Partition number (1-4): 1&lt;br /&gt;
   First cylinder (1-983, default 1):&lt;br /&gt;
   Using default value 1&lt;br /&gt;
   Last cylinder or +size or +sizeM or +sizeK (1-983, default 983): +8M&lt;br /&gt;
   Command (m for help): n&lt;br /&gt;
   Command action&lt;br /&gt;
      e   extended&lt;br /&gt;
      p   primary partition (1-4)&lt;br /&gt;
   p&lt;br /&gt;
   Partition number (1-4): 2&lt;br /&gt;
   First cylinder (18-983, default 18):&lt;br /&gt;
   Using default value 18&lt;br /&gt;
   Last cylinder or +size or +sizeM or +sizeK (18-983, default 983):&lt;br /&gt;
   Using default value 983&lt;br /&gt;
   Command (m for help): w&lt;br /&gt;
   The partition table has been altered!&lt;br /&gt;
   Calling ioctl() to re-read partition table.&lt;br /&gt;
   Syncing disks.&lt;br /&gt;
&lt;br /&gt;
=== Formatting the SD card ===&lt;br /&gt;
&lt;br /&gt;
Just issue the following command to create at FAT filesystem:&lt;br /&gt;
&lt;br /&gt;
 mkfs.vfat /dev/mmcblk0p1&lt;br /&gt;
&lt;br /&gt;
Note: if you do not have mkfs.vfat you must find and install the &amp;quot;dosfstools&amp;quot; package. This package does not seem to be in the official feeds, but an unofficial build may be downloaded from http://members.shaw.ca/mmontour/neo/dosfstools_2.11-r0_armv4t.ipk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The second partition is about to be formatted with ext3 (for ext2 to work you need to make sure you compiled the kernel with the correct configuration):&lt;br /&gt;
&lt;br /&gt;
 mkfs.ext3 /dev/mmcblk0p2&lt;br /&gt;
&lt;br /&gt;
== Populate SD card ==&lt;br /&gt;
&lt;br /&gt;
Your sd card is now ready to be filled up with the rootfs and the needed kernel to boot.&lt;br /&gt;
&lt;br /&gt;
Mount the second partition of your SD card somewhere and put the image on it:&lt;br /&gt;
&lt;br /&gt;
 mount /dev/mmcblk0p2 /mnt/moko&lt;br /&gt;
 tar -C /mnt/moko/ -xzvf openmoko-devel-image-fic-gta01-20070313022035.rootfs.tar.gz&lt;br /&gt;
&lt;br /&gt;
'''''Note:''''' As always in this guide the device name as well as the rootfs name needs to be adjusted to your device and filename structure&lt;br /&gt;
&lt;br /&gt;
'''''Note:''''' There's a nice gotcha to take care about if you use your host OS automount.  Some hosts mount these removable devices with &amp;quot;nodev&amp;quot; option by default for security.  If the image you are unpacking has a populated /dev directory, the nodes will fail to create as devices then.  If auomounting the SD on your host, confirm there are no unexpected mount options by using &amp;quot;mount&amp;quot; command alone to list the mounts.&lt;br /&gt;
&lt;br /&gt;
The next step is to mount the first partition of the sd card and install the kernel on it.&lt;br /&gt;
&lt;br /&gt;
 mount /dev/mmcblk0p1 /mnt/mokokernel&lt;br /&gt;
 cp uImage-fic-gta01-latest.bin /mnt/mokokernel/uImage.bin&lt;br /&gt;
&lt;br /&gt;
Make sure your kernel is called ''uImage.bin'' after copying it to the card.&lt;br /&gt;
&lt;br /&gt;
Unmount both the rootfs partition and the kernel partition and make sure all remaining buffers are written to it:&lt;br /&gt;
&lt;br /&gt;
 umount /mnt/moko&lt;br /&gt;
 umount /mnt/mokokernel&lt;br /&gt;
 sync&lt;br /&gt;
&lt;br /&gt;
== Add uboot boot entry ==&lt;br /&gt;
Depending on the revision of the phone and the partition type (ext2/ext3) you are using, it might be necessary to add an entry to the bootmenu to be able to boot the system off your SD card.&lt;br /&gt;
If you are using a Freerunner and have created an FAT kernel/ext2 rootfs partition you should be able to boot from the card right out of the box, because a boot menu entry for this should already exist in the NOR/NAND boot menu.&lt;br /&gt;
In any other case you should at least make sure the needed entry exists in your menu before proceeding.&lt;br /&gt;
You will need to enter the uboot shell of the NAND boot menu for this. A description on how to connect to the uboot loader shell can be found in this article: [[Uboot#Bootloader_prompt]]. Details on howto get into the NAND boot menu can be found [[Booting#Log_into_U-Boot_in_the_NAND_Flash|here]].&lt;br /&gt;
&lt;br /&gt;
After you read these two references you should be connected to your NAND uboot shell right now. The first thing to do is to set the boot menu timeout to a really high value. Unfortunately if you don't do this, the boot loader will continue booting after the default timeout (60 seconds) even if you are connected to the uboot shell. Just enter the following command to the menu prompt:&lt;br /&gt;
&lt;br /&gt;
 setenv boot_menu_timeout 99999&lt;br /&gt;
&lt;br /&gt;
This will set the timeout to 99999 seconds which should definitely enough time for us finish whatever work we want accomplish in the boot loader shell.&lt;br /&gt;
&lt;br /&gt;
Now we will make sure a appropriate menu item for booting from sd exists, or create it otherwise. You can print the defined boot loader environment by issuing the command: &lt;br /&gt;
&lt;br /&gt;
 printenv&lt;br /&gt;
&lt;br /&gt;
If it shows a line beginning with ''menu_'' followed by the commands which are just to follow in this guide, you do not need to create a new menu entry. In any other case please proceed with the following.&lt;br /&gt;
&lt;br /&gt;
Please make sure you are using the correct configuration based on the decisions you made earlier.  For more information on the uboot prompt, see &lt;br /&gt;
 help &lt;br /&gt;
 help &amp;lt;command&amp;gt;&lt;br /&gt;
and [[Bootloader]] and [[Bootloader commands]].&lt;br /&gt;
&lt;br /&gt;
{{Note| The backslashes (\) are important for uboot to set the command as new environment variable (menu_9) instead of just executing them as soon as enter is pressed.}}&lt;br /&gt;
&lt;br /&gt;
{{Note| Copy and paste may not work. To get copy/paste working, you will need the [[NeoCon|neocon]] terminal emulator and add a per-character delay.  Otherwise, you will have to type in the commandline manually.}}&lt;br /&gt;
&lt;br /&gt;
It is important to distinguish between FAT or ext2 kernel partitions and ext2 or ext3 root partitions at this point. &lt;br /&gt;
&lt;br /&gt;
'''Boot entry for FAT kernel+ext3 rootfs partitions:'''&lt;br /&gt;
&lt;br /&gt;
 setenv menu_9 Boot from microSD (FAT+ext3): setenv bootargs \${bootargs_base} rootfstype=ext3 root=/dev/mmcblk0p2 rootdelay=5 \${mtdparts} ro\; mmcinit\; fatload mmc 1 0x32000000 \${sd_image_name}\; bootm 0x32000000&lt;br /&gt;
&lt;br /&gt;
'''Boot entry for FAT kernel+ext2 rootfs partitions:'''&lt;br /&gt;
&lt;br /&gt;
 setenv menu_9 Boot from microSD (FAT+ext2): setenv bootargs \${bootargs_base} rootfstype=ext2 root=/dev/mmcblk0p2 rootdelay=5 \${mtdparts} ro\; mmcinit\; fatload mmc 1 0x32000000 \${sd_image_name}\; bootm 0x32000000&lt;br /&gt;
&lt;br /&gt;
'''Boot entry for ext2 kernel+ext2 rootfs partitions: (requires newer u-boot)'''&lt;br /&gt;
&lt;br /&gt;
 setenv menu_2 Boot from microSD part2 (ext2+ext2): setenv bootargs \${bootargs_base} rootfstype=ext2 root=/dev/mmcblk0p2 rootdelay=5 \${mtdparts} ro\; mmcinit\; ext2load mmc 1 0x32000000 \${sd_image_name}\; bootm 0x32000000&lt;br /&gt;
You are nearly done. Just issue a&lt;br /&gt;
&lt;br /&gt;
 printenv&lt;br /&gt;
&lt;br /&gt;
and verify that your newly created entry is correctly displayed (This time the backslashes are not displayed anyone).&lt;br /&gt;
&lt;br /&gt;
If everything looks fine enter&lt;br /&gt;
&lt;br /&gt;
 saveenv&lt;br /&gt;
&lt;br /&gt;
into the prompt and press enter. The new configuration should now be saved to the NAND.&lt;br /&gt;
&lt;br /&gt;
Shutdown your neo with the following command:&lt;br /&gt;
&lt;br /&gt;
 neo1973 power-off&lt;br /&gt;
&lt;br /&gt;
After you restarted the Neo and got back to the NAND boot menu you should be able to select your newly created menu entry and successfully boot into the rootfs from your SD card.&lt;br /&gt;
&lt;br /&gt;
== Appendix ==&lt;br /&gt;
&lt;br /&gt;
=== Boot from SDHC ===&lt;br /&gt;
&lt;br /&gt;
{{Note|the following text was written for the Neo1973. SDHC and SD should both work in a Freerunner if you have u-boot from 2008-07-23 or later.}}&lt;br /&gt;
&lt;br /&gt;
As SDHC is currently not supported in u-boot you can't use the Booting from SD guide.&lt;br /&gt;
But there's a kind of workaround that is a good option to have at least your rootfs on the microSDHC:&lt;br /&gt;
&lt;br /&gt;
First you can follow Step 1 to get an kernel-image with mmc- and ext2-support. But instead of copying the image to the rootfs you will have to flash it to the Neo's internal NAND-Flash (using [[Dfu-util]]).&lt;br /&gt;
Now you can continue with Step 2 (like mentioned before you do not have to copy your uImage to the rootfs) and follow the instructions to Step 3.&lt;br /&gt;
Instead of the setenv commands in Step 3 you have to enter the following:&lt;br /&gt;
&lt;br /&gt;
 GTA01Bv4 # setenv menu_5 Boot from SDHC: setenv  bootargs root=/dev/mmcblk0p1 console=tty0 rootdelay=5 neo1973-nand:0x00040000(u-boot),0x00004000(u-boot_env),0x00200000(kernel),0x000a0000(splash)\; nand read.e 0x32000000 kernel\; bootm 0x32000000&lt;br /&gt;
 GTA01Bv4 # saveenv&lt;br /&gt;
&lt;br /&gt;
And that's it!&lt;br /&gt;
Now you can use the newly created menu option &amp;quot;Boot from SDHC&amp;quot; to boot the internal kernel, using the root-filesystem on the microSDHC.&lt;br /&gt;
&lt;br /&gt;
=== Autoboot from SDHC ===&lt;br /&gt;
&lt;br /&gt;
Maybe you want to Boot automatically from SDHC: &lt;br /&gt;
Set a new Bootmenu Entry for booting from NAND first&lt;br /&gt;
&lt;br /&gt;
 GTA01Bv4 # setenv menu_6 Boot from NAND: setenv bootargs \${bootargs_base} \${mtdparts}\; nand read.e 0x32000000 kernel\; bootm 0x32000000&lt;br /&gt;
 GTA01Bv4 # saveenv&lt;br /&gt;
&lt;br /&gt;
then Power-off, and enter the Bootmenu to test the new Entry.If you can boot from NAND, shutdown, enter Boot menu, connect to bootloader and set the (auto)bootcmd for boot from SDHC:&lt;br /&gt;
&lt;br /&gt;
 GTA01Bv4 # setenv bootcmd setenv bootargs root=/dev/mmcblk0p1 rootdelay=10 console=tty0 neo1973-nand:0x00040000(u-boot),0x00004000(u-boot_env),0x00200000(kernel),0x000a0000(splash)\; nand read.e 0x32000000 kernel\; bootm 0x32000000 &lt;br /&gt;
 GTA01Bv4 # saveenv&lt;br /&gt;
&lt;br /&gt;
Now you boot from SDHC everytime you press the Power-Button or reboot and if you like to boot from NAND -just use the bootmenu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Fixing udev automount ===&lt;br /&gt;
&lt;br /&gt;
Udev automatically mounts the SD Card in /media/mmcblk0p1/ you can disable this with&lt;br /&gt;
&lt;br /&gt;
 echo /dev/mmcblk &amp;gt;&amp;gt; /etc/udev/mount.blacklist&lt;br /&gt;
&lt;br /&gt;
=== Remarks on Kernel Parameters ===&lt;br /&gt;
&lt;br /&gt;
==== loglevel ====&lt;br /&gt;
&lt;br /&gt;
Some people suggested adding:&lt;br /&gt;
&lt;br /&gt;
 loglevel=8&lt;br /&gt;
&lt;br /&gt;
to the kernel command line. This makes the boot process extremely slow because &lt;br /&gt;
the framebuffer (the neo display in text mode) has to print out tons of lines of&lt;br /&gt;
debug messages like:&lt;br /&gt;
&lt;br /&gt;
 s3c2410-sdi s3c2410-sdi: ......&lt;br /&gt;
 mmc0: ....&lt;br /&gt;
&lt;br /&gt;
{{Languages|Booting_from_SD}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Guides]]&lt;br /&gt;
[[Category:Flashing Openmoko]]&lt;br /&gt;
[[Category:Documentation]]&lt;br /&gt;
[[Category:System Developers]]&lt;/div&gt;</summary>
		<author><name>Warmcat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Booting_the_Neo_FreeRunner_from_SD_via_U-Boot</id>
		<title>Booting the Neo FreeRunner from SD via U-Boot</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Booting_the_Neo_FreeRunner_from_SD_via_U-Boot"/>
				<updated>2008-07-30T07:36:06Z</updated>
		
		<summary type="html">&lt;p&gt;Warmcat: /* Loading the Kernel */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page explains how to boot a Freerunner from the SD card rather than from the built-in NAND flash memory. The SD card shares a bus with the GPU, so it may not perform as well, but it is another option.&lt;br /&gt;
&lt;br /&gt;
{{Warning | Booting from SDHC may cause problems at this time. }} See [http://thread.gmane.org/gmane.comp.handhelds.openmoko.community/19154/focus=19281| this thread.] &lt;br /&gt;
&lt;br /&gt;
== How it Works ==&lt;br /&gt;
&lt;br /&gt;
On the Neo, [[u-boot]] performs a similar role to the 'grub' bootloader on a PC. U-boot loads a kernel image into memory and then passes a list of parameters to the kernel. These parameters specify, among other things, the device on which the root filesystem is located.&lt;br /&gt;
&lt;br /&gt;
As the kernel boots, it initializes the hardware and then mounts the root filesystem. The kernel then runs &amp;quot;/sbin/init&amp;quot;, which handles the rest of the boot-up sequence (such as displaying the splash screen and progress bar).&lt;br /&gt;
&lt;br /&gt;
This sequence is the same whether the device is booting from built-in Flash or from the SD card. The differences are how the kernel is loaded, and which device is mounted as the root filesystem.&lt;br /&gt;
&lt;br /&gt;
The following sections provide additional details.&lt;br /&gt;
&lt;br /&gt;
=== Menu Entries ===&lt;br /&gt;
&lt;br /&gt;
U-boot menu entries are defined by environment variables named &amp;quot;menu_X&amp;quot; (where X is a number). The value of the environment variable is a string &amp;quot;&amp;lt;label&amp;gt;:&amp;lt;commands&amp;gt;&amp;quot;, where &amp;lt;label&amp;gt; is the text shown on the screen, and &amp;lt;commands&amp;gt; is a sequence of u-boot commands (delimited by ';' characters) to be executed when the menu item is selected. When entering a string of commands, the ';' and '$' characters must be backslash-escaped (&amp;quot;\;&amp;quot; and &amp;quot;\$&amp;quot;). &lt;br /&gt;
&lt;br /&gt;
=== Loading the Kernel ===&lt;br /&gt;
&lt;br /&gt;
A pair of u-boot commands must be used to load the kernel from SD. First is &amp;quot;mmcinit&amp;quot;, which will cause u-boot to detect the card. Next is a command to load a file into memory - either &amp;quot;fatload&amp;quot; or &amp;quot;ext2load&amp;quot; depending on whether the kernel is on a FAT filesytem or an ext2/ext3 filesystem.&lt;br /&gt;
&lt;br /&gt;
The command syntax is:&lt;br /&gt;
&lt;br /&gt;
 fatload mmc 1:&amp;amp;lt;p&amp;amp;gt; 0x32000000 &amp;amp;lt;filepath&amp;amp;gt;&lt;br /&gt;
 ext2load mmc 1:&amp;amp;lt;p&amp;amp;gt; 0x32000000 &amp;amp;lt;filepath&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;amp;lt;p&amp;amp;gt; is the partition number, and &amp;amp;lt;filepath&amp;amp;gt; is the path to the file that is to be loaded.&lt;br /&gt;
&lt;br /&gt;
{{Note| The &amp;quot;ext2load&amp;quot; command is broken on u-boot binary earlier than &amp;quot;20080723&amp;quot;, including the one shipped with the first batch of Freerunners, are affected by bug [http://docs.openmoko.org/trac/ticket/799 #799]. If you update your U-Boot and kernel packages you can use direct ext2 / 3 boot all in one partition.}}&lt;br /&gt;
&lt;br /&gt;
{{Warning | Be careful when updating u-boot on a Neo1973 as there is a risk of bricking the device (unless you have a debug board). This is not an issue for the Freerunner as it has a protected copy of u-boot in the NOR flash }}&lt;br /&gt;
&lt;br /&gt;
{{Note| U-Boot only supports SDHC protocol on Freerunner: on the Neo1973, u-boot is unable to access SDHC cards (4G or larger). The kernel does have SDHC support on Neo1973, so it is possible to have the root filesystem on SDHC and the kernel on NAND flash to work around it. }}&lt;br /&gt;
&lt;br /&gt;
=== Root Filesystem Parameters ===&lt;br /&gt;
&lt;br /&gt;
The contents of the &amp;quot;bootargs&amp;quot; environment variable are passed to the kernel. Bootargs is a space-delimited list of &amp;quot;name=value&amp;quot; definitions. The items relevant to SD-booting are &amp;quot;root&amp;quot;, &amp;quot;rootfstype&amp;quot;, and &amp;quot;rootdelay&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
For example, the following parameters would tell the kernel to mount the third partition of the SD-card as an ext3 filesystem:&lt;br /&gt;
&lt;br /&gt;
  root=/dev/mmcblk0p3 rootfstype=ext3 rootdelay=5 &lt;br /&gt;
&lt;br /&gt;
The &amp;quot;rootdelay&amp;quot; parameter allows time for the card to be properly initialized before it is accessed. &lt;br /&gt;
&lt;br /&gt;
Note that the kernel must have built-in support (i.e. not a module) for the filesystem specified in &amp;quot;rootfstype&amp;quot;. The default Openmoko kernel configs as of [http://git.openmoko.org/?p=kernel.git;a=commit;h=642cbda5f3b7e7a61512426e1d30a41ab4691123| 2008-07-17] have built-in support for both ext2 and ext3. You can check the available filesystems with the Linux command&lt;br /&gt;
&lt;br /&gt;
 less /proc/filesystems&lt;br /&gt;
&lt;br /&gt;
It is not possible to use VFAT for the root filesystem.&lt;br /&gt;
&lt;br /&gt;
==== ext2 vs. ext3 ====&lt;br /&gt;
&lt;br /&gt;
Opinion is divided on whether it is better to use ext2 or ext3 for the root filesystem. Ext3 in general is a superior choice, because it is a journalled filesystem and so does not require a long 'fsck' (file system check) after an unclean shutdown. However, if used on a flash device that does not support wear-leveling then ext3 may cause premature wear on the blocks of the card where the journal is stored. SD cards are supposed to support wear leveling, but this can not be guaranteed for all vendors.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Acquiring a tarfile rootfs ==&lt;br /&gt;
&lt;br /&gt;
There are two ways of acquiring an rootfs image as a tar archive. You can either build it on your own using the OpenEmbedded Distribution. Or download it from the openmoko buildhost.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Possibility 1: Downloading the rootfs/kernel tar from the Openmoko buildhost ===&lt;br /&gt;
&lt;br /&gt;
Choose and find the rootfs/kernel combo you would like to install at [[Latest Images]].&lt;br /&gt;
&lt;br /&gt;
=== Possibility 2: Building a tarfile distribution using OpenEmbedded ===&lt;br /&gt;
&lt;br /&gt;
Another possibility to get a tar archive of your rootfs is to build it on your own with the OpenEmbedded environment.&lt;br /&gt;
&lt;br /&gt;
To build OM-2007.2 you need to add &amp;quot;tar&amp;quot; to the image types in your ''local.conf'':&lt;br /&gt;
&lt;br /&gt;
 IMAGE_FSTYPES = &amp;quot;jffs2 tar&amp;quot;&lt;br /&gt;
&lt;br /&gt;
After that build a new image by issuing:&lt;br /&gt;
 &lt;br /&gt;
 bitbake openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
or if you are using the MokoMakefile: &lt;br /&gt;
 &lt;br /&gt;
 make openmoko-devel-image&lt;br /&gt;
&lt;br /&gt;
After the process finished there will be a ''OpenMoko-....tar'' in the deploy directory, which is your newly created rootfs archive&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Prepare the SD card ==&lt;br /&gt;
&lt;br /&gt;
=== Partioning the SD card ===&lt;br /&gt;
&lt;br /&gt;
u-boot pre-2008-07-23 can only boot from FAT filesystems; if you update u-boot, you can boot from FAT or ext2.&lt;br /&gt;
This example shows how to do an example partition using the fdisk utility. Feel free to use the partitioning utility of your liking for this task.&lt;br /&gt;
&lt;br /&gt;
 fdisk /dev/mmcblk0&lt;br /&gt;
&lt;br /&gt;
'''''Note:''''' The device file might differ on your system. If you are not sure about it, you may check your kernel message log by calling ''dmesg'' to find the correct device.&lt;br /&gt;
&lt;br /&gt;
We will now create a 8 mb partition for our kernel and another one for the rootfs which will take up all the remaining space.&lt;br /&gt;
&lt;br /&gt;
   Command (m for help): d&lt;br /&gt;
   Selected partition 1&lt;br /&gt;
   Command (m for help): n&lt;br /&gt;
   Command action&lt;br /&gt;
      e   extended&lt;br /&gt;
      p   primary partition (1-4)&lt;br /&gt;
   p&lt;br /&gt;
   Partition number (1-4): 1&lt;br /&gt;
   First cylinder (1-983, default 1):&lt;br /&gt;
   Using default value 1&lt;br /&gt;
   Last cylinder or +size or +sizeM or +sizeK (1-983, default 983): +8M&lt;br /&gt;
   Command (m for help): n&lt;br /&gt;
   Command action&lt;br /&gt;
      e   extended&lt;br /&gt;
      p   primary partition (1-4)&lt;br /&gt;
   p&lt;br /&gt;
   Partition number (1-4): 2&lt;br /&gt;
   First cylinder (18-983, default 18):&lt;br /&gt;
   Using default value 18&lt;br /&gt;
   Last cylinder or +size or +sizeM or +sizeK (18-983, default 983):&lt;br /&gt;
   Using default value 983&lt;br /&gt;
   Command (m for help): w&lt;br /&gt;
   The partition table has been altered!&lt;br /&gt;
   Calling ioctl() to re-read partition table.&lt;br /&gt;
   Syncing disks.&lt;br /&gt;
&lt;br /&gt;
=== Formatting the SD card ===&lt;br /&gt;
&lt;br /&gt;
Just issue the following command to create at FAT filesystem:&lt;br /&gt;
&lt;br /&gt;
 mkfs.vfat /dev/mmcblk0p1&lt;br /&gt;
&lt;br /&gt;
Note: if you do not have mkfs.vfat you must find and install the &amp;quot;dosfstools&amp;quot; package. This package does not seem to be in the official feeds, but an unofficial build may be downloaded from http://members.shaw.ca/mmontour/neo/dosfstools_2.11-r0_armv4t.ipk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The second partition is about to be formatted with ext3 (for ext2 to work you need to make sure you compiled the kernel with the correct configuration):&lt;br /&gt;
&lt;br /&gt;
 mkfs.ext3 /dev/mmcblk0p2&lt;br /&gt;
&lt;br /&gt;
== Populate SD card ==&lt;br /&gt;
&lt;br /&gt;
Your sd card is now ready to be filled up with the rootfs and the needed kernel to boot.&lt;br /&gt;
&lt;br /&gt;
Mount the second partition of your SD card somewhere and put the image on it:&lt;br /&gt;
&lt;br /&gt;
 mount /dev/mmcblk0p2 /mnt/moko&lt;br /&gt;
 tar -C /mnt/moko/ -xzvf openmoko-devel-image-fic-gta01-20070313022035.rootfs.tar.gz&lt;br /&gt;
&lt;br /&gt;
'''''Note:''''' As always in this guide the device name as well as the rootfs name needs to be adjusted to your device and filename structure&lt;br /&gt;
&lt;br /&gt;
The next step is to mount the first partition of the sd card and install the kernel on it.&lt;br /&gt;
&lt;br /&gt;
 mount /dev/mmcblk0p1 /mnt/mokokernel&lt;br /&gt;
 cp uImage-fic-gta01-latest.bin /mnt/mokokernel/uImage.bin&lt;br /&gt;
&lt;br /&gt;
Make sure your kernel is called ''uImage.bin'' after copying it to the card.&lt;br /&gt;
&lt;br /&gt;
Unmount both the rootfs partition and the kernel partition and make sure all remaining buffers are written to it:&lt;br /&gt;
&lt;br /&gt;
 umount /mnt/moko&lt;br /&gt;
 umount /mnt/mokokernel&lt;br /&gt;
 sync&lt;br /&gt;
&lt;br /&gt;
== Add uboot boot entry ==&lt;br /&gt;
Depending on the revision of the phone and the partition type (ext2/ext3) you are using, it might be necessary to add an entry to the bootmenu to be able to boot the system off your SD card.&lt;br /&gt;
If you are using a Freerunner and have created an FAT kernel/ext2 rootfs partition you should be able to boot from the card right out of the box, because a boot menu entry for this should already exist in the NOR/NAND boot menu.&lt;br /&gt;
In any other case you should at least make sure the needed entry exists in your menu before proceeding.&lt;br /&gt;
You will need to enter the uboot shell of the NAND boot menu for this. A description on how to connect to the uboot loader shell can be found in this article: [[Uboot#Bootloader_prompt]]. Details on howto get into the NAND boot menu can be found [[Booting#Log_into_U-Boot_in_the_NAND_Flash|here]].&lt;br /&gt;
&lt;br /&gt;
After you read these two references you should be connected to your NAND uboot shell right now. The first thing to do is to set the boot menu timeout to a really high value. Unfortunately if you don't do this, the boot loader will continue booting after the default timeout (60 seconds) even if you are connected to the uboot shell. Just enter the following command to the menu prompt:&lt;br /&gt;
&lt;br /&gt;
 setenv boot_menu_timeout 99999&lt;br /&gt;
&lt;br /&gt;
This will set the timeout to 99999 seconds which should definitely enough time for us finish whatever work we want accomplish in the boot loader shell.&lt;br /&gt;
&lt;br /&gt;
Now we will make sure a appropriate menu item for booting from sd exists, or create it otherwise. You can print the defined boot loader environment by issuing the command: &lt;br /&gt;
&lt;br /&gt;
 printenv&lt;br /&gt;
&lt;br /&gt;
If it shows a line beginning with ''menu_'' followed by the commands which are just to follow in this guide, you do not need to create a new menu entry. In any other case please proceed with the following.&lt;br /&gt;
&lt;br /&gt;
Please make sure you are using the correct configuration based on the decisions you made earlier.  For more information on the uboot prompt, see &lt;br /&gt;
 help &lt;br /&gt;
 help &amp;lt;command&amp;gt;&lt;br /&gt;
and [[Bootloader]] and [[Bootloader commands]].&lt;br /&gt;
&lt;br /&gt;
{{Note| The backslashes (\) are important for uboot to set the command as new environment variable (menu_9) instead of just executing them as soon as enter is pressed.}}&lt;br /&gt;
&lt;br /&gt;
{{Note| Copy and paste may not work. To get copy/paste working, you will need the [[NeoCon|neocon]] terminal emulator and add a per-character delay.  Otherwise, you will have to type in the commandline manually.}}&lt;br /&gt;
&lt;br /&gt;
It is important to distinguish between FAT or ext2 kernel partitions and ext2 or ext3 root partitions at this point. &lt;br /&gt;
&lt;br /&gt;
'''Boot entry for FAT kernel+ext3 rootfs partitions:'''&lt;br /&gt;
&lt;br /&gt;
 setenv menu_9 Boot from microSD (FAT+ext3): setenv bootargs \${bootargs_base} rootfstype=ext3 root=/dev/mmcblk0p2 rootdelay=5 \${mtdparts} ro\; mmcinit\; fatload mmc 1 0x32000000 \${sd_image_name}\; bootm 0x32000000&lt;br /&gt;
&lt;br /&gt;
'''Boot entry for FAT kernel+ext2 rootfs partitions:'''&lt;br /&gt;
&lt;br /&gt;
 setenv menu_9 Boot from microSD (FAT+ext2): setenv bootargs \${bootargs_base} rootfstype=ext2 root=/dev/mmcblk0p2 rootdelay=5 \${mtdparts} ro\; mmcinit\; fatload mmc 1 0x32000000 \${sd_image_name}\; bootm 0x32000000&lt;br /&gt;
&lt;br /&gt;
'''Boot entry for ext2 kernel+ext2 rootfs partitions: (requires newer u-boot)'''&lt;br /&gt;
&lt;br /&gt;
 setenv menu_2 Boot from microSD part2 (ext2+ext2): setenv bootargs \${bootargs_base} rootfstype=ext2 root=/dev/mmcblk0p2 rootdelay=5 \${mtdparts} ro\; mmcinit\; ext2load mmc 1 0x32000000 \${sd_image_name}\; bootm 0x32000000&lt;br /&gt;
You are nearly done. Just issue a&lt;br /&gt;
&lt;br /&gt;
 printenv&lt;br /&gt;
&lt;br /&gt;
and verify that your newly created entry is correctly displayed (This time the backslashes are not displayed anyone).&lt;br /&gt;
&lt;br /&gt;
If everything looks fine enter&lt;br /&gt;
&lt;br /&gt;
 saveenv&lt;br /&gt;
&lt;br /&gt;
into the prompt and press enter. The new configuration should now be saved to the NAND.&lt;br /&gt;
&lt;br /&gt;
Shutdown your neo with the following command:&lt;br /&gt;
&lt;br /&gt;
 neo1973 power-off&lt;br /&gt;
&lt;br /&gt;
After you restarted the Neo and got back to the NAND boot menu you should be able to select your newly created menu entry and successfully boot into the rootfs from your SD card.&lt;br /&gt;
&lt;br /&gt;
== Appendix ==&lt;br /&gt;
&lt;br /&gt;
=== Boot from SDHC ===&lt;br /&gt;
&lt;br /&gt;
{{Note|the following text was written for the Neo1973. SDHC and SD should both work in a Freerunner if you have u-boot from 2008-07-23 or later.}}&lt;br /&gt;
&lt;br /&gt;
As SDHC is currently not supported in u-boot you can't use the Booting from SD guide.&lt;br /&gt;
But there's a kind of workaround that is a good option to have at least your rootfs on the microSDHC:&lt;br /&gt;
&lt;br /&gt;
First you can follow Step 1 to get an kernel-image with mmc- and ext2-support. But instead of copying the image to the rootfs you will have to flash it to the Neo's internal NAND-Flash (using [[Dfu-util]]).&lt;br /&gt;
Now you can continue with Step 2 (like mentioned before you do not have to copy your uImage to the rootfs) and follow the instructions to Step 3.&lt;br /&gt;
Instead of the setenv commands in Step 3 you have to enter the following:&lt;br /&gt;
&lt;br /&gt;
 GTA01Bv4 # setenv menu_5 Boot from SDHC: setenv  bootargs root=/dev/mmcblk0p1 console=tty0 rootdelay=5 neo1973-nand:0x00040000(u-boot),0x00004000(u-boot_env),0x00200000(kernel),0x000a0000(splash)\; nand read.e 0x32000000 kernel\; bootm 0x32000000&lt;br /&gt;
 GTA01Bv4 # saveenv&lt;br /&gt;
&lt;br /&gt;
And that's it!&lt;br /&gt;
Now you can use the newly created menu option &amp;quot;Boot from SDHC&amp;quot; to boot the internal kernel, using the root-filesystem on the microSDHC.&lt;br /&gt;
&lt;br /&gt;
=== Autoboot from SDHC ===&lt;br /&gt;
&lt;br /&gt;
Maybe you want to Boot automatically from SDHC: &lt;br /&gt;
Set a new Bootmenu Entry for booting from NAND first&lt;br /&gt;
&lt;br /&gt;
 GTA01Bv4 # setenv menu_6 Boot from NAND: setenv bootargs \${bootargs_base} \${mtdparts}\; nand read.e 0x32000000 kernel\; bootm 0x32000000&lt;br /&gt;
 GTA01Bv4 # saveenv&lt;br /&gt;
&lt;br /&gt;
then Power-off, and enter the Bootmenu to test the new Entry.If you can boot from NAND, shutdown, enter Boot menu, connect to bootloader and set the (auto)bootcmd for boot from SDHC:&lt;br /&gt;
&lt;br /&gt;
 GTA01Bv4 # setenv bootcmd setenv bootargs root=/dev/mmcblk0p1 rootdelay=10 console=tty0 neo1973-nand:0x00040000(u-boot),0x00004000(u-boot_env),0x00200000(kernel),0x000a0000(splash)\; nand read.e 0x32000000 kernel\; bootm 0x32000000 &lt;br /&gt;
 GTA01Bv4 # saveenv&lt;br /&gt;
&lt;br /&gt;
Now you boot from SDHC everytime you press the Power-Button or reboot and if you like to boot from NAND -just use the bootmenu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Fixing udev automount ===&lt;br /&gt;
&lt;br /&gt;
Udev automatically mounts the SD Card in /media/mmcblk0p1/ you can disable this with&lt;br /&gt;
&lt;br /&gt;
 echo /dev/mmcblk &amp;gt;&amp;gt; /etc/udev/mount.blacklist&lt;br /&gt;
&lt;br /&gt;
=== Remarks on Kernel Parameters ===&lt;br /&gt;
&lt;br /&gt;
==== loglevel ====&lt;br /&gt;
&lt;br /&gt;
Some people suggested adding:&lt;br /&gt;
&lt;br /&gt;
 loglevel=8&lt;br /&gt;
&lt;br /&gt;
to the kernel command line. This makes the boot process extremely slow because &lt;br /&gt;
the framebuffer (the neo display in text mode) has to print out tons of lines of&lt;br /&gt;
debug messages like:&lt;br /&gt;
&lt;br /&gt;
 s3c2410-sdi s3c2410-sdi: ......&lt;br /&gt;
 mmc0: ....&lt;br /&gt;
&lt;br /&gt;
{{Languages|Booting_from_SD}}&lt;br /&gt;
&lt;br /&gt;
[[Category:Guides]]&lt;br /&gt;
[[Category:Flashing Openmoko]]&lt;br /&gt;
[[Category:Documentation]]&lt;br /&gt;
[[Category:System Developers]]&lt;/div&gt;</summary>
		<author><name>Warmcat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Finding_hardware_revision</id>
		<title>Finding hardware revision</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Finding_hardware_revision"/>
				<updated>2008-07-25T19:30:09Z</updated>
		
		<summary type="html">&lt;p&gt;Warmcat: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;NOTE! The string found in /proc/cpuinfo IS NOT A RELIABLE INDICATOR OF WHICH HARDWARE YOU HAVE! [citation needed -- for shipping A5 and A6 PCBs it should be perfectly reliable]&lt;br /&gt;
&lt;br /&gt;
You will need to login via [[USB Networking]] or otherwise SSH into your FreeRunner, and find the hardware revision as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@om-gta02:~# libgsmd-tool -m shell&lt;br /&gt;
libgsm-tool - (C) 2006-2007 by Harald Welte and OpenMoko, Inc.&lt;br /&gt;
This program is Free Software and has ABSOLUTELY NO WARRANTY&lt;br /&gt;
&lt;br /&gt;
rv&lt;br /&gt;
# # Get revision&lt;br /&gt;
revision: &amp;quot;HW: GTA02BV5, GSM:&lt;br /&gt;
gsm_ac_gp_fd_pu_em_cph_ds_vc_cal35_ri_36_amd8_ts0-Moko8&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware]]&lt;/div&gt;</summary>
		<author><name>Warmcat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/GTA02_sysfs</id>
		<title>GTA02 sysfs</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/GTA02_sysfs"/>
				<updated>2008-07-23T11:28:52Z</updated>
		
		<summary type="html">&lt;p&gt;Warmcat: New page: ==&amp;lt;font color=75d806&amp;gt;GTA02 Kernel sysfs highlights&amp;lt;/font&amp;gt;== sysfs is a filesystem that is mounted on /sys which contains various fake &amp;quot;files&amp;quot; that are actually filled by a variety of drive...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==&amp;lt;font color=75d806&amp;gt;GTA02 Kernel sysfs highlights&amp;lt;/font&amp;gt;==&lt;br /&gt;
sysfs is a filesystem that is mounted on /sys which contains various fake &amp;quot;files&amp;quot; that are actually filled by a variety of drivers and other kernel subsystems.  You can often also write stuff into these &amp;quot;files&amp;quot; using&lt;br /&gt;
&lt;br /&gt;
echo 1 &amp;amp;gt; /sys/blah...&lt;br /&gt;
&lt;br /&gt;
to change settings and behaviours of the kernel and drivers dynamically.  (When doing this, take care you have a space before the redirection operator &amp;amp;gt; or the shell will do something completely different with your command.)&lt;br /&gt;
&lt;br /&gt;
===USB Host / Device===&lt;br /&gt;
====/sys/devices/platform/neo1973-pm-host.0/hostmode====&lt;br /&gt;
* Defaults to 0, GTA02 USB hardware is configured to be a device, no power is generated for USB, charging is enabled and host 15K pulldowns are removed from D+ and D-&lt;br /&gt;
* Set to 1 to put the GTA02 USB hardware into host mode, so it starts to generate 5V power, disables charging from USB, and applies 15K pulldowns to USB D+ and D-&lt;br /&gt;
====/sys/devices/platform/s3c2410-ohci/usb_mode====&lt;br /&gt;
* Defaults to &amp;quot;device&amp;quot;, it means the USB peripheral in the CPU is logically configured for device mode&lt;br /&gt;
* Set to &amp;quot;host&amp;quot; to logically configure the peripheral to act like a host for other USB devices to be plugged into it&lt;br /&gt;
&lt;br /&gt;
Normally you set these two guys at the same time for the same mode, but there is a trick possible to select logical host mode but leave the power arrangements as if it was in device mode and apply external power.  You need to externally add 15K pulldowns on D+ and D- if you do this, because we did not enable them the normal way.  With this, you can have a USB device attached to GTA02, and use external power and charge the battery at the same time.&lt;br /&gt;
&lt;br /&gt;
===GSM Subsystem===&lt;br /&gt;
====/sys/devices/platform/neo1973-pm-gsm.0/power_on====&lt;br /&gt;
* Defaults to &amp;quot;0&amp;quot;, GSM power OFF&lt;br /&gt;
* Set to &amp;quot;1&amp;quot; to enable power to GSM logic&lt;br /&gt;
====/sys/devices/platform/neo1973-pm-gsm.0/reset====&lt;br /&gt;
* Defaults to &amp;quot;0&amp;quot;, no reset&lt;br /&gt;
* Set to &amp;quot;1&amp;quot; briefly after power applied to reset GSM logic&lt;br /&gt;
====/sys/devices/platform/neo1973-pm-gsm.0/download====&lt;br /&gt;
* Defaults to &amp;quot;0&amp;quot;, no insane clicking sound&lt;br /&gt;
* Set to &amp;quot;1&amp;quot; to drive yourself crazy and enable serial access to GSM chips down headphone socket / once a second loud clicks / chirps&lt;br /&gt;
&lt;br /&gt;
===Resume Reason===&lt;br /&gt;
====/sys/devices/platform/neo1973-resume.0/resume_reason====&lt;br /&gt;
If you cat this you get a list of possible resume sources in text with one or more * at the left of the active source that woke us.  You need a recent U-Boot to get the * set.&lt;br /&gt;
&lt;br /&gt;
===MEMCONFIG===&lt;br /&gt;
====/sys/devices/platform/neo1973-memconfig.0/BANKCON0 .. 7====&lt;br /&gt;
For extreme meddlers (I salute you), these let you control the wait states and other characteristics of the memory regions of the Freerunner.  Information and warnings about how to use these are here:&lt;br /&gt;
&lt;br /&gt;
http://git.openmoko.org/?p=kernel.git;a=commitdiff;h=fd25f90517322fc6c07bfb8d34752d3cb41cb4b6&lt;br /&gt;
&lt;br /&gt;
===FIQ and HDQ===&lt;br /&gt;
====/sys/devices/platform/sc32440_fiq.0/fiq/count====&lt;br /&gt;
FIQ is used to provide precision interrupt service in order to implement the HDQ protocol used to the battery couloumb counter.  This shows how many FIQ interrupts have been run since the kernel started.  It's turned off unless it is required.&lt;br /&gt;
====/sys/devices/platform/gta02-hdq.0/hdq/dump====&lt;br /&gt;
If you cat this, you will see the raw contents of HDQ device register space.  This is the bq27000 couloumb counter in our case.&lt;br /&gt;
====/sys/devices/platform/gta02-hdq.0/hdq/write====&lt;br /&gt;
This allows you to write to raw HDQ registers, using &amp;quot;&amp;lt;decimal register index&amp;gt; &amp;lt;decimal value&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
===power_supply battery information===&lt;br /&gt;
Most of these are coming from the coulomb counter over HDQ dynamically, but the bq27000 does not update a lot of its registers any more often than once per 4 seconds.  Therefore a lot of this info can be a bit stale or averaged over that period.&lt;br /&gt;
====/sys/devices/platform/bq27000-battery.0/power_supply/bat/type====&lt;br /&gt;
Just says &amp;quot;Battery&amp;quot;&lt;br /&gt;
====/sys/devices/platform/bq27000-battery.0/power_supply/bat/status====&lt;br /&gt;
This will summarize what goes on generally with the battery&lt;br /&gt;
* &amp;quot;Not Charging&amp;quot; - there's a charger in, but right now it isn't charging us.  Normal if you are fully charged and still powered.&lt;br /&gt;
* &amp;quot;Charging&amp;quot; - there's a charger in and it is charging the battery&lt;br /&gt;
* &amp;quot;Discharging&amp;quot; - we are running on battery&lt;br /&gt;
* &amp;quot;Full&amp;quot; - not normally given as a result (Not Charging used instead)&lt;br /&gt;
====/sys/devices/platform/bq27000-battery.0/power_supply/bat/voltage_now====&lt;br /&gt;
Battery voltage in uV, averaged.  Obviously this depends on load and place on discharge curve, etc.&lt;br /&gt;
====/sys/devices/platform/bq27000-battery.0/power_supply/bat/current_now====&lt;br /&gt;
Current being drawn from battery (+ve) or pushed into battery during charging (-ve) in uA&lt;br /&gt;
====/sys/devices/platform/bq27000-battery.0/power_supply/bat/charge_full====&lt;br /&gt;
Coulomb Counter's estimate of the capacity of the battery measured in uA/h.  It roughly means that if full, for one hour it could supply current at this rate.  I saw 1197913 reported on mine, so it estimates it can provide 1.2A for an hour.&lt;br /&gt;
====/sys/devices/platform/bq27000-battery.0/power_supply/bat/temp====&lt;br /&gt;
This is the battery temperature reported by the Coulomb Counter chip that is part of the physical battery.  It is in Celcius * 10, so 251 means 25.1 degrees.&lt;br /&gt;
====/sys/devices/platform/bq27000-battery.0/power_supply/bat/technology====&lt;br /&gt;
&amp;quot;Li-ion&amp;quot;&lt;br /&gt;
====/sys/devices/platform/bq27000-battery.0/power_supply/bat/present====&lt;br /&gt;
* &amp;quot;0&amp;quot; the battery is absent, or not one with a Coulomb Counter&lt;br /&gt;
* &amp;quot;1&amp;quot; the smart battery is present&lt;br /&gt;
====/sys/devices/platform/bq27000-battery.0/power_supply/bat/time_to_empty_now====&lt;br /&gt;
At current rate of discharge, estimate of how long we can run for.  If battery is not discharging, it won't make an estimate and will return a magic value &amp;quot;3932100&amp;quot; meaning &amp;quot;no estimate&amp;quot;.  The coulomb counter averages the load and adjusts this value slowly to be its estimate of when we will blow chunks.&lt;br /&gt;
====/sys/devices/platform/bq27000-battery.0/power_supply/bat/time_to_full_now====&lt;br /&gt;
This estimates how long until we are fully charged, at current rate of charging, in seconds.  If we are not charging, it gives the magic value &amp;quot;3932100&amp;quot; meaning &amp;quot;no estimate&amp;quot;.&lt;br /&gt;
====/sys/devices/platform/bq27000-battery.0/power_supply/bat/capacity====&lt;br /&gt;
This is the remaining capacity of charge in the battery in percent. This is probably the most useful figure here.&lt;br /&gt;
====/sys/devices/platform/bq27000-battery.0/power_supply/bat/online====&lt;br /&gt;
* &amp;quot;0&amp;quot; no charger is present&lt;br /&gt;
* &amp;quot;1&amp;quot; A powered charger is present&lt;br /&gt;
&lt;br /&gt;
===PMU info===&lt;br /&gt;
====/sys/devices/platform/s3c2440-i2c/i2c-adapter/i2c-0/0-0073/chgmode====&lt;br /&gt;
* &amp;quot;enabled&amp;quot; means the charger is powered and willing to charge, although if you're full it might not be right now&lt;br /&gt;
* &amp;quot;disabled&amp;quot; means there was no power or not enough power supplied to charge&lt;br /&gt;
====/sys/devices/platform/s3c2440-i2c/i2c-adapter/i2c-0/0-0073/charger_type====&lt;br /&gt;
Shows the detected charger type followed by the mode it is running in.  So &amp;quot;charger 500mA mode 100mA&amp;quot; would be the case for non-enumerated USB connection, &amp;quot;charger 500mA mode 500mA&amp;quot; for after enumeration.&lt;br /&gt;
====/sys/devices/platform/s3c2440-i2c/i2c-adapter/i2c-0/0-0073/force_usb_limit_dangerous====&lt;br /&gt;
This is added to allow the PMU to be told to take more current than the default rules allow.  Use it only if you know your charger source can handle it.  For example&lt;br /&gt;
&lt;br /&gt;
echo 500 &amp;gt; /sys/devices/platform/s3c2440-i2c/i2c-adapter/i2c-0/0-0073/force_usb_limit_dangerous&lt;br /&gt;
&lt;br /&gt;
will allow PMU to draw 500mA even though you are connected to a dumb charger where the limit is normally held at 100mA, since it didn't enumerate the GTA02.  You can give 0, 100, 500 or 1000 here, but make sure your charger source can handle what you give here, otherwise it can exceed what is safe for your charging source to provide.&lt;br /&gt;
====/sys/devices/platform/s3c2440-i2c/i2c-adapter/i2c-0/0-0073/dump_regs====&lt;br /&gt;
cat this to get a dump of the I2C registers for the PMU, useful for debugging power problems.&lt;br /&gt;
&lt;br /&gt;
===Bluetooth===&lt;br /&gt;
====/sys/devices/platform/s3c2440-i2c/i2c-adapter/i2c-0/0-0073/neo1973-pm-bt.0/power_on====&lt;br /&gt;
* Default &amp;quot;0&amp;quot; no power to Bluetooth device&lt;br /&gt;
* set to &amp;quot;1&amp;quot; to enable power to Bluetooth&lt;br /&gt;
====/sys/devices/platform/s3c2440-i2c/i2c-adapter/i2c-0/0-0073/neo1973-pm-bt.0/reset====&lt;br /&gt;
* Default to &amp;quot;0&amp;quot;, no reset&lt;br /&gt;
* set to &amp;quot;1&amp;quot; to reset BT (needed after powerup)&lt;br /&gt;
&lt;br /&gt;
===GPS===&lt;br /&gt;
====/sys/devices/platform/s3c2440-i2c/i2c-adapter/i2c-0/0-0073/neo1973-pm-gps.0/pwron====&lt;br /&gt;
* Default &amp;quot;0&amp;quot; GPS unpowered&lt;br /&gt;
* set to &amp;quot;1&amp;quot; to power GPS section&lt;br /&gt;
&lt;br /&gt;
===Audio codec===&lt;br /&gt;
====/sys/devices/platform/soc-audio/codec_reg====&lt;br /&gt;
cat this to get a dump of codec registers.  Note they are 9-bit wide.&lt;br /&gt;
====/sys/devices/platform/soc-audio/codec_reg_write====&lt;br /&gt;
You can write to any codec register by echoing &amp;quot;&amp;lt;codec reg index in hex&amp;gt; &amp;lt;value in hex&amp;gt;&amp;quot; to here&lt;br /&gt;
&lt;br /&gt;
===Glamo===&lt;br /&gt;
====/sys/devices/platform/glamo3362.0/regs====&lt;br /&gt;
cat this to get a dump of selected Glamo regs.  You can write the regs by echoing &amp;quot;&amp;lt;glamo reg index in decimal&amp;gt; &amp;lt;value in decimal&amp;gt;&amp;quot; here.&lt;/div&gt;</summary>
		<author><name>Warmcat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Neo_FreeRunner_Hardware</id>
		<title>Neo FreeRunner Hardware</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Neo_FreeRunner_Hardware"/>
				<updated>2008-03-12T11:49:18Z</updated>
		
		<summary type="html">&lt;p&gt;Warmcat: /* USB Host */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[OpenMoko]] is a software distribution stack that sits on top of a [[hardware]] platform.  The [[Neo FreeRunner]] phone is the second hardware platform to take advantage of OpenMoko.  You can find specifics of the hardware by reviewing this introduction page and the pages in the category as shown at the bottom of this page.&lt;br /&gt;
&lt;br /&gt;
{{note|This page is about hardware that is currently in '''design/prototype''' phase, changes are frequent}}&lt;br /&gt;
&lt;br /&gt;
[[Image:Gta02a5 pcba cs.JPG|thumb|400px|display (top) side NOTE: GTA02 A5 PCBA Component Side photo]]&lt;br /&gt;
[[Image:Gta02a5 pcba ps.JPG|thumb|400px|component (back) side NOTE: GTA02 A5 PCBA Print Side photo]]&lt;br /&gt;
[[Image:GTA02 A5 PCB CS.jpg|thumb|400px|component (back) side NOTE: GTA02 A5 PCB Component Side photo]]&lt;br /&gt;
[[Image:GTA02 A5 PCB PS.jpg|thumb|400px|component (back) side NOTE: GTA02 A5 PCB Print Side photo]]&lt;br /&gt;
&lt;br /&gt;
=Summary=&lt;br /&gt;
*FIC building a Linux based smart phone with full GPL compatible firmware source code for OPENMOKO, project code named GTA02 (Neo FreeRunner)&lt;br /&gt;
&lt;br /&gt;
Detail hardware component selection could be found in [[Neo FreeRunner GTA02 Hardware]]&lt;br /&gt;
&lt;br /&gt;
=Features=&lt;br /&gt;
*Display-   Topply o2.8, 480 x 640 pixels, VGA, 200 NIT minimum, resistance type touch &lt;br /&gt;
&lt;br /&gt;
*User Interface Navigation- Touch screen on LCD, 2 control “buttons”, 1 Power button, 1 Aux for 911 emergency call  &lt;br /&gt;
&lt;br /&gt;
*Built in 802.11b/g Radio (Atheros chipset AR6001 Flash version) &lt;br /&gt;
&lt;br /&gt;
*Built in Bluetooth 2.0 + EDR (CSR and support PCM audio , BC4 frimware version) &lt;br /&gt;
&lt;br /&gt;
*Built in 2D/3D graphics acceleration chip (S-Media 3362) &lt;br /&gt;
&lt;br /&gt;
*Built in 2x Tri-Axis sensor (ST accelerometer LIS3LV02DL) &lt;br /&gt;
&lt;br /&gt;
*Built in GPS Radio – -130 dbm with internal antenna, -157 dbm tracking on chipset specification , TTFF under 40 seconds with -130 dbm signal strength, and tracking (u-Blox) &lt;br /&gt;
&lt;br /&gt;
*Antenna – Specialized antenna for best in hand hold GPS, GPRS and Wi-Fi/Bluetooth performance are required, -105dbm on receiving, Tx 30dbm+2 on GSM &lt;br /&gt;
&lt;br /&gt;
*External Antennae –   MMCX GPS connector &lt;br /&gt;
&lt;br /&gt;
*GPRS Radio –GSM/GPRS radio.  A Pre-PTCRB certified module will be preferred &lt;br /&gt;
&lt;br /&gt;
*Linux – Linux kernel 2.6.24 or later OpenMoko kernel &lt;br /&gt;
&lt;br /&gt;
*USB -  Client and Host mode switch-able (to be used for software downloading), provide host 5v power &lt;br /&gt;
&lt;br /&gt;
*Power- Normal mode power will be via 1200 mAh battery with built-in coulomb counter, could charge via specialized charger.  Internal Lithium Ion or Lithium Polymer battery will keep device in standby mode. Battery life (Approximation/Ideal Target) Standby time 150-200 Hrs (GSM) Talk time (Backlight off) Up to 3-4 hrs(GSM) &lt;br /&gt;
&lt;br /&gt;
*LED- LED indicator under Aux/Power button key&lt;br /&gt;
&lt;br /&gt;
=Hardware Specification=&lt;br /&gt;
===Hardware Electrical=== &lt;br /&gt;
&lt;br /&gt;
*400/500 MHz Samsung 2442B Processor/SOC (400 minimum) &lt;br /&gt;
*Boot code in NAND FLASH or 2MB NOR FLASH (optional design)&lt;br /&gt;
*128 MB SDRAM total, 64 MB CPU internal, 64 MB external &lt;br /&gt;
*256MB NAND Flash MCP package. &lt;br /&gt;
&lt;br /&gt;
=== Display ===  &lt;br /&gt;
*Topploy VGA ; 2.8” diagonal, 480 x 640 pixels  &lt;br /&gt;
*Transmissive display: good readability in high ambient light is essential &lt;br /&gt;
*White LED backlight.  Required brightness is 200 NIT minimum. &lt;br /&gt;
*Resistance type touch panel. &lt;br /&gt;
&lt;br /&gt;
=== WiFi 802.11 b/g transceiver ===  &lt;br /&gt;
*Must have GPL support source or GPL compatible policy&lt;br /&gt;
*TX power at 11 Mbps: 13 dBm minimum  &lt;br /&gt;
*RX sensitivity at 11 Mbps: -89 dBm desired, -83 dBm minimum &lt;br /&gt;
*AP mode desirable, not required &lt;br /&gt;
*WEP and WPA supported &lt;br /&gt;
*Atheros perferred because it's GPL policy&lt;br /&gt;
&lt;br /&gt;
=== Serial interfaces (UART) ===&lt;br /&gt;
*Three serial interfaces are required   &lt;br /&gt;
*Console  &lt;br /&gt;
*A-GPS or GPS&lt;br /&gt;
*GSM/GPRS&lt;br /&gt;
&lt;br /&gt;
=== Accelerometer ===&lt;br /&gt;
* 2x accelerometer required&lt;br /&gt;
* Could support interrupt while suspend or power save mode&lt;br /&gt;
* 3 axis sensing&lt;br /&gt;
&lt;br /&gt;
=== A-GPS === &lt;br /&gt;
*GPS chipset receiver and antenna &lt;br /&gt;
*Sensitivity at Antenna port: -157 dBm tracking on chipset specifiaction&lt;br /&gt;
*LNA and SAW filter for maximum interference protection&lt;br /&gt;
*Cold start time to first fix: 40 sec typical at -130 dBm, 60 sec max&lt;br /&gt;
*Must support GPL for Assist-GPS function with open API&lt;br /&gt;
*Industry quality GPS &lt;br /&gt;
*Could fit in GTA01 GPS area on the PCB&lt;br /&gt;
&lt;br /&gt;
=== GPS Antenna Performance === &lt;br /&gt;
*Antenna is passive and internal; 15 mm x 15 mm ceramic patch is nominal design &lt;br /&gt;
*Antenna LNA and SAW filter are required to meet GPS performance &lt;br /&gt;
*15 mm square ground plane (minimum 1 mm ground border around patch) (TBA) &lt;br /&gt;
*There will be one external GPS antenna connector (MMCX)&lt;br /&gt;
*C/N ratio should higher than 35 on production testing&lt;br /&gt;
&lt;br /&gt;
=== Buttons === &lt;br /&gt;
*Touch screen over LCD is primary data entry mechanism &lt;br /&gt;
*Two “hard” buttons: Power button (on side of Neo1973) is a mechanical switch actuated by a plastic pushbutton in a hole in the housing.  Aux (911) button on the top of the device, All two of these buttons, when pushed by the operator, are binary inputs (on/off or pressed/not pressed) to the software.  The effect of each button is determined by the application software in the device  &lt;br /&gt;
*Buttons may need to be backlit&lt;br /&gt;
*50000 cycles on hardware specification &lt;br /&gt;
&lt;br /&gt;
=== Sound outputs === &lt;br /&gt;
*Speaker in box (need good volume and acoustic behavior innoise environment)   &lt;br /&gt;
*Audio is monophonic*Max volume: 100 dB at 5 cm to assure good performance in environment.&lt;br /&gt;
*Support earphone with mic by jack&lt;br /&gt;
&lt;br /&gt;
=== Power Design Requirements===&lt;br /&gt;
*Software based power managment uint perferred&lt;br /&gt;
*NXP PCF series perferred&lt;br /&gt;
*Need support charge from USB function&lt;br /&gt;
*Need support powered by USB function&lt;br /&gt;
*Power switch:  Neo1973 will have a power switch, for power on/off and suspend &lt;br /&gt;
* Power/Aux switch must be backlit &lt;br /&gt;
*Switch controls whether device is running or suspended by presses of the switch &lt;br /&gt;
*Switch does not shut off the power; it only suspends/resumes the device &lt;br /&gt;
*Internal Li-Ion or Li-Polymer battery is included.  This battery supplies standby power to the device eliminates the rebooting of the device when local power is again reapplied.  Battery is 1200 ma-hr. &lt;br /&gt;
*Battery life (Approximation) Ideal/Target Standby time 150-200 Hrs (GSM) Talk time (Backlight off) Up to 4 hrs(GSM) &lt;br /&gt;
*Estimated current draw for the entire device when in suspend mode (and ALL peripherals are turned off or set for deep sleep) is &amp;lt;5 mA at 3.6 volts (LiIon terminal voltage).&lt;br /&gt;
*GSM module deep sleep(alive and keep contact with base station) stage should take less than 8mA&lt;br /&gt;
*Battery will reach half capacity (~600 ma-hr) with 500 charge-discharge cycles.  This will occur in less than 2 years of daily service. &lt;br /&gt;
*When powered continuously, Neo1973 must suspend (to low power mode) based either on observed low battery voltage condition or a configurable time delay. &lt;br /&gt;
*Neo1973 must monitor battery status while suspended and resume automatically if the charger is inserted.   &lt;br /&gt;
*Primary power connection: 1200mAh battery &lt;br /&gt;
*USB charger have ID pin 47.5k pull down for OPENMOKO identification  &lt;br /&gt;
*Indicators: an LED indicator visible from the side of the unit will illuminate when charging or have missing incoming call&lt;br /&gt;
&lt;br /&gt;
=== GSM/GPRS ===&lt;br /&gt;
*850/1800/1900 and 900/1800/1900 MHz bands must be supported &lt;br /&gt;
*Design should allow for multi-band version (850/900 MHz) &lt;br /&gt;
*Module based GPRS transceiver could meeting PTCRB and appropriate FCC certifications.  It preferred that the module be pre-certified with PTCRB or OTA test &lt;br /&gt;
*FCC/CE certification required for GSM/GPRS part &lt;br /&gt;
&lt;br /&gt;
=== GSM-GPRS Antenna Performance === &lt;br /&gt;
*-105 dBm receiving on each channel (GSM/PCS) &lt;br /&gt;
*30+2 dBm transmission on GSM channel &lt;br /&gt;
&lt;br /&gt;
=== Wi-Fi Modules ===&lt;br /&gt;
*Must support GPL driver&lt;br /&gt;
*Atheros AR6k perferred&lt;br /&gt;
*Flash version required&lt;br /&gt;
&lt;br /&gt;
=== Wi-Fi Antenna Performance === &lt;br /&gt;
*The  Wi-Fi antenna with TX 13 to 15 dBm&lt;br /&gt;
*RX -89 to -83 dBm @802.11b 11Mbps or an equivalent performance antenna &lt;br /&gt;
&lt;br /&gt;
=== Bluetooth ===&lt;br /&gt;
*CSR BC4 or later solutions&lt;br /&gt;
&lt;br /&gt;
=== USB === &lt;br /&gt;
*Neo1973 GTA02 will have USB, client/host.  Using USB 1.1    &lt;br /&gt;
*Could provide USB host 5v power&lt;br /&gt;
*Could be powered by USB&lt;br /&gt;
&lt;br /&gt;
=== Microphone === &lt;br /&gt;
1 microphone is in the device &lt;br /&gt;
&lt;br /&gt;
=== Firmware Image ===&lt;br /&gt;
*Using Linux 2.6.24 or later&lt;br /&gt;
*Could support boot from NAND or Boot from NOR&lt;br /&gt;
*Shiiping image should come with basic phone function&lt;br /&gt;
*Could do full firmware upgrade by USB cable&lt;br /&gt;
&lt;br /&gt;
=== PSN ===&lt;br /&gt;
*Device will have a PSN (product serial number) printed on the product label and machine readable in system NAND memory&lt;br /&gt;
&lt;br /&gt;
=== IMEI ===&lt;br /&gt;
*Production phase should have IMEI code wriiten&lt;br /&gt;
&lt;br /&gt;
= Package Specification = &lt;br /&gt;
*Weight: ~150 grams with battery. &lt;br /&gt;
*4 in 1 laser pen passed RoHs and safty regulation for laser equipment safty&lt;br /&gt;
*1x 512MB microSD Card (SandDisk/Trendcend)&lt;br /&gt;
*1x USB cable Standard A to mini-B connector&lt;br /&gt;
*1x 1200mAh smart/gauge battery&lt;br /&gt;
*Quick start guide &lt;br /&gt;
*5v USB power cord w/100-240 switchable power plug &lt;br /&gt;
*Safety card, warrantee card&lt;br /&gt;
*Package could pass 1m to 1.5m drop test&lt;br /&gt;
*AC USB charger,100v-240v, Passed UL and all required safty regulation&lt;br /&gt;
*Must pass FCC/CE certification&lt;br /&gt;
*Must pass NCC certification for Taiwain import regulation&lt;br /&gt;
*RoHS Compatible&lt;br /&gt;
*WEEE Report required&lt;br /&gt;
&lt;br /&gt;
= Life Cycle Specification = &lt;br /&gt;
&lt;br /&gt;
=== Product Life === &lt;br /&gt;
The product is designed to last a minimum of 2 years. &lt;br /&gt;
&lt;br /&gt;
=== Operating Temperature === &lt;br /&gt;
*Target operating range is –10°C to +60°C &lt;br /&gt;
&lt;br /&gt;
=== Storage Temperature === &lt;br /&gt;
*-15 deg C to +70 deg C  &lt;br /&gt;
&lt;br /&gt;
=== ESD === &lt;br /&gt;
The device can withstand a 4.0kV contact discharge and  8.0kV air  &lt;br /&gt;
&lt;br /&gt;
=== Drop test ===&lt;br /&gt;
Should pass 1m direct drop to concrete ground or 1.5m on slide with carpet&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware ]]&lt;br /&gt;
[[Category:Supported Phone| ]]&lt;br /&gt;
[[Category:GTA02 Hardware]]&lt;br /&gt;
&lt;br /&gt;
= GTA02 Hardware Component Selection =&lt;br /&gt;
&lt;br /&gt;
== Physical Dimensions ==&lt;br /&gt;
* 120.7 x 62 x 18.5 mm (4.75 x 2.44 x 0.728 inch)&lt;br /&gt;
* 110 +/- 5 g (4 ounces) without battery &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Main components ==&lt;br /&gt;
=== Processor ===&lt;br /&gt;
The main Processor (CPU) of the Neo1973 GTA02 is a [[Samsung S3C2442B B54]] (running at 400 MHz)&lt;br /&gt;
&lt;br /&gt;
* Product Homepage: [http://www.samsung.com/global/business/semiconductor/productInfo.do?fmly_id=229&amp;amp;partnum=SC32442 Samsung SC32442B]&lt;br /&gt;
* User Manual: FIXME&lt;br /&gt;
* Core: ARM920T&lt;br /&gt;
* Instruction Set: ARMv4 (Android ''currently'' requires ARMv5)&lt;br /&gt;
* Built-in 64MB SDRAM&lt;br /&gt;
* Built-in 256 MB NAND&lt;br /&gt;
* Could run at 500Mhz&lt;br /&gt;
* GPIO Assignments: https://svn.openmoko.org/trunk/doc/hardware/GTA02v4/gpio.txt&amp;lt;br&amp;gt;&lt;br /&gt;
* Evaluation board: [http://www.meritech.co.kr/products/product_view.php?num=52 S3C2442 EVB]&lt;br /&gt;
&lt;br /&gt;
=== Power Management ===&lt;br /&gt;
A NXP PCF50633 04 N3 is used for [[Neo1973_Power_Management|power management]].&lt;br /&gt;
&lt;br /&gt;
* NXP PMU index: [http://www.nxp.com/products/power_management/pmu/index.html NXP PMU index page]&amp;lt;br&amp;gt;&lt;br /&gt;
* Product Datasheet: [http://people.openmoko.org/tony_tu/GTA02/datasheet/PMU/PCF50633DS_02.pdf NXP PCF50633 Product Data Sheet]&amp;lt;br&amp;gt;&lt;br /&gt;
* Product User manual: [http://people.openmoko.org/tony_tu/GTA02/datasheet/PMU/PCF50633UM_6.pdf NXP PCF50633 User Manual]&amp;lt;br&amp;gt;&lt;br /&gt;
**Special thanks NXP provide full user manual and support openness for all developer&lt;br /&gt;
**Datasheet/User manual usage  [http://lists.openmoko.org/pipermail/community/2008-March/013898.html was legally authorized by NXP]&lt;br /&gt;
* Connected to: S3C2442 via I2C, client address is 0x08. &amp;lt;br&amp;gt;&lt;br /&gt;
* Driver Source: https://svn.openmoko.org/trunk/src/target/kernel/patches/pcf50633.patch&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Flash ===&lt;br /&gt;
==== NAND Flash ====&lt;br /&gt;
256MB integrated Samsung NAND flash inside the 2442 multi-chip package, attached to the S3C2442 NAND controller&lt;br /&gt;
&lt;br /&gt;
* Product Homepage: [http://www.samsung.com/global/business/semiconductor/productInfo.do?fmly_id=229&amp;amp;partnum=SC32442 S3C2442]&lt;br /&gt;
* Data Sheet: S3C2442 B54 comes with 256 MB NAND MCP package&lt;br /&gt;
* Connected to: S3C2442 NAND controller&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== NOR Flash ====&lt;br /&gt;
&lt;br /&gt;
16MBit ST M58WR016KB706E NOR flash for 'unbrickable emergency boot' feature.&lt;br /&gt;
&lt;br /&gt;
* Product Homepage: [http://www.st.com/stonline/products/families/memories/fl_nor_mob/index.htm ST Mobile Flash NOR/Mobile Terminal]&lt;br /&gt;
* Data Sheet: FIXME&lt;br /&gt;
* Connected to: S3C2442 NAND controller&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== SDRAM ===&lt;br /&gt;
128MB SDRAM (64MB inside 2442 MCP, 1x Samsung K4M51323PC) attached to S3C2442 SDRAM controller&lt;br /&gt;
* Product Homepage: [http://www.samsung.com/global/business/semiconductor/productInfo.do?fmly_id=136&amp;amp;partnum=K4M51323PC Samsung K4M51323PC]&lt;br /&gt;
* Data Sheet: [http://www.samsung.com/global/system/business/semiconductor/product/2007/6/11/MobileSDRAM/MobileSDRSDRAM/512Mbit/K4M51323PC/ds_k4m51323pc.pdf Samsung K4M51323PC]&lt;br /&gt;
* Connected to: S3C2442 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GSM/GPRS ==&lt;br /&gt;
The [[GSM]] (including GPRS) modem is Texas Instruments Calypso based.&lt;br /&gt;
&lt;br /&gt;
* Connected to: S3C2442 UART1 (full-uart, RxD, TxD, CTS, RTS), /dev/ttySAC0 in userspace&lt;br /&gt;
* PM Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/gta01-power_control.patch&lt;br /&gt;
* Accessible GSM/GPRS antenna jack (if battery cover is removed)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== CALYPSO ASIC digital baseband ===&lt;br /&gt;
Unfortunately we cannot provide many details on the GSM chipset due to very tight [http://en.wikipedia.org/wiki/Non-disclosure_agreement NDA]s.  However, this is not neccessarily required, since it interfaces using a standard UART serial line with the S3C2442.  On that interface, [http://www.3gpp.org/ftp/Specs/archive/07_series/07.05/ GSM 07.05], [http://www.3gpp.org/ftp/Specs/archive/07_series/07.10/ GSM 07.10] and other standardized protocols are used.&lt;br /&gt;
&lt;br /&gt;
*Calypso D751992AZHH&amp;lt;br&amp;gt;&lt;br /&gt;
*The firmware within GTA02 should be moko6 or later (internal code name)&lt;br /&gt;
&lt;br /&gt;
=== TI TWL3025BZGMR analog baseband ===&lt;br /&gt;
*Product Homepage: [http://focus.ti.com/general/docs/wtbu/wtbuproductcontent.tsp?templateId=6123&amp;amp;navigationId=12295&amp;amp;contentId=4703 TWL3014]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== TI TRF6151 (GSM/PCS) RF Transceiver ===&lt;br /&gt;
*Product Homepage: [http://focus.ti.com/general/docs/wtbu/wtbuproductcontent.tsp?templateId=6123&amp;amp;navigationId=12296&amp;amp;contentId=4701 TRF6151] &amp;lt;br&amp;gt;&lt;br /&gt;
GPRS Class12/CS4 &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== AGPS ==&lt;br /&gt;
u-blox ANTARIS 4 chip&lt;br /&gt;
* Connected to: S3C2442 UART2, /dev/ttySAC1 in userspace&lt;br /&gt;
* Driver: none needed, talks standard NMEA&lt;br /&gt;
* u-blox Antaris 4 Protocol [http://www.u-blox.com/customersupport/antaris_doc.html Protocol download page]&lt;br /&gt;
* ATR0635 Datasheet: [http://www.u-blox.com/products/Data_Sheets/ATR0630_35_SglChip_Data_Sheet(GPS.G4-X-06009).pdf u-blox ATR0635]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Accelerometers ==&lt;br /&gt;
Two ST LIS302DL&lt;br /&gt;
* Homepage: http://www.st.com/stonline/products/literature/ds/12726/lis302dl.htm&lt;br /&gt;
* Datasheet: http://www.st.com/stonline/products/literature/ds/12726.pdf&lt;br /&gt;
* Connected to: S3C2442 via SPI interface&lt;br /&gt;
* S3C2442 SPI EINT interrupt inputs&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Graphics/3D Acceleration ==&lt;br /&gt;
&lt;br /&gt;
Smedia Glamo 3362.&lt;br /&gt;
* Homepage: http://www.smediatech.com/product3362.htm&lt;br /&gt;
* Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/smedia-glamo.patch&lt;br /&gt;
* Data sheet: FIXME&lt;br /&gt;
* Connected to: S3C2442 Address/Data bus &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== microSD ===&lt;br /&gt;
The GTA02 has one microSD aka Transflash slot. Using the Glamo 3362 MMC/SD controller&lt;br /&gt;
&lt;br /&gt;
*It should support SDHC, and 4GB card has been tested. Anyone with 8GB card? MicroSD slot is [[Disassembling_Neo1973#Opening_back_cover|under battery]].&lt;br /&gt;
* Connected to: Glamo 3362 MMC/SD controller&lt;br /&gt;
* Driver: Check svn for the SMedia driver with SD implementation&lt;br /&gt;
* [[Supported microSD cards]]&lt;br /&gt;
* Specifications: [http://www.sdcard.org/about/memory_card/pls/ SD Simplified Specification], [http://www.mmca.org/compliance/buy_spec/AN_MMCA050419.pdf MMC (partial)], [http://www.sandisk.com/Assets/File/OEM/Manuals/manual-rs-mmcv1.0.pdf MMC (product manual)]&lt;br /&gt;
* SANDISK 128 MB/512 MB and some 4G SDHC card been verified could work on GTA02&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== LCD Module (LCM) ==&lt;br /&gt;
Toppoly (tpo) 2.8&amp;quot; diagonal (1.7&amp;quot; x 2.27&amp;quot; - 43mm x 58mm) 480x640 TD028TTEC1 module, using a Toshiba JBT6K74 TFT &lt;br /&gt;
LCD Driver Chipset.&amp;lt;br&amp;gt;&lt;br /&gt;
* Homepage: [http://www.tpo.biz/ENG/business-eng/Activer-Matrix-VGA.htm Activer-Matrix-VGA.htm]&lt;br /&gt;
* Specification: FIXME&lt;br /&gt;
* Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/gta01-jbt6k74.patch&lt;br /&gt;
* Backlight Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/gta01-backlight.patch&lt;br /&gt;
* Connected to: Glamo3362 LCM interface and Glamo3362 SPI Interface&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Touch Screen ====&lt;br /&gt;
* Connected to: S3C2442 TS controller&lt;br /&gt;
* Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/s3c2410_touchscreen.patch&lt;br /&gt;
&lt;br /&gt;
== Bluetooth Module==&lt;br /&gt;
Delta DFBM-CS320 Class2 Module, using CSR BlueCore4&lt;br /&gt;
&lt;br /&gt;
* Data Sheet: [http://www.delta.com.tw/product/cp/vco/BT/download/pdf/CS/2.DFBM-CS320.pdf 2.DFBM-CS320.pdf]&lt;br /&gt;
* CSR Data Sheet: [http://www.csrsupport.com/download/2302/CS-101564-DSP10%20BlueCore4-ROM%20Product%20Data%20Sheet.pdf CS-101564-DSP10 BlueCore4-ROM Product Data Sheet.pdf]&lt;br /&gt;
* Driver: Stock Linux Kernel BlueZ&lt;br /&gt;
* Connected to: S3C2442 USB Host controller (OHCI)&lt;br /&gt;
* PM Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/gta01-power_control.patch&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Bluetooth Audio ===&lt;br /&gt;
This one is wired via PCM bus from the CSR Bluetooth chip to the Wolfson codec.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WiFi Module==&lt;br /&gt;
&lt;br /&gt;
Accton (WLAN 802.11b/g SiP-M WM3236AQ(Flash Ver:2.0 Atheros AR6001GZ)&lt;br /&gt;
* Connected to: S3C2442 SDIO Host controller&amp;lt;br&amp;gt;&lt;br /&gt;
* Datasheet: [http://www.accton.com/products/Datasheet/WM3236A.AQ.pdf Accton 3236AQ datasheet]&amp;lt;br&amp;gt;&lt;br /&gt;
* Driver: http://svn.openmoko.org/developers/sameo/patches/&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Vibrator ==&lt;br /&gt;
* Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/gta01-vibrator.patch&lt;br /&gt;
* Connected to: S3C2442 GPIO&lt;br /&gt;
&lt;br /&gt;
== USB Host ==&lt;br /&gt;
The USB Host controller is inside the S3C2442&lt;br /&gt;
* Driver: Stock Linux kernel ohci_hcd&lt;br /&gt;
* USB version 1.1&lt;br /&gt;
* Supply USB 5v in Host mode using usb power switch AAT1275IRN-5.0-T1&lt;br /&gt;
** http://www.analogictech.com/products/digitalfiles/AAT1275.pdf&lt;br /&gt;
* A net EN_USBHOST is controlled by PMU GPIO &amp;quot;GPO&amp;quot;, this one signal when asserted (high)&lt;br /&gt;
** enables generation of 5V for external device using a charge pump&lt;br /&gt;
** enables connection of 15K pulldowns to D+ and D- to allow device insertion and removal detection for host mode&lt;br /&gt;
** DISABLES the path for USB power to charge the battery&lt;br /&gt;
&lt;br /&gt;
It should also be possible to use host mode with externally-provided power. This will allow the FreeRunner to be connected to a USB device and be powered and charging the battery if present at the same time.&lt;br /&gt;
&lt;br /&gt;
* Connect 0V, d+, d-, +5 to your USB device&lt;br /&gt;
* Connect a 15k ohm resistor between d+ and ground&lt;br /&gt;
* Connect a 15k ohm resistor between d- and ground&lt;br /&gt;
* Connect 0V, +5 to your &amp;gt;1A power source&lt;br /&gt;
** If your power source was not the OpenMoko 1A charger, additionally connect a 47K ohm 5% resistor between the ID pin and ground to pretend to be the 1A charger.&lt;br /&gt;
&lt;br /&gt;
In addition you need to make sure EN_USBHOST signal that enables the physical Host mode power generation and disables the USB -&amp;gt; PMU charging path is deasserted.  This may be taken care of automatically shortly by detection of the 48K resistor on a USB insertion leading to forcing EN_USBHOST deasserted.  The charge pump that generates the 5V in host mode doesn't seem to mind getting external 5V given to it, but the real issue is that the battery will not be charged at all if we leave EN_USBHOST asserted since one of its jobs is to stop that happening.&lt;br /&gt;
&lt;br /&gt;
The last two points are taken care of by the external AC charger, so you could use a Y cable that brings the AC adapter together with a cable that connects up the rest.&lt;br /&gt;
&lt;br /&gt;
== USB Device ==&lt;br /&gt;
The USB Device controller is inside the S3C2442 &lt;br /&gt;
* Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/s3c2410_udc.patch&lt;br /&gt;
* Please see [[USB Product IDs]] on information about which Vendor/Product IDs we use&lt;br /&gt;
* 1200mAh lithium battery charges when connected to powered host.&lt;br /&gt;
* Mini-AB connector similar to [http://www.cypressindustries.com/shoponline/proddetail.asp?prod=CCMUSBAB-32005-700&amp;amp;cat=34 this one].&lt;br /&gt;
&lt;br /&gt;
== I2C Devices ==&lt;br /&gt;
The I2C is a simple communication standard intended to move small amounts of data a few inches between chips.&lt;br /&gt;
Please see [[I2C | Neo I2C Devices]] for more information &amp;amp; a list of devices &amp;amp; the addresses currently in use &amp;amp; documented for the Neo1973.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Audio ==&lt;br /&gt;
See also: [[Neo1973 Audio Subsystem]]&lt;br /&gt;
&lt;br /&gt;
=== Wolfson Codec ===&lt;br /&gt;
There's a [[WM8753]] Wolfson Microelectronics CODEC (This is not a 'smart' codec that can interpret MP3/... it is a simple dumb 'sound card'.&lt;br /&gt;
* Product Homepage: http://www.wolfsonmicro.com/products/WM8753/&lt;br /&gt;
* Data Sheet: [http://www.wolfsonmicro.com/uploads/documents/en/WM8753.pdf WM8753.pdf]&lt;br /&gt;
* Connected to: S3C2442 IIS interface (PCM data), S3C2442 I2C (Control)&lt;br /&gt;
* Driver: https://svn.openmoko.org/trunk/src/target/kernel/patches/asoc.patch&lt;br /&gt;
&lt;br /&gt;
=== Mono Amplifier ===&lt;br /&gt;
There's a National Semiconductor [[LM4853]] Mono Amplifier at the analog audio output of the WM8753&lt;br /&gt;
&lt;br /&gt;
* Product Homepage: [http://www.national.com/pf/LM/LM4853.html LM4853.html]&lt;br /&gt;
* Data Sheet: [http://www.national.com/ds.cgi/LM/LM4853.pdf LM4853.pdf]&lt;br /&gt;
* Connects to: S3C2442 I2C (Control)&lt;br /&gt;
&lt;br /&gt;
=== Analog wired Headset ===&lt;br /&gt;
There's a four-ring 2.5mm stereo jack which provides connectivity to old-fashioned wired headsets.&lt;br /&gt;
&lt;br /&gt;
The headsets used by Motorola smartphones (A780,A1200, ...) and the V-360 have a compatible configuration.&lt;br /&gt;
&lt;br /&gt;
=== Buttons ===&lt;br /&gt;
The Neo1973 GTA02 features two buttons:&lt;br /&gt;
* [[Neo1973 Power Button|The Power Button]]&lt;br /&gt;
* [[Neo1973 AUX Button|The &amp;quot;Aux&amp;quot; button]]&lt;br /&gt;
&lt;br /&gt;
== Case ==&lt;br /&gt;
The new case for the FreeRunner is all black, as seen on the front page on the wiki.&lt;br /&gt;
Source: Mickey on IRC&lt;br /&gt;
=Accessory=&lt;br /&gt;
&lt;br /&gt;
== Stylus ==&lt;br /&gt;
&lt;br /&gt;
Using 4 in 1 laser pen&lt;br /&gt;
*Vendor: [http://www.quarton.com/laser_pen.html Quarton XPII]&lt;br /&gt;
*GTA02 standard setup comes with [http://www.quarton.com.tw/laser_pen_infiniter_xp_2.html QUARTON XPII 4 in 1 laser pen]&lt;br /&gt;
&lt;br /&gt;
== Battery ==&lt;br /&gt;
The [[Neo FreeRunner (GTA02) Battery]] is mechanically and electrically compatible with the [[Neo1973 GTA01 Battery]], as well as limited compatibility with a Nokia BL6C battery.&lt;br /&gt;
According to [http://lists.openmoko.org/pipermail/community/2007-February/003758.html this] post on the mailinglist.&lt;br /&gt;
[http://wiki.openmoko.org/index.php?title=Image:Neo1973-with-BL5C-battery.png Photo] of the battery inside the Neo1973.&lt;br /&gt;
&lt;br /&gt;
* GTA02 using the smart battery based on TI bq27000 chipset&lt;br /&gt;
* SANYO UF653450S 1200mAh cell.&amp;lt;br&amp;gt;&lt;br /&gt;
* Battery schematics: [http://people.openmoko.org/tony_tu/GTA02/hardware/GTA02/CT-GTA02.pdf GTA02 Smart Battery Schematics]&lt;br /&gt;
&lt;br /&gt;
== microSD Card ==&lt;br /&gt;
&lt;br /&gt;
GTA02 should comes with one of following microSD card&lt;br /&gt;
&lt;br /&gt;
* [http://www.transcendusa.com/ Transcend] 512MB microSD card&lt;br /&gt;
* [http://www.sandisk.com/ SanDisk] 512MB microSD card&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Charger ==&lt;br /&gt;
&lt;br /&gt;
AKII Technology Charger&lt;br /&gt;
&lt;br /&gt;
*Model: [http://www.ak2.com.tw/pd_main.asp?sg_id=11 A10P1-05MP]&lt;br /&gt;
*Input: 100-240v~ /0.3A&lt;br /&gt;
*Output: +5v up to 2.0A&lt;br /&gt;
*Add 47.5k 1% resistor between ID pin and ground for openmoko charger identification&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= History =&lt;br /&gt;
&lt;br /&gt;
== GTA02v1 ==&lt;br /&gt;
First generation of prototypes that was given to internal OpenMoko software developers. Total 30 pcs fabricated.&lt;br /&gt;
&lt;br /&gt;
*It is working just fine, but still based on 2440, with external NAND/SDRAM and no NOR flash&lt;br /&gt;
*Using the PCF50633 05 N3 due to 04 N3 not available, re-work power for basic schematics verification&lt;br /&gt;
*Using GTA01 SIM socket&lt;br /&gt;
*Add external debug port&lt;br /&gt;
*Still using Global locate A-GPS&lt;br /&gt;
&lt;br /&gt;
== GTA02v2 ==&lt;br /&gt;
Second generation of prototypes, Total 50 pcs run at Taipei SMT factory MOUNT&lt;br /&gt;
&lt;br /&gt;
*Ideal is have 256 MB NAND on Samsung package, Due to chip availability Start using S3C2442 B43&lt;br /&gt;
*Using correct PMU PCF50633 04 N3&lt;br /&gt;
*Change new SIM socket&lt;br /&gt;
*Change to u-blox A-GPS&lt;br /&gt;
*Change LCM power from 3.3v to 1.8v&lt;br /&gt;
*USB power switch layout/pin assignment mistake, could not verify USB host supply 5v function&lt;br /&gt;
*GPS function verified ok with good senstivity&lt;br /&gt;
&lt;br /&gt;
== GTA02v3 ==&lt;br /&gt;
Production verification version, 2007/10/11 28 pcs fabricate at FIC SuZhou&lt;br /&gt;
&lt;br /&gt;
*Still using S3C2442 B43 for hardware verification&lt;br /&gt;
*Using control pilot run to verify S3C2442 B54 chips&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== GTA02v4 ==&lt;br /&gt;
Mass production release candicate version 1&lt;br /&gt;
&lt;br /&gt;
2 weeks after v3 gerber out, release the v4 gerber, and 2007/10/20 20 pcs fabricate at FIC SuZhou &lt;br /&gt;
&lt;br /&gt;
*Change LCM power from 1.8v to 3.3v for display stability issue&lt;br /&gt;
*fabricate another 200 pcs for yield rate/production verification&lt;br /&gt;
*fabricate 50 pcs with S3C2442 B43 (128 MB NAND) for quality comparsion&lt;br /&gt;
*USB host power chip have some output voltage stability issues with Vb/Vcc comes from different power source, need layout change to fix the issue&lt;br /&gt;
*Battery Coulomb design not working on A4&lt;br /&gt;
&lt;br /&gt;
== GTA02v5 ==&lt;br /&gt;
Mass production candicate version 2/Mass production version&lt;br /&gt;
&lt;br /&gt;
* First batch fabricate 2008/1/14 at FIC SuZhou&lt;br /&gt;
* Mass production A5 trial run start from 2008 March, including some resistor/capacitor change compare with inital 100 pcs prototypes A5, and prototypes for GTA02 developers was tracked in the [[Prototypes| Prototypes Page]]&lt;br /&gt;
* Coulomb counter issue fixed&lt;br /&gt;
* USB host power switch fixed&lt;br /&gt;
* Need add capacitor for PMU Vbat input for stability issue, this could be done by direct SMT or hand rework&lt;br /&gt;
* Need rework (still using SMT in production) add capacitor for PMU Vbat input for PMU stability issue.&lt;br /&gt;
* Need manual rework GSM IR UART path a 100k pull down for better GSM deep sleep&lt;br /&gt;
* ATAG_REVISION: 0350&lt;br /&gt;
&lt;br /&gt;
== GTA02v6 ==&lt;br /&gt;
Mass production candicate version 3/Mass production version&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A6 will be fine tune version of A5, only minor schematic change for better product quality and version control. Capacitor and resistor change A6 also on mass production A5&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*First 100 pcs might start from end of 2008 March&lt;br /&gt;
*Add capacitor space for Vbat, reduce the SMT effort&lt;br /&gt;
*Add GSM IR resistor for better GSM deep sleep&lt;br /&gt;
*Reserve 3 GPIO for hardware version control&lt;br /&gt;
&lt;br /&gt;
= Debug Board =&lt;br /&gt;
&lt;br /&gt;
== Debug Board Connector defination ==&lt;br /&gt;
&lt;br /&gt;
This is the connector used to connect the [[Debug Board]] and possibly other hardware.&lt;br /&gt;
&lt;br /&gt;
Connections are:&lt;br /&gt;
* 39 - GND&lt;br /&gt;
* 38 - STDI&lt;br /&gt;
* 37 - _RESET&lt;br /&gt;
* 36 - STMS&lt;br /&gt;
* 35 - STCK&lt;br /&gt;
* 34 - STDO&lt;br /&gt;
* 33 - GSM_EN&lt;br /&gt;
* 29 - _STRST&lt;br /&gt;
* 19 - X_I2C_SCL (H-TP4703)&lt;br /&gt;
* 18 - X_I2C_SDA (H-TP4704)&lt;br /&gt;
* 17 - SPI_CLK0&lt;br /&gt;
* 16 - SPI_MOSI0&lt;br /&gt;
* 15 - SPI-MISO0 &lt;br /&gt;
* 14 - SS0&lt;br /&gt;
* 13 - EINT3 (H-TP4705)&lt;br /&gt;
* 3 - CONSOLE_TXD (H-TP4701)&lt;br /&gt;
* 2 - CONSOLE_RXD (H-TP4702)&lt;br /&gt;
&lt;br /&gt;
Information from [http://people.openmoko.org/roh/Debugport_GTA01bv4.png].&lt;br /&gt;
&lt;br /&gt;
= Distinguishing hardware revisions =&lt;br /&gt;
== Inside the [[Bootloader]] ==&lt;br /&gt;
Every hardware revision has its own u-boot image type.  Thus, the bootloader has the revision hard-coded.&lt;br /&gt;
The hardware revision is passed on to the kernel via the ATAG mechanism (ATAG_REVISION)&lt;br /&gt;
&lt;br /&gt;
== Inside the [[Kernel]] ==&lt;br /&gt;
The kernel receives the ATAG_REVISION during bootup, and saves its contents in the &amp;quot;system_rev&amp;quot; global variable.&lt;br /&gt;
&lt;br /&gt;
== From Userspace ==&lt;br /&gt;
The kernel exports the system_rev variable in /proc/cpuinfo as &amp;quot;Revision :&amp;quot; line.&lt;br /&gt;
&lt;br /&gt;
= Certification =&lt;br /&gt;
&lt;br /&gt;
== FCC ==&lt;br /&gt;
** 850/1800/1900 Band, FCC ID: EUNGTA02&lt;br /&gt;
** 900/1800/1900 Band, FCC ID: EUNGTA02E&lt;br /&gt;
&lt;br /&gt;
== NCC ==&lt;br /&gt;
(for Taiwan Import)&lt;br /&gt;
&lt;br /&gt;
{{Languages|Neo1973 GTA02 Hardware}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Hardware ]]&lt;br /&gt;
[[Category:Hardware Support| ]]&lt;br /&gt;
[[Category:GTA02 Hardware]]&lt;/div&gt;</summary>
		<author><name>Warmcat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Overview_on_power_management_design</id>
		<title>Overview on power management design</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Overview_on_power_management_design"/>
				<updated>2008-02-14T10:17:23Z</updated>
		
		<summary type="html">&lt;p&gt;Warmcat: /* State diagram */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== State diagram ==&lt;br /&gt;
* Normal Mode&lt;br /&gt;
* Sleep Mode &lt;br /&gt;
* Poweroff Mode&lt;br /&gt;
* Slow Mode ??&lt;br /&gt;
&lt;br /&gt;
There has also been discussion (from Cesar) on the kernel list about exploiting the PM suspend and resume driver APIs on a more finegrained basis to tailor consumption to what the device finds itself doing, maybe driven by what dev nodes have handles open on them.&lt;br /&gt;
&lt;br /&gt;
== Profile of suspend/resume ==&lt;br /&gt;
* Estimate suspend current &lt;br /&gt;
System only keeps two power sources, AUTO3v3 and DOWN2 1v8, when it is in suspend. Theoretically, the suspend current should be the sum of the current of all modules which are in sleep/suspend mode connected these two power channels. So we have to know the current consumption of following modules which are in sleep/suspend mode individually.&lt;br /&gt;
&lt;br /&gt;
** Glamo&lt;br /&gt;
** BT&lt;br /&gt;
** AMP&lt;br /&gt;
** WLAN&lt;br /&gt;
** SDRAM&lt;br /&gt;
** NAND &lt;br /&gt;
** LCM&lt;br /&gt;
&lt;br /&gt;
* Wake-up source&lt;br /&gt;
The following modules/events are listed as wake-up sources for GTA02 so far. &lt;br /&gt;
&lt;br /&gt;
** GSM:OK &lt;br /&gt;
***But the suspend current is somehow too high (18mA). Need more investigation. &lt;br /&gt;
** WiFi:[Not verified/implemented]&lt;br /&gt;
** PMU&lt;br /&gt;
*** Power key:[OK]&lt;br /&gt;
*** RTC(alarm clock):[Not verified/implemented]&lt;br /&gt;
*** USB insert: [Not verified/implemented]&lt;br /&gt;
** Aux key:This button is used as NOR booting control. It would not enable as wake-up source anymore. &lt;br /&gt;
** Jackinsert [Not verified/implemented]&lt;br /&gt;
&lt;br /&gt;
== GPIO config == &lt;br /&gt;
* gpio config on A5&lt;br /&gt;
* gpio config when system get into sleep mode (suspend)&lt;br /&gt;
* config of glamo in sleep mode &lt;br /&gt;
&lt;br /&gt;
== Automated suspend/resume testing ==&lt;br /&gt;
Initial idea is to provide an environment to test suspend/resume process and collect the suspending current. &lt;br /&gt;
Basically, we could use multimeter with GPIB to achieve the whole process automatically.&lt;/div&gt;</summary>
		<author><name>Warmcat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Prototypes</id>
		<title>Prototypes</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Prototypes"/>
				<updated>2008-02-02T14:48:01Z</updated>
		
		<summary type="html">&lt;p&gt;Warmcat: /* #3 GTA02 A5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Prototypes are pieces of hardware such as boards, fully assembled devices, batteries, accessories that OpenMoko uses during the development of new hardware.&lt;br /&gt;
&lt;br /&gt;
This page tracks such prototypes, in which condition their life started, and what happened to them during their lifetime.&lt;br /&gt;
&lt;br /&gt;
Prototypes cannot be purchased. They will be loaned out on a case by case basis, and collected back for post mortem analysis.&lt;br /&gt;
&lt;br /&gt;
If you believe you need a prototype of some upcoming hardware, please mailto:openmoko-kernel@lists.openmoko.org.&lt;br /&gt;
&lt;br /&gt;
=== #21 GTA02 A5 ===&lt;br /&gt;
current holder: Tony (may be fixed in future)&amp;lt;br&amp;gt;&lt;br /&gt;
01 Feb 2008 Miles: verified hardware, same exceptions as #1, Bluetooth sensitivity very bad, GPS broken&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Tony: Put inside GTA01 case, speaker, antennas&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Batch of 4 from Suzhou, PCBA with all modules, NOR protection disabled, full DM1 (v009) and DM2 (v012)&lt;br /&gt;
&lt;br /&gt;
=== #20 GTA02 A5 ===&lt;br /&gt;
current holder: Tony (available)&amp;lt;br&amp;gt;&lt;br /&gt;
01 Feb 2008 Miles: verified hardware, same exceptions as #1, Bluetooth sensitivity very bad&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Tony: Put inside GTA01 case, speaker, antennas&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Batch of 4 from Suzhou, PCBA with all modules, NOR protection disabled, full DM1 (v009) and DM2 (v012)&lt;br /&gt;
&lt;br /&gt;
=== #19 GTA02 A5 ===&lt;br /&gt;
current holder: Tony (available)&amp;lt;br&amp;gt;&lt;br /&gt;
01 Feb 2008 Miles: verified hardware, same exceptions as #1, Bluetooth sensitivity very bad&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Tony: Put inside GTA01 case, speaker, antennas&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Batch of 4 from Suzhou, PCBA with all modules, NOR protection disabled, full DM1 (v009) and DM2 (v012)&lt;br /&gt;
&lt;br /&gt;
=== #18 GTA02 A5 ===&lt;br /&gt;
current holder: Erin&amp;lt;br&amp;gt;&lt;br /&gt;
01 Feb 2008 Miles: verified hardware, same exceptions as #1, Bluetooth sensitivity very bad&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Tony: Put inside GTA01 case, speaker, antennas&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Batch of 4 from Suzhou, PCBA with all modules, NOR protection disabled, full DM1 (v009) and DM2 (v012)&lt;br /&gt;
&lt;br /&gt;
=== #17 GTA02 A5 ===&lt;br /&gt;
current holder: Vitaly (Atheros)&amp;lt;br&amp;gt;&lt;br /&gt;
01 Feb 2008 Delivered to Vitaly, Atheros&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Same as #1 until 29 Jan 2008&lt;br /&gt;
&lt;br /&gt;
=== #16 GTA02 A5 ===&lt;br /&gt;
current holder: Samuel&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Sent to Samuel&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Same as #1 until 29 Jan 2008&lt;br /&gt;
&lt;br /&gt;
=== #15 GTA02 A5 ===&lt;br /&gt;
current holder: Matt (fixing shutdown bug)&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Running from battery shuts down 5 seconds after reboot. Running from power source (plugged into battery connectors) is stable&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Same as #1 until 29 Jan 2008&lt;br /&gt;
&lt;br /&gt;
=== #14 GTA02 A5 ===&lt;br /&gt;
current holder: Sean Chiang&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Same as #1 until 29 Jan 2008&lt;br /&gt;
&lt;br /&gt;
=== #13 GTA02 A5 ===&lt;br /&gt;
current holder: Tony (may be fixed in future)&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Miles: Bluetooth scan doesn't work, Power Key broken&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Same as #1 until 29 Jan 2008&lt;br /&gt;
&lt;br /&gt;
=== #12 GTA02 A5 ===&lt;br /&gt;
current holder: Tony (end of life)&amp;lt;br&amp;gt;&lt;br /&gt;
21 Jan 2008 Allen: Added Bluetooth module, reworked for power measurements, broken&amp;lt;br&amp;gt;&lt;br /&gt;
18 Jan 2008 Arrived from Suzhou (batch of 4) as PCBA without modules&lt;br /&gt;
&lt;br /&gt;
=== #11 GTA02 A5 ===&lt;br /&gt;
current holder: Tony (end of life)&amp;lt;br&amp;gt;&lt;br /&gt;
21 Jan 2008 Allen: Added Bluetooth module, reworked for power measurements, broken&amp;lt;br&amp;gt;&lt;br /&gt;
18 Jan 2008 Arrived from Suzhou (batch of 4) as PCBA without modules&lt;br /&gt;
&lt;br /&gt;
=== #10 GTA02 A5 ===&lt;br /&gt;
current holder: Willie&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Same as #1 until 29 Jan 2008&lt;br /&gt;
&lt;br /&gt;
=== #9 GTA02 A5 ===&lt;br /&gt;
current holder: Matt&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Matt: Found out jack insert interrupt line is floating&amp;lt;br&amp;gt;&lt;br /&gt;
18 Jan 2008 Arrived from Suzhou (batch of 4) as PCBA without modules&lt;br /&gt;
&lt;br /&gt;
=== #8 GTA02 A5 ===&lt;br /&gt;
current holder: Tony (end of life)&amp;lt;br&amp;gt;&lt;br /&gt;
21 Jan 2008 Allen: Added Bluetooth module, reworked for power measurements, broken&amp;lt;br&amp;gt;&lt;br /&gt;
18 Jan 2008 Arrived from Suzhou (batch of 4) as PCBA without modules&lt;br /&gt;
&lt;br /&gt;
=== #7 GTA02 A5 ===&lt;br /&gt;
current holder: Miles&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Miles: receiver test failed (receiver broken)&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Same as #1 until 29 Jan 2008&lt;br /&gt;
&lt;br /&gt;
=== #6 Highcell battery 3.7V 1250mAh with Coulomb counter ===&lt;br /&gt;
current holder: Tony (available)&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Willie: verified&lt;br /&gt;
&lt;br /&gt;
=== #5 Highcell battery 3.7V 1250mAh with Coulomb counter ===&lt;br /&gt;
current holder: Andy&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 sent to Andy&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Willie: verified&lt;br /&gt;
&lt;br /&gt;
=== #4 Highcell battery 3.7V 1200mAh with Coulomb counter ===&lt;br /&gt;
current holder: Werner&amp;lt;br&amp;gt;&lt;br /&gt;
30 Jan 2008 sent to Werner&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Willie: verified&lt;br /&gt;
 &lt;br /&gt;
=== #3 GTA02 A5 ===&lt;br /&gt;
current holder: Andy&amp;lt;br&amp;gt;&lt;br /&gt;
02 Feb 2008 I see similar behaviour to #15 today on battery + USB.  Appears to be related to, eg, starting LCM backlight making power problems resulting in immediate shutdown.  Current limit issue somehow?&amp;lt;br&amp;gt;&lt;br /&gt;
01 Feb 2008 Behaving well.&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 sent to Andy&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Same as #1 until 29 Jan 2008&lt;br /&gt;
&lt;br /&gt;
=== #2 GTA02 A5 ===&lt;br /&gt;
current holder: Harald&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 sent to Harald&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Same as #1 until 29 Jan 2008&lt;br /&gt;
&lt;br /&gt;
=== #1 GTA02 A5 ===&lt;br /&gt;
current holder: Werner&amp;lt;br&amp;gt;&lt;br /&gt;
30 Jan 2008 sent to Werner&amp;lt;br&amp;gt;&lt;br /&gt;
30 Jan 2008 Miles: verified hardware, same exceptions as below&amp;lt;br&amp;gt;&lt;br /&gt;
30 Jan 2008 Allen Chang: reworked to add NOR protection (R2505 closed, R2506 opened)&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Miles: verified hardware, except for&lt;br /&gt;
* microSD&lt;br /&gt;
* suspend/resume&lt;br /&gt;
* Bluetooth audio&lt;br /&gt;
* Coulomb counter &amp;amp; motion sensor only low-level verification (no drivers)&lt;br /&gt;
* USB host only low-level verification (no device)&lt;br /&gt;
* charging (only 500mA verified), running on USB only, switching between charging modes&lt;br /&gt;
* full memory verification&lt;br /&gt;
* wakeup interrupts (WiFi, USB, GSM, motion sensors, 2 buttons, RTC, headphone jack)&lt;br /&gt;
28 Jan 2008 Tony: Put inside GTA01 case, speaker, antennas&amp;lt;br&amp;gt;&lt;br /&gt;
28 Jan 2008 Tony: Rework wifi FW to 2.0.0.40&amp;lt;br&amp;gt;&lt;br /&gt;
28 Jan 2008 Batch of 10 from Suzhou, PCBA with all modules, wifi FW 1.3, NOR protection disabled, full DM1 (v009) and DM2 (v012)&lt;/div&gt;</summary>
		<author><name>Warmcat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Prototypes</id>
		<title>Prototypes</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Prototypes"/>
				<updated>2008-02-02T14:45:32Z</updated>
		
		<summary type="html">&lt;p&gt;Warmcat: /* #3 GTA02 A5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Prototypes are pieces of hardware such as boards, fully assembled devices, batteries, accessories that OpenMoko uses during the development of new hardware.&lt;br /&gt;
&lt;br /&gt;
This page tracks such prototypes, in which condition their life started, and what happened to them during their lifetime.&lt;br /&gt;
&lt;br /&gt;
Prototypes cannot be purchased. They will be loaned out on a case by case basis, and collected back for post mortem analysis.&lt;br /&gt;
&lt;br /&gt;
If you believe you need a prototype of some upcoming hardware, please mailto:openmoko-kernel@lists.openmoko.org.&lt;br /&gt;
&lt;br /&gt;
=== #21 GTA02 A5 ===&lt;br /&gt;
current holder: Tony (may be fixed in future)&amp;lt;br&amp;gt;&lt;br /&gt;
01 Feb 2008 Miles: verified hardware, same exceptions as #1, Bluetooth sensitivity very bad, GPS broken&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Tony: Put inside GTA01 case, speaker, antennas&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Batch of 4 from Suzhou, PCBA with all modules, NOR protection disabled, full DM1 (v009) and DM2 (v012)&lt;br /&gt;
&lt;br /&gt;
=== #20 GTA02 A5 ===&lt;br /&gt;
current holder: Tony (available)&amp;lt;br&amp;gt;&lt;br /&gt;
01 Feb 2008 Miles: verified hardware, same exceptions as #1, Bluetooth sensitivity very bad&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Tony: Put inside GTA01 case, speaker, antennas&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Batch of 4 from Suzhou, PCBA with all modules, NOR protection disabled, full DM1 (v009) and DM2 (v012)&lt;br /&gt;
&lt;br /&gt;
=== #19 GTA02 A5 ===&lt;br /&gt;
current holder: Tony (available)&amp;lt;br&amp;gt;&lt;br /&gt;
01 Feb 2008 Miles: verified hardware, same exceptions as #1, Bluetooth sensitivity very bad&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Tony: Put inside GTA01 case, speaker, antennas&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Batch of 4 from Suzhou, PCBA with all modules, NOR protection disabled, full DM1 (v009) and DM2 (v012)&lt;br /&gt;
&lt;br /&gt;
=== #18 GTA02 A5 ===&lt;br /&gt;
current holder: Erin&amp;lt;br&amp;gt;&lt;br /&gt;
01 Feb 2008 Miles: verified hardware, same exceptions as #1, Bluetooth sensitivity very bad&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Tony: Put inside GTA01 case, speaker, antennas&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Batch of 4 from Suzhou, PCBA with all modules, NOR protection disabled, full DM1 (v009) and DM2 (v012)&lt;br /&gt;
&lt;br /&gt;
=== #17 GTA02 A5 ===&lt;br /&gt;
current holder: Vitaly (Atheros)&amp;lt;br&amp;gt;&lt;br /&gt;
01 Feb 2008 Delivered to Vitaly, Atheros&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Same as #1 until 29 Jan 2008&lt;br /&gt;
&lt;br /&gt;
=== #16 GTA02 A5 ===&lt;br /&gt;
current holder: Samuel&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Sent to Samuel&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Same as #1 until 29 Jan 2008&lt;br /&gt;
&lt;br /&gt;
=== #15 GTA02 A5 ===&lt;br /&gt;
current holder: Matt (fixing shutdown bug)&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Running from battery shuts down 5 seconds after reboot. Running from power source (plugged into battery connectors) is stable&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Same as #1 until 29 Jan 2008&lt;br /&gt;
&lt;br /&gt;
=== #14 GTA02 A5 ===&lt;br /&gt;
current holder: Sean Chiang&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Same as #1 until 29 Jan 2008&lt;br /&gt;
&lt;br /&gt;
=== #13 GTA02 A5 ===&lt;br /&gt;
current holder: Tony (may be fixed in future)&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Miles: Bluetooth scan doesn't work, Power Key broken&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Same as #1 until 29 Jan 2008&lt;br /&gt;
&lt;br /&gt;
=== #12 GTA02 A5 ===&lt;br /&gt;
current holder: Tony (end of life)&amp;lt;br&amp;gt;&lt;br /&gt;
21 Jan 2008 Allen: Added Bluetooth module, reworked for power measurements, broken&amp;lt;br&amp;gt;&lt;br /&gt;
18 Jan 2008 Arrived from Suzhou (batch of 4) as PCBA without modules&lt;br /&gt;
&lt;br /&gt;
=== #11 GTA02 A5 ===&lt;br /&gt;
current holder: Tony (end of life)&amp;lt;br&amp;gt;&lt;br /&gt;
21 Jan 2008 Allen: Added Bluetooth module, reworked for power measurements, broken&amp;lt;br&amp;gt;&lt;br /&gt;
18 Jan 2008 Arrived from Suzhou (batch of 4) as PCBA without modules&lt;br /&gt;
&lt;br /&gt;
=== #10 GTA02 A5 ===&lt;br /&gt;
current holder: Willie&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Same as #1 until 29 Jan 2008&lt;br /&gt;
&lt;br /&gt;
=== #9 GTA02 A5 ===&lt;br /&gt;
current holder: Matt&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Matt: Found out jack insert interrupt line is floating&amp;lt;br&amp;gt;&lt;br /&gt;
18 Jan 2008 Arrived from Suzhou (batch of 4) as PCBA without modules&lt;br /&gt;
&lt;br /&gt;
=== #8 GTA02 A5 ===&lt;br /&gt;
current holder: Tony (end of life)&amp;lt;br&amp;gt;&lt;br /&gt;
21 Jan 2008 Allen: Added Bluetooth module, reworked for power measurements, broken&amp;lt;br&amp;gt;&lt;br /&gt;
18 Jan 2008 Arrived from Suzhou (batch of 4) as PCBA without modules&lt;br /&gt;
&lt;br /&gt;
=== #7 GTA02 A5 ===&lt;br /&gt;
current holder: Miles&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Miles: receiver test failed (receiver broken)&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Same as #1 until 29 Jan 2008&lt;br /&gt;
&lt;br /&gt;
=== #6 Highcell battery 3.7V 1250mAh with Coulomb counter ===&lt;br /&gt;
current holder: Tony (available)&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Willie: verified&lt;br /&gt;
&lt;br /&gt;
=== #5 Highcell battery 3.7V 1250mAh with Coulomb counter ===&lt;br /&gt;
current holder: Andy&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 sent to Andy&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Willie: verified&lt;br /&gt;
&lt;br /&gt;
=== #4 Highcell battery 3.7V 1200mAh with Coulomb counter ===&lt;br /&gt;
current holder: Werner&amp;lt;br&amp;gt;&lt;br /&gt;
30 Jan 2008 sent to Werner&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Willie: verified&lt;br /&gt;
 &lt;br /&gt;
=== #3 GTA02 A5 ===&lt;br /&gt;
current holder: Andy&amp;lt;br&amp;gt;&lt;br /&gt;
02 Feb 2008 I see similar behaviour to #15 today on battery + USB.  Appears to be related to, eg, starting LCM backlight making power problems resulting in immediate shutdown.  Current limit issue somehow?&lt;br /&gt;
01 Feb 2008 Behaving well.&lt;br /&gt;
29 Jan 2008 sent to Andy&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Same as #1 until 29 Jan 2008&lt;br /&gt;
&lt;br /&gt;
=== #2 GTA02 A5 ===&lt;br /&gt;
current holder: Harald&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 sent to Harald&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Same as #1 until 29 Jan 2008&lt;br /&gt;
&lt;br /&gt;
=== #1 GTA02 A5 ===&lt;br /&gt;
current holder: Werner&amp;lt;br&amp;gt;&lt;br /&gt;
30 Jan 2008 sent to Werner&amp;lt;br&amp;gt;&lt;br /&gt;
30 Jan 2008 Miles: verified hardware, same exceptions as below&amp;lt;br&amp;gt;&lt;br /&gt;
30 Jan 2008 Allen Chang: reworked to add NOR protection (R2505 closed, R2506 opened)&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Miles: verified hardware, except for&lt;br /&gt;
* microSD&lt;br /&gt;
* suspend/resume&lt;br /&gt;
* Bluetooth audio&lt;br /&gt;
* Coulomb counter &amp;amp; motion sensor only low-level verification (no drivers)&lt;br /&gt;
* USB host only low-level verification (no device)&lt;br /&gt;
* charging (only 500mA verified), running on USB only, switching between charging modes&lt;br /&gt;
* full memory verification&lt;br /&gt;
* wakeup interrupts (WiFi, USB, GSM, motion sensors, 2 buttons, RTC, headphone jack)&lt;br /&gt;
28 Jan 2008 Tony: Put inside GTA01 case, speaker, antennas&amp;lt;br&amp;gt;&lt;br /&gt;
28 Jan 2008 Tony: Rework wifi FW to 2.0.0.40&amp;lt;br&amp;gt;&lt;br /&gt;
28 Jan 2008 Batch of 10 from Suzhou, PCBA with all modules, wifi FW 1.3, NOR protection disabled, full DM1 (v009) and DM2 (v012)&lt;/div&gt;</summary>
		<author><name>Warmcat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Prototypes</id>
		<title>Prototypes</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Prototypes"/>
				<updated>2008-02-02T14:44:06Z</updated>
		
		<summary type="html">&lt;p&gt;Warmcat: /* #15 GTA02 A5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Prototypes are pieces of hardware such as boards, fully assembled devices, batteries, accessories that OpenMoko uses during the development of new hardware.&lt;br /&gt;
&lt;br /&gt;
This page tracks such prototypes, in which condition their life started, and what happened to them during their lifetime.&lt;br /&gt;
&lt;br /&gt;
Prototypes cannot be purchased. They will be loaned out on a case by case basis, and collected back for post mortem analysis.&lt;br /&gt;
&lt;br /&gt;
If you believe you need a prototype of some upcoming hardware, please mailto:openmoko-kernel@lists.openmoko.org.&lt;br /&gt;
&lt;br /&gt;
=== #21 GTA02 A5 ===&lt;br /&gt;
current holder: Tony (may be fixed in future)&amp;lt;br&amp;gt;&lt;br /&gt;
01 Feb 2008 Miles: verified hardware, same exceptions as #1, Bluetooth sensitivity very bad, GPS broken&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Tony: Put inside GTA01 case, speaker, antennas&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Batch of 4 from Suzhou, PCBA with all modules, NOR protection disabled, full DM1 (v009) and DM2 (v012)&lt;br /&gt;
&lt;br /&gt;
=== #20 GTA02 A5 ===&lt;br /&gt;
current holder: Tony (available)&amp;lt;br&amp;gt;&lt;br /&gt;
01 Feb 2008 Miles: verified hardware, same exceptions as #1, Bluetooth sensitivity very bad&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Tony: Put inside GTA01 case, speaker, antennas&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Batch of 4 from Suzhou, PCBA with all modules, NOR protection disabled, full DM1 (v009) and DM2 (v012)&lt;br /&gt;
&lt;br /&gt;
=== #19 GTA02 A5 ===&lt;br /&gt;
current holder: Tony (available)&amp;lt;br&amp;gt;&lt;br /&gt;
01 Feb 2008 Miles: verified hardware, same exceptions as #1, Bluetooth sensitivity very bad&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Tony: Put inside GTA01 case, speaker, antennas&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Batch of 4 from Suzhou, PCBA with all modules, NOR protection disabled, full DM1 (v009) and DM2 (v012)&lt;br /&gt;
&lt;br /&gt;
=== #18 GTA02 A5 ===&lt;br /&gt;
current holder: Erin&amp;lt;br&amp;gt;&lt;br /&gt;
01 Feb 2008 Miles: verified hardware, same exceptions as #1, Bluetooth sensitivity very bad&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Tony: Put inside GTA01 case, speaker, antennas&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Batch of 4 from Suzhou, PCBA with all modules, NOR protection disabled, full DM1 (v009) and DM2 (v012)&lt;br /&gt;
&lt;br /&gt;
=== #17 GTA02 A5 ===&lt;br /&gt;
current holder: Vitaly (Atheros)&amp;lt;br&amp;gt;&lt;br /&gt;
01 Feb 2008 Delivered to Vitaly, Atheros&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Same as #1 until 29 Jan 2008&lt;br /&gt;
&lt;br /&gt;
=== #16 GTA02 A5 ===&lt;br /&gt;
current holder: Samuel&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Sent to Samuel&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Same as #1 until 29 Jan 2008&lt;br /&gt;
&lt;br /&gt;
=== #15 GTA02 A5 ===&lt;br /&gt;
current holder: Matt (fixing shutdown bug)&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Running from battery shuts down 5 seconds after reboot. Running from power source (plugged into battery connectors) is stable&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Same as #1 until 29 Jan 2008&lt;br /&gt;
&lt;br /&gt;
=== #14 GTA02 A5 ===&lt;br /&gt;
current holder: Sean Chiang&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Same as #1 until 29 Jan 2008&lt;br /&gt;
&lt;br /&gt;
=== #13 GTA02 A5 ===&lt;br /&gt;
current holder: Tony (may be fixed in future)&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Miles: Bluetooth scan doesn't work, Power Key broken&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Same as #1 until 29 Jan 2008&lt;br /&gt;
&lt;br /&gt;
=== #12 GTA02 A5 ===&lt;br /&gt;
current holder: Tony (end of life)&amp;lt;br&amp;gt;&lt;br /&gt;
21 Jan 2008 Allen: Added Bluetooth module, reworked for power measurements, broken&amp;lt;br&amp;gt;&lt;br /&gt;
18 Jan 2008 Arrived from Suzhou (batch of 4) as PCBA without modules&lt;br /&gt;
&lt;br /&gt;
=== #11 GTA02 A5 ===&lt;br /&gt;
current holder: Tony (end of life)&amp;lt;br&amp;gt;&lt;br /&gt;
21 Jan 2008 Allen: Added Bluetooth module, reworked for power measurements, broken&amp;lt;br&amp;gt;&lt;br /&gt;
18 Jan 2008 Arrived from Suzhou (batch of 4) as PCBA without modules&lt;br /&gt;
&lt;br /&gt;
=== #10 GTA02 A5 ===&lt;br /&gt;
current holder: Willie&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Same as #1 until 29 Jan 2008&lt;br /&gt;
&lt;br /&gt;
=== #9 GTA02 A5 ===&lt;br /&gt;
current holder: Matt&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Matt: Found out jack insert interrupt line is floating&amp;lt;br&amp;gt;&lt;br /&gt;
18 Jan 2008 Arrived from Suzhou (batch of 4) as PCBA without modules&lt;br /&gt;
&lt;br /&gt;
=== #8 GTA02 A5 ===&lt;br /&gt;
current holder: Tony (end of life)&amp;lt;br&amp;gt;&lt;br /&gt;
21 Jan 2008 Allen: Added Bluetooth module, reworked for power measurements, broken&amp;lt;br&amp;gt;&lt;br /&gt;
18 Jan 2008 Arrived from Suzhou (batch of 4) as PCBA without modules&lt;br /&gt;
&lt;br /&gt;
=== #7 GTA02 A5 ===&lt;br /&gt;
current holder: Miles&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Miles: receiver test failed (receiver broken)&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Same as #1 until 29 Jan 2008&lt;br /&gt;
&lt;br /&gt;
=== #6 Highcell battery 3.7V 1250mAh with Coulomb counter ===&lt;br /&gt;
current holder: Tony (available)&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Willie: verified&lt;br /&gt;
&lt;br /&gt;
=== #5 Highcell battery 3.7V 1250mAh with Coulomb counter ===&lt;br /&gt;
current holder: Andy&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 sent to Andy&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Willie: verified&lt;br /&gt;
&lt;br /&gt;
=== #4 Highcell battery 3.7V 1200mAh with Coulomb counter ===&lt;br /&gt;
current holder: Werner&amp;lt;br&amp;gt;&lt;br /&gt;
30 Jan 2008 sent to Werner&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Willie: verified&lt;br /&gt;
 &lt;br /&gt;
=== #3 GTA02 A5 ===&lt;br /&gt;
current holder: Andy&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 sent to Andy&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Same as #1 until 29 Jan 2008&lt;br /&gt;
&lt;br /&gt;
=== #2 GTA02 A5 ===&lt;br /&gt;
current holder: Harald&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 sent to Harald&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Same as #1 until 29 Jan 2008&lt;br /&gt;
&lt;br /&gt;
=== #1 GTA02 A5 ===&lt;br /&gt;
current holder: Werner&amp;lt;br&amp;gt;&lt;br /&gt;
30 Jan 2008 sent to Werner&amp;lt;br&amp;gt;&lt;br /&gt;
30 Jan 2008 Miles: verified hardware, same exceptions as below&amp;lt;br&amp;gt;&lt;br /&gt;
30 Jan 2008 Allen Chang: reworked to add NOR protection (R2505 closed, R2506 opened)&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Miles: verified hardware, except for&lt;br /&gt;
* microSD&lt;br /&gt;
* suspend/resume&lt;br /&gt;
* Bluetooth audio&lt;br /&gt;
* Coulomb counter &amp;amp; motion sensor only low-level verification (no drivers)&lt;br /&gt;
* USB host only low-level verification (no device)&lt;br /&gt;
* charging (only 500mA verified), running on USB only, switching between charging modes&lt;br /&gt;
* full memory verification&lt;br /&gt;
* wakeup interrupts (WiFi, USB, GSM, motion sensors, 2 buttons, RTC, headphone jack)&lt;br /&gt;
28 Jan 2008 Tony: Put inside GTA01 case, speaker, antennas&amp;lt;br&amp;gt;&lt;br /&gt;
28 Jan 2008 Tony: Rework wifi FW to 2.0.0.40&amp;lt;br&amp;gt;&lt;br /&gt;
28 Jan 2008 Batch of 10 from Suzhou, PCBA with all modules, wifi FW 1.3, NOR protection disabled, full DM1 (v009) and DM2 (v012)&lt;/div&gt;</summary>
		<author><name>Warmcat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Prototypes</id>
		<title>Prototypes</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Prototypes"/>
				<updated>2008-02-02T14:29:50Z</updated>
		
		<summary type="html">&lt;p&gt;Warmcat: /* #15 GTA02 A5 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Prototypes are pieces of hardware such as boards, fully assembled devices, batteries, accessories that OpenMoko uses during the development of new hardware.&lt;br /&gt;
&lt;br /&gt;
This page tracks such prototypes, in which condition their life started, and what happened to them during their lifetime.&lt;br /&gt;
&lt;br /&gt;
Prototypes cannot be purchased. They will be loaned out on a case by case basis, and collected back for post mortem analysis.&lt;br /&gt;
&lt;br /&gt;
If you believe you need a prototype of some upcoming hardware, please mailto:openmoko-kernel@lists.openmoko.org.&lt;br /&gt;
&lt;br /&gt;
=== #21 GTA02 A5 ===&lt;br /&gt;
current holder: Tony (may be fixed in future)&amp;lt;br&amp;gt;&lt;br /&gt;
01 Feb 2008 Miles: verified hardware, same exceptions as #1, Bluetooth sensitivity very bad, GPS broken&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Tony: Put inside GTA01 case, speaker, antennas&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Batch of 4 from Suzhou, PCBA with all modules, NOR protection disabled, full DM1 (v009) and DM2 (v012)&lt;br /&gt;
&lt;br /&gt;
=== #20 GTA02 A5 ===&lt;br /&gt;
current holder: Tony (available)&amp;lt;br&amp;gt;&lt;br /&gt;
01 Feb 2008 Miles: verified hardware, same exceptions as #1, Bluetooth sensitivity very bad&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Tony: Put inside GTA01 case, speaker, antennas&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Batch of 4 from Suzhou, PCBA with all modules, NOR protection disabled, full DM1 (v009) and DM2 (v012)&lt;br /&gt;
&lt;br /&gt;
=== #19 GTA02 A5 ===&lt;br /&gt;
current holder: Tony (available)&amp;lt;br&amp;gt;&lt;br /&gt;
01 Feb 2008 Miles: verified hardware, same exceptions as #1, Bluetooth sensitivity very bad&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Tony: Put inside GTA01 case, speaker, antennas&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Batch of 4 from Suzhou, PCBA with all modules, NOR protection disabled, full DM1 (v009) and DM2 (v012)&lt;br /&gt;
&lt;br /&gt;
=== #18 GTA02 A5 ===&lt;br /&gt;
current holder: Erin&amp;lt;br&amp;gt;&lt;br /&gt;
01 Feb 2008 Miles: verified hardware, same exceptions as #1, Bluetooth sensitivity very bad&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Tony: Put inside GTA01 case, speaker, antennas&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Batch of 4 from Suzhou, PCBA with all modules, NOR protection disabled, full DM1 (v009) and DM2 (v012)&lt;br /&gt;
&lt;br /&gt;
=== #17 GTA02 A5 ===&lt;br /&gt;
current holder: Vitaly (Atheros)&amp;lt;br&amp;gt;&lt;br /&gt;
01 Feb 2008 Delivered to Vitaly, Atheros&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Same as #1 until 29 Jan 2008&lt;br /&gt;
&lt;br /&gt;
=== #16 GTA02 A5 ===&lt;br /&gt;
current holder: Samuel&amp;lt;br&amp;gt;&lt;br /&gt;
31 Jan 2008 Sent to Samuel&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Same as #1 until 29 Jan 2008&lt;br /&gt;
&lt;br /&gt;
=== #15 GTA02 A5 ===&lt;br /&gt;
current holder: Matt (fixing shutdown bug)&amp;lt;br&amp;gt;&lt;br /&gt;
02 Feb 2008 (From Andy: I see similar behaviour today on battery + USB.  Appears to be related to, eg, starting LCM backlight making power problems)&lt;br /&gt;
31 Jan 2008 Running from battery shuts down 5 seconds after reboot. Running from power source (plugged into battery connectors) is stable&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Same as #1 until 29 Jan 2008&lt;br /&gt;
&lt;br /&gt;
=== #14 GTA02 A5 ===&lt;br /&gt;
current holder: Sean Chiang&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Same as #1 until 29 Jan 2008&lt;br /&gt;
&lt;br /&gt;
=== #13 GTA02 A5 ===&lt;br /&gt;
current holder: Tony (may be fixed in future)&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Miles: Bluetooth scan doesn't work, Power Key broken&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Same as #1 until 29 Jan 2008&lt;br /&gt;
&lt;br /&gt;
=== #12 GTA02 A5 ===&lt;br /&gt;
current holder: Tony (end of life)&amp;lt;br&amp;gt;&lt;br /&gt;
21 Jan 2008 Allen: Added Bluetooth module, reworked for power measurements, broken&amp;lt;br&amp;gt;&lt;br /&gt;
18 Jan 2008 Arrived from Suzhou (batch of 4) as PCBA without modules&lt;br /&gt;
&lt;br /&gt;
=== #11 GTA02 A5 ===&lt;br /&gt;
current holder: Tony (end of life)&amp;lt;br&amp;gt;&lt;br /&gt;
21 Jan 2008 Allen: Added Bluetooth module, reworked for power measurements, broken&amp;lt;br&amp;gt;&lt;br /&gt;
18 Jan 2008 Arrived from Suzhou (batch of 4) as PCBA without modules&lt;br /&gt;
&lt;br /&gt;
=== #10 GTA02 A5 ===&lt;br /&gt;
current holder: Willie&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Same as #1 until 29 Jan 2008&lt;br /&gt;
&lt;br /&gt;
=== #9 GTA02 A5 ===&lt;br /&gt;
current holder: Matt&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Matt: Found out jack insert interrupt line is floating&amp;lt;br&amp;gt;&lt;br /&gt;
18 Jan 2008 Arrived from Suzhou (batch of 4) as PCBA without modules&lt;br /&gt;
&lt;br /&gt;
=== #8 GTA02 A5 ===&lt;br /&gt;
current holder: Tony (end of life)&amp;lt;br&amp;gt;&lt;br /&gt;
21 Jan 2008 Allen: Added Bluetooth module, reworked for power measurements, broken&amp;lt;br&amp;gt;&lt;br /&gt;
18 Jan 2008 Arrived from Suzhou (batch of 4) as PCBA without modules&lt;br /&gt;
&lt;br /&gt;
=== #7 GTA02 A5 ===&lt;br /&gt;
current holder: Miles&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Miles: receiver test failed (receiver broken)&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Same as #1 until 29 Jan 2008&lt;br /&gt;
&lt;br /&gt;
=== #6 Highcell battery 3.7V 1250mAh with Coulomb counter ===&lt;br /&gt;
current holder: Tony (available)&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Willie: verified&lt;br /&gt;
&lt;br /&gt;
=== #5 Highcell battery 3.7V 1250mAh with Coulomb counter ===&lt;br /&gt;
current holder: Andy&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 sent to Andy&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Willie: verified&lt;br /&gt;
&lt;br /&gt;
=== #4 Highcell battery 3.7V 1200mAh with Coulomb counter ===&lt;br /&gt;
current holder: Werner&amp;lt;br&amp;gt;&lt;br /&gt;
30 Jan 2008 sent to Werner&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Willie: verified&lt;br /&gt;
 &lt;br /&gt;
=== #3 GTA02 A5 ===&lt;br /&gt;
current holder: Andy&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 sent to Andy&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Same as #1 until 29 Jan 2008&lt;br /&gt;
&lt;br /&gt;
=== #2 GTA02 A5 ===&lt;br /&gt;
current holder: Harald&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 sent to Harald&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Same as #1 until 29 Jan 2008&lt;br /&gt;
&lt;br /&gt;
=== #1 GTA02 A5 ===&lt;br /&gt;
current holder: Werner&amp;lt;br&amp;gt;&lt;br /&gt;
30 Jan 2008 sent to Werner&amp;lt;br&amp;gt;&lt;br /&gt;
30 Jan 2008 Miles: verified hardware, same exceptions as below&amp;lt;br&amp;gt;&lt;br /&gt;
30 Jan 2008 Allen Chang: reworked to add NOR protection (R2505 closed, R2506 opened)&amp;lt;br&amp;gt;&lt;br /&gt;
29 Jan 2008 Miles: verified hardware, except for&lt;br /&gt;
* microSD&lt;br /&gt;
* suspend/resume&lt;br /&gt;
* Bluetooth audio&lt;br /&gt;
* Coulomb counter &amp;amp; motion sensor only low-level verification (no drivers)&lt;br /&gt;
* USB host only low-level verification (no device)&lt;br /&gt;
* charging (only 500mA verified), running on USB only, switching between charging modes&lt;br /&gt;
* full memory verification&lt;br /&gt;
* wakeup interrupts (WiFi, USB, GSM, motion sensors, 2 buttons, RTC, headphone jack)&lt;br /&gt;
28 Jan 2008 Tony: Put inside GTA01 case, speaker, antennas&amp;lt;br&amp;gt;&lt;br /&gt;
28 Jan 2008 Tony: Rework wifi FW to 2.0.0.40&amp;lt;br&amp;gt;&lt;br /&gt;
28 Jan 2008 Batch of 10 from Suzhou, PCBA with all modules, wifi FW 1.3, NOR protection disabled, full DM1 (v009) and DM2 (v012)&lt;/div&gt;</summary>
		<author><name>Warmcat</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Main_Page</id>
		<title>Main Page</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Main_Page"/>
				<updated>2008-01-23T08:39:43Z</updated>
		
		<summary type="html">&lt;p&gt;Warmcat: Add link to Kernel-dev-status&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|Main_Page}}&lt;br /&gt;
__NOTOC__&lt;br /&gt;
__NOEDITSECTION__&lt;br /&gt;
__NOTOC__&lt;br /&gt;
{| cellspacing=&amp;quot;5&amp;quot; cellpadding=&amp;quot;0&amp;quot; style=&amp;quot;padding: 2%; margin:0em 0em 1em 0em; border:1px solid #F9D163; background:#FCE9B4; width:100%&amp;quot; &lt;br /&gt;
| &amp;lt;big&amp;gt;'''Welcome to the [[OpenMoko]]&amp;amp;trade; public Wiki'''&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Image:200px-FIC-neo1973_small_neu.jpg|200px|right|frontside]]&lt;br /&gt;
OpenMoko&amp;amp;trade; is an [http://en.wikipedia.org/wiki/Open_source Open Source] project to create the world's first free mobile phone operating system which runs a full X server and can therefore run most X applications.&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;
You can install any OpenMoko software over the whole range of [[OpenMoko-supported hardware|supported phones]], and if you upgrade your phone, you don't lose that software. Bugs fixed on any phone are fixed on all. &lt;br /&gt;
&lt;br /&gt;
The [[Neo1973]] from [[FIC]] is the first of possibly many phones that OpenMoko may be used on. Buy it at [https://direct.openmoko.com/ Openmoko Online Shop]. You may check out the [[SH1 FAQ|Shipment 1 FAQ]] and the [[Phase 1 Software Testing|Phase 1 software test reports]].&lt;br /&gt;
&lt;br /&gt;
Please join us in collaborating on the OpenMoko project through any of the [[Development resources | project resources]] including this OpenMoko wiki. Please see the [[Help:Contents | wiki editing help]] page for information on making contributions to this wiki. A [[Meet the Core Team | core team]] of developers funded by FIC, Inc. leads the project.&lt;br /&gt;
&lt;br /&gt;
An [[introduction]] page is available, with [[Introduction#Photos|photos]] and [[Introduction#Videos|videos]]. Moreover, the usual [[FAQ | Frequently Asked Questions]] (FAQ) page might be helpful. Developers may find the [[ChangeLog | change log]] an important resource.&lt;br /&gt;
&lt;br /&gt;
{{warning|'''The OpenMoko GUI applications are not suitable for end users yet.''' They are still in beta. Do not expect to always and reliably make and receive calls from the OpenMoko GUI. Thanks to the openness of the FIC Neo1973 hardware, there is also an alternative to the OpenMoko GUI: Qtopia 4.3.x is released under GPL and is at the edge of being usable for phone use.}}&lt;br /&gt;
&lt;br /&gt;
'''OpenMoko Open Source Engineering and Schedule Policy'''&lt;br /&gt;
As an extension of the Open Source attitude towards source code, OpenMoko attempts to be open about as much of the engineering process as possible. Obviously this is not always possible, and because this is a fairly new notion, we are still learning how to do this properly. Our current policy is to attempt to tell you as much as possible about what we are doing, but never to attempt any schedule prediction. This is not due to secrecy, but rather is due to the large number of dependencies that are out of our control. For the latest status updates, see [[Community_Updates|Community Updates]]&lt;br /&gt;
&lt;br /&gt;
'''Neo1973 DEVELOPMENT STATUS''' &lt;br /&gt;
[[Neo1973|Neo1973 GTA02]] is still under development. We are on the fourth revision of the PCB (GTA02A4) and are still testing some of the hardware. Once we complete this we will create and then test GTA02A5, incorporating whatever changes were dictated by the testing of GTA02A4. If GTA02A5 tests successfully, we will build a few more for further testing within the company. If this testing is successful, then we will start manufacturing units for sale. For the latest status updates, see [[Community_Updates|Community Updates]]&lt;br /&gt;
&lt;br /&gt;
Status on the U-Boot and Kernel side can be found at [[Kernel-dev-status|Kernel-dev-status]].&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; width=100%&lt;br /&gt;
! width=100% colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#F9D163;border-left:5px solid white;border-right:5px solid white;border-top:5px solid white;&amp;quot; | Latest status&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;TOP&amp;quot; width=&amp;quot;50%&amp;quot; style=&amp;quot;background:#FCE9B4;border-left:5px solid white;border-bottom:5px solid white;&amp;quot; | &lt;br /&gt;
* The latest Qtopia snapshot can now be successfully used to make and receive calls, to send and receive SMS and use Contacts for both. However, if you do not enable suspend, one battery will only last 3-5 hours, but in suspend, incoming calls do not wake up Qtopia! See [[Qtopia on Neo 1973]] for instructions.&lt;br /&gt;
|valign=&amp;quot;TOP&amp;quot; width=&amp;quot;50%&amp;quot; style=&amp;quot;background:#FCE9B4;border-right:5px solid white;border-bottom:5px solid white;&amp;quot; | &lt;br /&gt;
* The [http://downloads.openmoko.org/snapshots/2007.11/ OpenMoko 2007.11 Snapshot] can make and receive calls most of the time. Power management (suspend, standby time) are still experiencing problems.&lt;br /&gt;
* For the latest status updates, see [[Community_Updates|Community Updates]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; width=100%&lt;br /&gt;
! width=100% colspan=&amp;quot;2&amp;quot; style=&amp;quot;background:#F9D163;border-left:5px solid white;border-right:5px solid white;border-top:5px solid white;&amp;quot; | What's Your Interest?&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;TOP&amp;quot; width=&amp;quot;50%&amp;quot; style=&amp;quot;background:#FCE9B4;border-left:5px solid white;border-bottom:5px solid white;&amp;quot; | &lt;br /&gt;
* [[Basic End-user]] - Information for end users who want basic functionality and no surprises&lt;br /&gt;
* [[Advanced End-user]] - Information for advanced end-users who want advanced and experimental functionality but who are not programmers&lt;br /&gt;
* [[Business Development]] - Exchange of commercial opportunities for promoting widespread end-user acceptance.&lt;br /&gt;
|valign=&amp;quot;TOP&amp;quot; width=&amp;quot;50%&amp;quot; style=&amp;quot;background:#FCE9B4;border-right:5px solid white;border-bottom:5px solid white;&amp;quot; | &lt;br /&gt;
* [[Application Developer]] - Information for application developers, including ideas and specifications for applications, and tools to build them&lt;br /&gt;
* [[System Developer]] - Information for system developers, including bootloader, kernel, and libraries&lt;br /&gt;
* [[Hardware Developer]] - Information for hardware developers, including hardware specs and debug board&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; width=100%&lt;br /&gt;
! width=33% style=&amp;quot;background:#d1d1d1;border-left:5px solid white;border-right:5px solid white;border-top:5px solid white;&amp;quot; | General&lt;br /&gt;
! width=33% style=&amp;quot;background:#C5FDAF;border-left:5px solid white;border-right:5px solid white;border-top:5px solid white;&amp;quot; | Developer Guides&lt;br /&gt;
! width=33% style=&amp;quot;background:#FDAFAF;border-left:5px solid white;border-right:5px solid white;border-top:5px solid white;&amp;quot; | Developer Reference Documentation&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;TOP&amp;quot; style=&amp;quot;background:#ebebeb;border-left:5px solid white;border-right:5px solid white;border-bottom:5px solid white;&amp;quot; |&lt;br /&gt;
* [[Development resources | Project Resources]] - Provides a centralized location of all resources such as [[Development resources#Mailing_Lists|mailing lists]], [[Development resources#IRC | IRC]], and other software development oriented resources.&lt;br /&gt;
 &lt;br /&gt;
* [[Current events]] - Information on both past and future events where FIC or OpenMoko had or will have a presence.&lt;br /&gt;
* [http://forums.makeopensource.com/ Unofficial OpenMoko Forums] - Everyone is invited to collaborate with OpenMoko users and developers on the forums.&lt;br /&gt;
* Most of the documentation and Wiki assumes you are using Linux; here are some notes for users of [[Other OSes]].&lt;br /&gt;
* [[MacOS_X|Mac OS X]] - Information specific for those who use Mac OS X&lt;br /&gt;
* [[OpenLab]] - A physical area where OpenMoko can interact with FOSS community&lt;br /&gt;
&lt;br /&gt;
'''Administrative + Organizational'''&lt;br /&gt;
* [[Shipping Notes]] - Information to help FIC figure out how to ship products to you, and how much it might cost.&lt;br /&gt;
* [[My Account]] - Ideas for what sort of account-based services FIC should provide with the phone.&lt;br /&gt;
* [[Hear Me FIC]] - Information to help FIC know what the community wants.&lt;br /&gt;
* [[Listen Up Community]] - Community's To-Do-List&lt;br /&gt;
* [[Wiki Issues]] - problems/requests regarding this Wiki&lt;br /&gt;
&lt;br /&gt;
|valign=&amp;quot;TOP&amp;quot; style=&amp;quot;background:#E8FFDF;border-left:5px solid white;border-right:5px solid white;border-bottom:5px solid white;&amp;quot; | &lt;br /&gt;
* [[Getting Started with your Neo1973]]&lt;br /&gt;
* [[installation_guide|A guide for flashing and emulating the openmoko software]] (In progress, this should replace the following options)&lt;br /&gt;
** [[Flashing_openmoko|Flashing Neo1973 with the kernel, the root filesystem and optionally u-boot.]]&lt;br /&gt;
** [[MokoMakefile|Building OpenMoko using the MokoMakefile]]&lt;br /&gt;
** [[Application Development Crash Course]] -A very basic how-to for the new people. &lt;br /&gt;
** [[OpenMoko2007.2|Building OpenMoko 2007.2]]&lt;br /&gt;
** [[Building OpenMoko 2007.1 from scratch]]&lt;br /&gt;
*** [[Building a hello world application]]&lt;br /&gt;
*** Old [[Building OpenMoko from scratch (pre-BBT)]]&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;
*** [[Test Openmoko Emulation with chroot image|Test Openmoko Emulation with a Prebuilt chroot Image]]&lt;br /&gt;
* [[Migration to bad block tolerant builds]]&lt;br /&gt;
* [[Booting from SD]]&lt;br /&gt;
* [[DailyBuiltImages|Getting daily built images]]&lt;br /&gt;
&lt;br /&gt;
|valign=&amp;quot;TOP&amp;quot; style=&amp;quot;background:#FFDADA;border-left:5px solid white;border-right:5px solid white;border-bottom:5px solid white;&amp;quot;| &lt;br /&gt;
'''Hardware Reference Documentation'''&lt;br /&gt;
* All [[:Category:Hardware|Hardware]] related documentation and specifications are found on the [[:Category:Hardware|Hardware page]].&lt;br /&gt;
* The [[Neo1973 Hardware]] page provides an overview of the hardware components used by the [[:Category:Neo1973 Hardware|Neo1973 hardware platform]]. PCB photographs are also included. A [[Disassembling Neo1973 | photo disassembly story]] may be an interesting starting place.&lt;br /&gt;
* [[:Category:Neo1973 Hardware Debugging | Neo1973 Hardware Debugging]] is assisted with the [[Debug Board | Neo1973 debug board]].   A page discussing [[Connecting Neo1973 with Debug Board v2 | debug board and Neo1973 configurations]] is also provided.&lt;br /&gt;
&lt;br /&gt;
'''Software Reference Documentation'''&lt;br /&gt;
* Architectural&lt;br /&gt;
** [[OpenMokoFramework]] - The OpenMoko Application Framework&lt;br /&gt;
* [[Neo1973 host software]]&lt;br /&gt;
* Device Software&lt;br /&gt;
** Low-Level&lt;br /&gt;
*** [[u-boot]] - The bootloader we use, including documentation for our modifications&lt;br /&gt;
*** [[kernel]] - The Linux kernel we use, including documentation for our modifications&lt;br /&gt;
** Userspace&lt;br /&gt;
*** [[binary compatibility]]&lt;br /&gt;
*** [[gsmd]] - the GSM daemon managing the GSM Modem&lt;br /&gt;
*** [[gpsd]] - the AGPS (Assisted GPS) daemon&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; width=100%&lt;br /&gt;
! width=33% style=&amp;quot;background:#FCC6FF;border-left:5px solid white;border-right:5px solid white;border-top:5px solid white;&amp;quot; | OpenMoko-specific Development&lt;br /&gt;
! width=33% style=&amp;quot;background:#B3DDF4;border-left:5px solid white;border-right:5px solid white;border-top:5px solid white;&amp;quot; | OpenMoko Miscellaneous Development&lt;br /&gt;
! width=33% style=&amp;quot;background:#F5FC7F;border-left:5px solid white;border-right:5px solid white;border-top:5px solid white;&amp;quot; | Miscellaneous&lt;br /&gt;
|-&lt;br /&gt;
|valign=&amp;quot;TOP&amp;quot; style=&amp;quot;background:#FEE9FF;border-left:5px solid white;border-right:5px solid white;border-bottom:5px solid white;&amp;quot; | &lt;br /&gt;
* [[Roadmap]] - Roadmap for further OpenMoko development&lt;br /&gt;
* [[OpenEmbedded]] - The distribution-building framework&lt;br /&gt;
* [[Toolchain]] - The toolchain we use for compilation&lt;br /&gt;
* [[OpenMoko]] - The OpenMoko distribution&lt;br /&gt;
** [[OpenMoko2007]] - The first intended release of it&lt;br /&gt;
** [[OpenMoko2007.2]] - An improved release with more formalized style guidelines.&lt;br /&gt;
** [[Userspace root image]]&lt;br /&gt;
* [[Test Plans]] - How we test our phones&lt;br /&gt;
&lt;br /&gt;
'''User Interface Related'''&lt;br /&gt;
* [[GUI Style Guidelines]] -- New for [[OpenMoko2007.2]]&lt;br /&gt;
* [[Look &amp;amp; Feel]]&lt;br /&gt;
** [[Artwork]]&lt;br /&gt;
* [[Applications|Application Roadmap]]&lt;br /&gt;
* [[Widgets]]&lt;br /&gt;
** [[Widget Inheritance Graph]]&lt;br /&gt;
* [[Application UI Design Recommendations]]&lt;br /&gt;
&lt;br /&gt;
|valign=&amp;quot;TOP&amp;quot; style=&amp;quot;background:#D4EDFB;border-left:5px solid white;border-right:5px solid white;border-bottom:5px solid white;&amp;quot; |&lt;br /&gt;
* [[Thesis work]] &lt;br /&gt;
* [[Freshman todo]]&lt;br /&gt;
* [[Templates]]&lt;br /&gt;
* [[PIM Storage]]&lt;br /&gt;
* [[Coding Guidelines]]&lt;br /&gt;
* [[OpenMoko#Setting_up_an_OpenMoko_SDK|How to setup the OpenMoko SDK]]&lt;br /&gt;
* Alternative distributions for [[Neo1973]] GTA01: [[Angstrom on Neo1973]], [http://pokylinux.org Poky] [http://www.usome.com](instructions needed!)&lt;br /&gt;
* [[License]] - How we license our code&lt;br /&gt;
* [[Development resources]] - Describes resources for developers (lists, svn, ...)&lt;br /&gt;
* [[Neo1973 Phase 0]] - Information for Phase 0 device owners&lt;br /&gt;
* [[Wishlist:Neo1973 P0 Review]] - Impressions of the Phase 0 hardware device, also the Phase 0 FAQ&lt;br /&gt;
* [[Neo1973 Phase 1]] - Information for Phase 1 device owners&lt;br /&gt;
* [[Wishlist:Neo1973 P1 Review]] - Impressions of the Phase 1 hardware device&lt;br /&gt;
* [[External Feeds]] - List of feeds from people blogging about OpenMoko&lt;br /&gt;
&lt;br /&gt;
|valign=&amp;quot;TOP&amp;quot; style=&amp;quot;background:#FCFFCD;border-left:5px solid white;border-right:5px solid white;border-bottom:5px solid white;&amp;quot; | &lt;br /&gt;
* [[WiFi support in OpenMoko]]&lt;br /&gt;
* [[Neo1973 and Windows]]&lt;br /&gt;
* [[Press Coverage]] - What the press says about the OpenMoko project&lt;br /&gt;
* [[mFAQ]] - The OpenMoko Misinformation FAQ ('''mFAQ''') - What the press '''''incorrectly''''' says about the OpenMoko project&lt;br /&gt;
* [[Current Applications]] - Applications (GUI based) currently included in the main/core build of OpenMoko &lt;br /&gt;
* [[Wish List]]s: [[Wish List - Hardware|Hardware]], [[Wishlist:BuiltInScriptingLanguage|Scripting Languages]], [[Wish List - OpenMoko Ringtones and Sounds|ringtones and sounds]]&lt;br /&gt;
* [[Media Content]] - What types of media on the device can we use (that is non-software)?&lt;br /&gt;
* [[Testimonials]] - How did you get to OpenMoko?&lt;br /&gt;
* [[Buying Interest List]] - (Not official and not a pre-order page) Have you put money aside for Neo1973? Put your nick here.&lt;br /&gt;
* Comparsion with the [[iPhone]]&lt;br /&gt;
* [[Translation]] of OpenMoko&lt;br /&gt;
* Project applications for Google's [[Summer of code]]&lt;br /&gt;
* Purcase OpenMoko [[SWAG]] T-Shirts!&lt;br /&gt;
* The OpenMoko [[Trademark Policy]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
The members of the OpenMoko community would like to thank FIC Inc. for their continued leadership of the OpenMoko project.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;span id=&amp;quot;bottom&amp;quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Information| ]]&lt;br /&gt;
[[Category:Categories| ]]&lt;/div&gt;</summary>
		<author><name>Warmcat</name></author>	</entry>

	</feed>