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

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:Trevi%C3%B1o</id>
		<title>User:Treviño</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:Trevi%C3%B1o"/>
				<updated>2011-06-17T16:14:44Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: /* Community Update Draft */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Just to start, [http://www.3v1n0.net My Web World]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Backup</id>
		<title>Backup</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Backup"/>
				<updated>2009-12-02T04:24:24Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: /* Backing-up in a tar archive */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Backing up just PIM data ==&lt;br /&gt;
&lt;br /&gt;
The following applies to all Qtopia PIM suite based derivations (FDOM, 2008.8, Qtopia). PIM data covers:&lt;br /&gt;
&lt;br /&gt;
 * Contacts, calendar appointments, and tasks&lt;br /&gt;
 * E-Mails and text messages&lt;br /&gt;
&lt;br /&gt;
To make a backup which can be easily restored later on use secure copy:&lt;br /&gt;
&lt;br /&gt;
 scp -pr root@192.168.0.202:~/Applications/ .&lt;br /&gt;
 scp -pr root@192.168.0.202:~/Documents/ .&lt;br /&gt;
&lt;br /&gt;
To restore do the reverse:&lt;br /&gt;
&lt;br /&gt;
 scp -pr Applications root@192.168.0.202:~/&lt;br /&gt;
 scp -pr Documents root@192.168.0.202:~/&lt;br /&gt;
&lt;br /&gt;
Make sure you restart to allow the Qtopia PIM suite to see the changes:&lt;br /&gt;
&lt;br /&gt;
 reboot&lt;br /&gt;
&lt;br /&gt;
This way we can flash applicable distributions with minimal effort without loosing important data. To access the PIM data on the computer take a look at the following files and folders:&lt;br /&gt;
&lt;br /&gt;
* Contacts, calendar appointments, and tasks are kept in &amp;lt;tt&amp;gt;~/Applications/Qtopia/qtopia_db.sqlite&amp;lt;/tt&amp;gt;.&lt;br /&gt;
* E-Mails and text messages are kept in &amp;lt;tt&amp;gt;~/Applications/qtmail/mail/&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Backing up just /home/root ==&lt;br /&gt;
&lt;br /&gt;
To backup the home folder (all your personal files in theory).&lt;br /&gt;
&lt;br /&gt;
From the desktop pc run:&lt;br /&gt;
&lt;br /&gt;
 ssh root@phone 'tar -cpz /home/root' &amp;gt; moko-home-`date +%Y%m%d-%H%M%S`.tar.gz&lt;br /&gt;
&lt;br /&gt;
Where '''&amp;lt;tt&amp;gt;phone&amp;lt;/tt&amp;gt;''' is the ip address of your phone (192.168.0.202).&lt;br /&gt;
&lt;br /&gt;
Personally I added an entry to /etc/hosts so the above works for me. I also added the desktop key to /home/root/.ssh/authorized_keys on the phone as per the instructions in [[USB_Networking#SSH_Keys]].&lt;br /&gt;
&lt;br /&gt;
If you want to check what is in the backup, run the following, replacing the filename with what was just created.&lt;br /&gt;
&lt;br /&gt;
 tar -tzf moko-home-20080802-203108.tar.gz | less&lt;br /&gt;
&lt;br /&gt;
[http://timwise.wikispaces.com/my+neo+freerunner reference]&lt;br /&gt;
&lt;br /&gt;
== Backing up everything ==&lt;br /&gt;
&lt;br /&gt;
You may either :&lt;br /&gt;
* Backup the flash contents, in order to be able to restore (see below)&lt;br /&gt;
* or move the system to SD to be able to boot it from SD in case of need. See [[Moving current system from flash to SD]]&lt;br /&gt;
&lt;br /&gt;
=== Backing-up flash images ===&lt;br /&gt;
&lt;br /&gt;
{{note|Upload support is currently broken - [http://docs.openmoko.org/trac/ticket/676 #676], [http://docs.openmoko.org/trac/ticket/1843 #1843]}}&lt;br /&gt;
&lt;br /&gt;
You will need the [[Dfu-util]] to make a backup of your existing image.&lt;br /&gt;
&lt;br /&gt;
As when [[Flashing_the_Neo_FreeRunner|flashing]], you will need to be in [[Booting_the_Neo_FreeRunner#Log_into_U-Boot_in_the_NOR_Flash|U-Boot in the NOR Flash]]. Log into the NOR uBoot menu and select ''Set console to USB'' (for FreeRunner just stay in NOR uBoot menu, do not select or enter anything). Now you will be able to flash, make backups of your FreeRunner or query the FreeRunner with [[Dfu-util|dfu-util]].  Backup is fairly slow; it took over ten minutes to back up a 247 MB rootfs.&lt;br /&gt;
&lt;br /&gt;
It is important that you connect the USB cable directly from your computer to your phone.  If there is a hub between them, backup (and flashing) will mostly likely fail.&lt;br /&gt;
&lt;br /&gt;
{{note|On a Windows host, omit the &amp;quot;./&amp;quot; or &amp;quot;sudo ./&amp;quot; that precedes the commands listed on this page}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ./dfu-util -a kernel -R -U good-kernel.bin&lt;br /&gt;
sudo ./dfu-util -a rootfs -R -U good-rootfs.jffs2&lt;br /&gt;
sudo ./dfu-util -a splash -R -U good-splash.bin&lt;br /&gt;
sudo ./dfu-util -a u-boot -R -U good-u-boot.bin&lt;br /&gt;
sudo ./dfu-util -a u-boot_env -R -U good-u-boot_env.bin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is what a successful dfu-util backup run looks like:&lt;br /&gt;
&lt;br /&gt;
on the host PC:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo ./dfu-util -a kernel -R -U good-kernel.img&lt;br /&gt;
dfu-util - (C) 2007 by Openmoko Inc.&lt;br /&gt;
This program is Free Software and has ABSOLUTELY NO WARRANTY&lt;br /&gt;
&lt;br /&gt;
Opening USB Device 0x0000:0x0000...&lt;br /&gt;
Claiming USB DFU Runtime Interface...&lt;br /&gt;
Determining device status: state = appIDLE, status = 0&lt;br /&gt;
Device really in Runtime Mode, send DFU detach request...&lt;br /&gt;
Resetting USB...&lt;br /&gt;
Opening USB Device...&lt;br /&gt;
Found Runtime: [0x1d50:0x5119] devnum=12, cfg=0, intf=0, alt=3, name=&amp;quot;kernel&amp;quot;&lt;br /&gt;
Claiming USB DFU Interface...&lt;br /&gt;
Setting Alternate Setting ...&lt;br /&gt;
Determining device status: state = dfuIDLE, status = 0&lt;br /&gt;
dfuIDLE, continuing&lt;br /&gt;
Transfer Size = 0x1000&lt;br /&gt;
Resetting USB to switch back to runtime mode&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on the FreeRunner:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DFU: Switching to DFU Mode&lt;br /&gt;
DEVICE_CONFIGURED: 1&lt;br /&gt;
Starting DFU Upload of partition 'kernel'&lt;br /&gt;
DEVICE_CONFIGURED: 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A failed run of dfu-util looks like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dfu-util - (C) 2007 by Openmoko Inc.&lt;br /&gt;
This program is Free Software and has ABSOLUTELY NO WARRANTY&lt;br /&gt;
&lt;br /&gt;
Opening USB Device 0x0000:0x0000...&lt;br /&gt;
Claiming USB DFU Runtime Interface...&lt;br /&gt;
Determining device status: state = appIDLE, status = 0&lt;br /&gt;
Device really in Runtime Mode, send DFU detach request...&lt;br /&gt;
Resetting USB...&lt;br /&gt;
Opening USB Device...&lt;br /&gt;
Found Runtime: [0x1d50:0x5119] devnum=20, cfg=0, intf=0, alt=6, name=&amp;quot;rootfs&amp;quot;&lt;br /&gt;
Claiming USB DFU Interface...&lt;br /&gt;
Setting Alternate Setting ...&lt;br /&gt;
Determining device status: state = dfuIDLE, status = 0&lt;br /&gt;
dfuIDLE, continuing&lt;br /&gt;
Transfer Size = 0x1000&lt;br /&gt;
dfu_upload error -110&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
And shows demsg errors like this:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
usb 5-2: usbfs: USBDEVFS_CONTROL failed cmd dfu-util rqt 161 rq 2 len 4096 ret -110&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
This error is detected within the Linux USB stack (drivers/usb/core/message.c) and looking at&lt;br /&gt;
errno.h for the negatived error status number, the reason is e.g.&lt;br /&gt;
{|&lt;br /&gt;
| 110 || ETIMEDOUT || Connection timed out&lt;br /&gt;
|-&lt;br /&gt;
|  84 || EILSEQ    || Illegal byte sequence&lt;br /&gt;
|-&lt;br /&gt;
| 108 || ESHUTDOWN || Cannot send after transport endpoint shutdown&lt;br /&gt;
|-&lt;br /&gt;
| ... ||           ||&lt;br /&gt;
|}&lt;br /&gt;
Insure yourself, that you connect the FR directly to the computer (without any USB hubs), if you experience timed out connections&lt;br /&gt;
and use the&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
dfu-util -d 0x1d50:0x5119 ...&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
option, if the FR is not detected properly.&lt;br /&gt;
&lt;br /&gt;
=== Backing-up flash images (alternative) ===&lt;br /&gt;
&lt;br /&gt;
On the device:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkdir /var/tmp/root&lt;br /&gt;
mount /dev/root /var/tmp/root&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If you have om2008.9 you have to use:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mount -t jffs2 /dev/mtdblock6 /var/tmp/root&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
On your workstation:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ssh root@192.168.0.202 &amp;quot;mkfs.jffs2 -d /var/tmp/root -e 128 --pad --no-cleanmarkers -x lzo&amp;quot; | pv -W &amp;gt; rootfs.jffs2&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(The &amp;quot;| pv -W&amp;quot; is optional, it just gives you something to watch as the bytes fly by.)&lt;br /&gt;
&lt;br /&gt;
On the device:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
umount /var/tmp/root&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Backing-up in a tar archive ===&lt;br /&gt;
&lt;br /&gt;
 ssh root@192.168.0.202 &amp;quot;tar c /bin /etc /home /lib /opt /sbin /tmp /usr /var&amp;quot; | pv -s 2200000 -W &amp;gt; rootfs.tar&lt;br /&gt;
(The &amp;quot;| pv -W&amp;quot; is optional, it just gives you something to watch as the bytes fly by; the &amp;quot;-s&amp;quot; option presume you're transferring 2200000 bytes of data)&lt;br /&gt;
&lt;br /&gt;
Extract it and use &amp;lt;code&amp;gt;mkfs.jffs2&amp;lt;/code&amp;gt; if you want convert it to a jffs2 image.&lt;br /&gt;
&lt;br /&gt;
==Backup Scripts==&lt;br /&gt;
&lt;br /&gt;
If you plan on backing up frequently, using a script will simplify the process:&lt;br /&gt;
&lt;br /&gt;
===Simple backup script===&lt;br /&gt;
&lt;br /&gt;
This script works well if you want to configure it to backup always the same device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
#&lt;br /&gt;
# Back up all partitions of the phone to a backup directory,&lt;br /&gt;
# adding today's date to the saved filenames.&lt;br /&gt;
&lt;br /&gt;
DATE=`date +%Y-%m-%d`&lt;br /&gt;
DFU=./dfu-util&lt;br /&gt;
BACKUP_DIR=bak/&lt;br /&gt;
&lt;br /&gt;
${DFU} -a kernel -R -U ${BACKUP_DIR}kernel-${DATE}.bin&lt;br /&gt;
${DFU} -a rootfs -R -U ${BACKUP_DIR}rootfs-${DATE}.jffs2&lt;br /&gt;
${DFU} -a splash -R -U ${BACKUP_DIR}splash-${DATE}.bin&lt;br /&gt;
${DFU} -a u-boot -R -U ${BACKUP_DIR}u-boot-${DATE}.bin&lt;br /&gt;
${DFU} -a u-boot_env -R -U ${BACKUP_DIR}u-boot_env-${DATE}.bin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Interactive script===&lt;br /&gt;
&lt;br /&gt;
This script is based on the above &amp;quot;Simple backup script&amp;quot; (by unknown). It does the backup of what you want and choose promting you for choices. Enjoy it! test it! contribute! You can find us at /server irc.freenode.net /j #openmoko and we'll be pleased to accept you help (ideas || code).                                &lt;br /&gt;
&lt;br /&gt;
NOTE that the script works for me(tm) but it still needs some love. especially on traps and catches for wrong choices.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
#############################################################################################################&lt;br /&gt;
##                                                                                                         ##&lt;br /&gt;
## This script is Free Software, it's licensed under the GPLv3 and has ABSOLUTELY NO WARRANTY              ##&lt;br /&gt;
## you can find and read the complete version of the GPLv3 @ http://www.gnu.org/licenses/gpl.html          ##&lt;br /&gt;
##                                                                                                         ##&lt;br /&gt;
## Q: what does this script do?                                                                            ##&lt;br /&gt;
## A: the script back up all partitions of the phone to a backup directory, interactively,                 ## &lt;br /&gt;
##    adding today's date to the saved filenames.                                                          ##&lt;br /&gt;
##                                                                                                         ##&lt;br /&gt;
## IMPORTANT:!!! REMEMBER TO RUN THIS SCRIPT AS ROOT SINCE dfu-util HAS TO BE USED AS ROOT!!!              ##&lt;br /&gt;
##                                                                                                         ##&lt;br /&gt;
## based on the orginal simple backup script at http://wiki.openmoko.org/wiki/Backup                       ##&lt;br /&gt;
##                                                                                                         ##&lt;br /&gt;
## this version has been conceived and written by cga, x77686d, Infoport, jomat at /server irc.freenode.net##&lt;br /&gt;
## /j #openmoko,#bash and my collegue aubba @ work.                                                        ##&lt;br /&gt;
##                                                                                                         ##&lt;br /&gt;
## for any suggestions and contributions contact cga (or one of the above) in the #openmoko channel        ##&lt;br /&gt;
##                                                                                                         ##&lt;br /&gt;
#############################################################################################################&lt;br /&gt;
&lt;br /&gt;
## let's roll!!&lt;br /&gt;
&lt;br /&gt;
## sets the date format for the date in the backup file, change accordingly to your local custom if you need&lt;br /&gt;
DATE=`date +%d-%m-%Y`&lt;br /&gt;
&lt;br /&gt;
## here the scripts try to find the dfu-util binary and set it as the DFU var:&lt;br /&gt;
if which dfu-util &amp;gt;/dev/null ; then&lt;br /&gt;
	echo&lt;br /&gt;
	echo &amp;quot;dfu-util found in your path&amp;quot;&lt;br /&gt;
	echo&lt;br /&gt;
	## 1 the function use this if you placed/linked dfu-util in your $PATH&lt;br /&gt;
	DFU=dfu-util&lt;br /&gt;
&lt;br /&gt;
elif ls dfu-util &amp;gt;/dev/null ; then&lt;br /&gt;
	echo&lt;br /&gt;
	echo &amp;quot;dfu-util found in current directory&amp;quot; &lt;br /&gt;
	echo&lt;br /&gt;
	## or 2 use following line if dfu-util is placed in the same directory where you run the script&lt;br /&gt;
	DFU=./dfu-util&lt;br /&gt;
	 &lt;br /&gt;
else&lt;br /&gt;
	## or 3 if the script doesn't find dfu-util shows the link for installing it and exit&lt;br /&gt;
	echo&lt;br /&gt;
	echo &amp;quot;dfu-util NOT found! install and use howto @ http://wiki.openmoko.org/wiki/Dfu-util&amp;quot;&lt;br /&gt;
	echo&lt;br /&gt;
	exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
## here we get the hex code for devices found with dfu-util --list &lt;br /&gt;
## the hex code is grabbed and the name of the device is shown accordingly and you are prompetd to chose the right one:&lt;br /&gt;
echo&lt;br /&gt;
echo 'these are the devices i found:' &lt;br /&gt;
echo&lt;br /&gt;
for device in `${DFU} --list | grep 0x | cut -f3 -d' ' | tr -d '[]'` ; do&lt;br /&gt;
	if [ &amp;quot;$device&amp;quot; == '0x1457:0x5119' ] ; then&lt;br /&gt;
		echo 'Neo 1973'&lt;br /&gt;
	elif [ &amp;quot;$device&amp;quot; == '0x1d50:0x5119' ] ;	then&lt;br /&gt;
		echo &amp;quot;Neo FreeRunner&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		echo 'other device found, DO NOT use dfu-util on this!!! it might bork it...'&lt;br /&gt;
		exit 1&lt;br /&gt;
	fi&lt;br /&gt;
done | nl&lt;br /&gt;
echo&lt;br /&gt;
echo 'choose the device to backup:' &lt;br /&gt;
echo&lt;br /&gt;
read selection&lt;br /&gt;
HEX=$(${DFU} --list | grep 0x | head -n $selection | tail -1 | cut -f3 -d' ' | tr -d '[]') &lt;br /&gt;
&lt;br /&gt;
## use the built-in read command to ask you and use the directory for the backup&lt;br /&gt;
while [ -z &amp;quot;$BACKUP_DIR&amp;quot; ] ; do&lt;br /&gt;
	echo&lt;br /&gt;
	read -e -p $&amp;quot;enter the directory for the backup:&amp;quot; BACKUP_DIR&lt;br /&gt;
	echo&lt;br /&gt;
&lt;br /&gt;
	## chek wether the dir exist and proceed, else create it and proceed.&lt;br /&gt;
	if [ ! -d &amp;quot;$BACKUP_DIR&amp;quot; ] ; then&lt;br /&gt;
		echo&lt;br /&gt;
		echo -n &amp;quot;$BACKUP_DIR does not exist, create it? [Y/n] &amp;quot;&lt;br /&gt;
		echo&lt;br /&gt;
		read CREATE_DIR&lt;br /&gt;
		if [ x&amp;quot;$CREATE_DIR&amp;quot; = xy -o x&amp;quot;$CREATE_DIR&amp;quot; = xY -o -z &amp;quot;$CREATE_DIR&amp;quot; ] ; then&lt;br /&gt;
			mkdir -p -v &amp;quot;${BACKUP_DIR}&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			BACKUP_DIR=&lt;br /&gt;
		fi&lt;br /&gt;
	fi&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
## here you get prompted to chose the backup you want, you can backup single files or all of them.&lt;br /&gt;
echo&lt;br /&gt;
echo 'choose the component to backup from the list:'&lt;br /&gt;
echo&lt;br /&gt;
&lt;br /&gt;
select howto in kernel splash u-boot u-boot_env rootfs all quit; do&lt;br /&gt;
	if [ &amp;quot;$howto&amp;quot; == &amp;quot;kernel&amp;quot; -o &amp;quot;$howto&amp;quot; == &amp;quot;all&amp;quot; ] ; then&lt;br /&gt;
		${DFU} -d ${HEX} -a kernel -R -U ${BACKUP_DIR}/kernel-${DATE}.bin&lt;br /&gt;
	fi&lt;br /&gt;
	if [ &amp;quot;$howto&amp;quot; == &amp;quot;splash&amp;quot; -o &amp;quot;$howto&amp;quot; == &amp;quot;all&amp;quot; ] ; then&lt;br /&gt;
		${DFU} -d ${HEX} -a splash -R -U ${BACKUP_DIR}/splash-${DATE}.bin&lt;br /&gt;
	fi&lt;br /&gt;
	if [ &amp;quot;$howto&amp;quot; == &amp;quot;u-boot&amp;quot; -o &amp;quot;$howto&amp;quot; == &amp;quot;all&amp;quot; ] ; then&lt;br /&gt;
		${DFU} -d ${HEX} -a u-boot -R -U ${BACKUP_DIR}/u-boot-${DATE}.bin&lt;br /&gt;
	fi&lt;br /&gt;
	if [ &amp;quot;$howto&amp;quot; == &amp;quot;u-boot_env&amp;quot; -o &amp;quot;$howto&amp;quot; == &amp;quot;all&amp;quot; ] ; then&lt;br /&gt;
		${DFU} -d ${HEX} -a u-boot_env -R -U ${BACKUP_DIR}/u-boot_env-${DATE}.bin&lt;br /&gt;
	fi&lt;br /&gt;
	if [ &amp;quot;$howto&amp;quot; == &amp;quot;rootfs&amp;quot; -o &amp;quot;$howto&amp;quot; == &amp;quot;all&amp;quot; ] ; then&lt;br /&gt;
		${DFU} -d ${HEX} -a rootfs -R -U ${BACKUP_DIR}/rootfs-${DATE}.jffs2&lt;br /&gt;
	fi&lt;br /&gt;
	if [ &amp;quot;$howto&amp;quot; == &amp;quot;quit&amp;quot; ] ; then&lt;br /&gt;
		exit 0&lt;br /&gt;
	fi&lt;br /&gt;
	echo&lt;br /&gt;
	echo 'the component(s) has/have been backed up, what next? (press enter for menu)'&lt;br /&gt;
	echo&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
exit 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Pretty GUI Script ===&lt;br /&gt;
&lt;br /&gt;
[[NeoTool]] is a zenity-based script which allows you to both backup and Flash your device from a pretty GUI. It uses both the dfu-util method and the alternate method described on this page, and can produce flashable images of everything including rootfs. Check it out.&lt;br /&gt;
&lt;br /&gt;
== Backing up the incremental rsync hardlink way ==&lt;br /&gt;
&lt;br /&gt;
Following is a very simple implementation of&lt;br /&gt;
[http://www.mikerubel.org/computers/rsync_snapshots/ incremental rsync snapshots with hardlinks]. Just put it to /etc/cron.daily/backup-neo&lt;br /&gt;
on your PC and setup ssh keys between your PC and neo. It will then&lt;br /&gt;
daily try to backup all files in the / partition. Each successful&lt;br /&gt;
backup is hardlinked under a timestamped directory so you can access&lt;br /&gt;
old backups easily. In fact, you can even NFS mount /backup/neo to&lt;br /&gt;
phone and then chroot inside the backups to run programs in the&lt;br /&gt;
backup'ed environment.&lt;br /&gt;
 #!/bin/bash&lt;br /&gt;
 # /etc/cron.daily/backup-neo&lt;br /&gt;
 rsync --delete -ax --numeric-ids 192.168.0.202:/ /backup/neo/latest 2&amp;gt;  /dev/null&lt;br /&gt;
 ret=$?&lt;br /&gt;
 &lt;br /&gt;
 case $ret in&lt;br /&gt;
 0)&lt;br /&gt;
         # backup done, let's save it&lt;br /&gt;
         cp -al /backup/neo/latest /backup/neo/`date -I`&lt;br /&gt;
         ;;&lt;br /&gt;
 12)&lt;br /&gt;
         # neo was not at home&lt;br /&gt;
         ;;&lt;br /&gt;
 *)&lt;br /&gt;
         echo &amp;quot;backup failed with return value $ret&amp;quot;&lt;br /&gt;
         ;;&lt;br /&gt;
 esac&lt;br /&gt;
&lt;br /&gt;
== Backing up internal flash when booted on external SD-card ==&lt;br /&gt;
&lt;br /&gt;
 #Freerunner&lt;br /&gt;
 mkdir internal_flash&lt;br /&gt;
 mount /dev/mtdblock6 internal_flash -t jffs2&lt;br /&gt;
&lt;br /&gt;
Now you can pack directory or copy selected files out from it.&lt;br /&gt;
&lt;br /&gt;
(This mounting is usefull also if your internal operating system is non-bootable. You can get files out or even repair the system using operating system on external card.)&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.oesf.org/forum/index.php?showtopic=25994#entry178835 read jffs file system on pc]&lt;br /&gt;
&lt;br /&gt;
[[Category:PIM]]&lt;br /&gt;
[[category:Advanced End User]]&lt;br /&gt;
[[Category:Flashing Openmoko]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/NeoCon</id>
		<title>NeoCon</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/NeoCon"/>
				<updated>2009-12-02T03:02:33Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''neocon''' is a handy serial console utility (not only) for [[Bootloader|u-boot]].&lt;br /&gt;
&lt;br /&gt;
'''neocon''' has a few graving advantages over some other terminal apps:&lt;br /&gt;
&lt;br /&gt;
* You don't have to be &amp;lt;code&amp;gt;root&amp;lt;/code&amp;gt; to access &amp;lt;code&amp;gt;/dev/ttyACM0&amp;lt;/code&amp;gt; with '''neocon'''. Being a member of the &amp;lt;code&amp;gt;dialout&amp;lt;/code&amp;gt; group should give you sufficient privileges. &lt;br /&gt;
* by specifying a delay  on keyboard input(as shown below), '''neocon''' will allow you to paste commands directly from clipboard without making [[Bootloader|u-boot]] choke on it. &lt;br /&gt;
* '''neocon''' can be started without &amp;lt;code&amp;gt;/dev/ttyACM0&amp;lt;/code&amp;gt; being available. It will automatically connect as soon as you start [[Bootloader|u-boot]] on the Neo:&lt;br /&gt;
&lt;br /&gt;
The main feature of '''neocon''' is actually that you can give it a list&lt;br /&gt;
of devices and it will pick one that works, e.g.,&lt;br /&gt;
&lt;br /&gt;
 # neocon /dev/ttyUSB{0,1,2}&lt;br /&gt;
&lt;br /&gt;
If you don't like the one it picked, you can switch to the next with&lt;br /&gt;
 ~n&lt;br /&gt;
&lt;br /&gt;
This is useful for dynamically allocated devices, such as &amp;lt;code&amp;gt;ttyUSBn&amp;lt;/code&amp;gt;&lt;br /&gt;
or &amp;lt;code&amp;gt;ttyACMn&amp;lt;/code&amp;gt;. You can of course also use them with other communication&lt;br /&gt;
programs - there's certainly no shortage of them - but then you have&lt;br /&gt;
to handle reconnects manually.&lt;br /&gt;
&lt;br /&gt;
==Installation==&lt;br /&gt;
Download the source from http://svn.openmoko.org/developers/werner/neocon/ to a directory of your choice and build '''neocon''' by issuing &lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
==Usage==&lt;br /&gt;
To connect to the [[bootloader]] use&lt;br /&gt;
&lt;br /&gt;
 ./neocon -t 30 /dev/ttyACM0&lt;br /&gt;
&lt;br /&gt;
To quit '''neocon''' type:&lt;br /&gt;
&lt;br /&gt;
 ~.&lt;br /&gt;
&lt;br /&gt;
An alternative to {{PAGENAME}} is [[picocom]].&lt;br /&gt;
&lt;br /&gt;
[[Category:Middleware]]&lt;br /&gt;
[[Category:Bootloaders]]&lt;br /&gt;
[[Category:Bootloader]]&lt;br /&gt;
[[Category:USB]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Community_Updates/Draft</id>
		<title>Community Updates/Draft</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Community_Updates/Draft"/>
				<updated>2009-11-17T14:46:39Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: /* Applications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Improve}}&lt;br /&gt;
{{Note|&lt;br /&gt;
*Take a moment and look at Discussion page to get a clue on how to contribute to Community Updates while following OM wiki editing guidelines please.&lt;br /&gt;
*I you are planning longer edition, please use &amp;lt;nowiki&amp;gt;{{Editing|your_username_here|date_here|editing_summary_here}}tag. Remember to remove/comment out it right after you save your work.&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
*Please fill in everything you think the community should know.&lt;br /&gt;
*On YYYY-MM-DD this content will be _moved_ to http://wiki.openmoko.org/wiki/Community_Updates/YYYY-MM-DD, feel free to do it.&lt;br /&gt;
*Post a note about CU release on the community mailing list.&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;!--{{Editing|USER|DATE|Community Update Draft conforming to OM Wiki editing guidlines}}--&amp;gt;&lt;br /&gt;
&amp;lt;!--{{Editing|~~~|~~~~~|your comment...}}--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
====='''Period YYYY-MM-DD to YYYY-MM-DD'''=====&lt;br /&gt;
&lt;br /&gt;
==Distributions==&lt;br /&gt;
{{DistributionBox|&lt;br /&gt;
Name=Distro Name [version]|&lt;br /&gt;
Description=Here comes some additional text to show you guys, how Template:DistributionBox will behave under heavy load of text. It is copied several times on purpose. This way you can see how layout would looke like if description of distribution is very complex or expanded.Here comes some additional text to show you guys, how Template:DistributionBox will behave under heavy load of text. It is copied several times on purpose. This way you can see how layout would looke like if description of distribution is very complex or expanded.Here comes some additional text to show you guys, how Template:DistributionBox will behave under heavy load of text. It is copied several times on purpose. This way you can see how layout would looke like if description of distribution is very complex or expanded.Here comes some additional text to show you guys, how Template:DistributionBox will behave under heavy load of text. It is copied several times on purpose. This way you can see how layout would looke like if description of distribution is very complex or expanded.Here comes some additional text to show you guys, how Template:DistributionBox will behave under heavy load of text. It is copied several times on purpose. This way you can see how layout would looke like if description of distribution is very complex or expanded.Here comes some additional text to show you guys, how Template:DistributionBox will behave under heavy load of text. It is copied several times on purpose. This way you can see how layout would looke like if description of distribution is very complex or expanded.|&lt;br /&gt;
Screenshot=System_boot.png|&lt;br /&gt;
Codename='codename'|&lt;br /&gt;
Homepage=http://www.homepage.org|&lt;br /&gt;
Image=[http://www.homepage.org/path/to/ images]|&lt;br /&gt;
Works={{Works}}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Applications== &lt;br /&gt;
===New Applications===&lt;br /&gt;
&lt;br /&gt;
{{ApplicationBox|&lt;br /&gt;
Name=emenu - openmoko program launcher|&lt;br /&gt;
Description=This launcher was intended to use it with the hardware keys of the Openmoko phones. You can define own xml files for any of your target actions. Perhaps you will launch a other menu when you push the power or aux button. For example ⇒ pyemenu.py aux.xml [http://wiki.yourse.de/lib/exe/fetch.php?w=200&amp;amp;media=python:pyemenu.png screenshot].&lt;br /&gt;
&lt;br /&gt;
emenu is written in python and in gtk.|&lt;br /&gt;
Screenshot=System_boot.png|&lt;br /&gt;
Homepage=http://wiki.yourse.de/doku.php?id=python:emenu|&lt;br /&gt;
TestedOn=|&lt;br /&gt;
PackageName=&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
{{ApplicationBox|&lt;br /&gt;
Name=Exampleapp 0.0.1|&lt;br /&gt;
Description=Exampleapp 0.0.1 is an application to do some stuff..|&lt;br /&gt;
Screenshot=System_boot.png|&lt;br /&gt;
Homepage=http://wiki.openmoko.org/|&lt;br /&gt;
TestedOn=SHR-Unstable,Om2009T5|&lt;br /&gt;
PackageName=[http:// www.some.srv/path_to/Exampleapp.ipk Exampleapp]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
===Application Updates===&lt;br /&gt;
{{ApplicationBox|&lt;br /&gt;
Name=Exampleapp 0.0.1|&lt;br /&gt;
Description=Exampleapp 0.0.1 is an application to do some stuff...&lt;br /&gt;
* new example feature 1&lt;br /&gt;
* new example feature 2|&lt;br /&gt;
Screenshot=System_boot.png|&lt;br /&gt;
Homepage=http://wiki.openmoko.org/|&lt;br /&gt;
TestedOn=SHR-Unstable,Om2009T5|&lt;br /&gt;
PackageName=[http:// www.some.srv/path_to/Exampleapp.ipk Exampleapp]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
==Community==&lt;br /&gt;
Most important and change making mails on the mailing lists, blogs etc.. Coolest hacks, screenshots, themes etc..&lt;br /&gt;
&lt;br /&gt;
==Event News==&lt;br /&gt;
* '''2009-mm-dd''' [http://example.url.xom Example event] | add your event here&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Community Update]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/3D7K</id>
		<title>3D7K</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/3D7K"/>
				<updated>2009-03-05T19:44:43Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;3D7K (previously known as GTA03) is the codename of a phone that is currently in [[Phone Development|development]] by Openmoko. It seems as if it will not be available before Q3 2009. This [http://n2.nabble.com/Stage-of-GTA03-development--tp1664400p1803187.html post] from Steve Mosher gives more details.&lt;br /&gt;
&lt;br /&gt;
The 3D7K will be based on a more advanced system-on-a-chip of same family as the [[Neo FreeRunner]] ([[GTA02 revisions|GTA02]]). It will presumably differ from it by having EDGE and a camera. 3D7K will not include support for 3G networks because of the high price of 3G chips for low volume phones [http://lists.openmoko.org/pipermail/community/2008-December/038395.html].&lt;br /&gt;
&lt;br /&gt;
{{Speculations}}&lt;br /&gt;
&lt;br /&gt;
== 3D7K Specifications ==&lt;br /&gt;
The 3D7K will be based on the [[GTA02 revisions|GTA02]] introducing several major hardware changes&lt;br /&gt;
&lt;br /&gt;
New:&lt;br /&gt;
* New case design&lt;br /&gt;
* New GSM chip: [http://www.cinterion.com/en/ktcm/modules_terminals/gerneral_purpose/Scalable_platform/MC75i_TC63i_TC65i Cinterion, (Siemens) MC75i]&lt;br /&gt;
** 2.75G / EDGE&lt;br /&gt;
** Quad-Band (850/900/1800/1900 MHz)&lt;br /&gt;
* New WiFi/Bluetooth chip: [http://www.marvell.com/press/pressNewsDisplay.do?releaseID=603 Marvell 88W8688] - Update (2009-01-23): [http://lists.openmoko.org/pipermail/devel/2009-January/004354.html currently removed]&lt;br /&gt;
* Different Battery ([[Wishlist/LiFePO4 Battery]] based? - for long life?)&lt;br /&gt;
* Camera: Samsung S5K CCM camera (S5K4BA - UXGA: 2 Megapixel [http://www.csi-sensor.com.tw/eng/Lists/AreaSensorCubic/DispForm.aspx?ID=8&amp;amp;Source=http%3A%2F%2Fwww%2Ecsi%2Dsensor%2Ecom%2Etw%2Feng%2Fareasensors%2Easpx info]) [http://www.datasheetarchive.com/search.php?q=S5K*+CMOS some S5K datasheets]&lt;br /&gt;
* SoC: [http://semicon.samsung.de/applicationprocessors/tracking/aboutS3C6410.aspx s3c6410]&lt;br /&gt;
** includes Samsungs own 3D accelerator&lt;br /&gt;
** 533/667MHz operating frequency&lt;br /&gt;
** Vector Floating-Point (VFP) coprocessor&lt;br /&gt;
* GPS: [http://www.u-blox.com/technology/u-blox5/index.html ANTARIS 5]&lt;br /&gt;
* Display: TPO LPJ028T007A 2.8&amp;quot; [http://n2.nabble.com/-PATCH-0-2--Add-support-of-TPO-L1K002-LCM-driver-td2185408.html LCM]&lt;br /&gt;
* Touchscreen: EETI PCAP7200 capacitive touch device [http://lists.openmoko.org/nabble.html#nabble-td1690756%7Ca1690756 driver].&lt;br /&gt;
Removed:&lt;br /&gt;
* SMEDIA Glamo&lt;br /&gt;
&lt;br /&gt;
== GTA03 Evaluation Board ==&lt;br /&gt;
* 2008-08-11: the 25 first GTA03EVB arrived in office&lt;br /&gt;
* 2008-08-12: U-boot ported to GTA03EVB (Matt)&lt;br /&gt;
* 2008-08-12: The core can run at 533 MHz with 133MHz SDRAM&lt;br /&gt;
* 2008-08-12: GTA03EVB Hardware Verification of the u-blox 5 Antaris&lt;br /&gt;
* 2008-08-12: GPS performance tested&lt;br /&gt;
* 2008-08-18: GTA03EVB Hardware Verification of the Siemens MC 75i EDGE MODEM&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
* http://n2.nabble.com/Weekly-Engineering-News-33-2008-tp729555p729555.html&lt;br /&gt;
* [[MokoForesight]]&lt;br /&gt;
&lt;br /&gt;
[[Category:GTA03]]&lt;br /&gt;
&lt;br /&gt;
[[Category:3D7K]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/3D7K</id>
		<title>3D7K</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/3D7K"/>
				<updated>2009-03-04T16:19:59Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: /* 3D7K Specifications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;3D7K (previously known as GTA03) is the codename of a phone that is currently in [[Phone Development|development]] by Openmoko. It seems as if it will not be available before Q3 2009. This [http://n2.nabble.com/Stage-of-GTA03-development--tp1664400p1803187.html post] from Steve Mosher gives more details.&lt;br /&gt;
&lt;br /&gt;
The 3D7K will be based on a more advanced system-on-a-chip of same family as the [[Neo FreeRunner]] ([[GTA02 revisions|GTA02]]). It will presumably differ from it by having EDGE and a camera. 3D7K will not include support for 3G networks because of the high price of 3G chips for low volume phones [http://lists.openmoko.org/pipermail/community/2008-December/038395.html].&lt;br /&gt;
&lt;br /&gt;
{{Speculations}}&lt;br /&gt;
&lt;br /&gt;
== 3D7K Specifications ==&lt;br /&gt;
The 3D7K will be based on the [[GTA02 revisions|GTA02]] introducing several major hardware changes&lt;br /&gt;
&lt;br /&gt;
New:&lt;br /&gt;
* New case design&lt;br /&gt;
* New GSM chip: [http://www.cinterion.com/en/ktcm/modules_terminals/gerneral_purpose/Scalable_platform/MC75i_TC63i_TC65i Cinterion, (Siemens) MC75i]&lt;br /&gt;
** 2.75G / EDGE&lt;br /&gt;
** Quad-Band (850/900/1800/1900 MHz)&lt;br /&gt;
* New WiFi/Bluetooth chip: [http://www.marvell.com/press/pressNewsDisplay.do?releaseID=603 Marvell 88W8688] - Update (2009-01-23): [http://lists.openmoko.org/pipermail/devel/2009-January/004354.html currently removed]&lt;br /&gt;
* Different Battery ([[Wishlist/LiFePO4 Battery]] based? - for long life?)&lt;br /&gt;
* Camera: Samsung S5K camera [http://www.datasheetarchive.com/search.php?q=S5K*+CMOS datasheets]&lt;br /&gt;
* SoC: [http://semicon.samsung.de/applicationprocessors/tracking/aboutS3C6410.aspx s3c6410]&lt;br /&gt;
** includes Samsungs own 3D accelerator&lt;br /&gt;
** 533/667MHz operating frequency&lt;br /&gt;
** Vector Floating-Point (VFP) coprocessor&lt;br /&gt;
* GPS: [http://www.u-blox.com/technology/u-blox5/index.html ANTARIS 5]&lt;br /&gt;
* Display: TPO LPJ028T007A 2.8&amp;quot; [http://n2.nabble.com/-PATCH-0-2--Add-support-of-TPO-L1K002-LCM-driver-td2185408.html LCM]&lt;br /&gt;
* Touchscreen: EETI PCAP7200 capacitive touch device [http://lists.openmoko.org/nabble.html#nabble-td1690756%7Ca1690756 driver].&lt;br /&gt;
Removed:&lt;br /&gt;
* SMEDIA Glamo&lt;br /&gt;
&lt;br /&gt;
== GTA03 Evaluation Board ==&lt;br /&gt;
* 2008-08-11: the 25 first GTA03EVB arrived in office&lt;br /&gt;
* 2008-08-12: U-boot ported to GTA03EVB (Matt)&lt;br /&gt;
* 2008-08-12: The core can run at 533 MHz with 133MHz SDRAM&lt;br /&gt;
* 2008-08-12: GTA03EVB Hardware Verification of the u-blox 5 Antaris&lt;br /&gt;
* 2008-08-12: GPS performance tested&lt;br /&gt;
* 2008-08-18: GTA03EVB Hardware Verification of the Siemens MC 75i EDGE MODEM&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
* http://n2.nabble.com/Weekly-Engineering-News-33-2008-tp729555p729555.html&lt;br /&gt;
* [[MokoForesight]]&lt;br /&gt;
&lt;br /&gt;
[[Category:GTA03]]&lt;br /&gt;
&lt;br /&gt;
[[Category:3D7K]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/3D7K</id>
		<title>3D7K</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/3D7K"/>
				<updated>2009-03-04T16:15:13Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: New page: 3D7K (previously known as GTA03) is the codename of a phone that is currently in development by Openmoko. It seems as if it will not be available before Q3 2009. This...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;3D7K (previously known as GTA03) is the codename of a phone that is currently in [[Phone Development|development]] by Openmoko. It seems as if it will not be available before Q3 2009. This [http://n2.nabble.com/Stage-of-GTA03-development--tp1664400p1803187.html post] from Steve Mosher gives more details.&lt;br /&gt;
&lt;br /&gt;
The 3D7K will be based on a more advanced system-on-a-chip of same family as the [[Neo FreeRunner]] ([[GTA02 revisions|GTA02]]). It will presumably differ from it by having EDGE and a camera. 3D7K will not include support for 3G networks because of the high price of 3G chips for low volume phones [http://lists.openmoko.org/pipermail/community/2008-December/038395.html].&lt;br /&gt;
&lt;br /&gt;
{{Speculations}}&lt;br /&gt;
&lt;br /&gt;
== 3D7K Specifications ==&lt;br /&gt;
The 3D7K will be based on the [[GTA02 revisions|GTA02]] introducing several major hardware changes&lt;br /&gt;
&lt;br /&gt;
New:&lt;br /&gt;
* New case design&lt;br /&gt;
* New GSM chip: [http://www.cinterion.com/en/ktcm/modules_terminals/gerneral_purpose/Scalable_platform/MC75i_TC63i_TC65i Cinterion, (Siemens) MC75i]&lt;br /&gt;
** 2.75G / EDGE&lt;br /&gt;
** Quad-Band (850/900/1800/1900 MHz)&lt;br /&gt;
* New WiFi/Bluetooth chip: [http://www.marvell.com/press/pressNewsDisplay.do?releaseID=603 Marvell 88W8688] - Update (2009-01-23): [http://lists.openmoko.org/pipermail/devel/2009-January/004354.html currently removed]&lt;br /&gt;
* Different Battery ([[Wishlist/LiFePO4 Battery]] based? - for long life?)&lt;br /&gt;
* Camera: Samsung S5K camera [http://www.datasheetarchive.com/S5K-datasheet.html datasheets]&lt;br /&gt;
* SoC: [http://semicon.samsung.de/applicationprocessors/tracking/aboutS3C6410.aspx s3c6410]&lt;br /&gt;
** includes Samsungs own 3D accelerator&lt;br /&gt;
** 533/667MHz operating frequency&lt;br /&gt;
** Vector Floating-Point (VFP) coprocessor&lt;br /&gt;
* GPS: [http://www.u-blox.com/technology/u-blox5/index.html ANTARIS 5]&lt;br /&gt;
* Display: TPO LPJ028T007A 2.8&amp;quot; [http://n2.nabble.com/-PATCH-0-2--Add-support-of-TPO-L1K002-LCM-driver-td2185408.html LCM]&lt;br /&gt;
* Touchscreen: EETI PCAP7200 capacitive touch device [http://lists.openmoko.org/nabble.html#nabble-td1690756%7Ca1690756 driver].&lt;br /&gt;
Removed:&lt;br /&gt;
* SMEDIA Glamo&lt;br /&gt;
&lt;br /&gt;
== GTA03 Evaluation Board ==&lt;br /&gt;
* 2008-08-11: the 25 first GTA03EVB arrived in office&lt;br /&gt;
* 2008-08-12: U-boot ported to GTA03EVB (Matt)&lt;br /&gt;
* 2008-08-12: The core can run at 533 MHz with 133MHz SDRAM&lt;br /&gt;
* 2008-08-12: GTA03EVB Hardware Verification of the u-blox 5 Antaris&lt;br /&gt;
* 2008-08-12: GPS performance tested&lt;br /&gt;
* 2008-08-18: GTA03EVB Hardware Verification of the Siemens MC 75i EDGE MODEM&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
* http://n2.nabble.com/Weekly-Engineering-News-33-2008-tp729555p729555.html&lt;br /&gt;
* [[MokoForesight]]&lt;br /&gt;
&lt;br /&gt;
[[Category:GTA03]]&lt;br /&gt;
&lt;br /&gt;
[[Category:3D7K]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/GTA03</id>
		<title>GTA03</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/GTA03"/>
				<updated>2009-03-04T16:10:36Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: Redirecting to 3D7K&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[3D7K]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/GTA03</id>
		<title>GTA03</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/GTA03"/>
				<updated>2009-01-26T00:00:16Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GTA03 is the codename of a phone that is currently in [[Phone Development|development]] by Openmoko. It seems as if it will not be available before Q3 2009. This [http://n2.nabble.com/Stage-of-GTA03-development--tp1664400p1803187.html post] from Steve Mosher gives more details.&lt;br /&gt;
&lt;br /&gt;
The GTA03 will be based on a more advanced system-on-a-chip of same family as the [[Neo FreeRunner]] ([[GTA02 revisions|GTA02]]). It will presumably differ from it by having EDGE and a camera. GTA03 will not include support for 3G networks because of the high price of 3G chips for low volume phones [http://lists.openmoko.org/pipermail/community/2008-December/038395.html].&lt;br /&gt;
&lt;br /&gt;
{{Speculations}}&lt;br /&gt;
&lt;br /&gt;
== GTA03 Specifications ==&lt;br /&gt;
The GTA03 will be based on the [[GTA02 revisions|GTA02]] introducing several major hardware changes&lt;br /&gt;
&lt;br /&gt;
New:&lt;br /&gt;
* New case design&lt;br /&gt;
* New GSM chip: [http://www.cinterion.com/en/ktcm/modules_terminals/gerneral_purpose/Scalable_platform/MC75i_TC63i_TC65i Cinterion, (Siemens) MC75i]&lt;br /&gt;
** 2.75G / EDGE&lt;br /&gt;
** Quad-Band (850/900/1800/1900 MHz)&lt;br /&gt;
* New WiFi/Bluetooth chip: [http://www.marvell.com/press/pressNewsDisplay.do?releaseID=603 Marvell 88W8688] - Update (2008-01-23): [http://lists.openmoko.org/pipermail/devel/2009-January/004354.html currently removed]&lt;br /&gt;
* Different Battery ([[Wishlist/LiFePO4 Battery]] based? - for long life?)&lt;br /&gt;
* Camera&lt;br /&gt;
* SoC: [http://semicon.samsung.de/applicationprocessors/tracking/aboutS3C6410.aspx s3c6410]&lt;br /&gt;
** includes Samsungs own 3D accelerator&lt;br /&gt;
** 533/667MHz operating frequency&lt;br /&gt;
** Vector Floating-Point (VFP) coprocessor&lt;br /&gt;
* GPS: [http://www.u-blox.com/technology/u-blox5/index.html ANTARIS 5]&lt;br /&gt;
* Display: TPO LPJ028T007A 2.8&amp;quot; [http://n2.nabble.com/-PATCH-0-2--Add-support-of-TPO-L1K002-LCM-driver-td2185408.html LCM]&lt;br /&gt;
* Touchscreen: EETI PCAP7200 capacitive touch device [http://lists.openmoko.org/nabble.html#nabble-td1690756%7Ca1690756 driver].&lt;br /&gt;
Removed:&lt;br /&gt;
* SMEDIA Glamo&lt;br /&gt;
&lt;br /&gt;
== GTA03 Evaluation Board ==&lt;br /&gt;
* 2008-08-11: the 25 first GTA03EVB arrived in office&lt;br /&gt;
* 2008-08-12: U-boot ported to GTA03EVB (Matt)&lt;br /&gt;
* 2008-08-12: The core can run at 533 MHz with 133MHz SDRAM&lt;br /&gt;
* 2008-08-12: GTA03EVB Hardware Verification of the u-blox 5 Antaris&lt;br /&gt;
* 2008-08-12: GPS performance tested&lt;br /&gt;
* 2008-08-18: GTA03EVB Hardware Verification of the Siemens MC 75i EDGE MODEM&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
* http://n2.nabble.com/Weekly-Engineering-News-33-2008-tp729555p729555.html&lt;br /&gt;
* [[MokoForesight]]&lt;br /&gt;
&lt;br /&gt;
[[Category:GTA03]]&lt;br /&gt;
&lt;br /&gt;
[[Category:GTA03]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Community_Updates/2009-01-12</id>
		<title>Community Updates/2009-01-12</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Community_Updates/2009-01-12"/>
				<updated>2009-01-13T16:41:29Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Hi! This is the nineth [[Community Updates]], January 12th issue. For the new year we [http://n2.nabble.com/Questions-and-Answers-tp2103754p2103754.html interviewed Sean] on everything that matters for the community: sales in 2008 were around the low five digits, om-locations is what remains of an ambitious mesh network project, and the most surprising development to him was the explosion of distributions. Back on the mailing lists, activity was rater slow during the first week of the year, but got more intense than ever after the holidays. Illume's keyboard received lots of localisations. Opkg.org reached the critical mass of packages. SHR and FSO are counting down toward their next milestone, while coding continues for kernel, drivers, Android and the like. It looks like the switch to 2.6.28 is going to happen soonish, before the switch to the Paroli phone stack.&lt;br /&gt;
&lt;br /&gt;
== Distributions ==&lt;br /&gt;
* SHR: According to Julien's latest on [http://blog.shr-project.org/ the SHR project blog], the baby is [http://blog.shr-project.org/2009/01/release-time-is-close-whats-left-what-are-we-doing-what-do-we-need.html expected really soon now].&lt;br /&gt;
* Marek announced the new [http://lists.openmoko.org/pipermail/community/2009-January/039227.html organisation of package and images repositories].&lt;br /&gt;
* Android: The [http://n2.nabble.com/New-openmoko-android-binary-tp2133865.html;cid=1230847584604-21 latest compatible kernel] has wifi and bluetooth working now. Suspend and resume work, but they have some usability issues.&lt;br /&gt;
* [[FSO]] MS5 should branch out for really soon now (the roadmap says release January 31st, but they want a longer stabilization period this time). It will be the first milestone that will have support not only for GTA01 and 02, but also for the Motorola EZX A780. [http://www.freesmartphone.org/index.php/Meeting_2008-12-18_Braunschweig meeting minutes].&lt;br /&gt;
* Hackable:1 [http://lists.hackable1.org/pipermail/hackable1-dev/2009-January/000104.html buildbot is up and running]. Images are generated every morning around 4:00. Happy testing !&lt;br /&gt;
* [[User:Bytestore]] has updated assemblage 2008.12 from Russian community, work with gprs, headphone jack plug, ru keyboard and many other things were [http://openmoko.spb.ru/viewtopic.php?f=9&amp;amp;t=11 updated] (download [http://dl.linuxphone.ru/openmoko/images/bytestore/bytestore-rootfs-OM200812-2009-01-11-112312.jffs2 rootfs], see [http://dl.linuxphone.ru/openmoko/images/bytestore/screenshot_2009_01_11_112312_en screenshots])&lt;br /&gt;
&lt;br /&gt;
== New applications ==&lt;br /&gt;
&lt;br /&gt;
* [[LED clock]] When an Openmoko is sitting unused at night, turn it into an alarm clock with large 7-segment digits on a black background in landscape mode.&lt;br /&gt;
* [http://projects.openmoko.org/projects/gprssettings/ GPRSsettings] is a GUI script designed to change apn, login, dialnumber.&lt;br /&gt;
* Samuel's script for [http://blog.samuelpereira.net/?p=4 a toggle wifi icon].&lt;br /&gt;
* [http://www.opkg.org/package_86.html ylock] 0.1 Python screen lock and low battery monits.&lt;br /&gt;
* [http://www.opkg.org/package_85.html AppManager] 1.0.1 Zenity package manager.&lt;br /&gt;
* Mirko [http://lists.openmoko.org/pipermail/community/2009-January/039376.html announced] that pre-alpha [[Paroli]] was now packaged in testing. Development [http://charlie137-2.blogspot.com/2009/01/paroli-get-website.html moved] to their own domain: [http://www.paroli-project.org/ paroli-project] hosts trac, git, blog and documentation.&lt;br /&gt;
* Kurt's [[Gwaterpas]] allows to use the Freerunner as a leveling tool.&lt;br /&gt;
* There are now 75 packages at [http://opkg.org opkg.org]. Novelties include osmupdater (updates OSM maps directory), sortdesk (sorts the desk), MokoCard (flashcards learning aid), sms-sentry (query the unit's location by SMS, handy if it was just stolen), pyring (a key ring), EFpLayer (mplayer GUI), playstankontakarta (an icon displaying remaining credit with POLISH PLAY pre-paid phone provider), various illume keyboards and more. It was mentioned unofficially that Openmoko's community repository is going to be dismantled.&lt;br /&gt;
&lt;br /&gt;
== Ports and updates ==&lt;br /&gt;
* Lots of [[Navit]] activity. Distributions are kindly suggested to package the sample map separately from the main binary to conserve space.&lt;br /&gt;
* The [[opkg]] package manager development [http://lists.openmoko.org/pipermail/opkg-devel/2008-December/000181.html moved from OM svn to Google code]. The recommended stable version is r172, there is a significant data structures+algorithm refactorization going on.&lt;br /&gt;
* Version 2.4 of [[orrery]] is now available.   It has a new schematic Solar System View page, showing the position of the planets and our moon in their orbits, a new moon calendar, and a less ugly icon.&lt;br /&gt;
* The [[ZOMG!]] package manager is now available on [http://www.opkg.org/package_96.html opkg.org], and now allows to add/remove/edit repositories (i.e. feeds).&lt;br /&gt;
* Angus [http://www.mail-archive.com/community@lists.openmoko.org/msg37043.html updated BtGPS.py] to work with FSO. With this script, [[Neo FreeRunner GPS#Bluetooth GPS relay|the FreeRunner works as a bluetooth GPS]].&lt;br /&gt;
* Marco shared his [http://lists.openmoko.org/pipermail/community/2009-January/039370.html success in compiling the latest E17 svn] on 2008.12. There was trouble on SHR with the Elementary widget set, tough.&lt;br /&gt;
&lt;br /&gt;
== Community ==&lt;br /&gt;
* Sean's [http://n2.nabble.com/Questions-and-Answers-tp2103754p2103754.html new year interview]&lt;br /&gt;
* Rakshat Hooja's company IDA Systems will be at Mumbai's TechFest. There are [http://lists.openmoko.org/pipermail/community/2009-January/039505.html gifts] waiting for the first 10 FreeRunner owners to show up at their booth!&lt;br /&gt;
* The [http://lists.openmoko.org/pipermail/devel/2009-January/004064.html Future of location services] thread started as an attempt to clarify the GPS drivers tangle, and then turned to using GSM celltowers and wifi access points location information. Dima [http://lists.openmoko.org/pipermail/devel/2009-January/004074.html signalled that] there are several free databases of GSM tower locations, and that his gta02 Perl script to query [http://www.opencellid.org/ OpenCellID] for the approximate tower location, and then initialize the AGPS with this data works great. There is a database of Wifi access points at [http://wigle.net/ wigle.net].&lt;br /&gt;
* Two new mailing lists were announced. One to discuss [https://lists.openmoko.org/mailman/listinfo/testing testing of all Openmoko Products]. The other to discuss [http://lists.projects.openmoko.org/mailman/listinfo/siteadmin-general projects.openmoko.org] administration. While we are at it, here are the number of subscriptions as of 07/01/2009 according to Werner: hardware 670, kernel 692, support 1016, devel 1262, community 2323, announce 11258.&lt;br /&gt;
* The Department CSIE of National Chung Cheng University [http://wiki.openmoko.org/wiki/Special:Search?search=CSIE&amp;amp;go=Go launched dozens of projects] this week.&lt;br /&gt;
&lt;br /&gt;
== Hardware and drivers ==&lt;br /&gt;
* Werner [http://lists.openmoko.org/pipermail/hardware/2008-December/000890.html announced] he made an [http://www.almesberger.net/misc/idbg/ debug board] that fits inside the case. Schematics contributed as a community member, not as an Openmoko employee.&lt;br /&gt;
* Filter AUX key bouncing [http://git.openmoko.org/?p=kernel.git;a=commit;h=39a497b0421174c3f23ef3dffb0675a4db3aa3a0 patches].&lt;br /&gt;
* There is a thread about the [[Touchscreen Filters|touchscreen driver]] on the devel list, how it should be [http://lists.openmoko.org/pipermail/devel/2008-December/003888.html split between kernelspace and userspace], and [http://lists.openmoko.org/pipermail/devel/2009-January/004037.html how to contribute it upstream] to the Linux kernel. I find the mix of high-level technical arguments with social and emotional considerations fascinating.&lt;br /&gt;
* It is a pleasure to say that the Community localized the [[Illume keyboard]] to at least [[Illume#List_of_illume_keyboards|nine different languages]]. This does not only involves layout and icon, but also building up a dictionary (the keyboard emits key symbols when in &amp;quot;terminal&amp;quot; mode, but uses predictive dictionary lookups when in &amp;quot;strings&amp;quot; mode.) The frontier: asian languages input.&lt;br /&gt;
* The Freeunner is also a target platform for many innovative new input methods.&lt;br /&gt;
* Carl proposed a simple in-car mount: stick a piece of velcro on the dashboard, strap the FreeRunner onto it through the hole, flipping the display with ''xrandr -o 2''. Add a standard USB car charger, you are all set.&lt;br /&gt;
* GSM firmware updater and hardware buzzfix program: not released yet, still working on it.&lt;br /&gt;
* Video driver code was ported from kdrive to xorg architecture, Graeme is now [http://lists.openmoko.org/pipermail/devel/2009-January/003964.html in debugging mode]. Andreas, Chris and Tom are also working on it.&lt;br /&gt;
* Miguel's [http://www.youtube.com/watch?v=rOBWSrI14BM video] showcases that the [[Arduino]], a popular open-source electronic prototyping platform, complements well the FreeRunner when it comes to reading sensors and controlling actuators.&lt;br /&gt;
* [[Qi]] supports the zImage kernel format.&lt;br /&gt;
&lt;br /&gt;
== Tips and tricks ==&lt;br /&gt;
&lt;br /&gt;
* Booting 2008.12 from a microsd fails with &amp;quot;Only GTA01 hardware supported by ASoc driver&amp;quot; ? Option &amp;quot;ro&amp;quot; on the kernel commandline is fatal for startup of 2008.12. Check your U-Boot env if you're using that for &amp;quot;ro&amp;quot;, or try adding rw to /boot/append-GTA02 if you are on SD Card and Qi.&lt;br /&gt;
* tangogps 0.9.2 and 0.9.3 have an issue converting between coordinate formats in the western or southern hemispheres.  If you use the DD.dd format it should display the correct value.&lt;br /&gt;
* Current FSO should support both the 2.6.24 and 2.6.28 kernels. The patch to use old FSO with new kernel is [http://trac.freesmartphone.org/ticket/293 here].&lt;br /&gt;
* Howto [https://docs.openmoko.org/trac/ticket/2192#comment:3 get the wrench and QWERTY] buttons in 2008.12 with the ASU theme.&lt;br /&gt;
* Chris Samuel offers a [http://www.csamuel.org/2009/01/08/echo-suppression-fix-for-qt-extended-442-on-openmoko-neo noise reduction+echo suppression patch and binary for QtE 4.4.2].&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/GTA03</id>
		<title>GTA03</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/GTA03"/>
				<updated>2008-12-23T13:31:04Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: /* GTA03 Specifications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GTA03 is the codename of a phone that is currently in development by Openmoko. For more information about other phones in development, visit [[Phone Development]]. The GTA03 will be based on a more advanced system-on-a-chip of same family as the [[Neo FreeRunner]] ([[GTA02 revisions|GTA02]]). It will presumably differ from it by having EDGE and a camera. GTA03 will not include support for 3G networks.&lt;br /&gt;
&lt;br /&gt;
{{Speculations}}&lt;br /&gt;
&lt;br /&gt;
== GTA03 Specifications ==&lt;br /&gt;
The GTA03 will be based on the [[GTA02 revisions|GTA02]] introducing several major hardware changes&lt;br /&gt;
&lt;br /&gt;
New:&lt;br /&gt;
* New case design&lt;br /&gt;
* New GSM chip (2.75/EDGE): [http://www.cinterion.com/en/ktcm/modules_terminals/gerneral_purpose/Scalable_platform/MC75i_TC63i_TC65i Cinterion, (Siemens) MC75i]&lt;br /&gt;
* New WiFi/Bluetooth chip: [http://www.marvell.com/press/pressNewsDisplay.do?releaseID=603 Marvell 88W8688]&lt;br /&gt;
* Different Battery ([[Wishlist/LiFePO4 Battery]] based? - for long life?)&lt;br /&gt;
* Camera&lt;br /&gt;
* SoC: [http://semicon.samsung.de/applicationprocessors/tracking/aboutS3C6410.aspx s3c6410]&lt;br /&gt;
* GPS: [http://www.u-blox.com/technology/u-blox5/index.html ANTARIS 5]&lt;br /&gt;
* Touchscreen: EETI PCAP7200 capacitive touch device [http://lists.openmoko.org/nabble.html#nabble-td1690756%7Ca1690756 driver].&lt;br /&gt;
Removed:&lt;br /&gt;
* SMEDIA Glamo&lt;br /&gt;
&lt;br /&gt;
== GTA03 Evaluation Board ==&lt;br /&gt;
* AUG.11.2008:  the 25 first GTA03EVB arrived in office&lt;br /&gt;
* Aug.12.2008:  U-boot ported to GTA03EVB (Matt)&lt;br /&gt;
* Aug.12.2008:  The core can run at 533 MHz with 133MHz SDRAM&lt;br /&gt;
* Aug.12.2008:  GTA03EVB Hardware Verification of the u-blox 5 Antaris&lt;br /&gt;
* Aug.12.2008:  GPS performance tested&lt;br /&gt;
* Aug.18.2008:  GTA03EVB Hardware Verification of the Siemens MC 75i EDGE MODEM&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
* http://n2.nabble.com/Weekly-Engineering-News-33-2008-tp729555p729555.html&lt;br /&gt;
* [[MokoForesight]]&lt;br /&gt;
&lt;br /&gt;
[[Category:GTA03]]&lt;br /&gt;
&lt;br /&gt;
[[Category:GTA03]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Scummvm</id>
		<title>Scummvm</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Scummvm"/>
				<updated>2008-12-16T04:06:29Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: /* ScummVM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ScummVM =&lt;br /&gt;
&lt;br /&gt;
ScummVM is a program which allows you to run certain classic graphical point-and-click adventure games, provided you already have their data files. The clever part about this: ScummVM just replaces the executables shipped with the game, allowing you to play them on systems for which they were never designed!&lt;br /&gt;
&lt;br /&gt;
You can obtain it either by using [[Mokomakefile]] via&lt;br /&gt;
&lt;br /&gt;
# make build-package-scummvm&lt;br /&gt;
&lt;br /&gt;
or using a binary, like so:&lt;br /&gt;
&lt;br /&gt;
 opkg install http://www.angstrom-distribution.org/feeds/2007/ipk/glibc/armv4t/base/libmad0_0.15.1b-r0_armv4t.ipk \&lt;br /&gt;
 http://www.angstrom-distribution.org/feeds/2007/ipk/glibc/armv4t/base/libmpeg2-0_0.4.0b-r4_armv4t.ipk \&lt;br /&gt;
 http://downloads.tuxfamily.org/3v1deb/openmoko/scummvm_0.12.0_armv4t.ipk&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Image:MonkeyIsland.png|Monky Island]]&lt;br /&gt;
&lt;br /&gt;
The games are copyrighted and the copyright holder has not given you a license to redistribute them so you'll only be able to play those you own. You can also download some free games from [http://www.scummvm.org/downloads.php#extras scummvm.org] and from the [http://www.the-underdogs.info Home of the Underdogs].&lt;br /&gt;
&lt;br /&gt;
When starting ScummVM use the command&lt;br /&gt;
&lt;br /&gt;
# openmoko-scummvm&lt;br /&gt;
&lt;br /&gt;
This will map '''AUX''' button to the '''F5''' key, which is used to access the ScummVM menu. You should also find an entry on the main menu under ''Games''.&lt;br /&gt;
&lt;br /&gt;
'''Note:''' On the Neo Freerunner the wrong keycode (not '''AUX''') is mapped to '''F5'''. Here is a corrected version of the file ''/usr/bin/openmoko-scummvm'':&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
# Save current AUX Key mapping&lt;br /&gt;
SAVE_KEY=&amp;quot;$(xmodmap -pke | grep 'keycode 177')&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Map AUX Key to F5&lt;br /&gt;
xmodmap -e &amp;quot;keycode 177 = F5&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Turn LCD feft&lt;br /&gt;
xrandr -o left&lt;br /&gt;
&lt;br /&gt;
# Start the scummvm in fullscreen mode&lt;br /&gt;
scummvm --fullscreen --themepath=/usr/share/scummvm/&lt;br /&gt;
&lt;br /&gt;
# Turn LCD normal&lt;br /&gt;
xrandr -o normal&lt;br /&gt;
&lt;br /&gt;
# Restore the AUX Key mapping&lt;br /&gt;
xmodmap -e &amp;quot;$SAVE_KEY&amp;quot;&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note:''' It would be great if it where possible to get audio through the headphones and speaker muted.&lt;br /&gt;
&lt;br /&gt;
More information on ScummVM can be found on the [http://www.scummvm.org/ official] site&lt;br /&gt;
&lt;br /&gt;
=== Monkey Island 2 ===&lt;br /&gt;
&lt;br /&gt;
To be able to play Monkey Island 2 you need to pass ScummVM a parameter:&amp;lt;br&amp;gt;&lt;br /&gt;
root@fic-gta01:/$ DISPLAY=:0 openmoko-scummvm --boot-param=10001 monkey2&lt;br /&gt;
&lt;br /&gt;
For easy access from the menu you can create a menu entry by creating the file /usr/share/applications/monkeyisland2.desktop with the following content:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;[Desktop Entry]&lt;br /&gt;
Encoding=UTF-8&lt;br /&gt;
Name=LeChuck's Revenge&lt;br /&gt;
Comment=Monkey Island 2: LeChuck's Revenge&lt;br /&gt;
Exec=openmoko-scummvm --boot-param=10001 monkey2&lt;br /&gt;
Icon=monkeyisland2.png&lt;br /&gt;
Terminal=false&lt;br /&gt;
Type=Application&lt;br /&gt;
Categories=Games;&lt;br /&gt;
StartupNotify=false&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''No Desktop Icon Method'''&lt;br /&gt;
&lt;br /&gt;
Making a change to your scummvmrc does not clutter up your desktop with another icon and keeps the interface consistent.  Add the following to your scummvmrc (default location of ~/.scummvmrc) at the top global section add:&lt;br /&gt;
&lt;br /&gt;
copy_protection=0&lt;br /&gt;
&lt;br /&gt;
And after adding the Monkey Island 2 via the Scummvm GUI add the following below the [monkey2] section:&lt;br /&gt;
&lt;br /&gt;
boot_param=10001&lt;br /&gt;
&lt;br /&gt;
Then you can launch Monkey Island 2 from the menu like any other game without the annoying copy protection screens.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;onlyinclude&amp;gt;&lt;br /&gt;
{{ApplicationBox|&lt;br /&gt;
Name=[[Scummvm]]|&lt;br /&gt;
Description=ScummVM is a program which allows you to run certain classic graphical point-and-click adventure games, provided you already have their data files. The clever part about this: ScummVM just replaces the executables shipped with the game, allowing you to play them on systems for which they were never designed!|&lt;br /&gt;
Screenshot=MonkeyIsland.png|&lt;br /&gt;
Homepage=http://www.scummvm.org|&lt;br /&gt;
TestedOn=|&lt;br /&gt;
PackageName=&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
'''Source Code released : http://www.scummvm.org/downloads.php#source'''&lt;br /&gt;
&lt;br /&gt;
[[Category:Gaming]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Applications</id>
		<title>Applications</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Applications"/>
				<updated>2008-12-16T04:03:43Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: /* Games */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the wiki's master application list for the Openmoko smartphones. &lt;br /&gt;
&lt;br /&gt;
== How to register new applications ?==&lt;br /&gt;
&lt;br /&gt;
This list can not be exhaustive, as new things are showing up every week. This page is here to help spreading awareness about applications. Here are instructions on how to add a specific application to this list. There are many ways to go&lt;br /&gt;
&lt;br /&gt;
Method 1 (preferred):&lt;br /&gt;
* Register your application at http://opkg.org. You will get a package number there, for example 33.&lt;br /&gt;
* Notify the community mailing list.&lt;br /&gt;
* Come back here, click on &amp;quot;edit&amp;quot; next to the appropriate section title, then add a line like:&lt;br /&gt;
&amp;lt;pre&amp;gt;* {{opkg.org|33|Application name}} A short description&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Method 2: Just link to wherever the application is hosted.&lt;br /&gt;
* Click on &amp;quot;edit&amp;quot; next to the appropriate section title, add a line like:&lt;br /&gt;
&amp;lt;pre&amp;gt;* [http://your.host.domain/the/path/to/app/page.html Application name] A short description&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Method 3: Create a new page in this wiki.&lt;br /&gt;
* Click on &amp;quot;edit&amp;quot; next to the appropriate section title, then add a line like:&lt;br /&gt;
&amp;lt;pre&amp;gt;* [[Application name]] A short description&amp;lt;/pre&amp;gt;&lt;br /&gt;
* The application name will appear in red, click on it to create and edit the new page.&lt;br /&gt;
&lt;br /&gt;
== Audio ==&lt;br /&gt;
&lt;br /&gt;
* [[Openmoko-mediaplayer2]] - Play music and video (mp3...)&lt;br /&gt;
* [[Openmokast]] - Play audio stream and slideshow stream&lt;br /&gt;
* [[Pythm]] - Audio player GUI using mplayer and mpd as backend.&lt;br /&gt;
* [[Mokoko]]-Play music.&lt;br /&gt;
* [[Satan]] - Create your own music!&lt;br /&gt;
* [[Fourier]]- Realtime frequency analysis of sound data.&lt;br /&gt;
* [[Neoqplayer]] - a multimedia player written in Qt4 &lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Games ==&lt;br /&gt;
&lt;br /&gt;
* [[Games/Om 2007.2]] - Many small games on Om 2007.2&lt;br /&gt;
* [[Om 2008.8 Sudoku]] - Number placement based puzzle game&lt;br /&gt;
* [[Moko-sudoku]] - Another sudoku puzzle game.&lt;br /&gt;
* {{opkg.org|66|ScummVM}} ([[Scummvm|Wiki]]) Virtual Machine for several classic graphical point-and-click adventure games&lt;br /&gt;
* [[Kobodeluxe]] - A top-view space shooter, available from 2008.8 repositories.&lt;br /&gt;
* [[Sander|Pingus]] - Pingus is a lemmings clone with penguins.&lt;br /&gt;
* [[Duke Nukem 3D]] - Legendary First Person Shooter.&lt;br /&gt;
* [[Numptyphysics]] - A drawing puzzle game.&lt;br /&gt;
* [[Gnuboy]] - An emulator for the handheld gaming all-time bestseller.&lt;br /&gt;
* [[XBill]] - Little action game to stop Bill from installing Windows(tm) on computers.&lt;br /&gt;
* [[Xlogical]]-A puzzle based game where you turn spinners to move balls around.&lt;br /&gt;
* [[Liquid War]]-Liquid War is a truly original multiplayer wargame.&lt;br /&gt;
* [http://unsyncopated.com/BrainSolvent/Doom%20Port DOOM]- Shooting game , now prot on FreeRunner.&lt;br /&gt;
* [http://www.opkg.org/package_49.html MBAC]- MBAC is &amp;quot;Moko Bulls and Cows&amp;quot;, a classic game for openmoko written in pygtk similar to mastermind.&lt;br /&gt;
* [http://minucci.net/file/openvibe.py OpenVibe] - The first opensource vibrator.&lt;br /&gt;
* [http://scalde.free.fr/index.php?option=com_content&amp;amp;view=article&amp;amp;id=93:pong-pogresses&amp;amp;catid=43:openmoko&amp;amp;Itemid=66 Pong progresses]&lt;br /&gt;
* [[OpenMooCow]] - OpenMooCow reads information out of your accelerometers. Now, if you turn the phone upside down and back again, it &amp;quot;moos&amp;quot; like one of the little toy.&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== GPS ==&lt;br /&gt;
&lt;br /&gt;
* [[GPS Sight]] - Display GPS information, location, tracks, etc, without maps.&lt;br /&gt;
* [[Gpsdrive]] - Car (bike, etc) navigation system&lt;br /&gt;
* [[Om 2008.8 Locations]] - (aka Splinter) - Location sharing based on GPS and SMS&lt;br /&gt;
* [[Navit]] - Car navigation system with routing engine&lt;br /&gt;
* [[TangoGPS]] - Display map (OSM..), record GPS tracks...&lt;br /&gt;
* [[Pyroute]] - Pyroute is a routing program written in Python. It features mobile phone GUI for maps, GPS, and routing.&lt;br /&gt;
* [http://wiki.openstreetmap.org/index.php/Mumpot mumpot] - Display map (OSM), routing, OSM tag editing, a bit of live editing&lt;br /&gt;
* [[QMapControl]] - Display maps (OSM..) and add points, lines...&lt;br /&gt;
* [[Qpegps]] - Display map with current position&lt;br /&gt;
* [[Idle Hands]] - Give a task to you based on your location&lt;br /&gt;
* [[Gtkaddpoi]] - Utility for add a POI to TangoGPS using address or coordinates&lt;br /&gt;
* [[Gpsdcontrol]] A simple python script for start or stop gpsd daemon with a button on the desktop.&lt;br /&gt;
&lt;br /&gt;
== Graphics ==&lt;br /&gt;
&lt;br /&gt;
* [[Orrery]] - Displays the night sky&lt;br /&gt;
* [[OMView]] - Image viewer&lt;br /&gt;
* [[PyPenNotes]] - Write notes using pen and touchscreen&lt;br /&gt;
* [[Gpe-scap]] - Take screenshots&lt;br /&gt;
* [[Flash|Gnash]]-Play flash file on Neo&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Internet ==&lt;br /&gt;
&lt;br /&gt;
* [[Twinkle]] - Voice over IP&lt;br /&gt;
* [[Linphone]] - Voice over IP&lt;br /&gt;
* [[Midori]] - Webkit based web browser&lt;br /&gt;
* [[Minimo]] - Mozilla based web browser&lt;br /&gt;
* [http://www.dillo.org/ Dillo] - Multiplatform fast and small web browser ([http://misc.andi.de1.cc/dillo/ .ipk]).&lt;br /&gt;
* [[Mokopedia]] - Read small Wikipedia dumps offline&lt;br /&gt;
* [[Openmoko-browser2]] - The original Openmoko web browser&lt;br /&gt;
* [[Openmokast]] - Play audio stream and slideshow stream&lt;br /&gt;
* [[Openmoko Mail]] - E-mail client&lt;br /&gt;
* [[Pidgin]] - Instant messaging client (ICQ, MSN, Jabber, Yahoo and more.)&lt;br /&gt;
* [[CenterIM]] - Instant messaging client (terminal-based).&lt;br /&gt;
* [[PyFeedRead]] - RSS feed reader&lt;br /&gt;
* [[Qtmail]] - Default mail program on Om 2008.8&lt;br /&gt;
* [[TwitterMoko]] - A Twitter client for Openmoko&lt;br /&gt;
* [http://code.google.com/p/pyqt-browser/ pyqt-browser] - modified the sample code from python-pyqt4 and changed it to use webkit for web browsing. &lt;br /&gt;
* [http://we.trekbeyond.org/~kd8ikt/moko/shr_pkgz/ ettercap-ng]&lt;br /&gt;
&lt;br /&gt;
== Office ==&lt;br /&gt;
* [[Epdfview]] - PDF reader.&lt;br /&gt;
* Evince - Document reader for PDF, PS, DJVU and more.&lt;br /&gt;
* [[FBReader]] - E-book reader program (TXT, FB2, HTML and more)&lt;br /&gt;
* [[Gutenflash]] - Fast text reader by scrolling text&lt;br /&gt;
* [[OMoney]] - A bookkeeping application&lt;br /&gt;
&lt;br /&gt;
== Settings ==&lt;br /&gt;
&lt;br /&gt;
* [[Mofi]] - Wifi setup tool&lt;br /&gt;
* [[Lint-wifi]] - Wifi setup tool&lt;br /&gt;
* [[Om 2008.8 Installer]] - Graphical software installer&lt;br /&gt;
* [[Opkg]] - Command line software installer&lt;br /&gt;
* [[Sephora]] - Settings manager&lt;br /&gt;
* [[SettingsGUI]] - Edit various settings&lt;br /&gt;
* [[Wicd]] - Wifi setup tool&lt;br /&gt;
* [[ZOMG!]] - A graphical package manager (opkg frontend -&amp;gt; should work on any distro)&lt;br /&gt;
&lt;br /&gt;
== System ==&lt;br /&gt;
* [[Auxlaunch]] - Finger-friendly app launcher and window switcher&lt;br /&gt;
* [[Display Locker]] - Screen lock&lt;br /&gt;
* [[Gestures]] - Detect movement and display information, rotate screen&lt;br /&gt;
* [[Keychain]] - SSH keys&lt;br /&gt;
* [[MokoFEM]] - Monitors GSM information&lt;br /&gt;
* [[Mokostat]] - Monitors battery&lt;br /&gt;
* [[Openmoko Bluetooth remote controller|ReMoko]] - Control stuff via BlueTooth&lt;br /&gt;
* [[Rotate]] - Rotate screen when phone is rotated&lt;br /&gt;
* [[Terminal]] - Commando prompt&lt;br /&gt;
* [[Ts calibrate]] - Calibrates touchscreen&lt;br /&gt;
* [[Zedlock]] - Screen locker&lt;br /&gt;
* [http://fso-control.projects.openmoko.org/ fso-control] - Popup Power menu to shutdown/suspend/reboot.&lt;br /&gt;
* [[omkeys_functions]] - Remap AUX key bindings&lt;br /&gt;
* [[Siglaunchd]] - A daemon that listens to dbus signals and launches appliactions upon arrival.&lt;br /&gt;
* [[Pexpect]]-a pure Python module for spawning child applications; controlling them; and responding to expected patterns in their output. &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Telephony ==&lt;br /&gt;
* [[Dialer/2007.2]] - The dialer application in Om 2007.2&lt;br /&gt;
* [[Openmoko SMS Middleware]]- SMS middleware is a Openmoko middleware software for additional features related to SMS. Plugin architecture and Python based code gives this project lots of flexibility and enchancebility.&lt;br /&gt;
* [[Paroli]] -Paroli is an integrated phone application based on Tichy (and so also written in python). &lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Utility ==&lt;br /&gt;
* [[Unison]] - Unison is a file-synchronization tool for Unix and Windows. It determines all differences between two directory trees and lets the user decide, how to proceed with every differing file. &lt;br /&gt;
* [[HP48 Series RPN Calculator]] - Calculator with many functions&lt;br /&gt;
* [[qwo]]- An alternative input method.&lt;br /&gt;
* {{opkg.org|57|fido}} - [[fido]] is a todo list\note manager written with elementary&lt;br /&gt;
* [http://meuk.spritesserver.nl/lightsaber-0.1.tgz The Lightsaber]. Pre-alpha starwaresque orphanware.&lt;br /&gt;
* [[NeoTool]] NeoTool is a bash script for your desktop system to provide a friendly GUI frontend to some common management tasks.&lt;br /&gt;
* [[NeoCon]] - neocon is a handy serial console utility (not only) for u-boot.  The main feature of neocon is actually that you can give it a list of devices and it will pick one that works.&lt;br /&gt;
* [[AaTerm]]-Terminal that have features like openmoko-terminal2, but have space like xterm.&lt;br /&gt;
* [http://techiem2.net/index.php?/archives/10-Freerunner-USB-Mode-Control-Program.html usbmode]-a quick pygtk program. &lt;br /&gt;
* [[Enotes]] - Enotes is the implementation of a TODOlist manager written with elementary to appear better with distribution that use illume, like SHR.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
==Setting Application==&lt;br /&gt;
* [[Wmiconfig]]- wmiconfig is a tool written by Atheros Communications Inc to configure the Ar6k WIFI chip used in the Neo Freerunner. This is a standalone C executable, released under GPL v2.&lt;br /&gt;
* [[GTA02 sysfs]]- 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 use it to change settings and behaviours of the kernel and drivers dynamically.&lt;br /&gt;
&lt;br /&gt;
== Video ==&lt;br /&gt;
&lt;br /&gt;
* [[Video Player]] - Using Mplayer on Openmoko smartphones.&lt;br /&gt;
* [http://katastrophos.net/andre/blog/software/quasar-media-player/ Quasar] - a mplayer frontend for X11.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== daemon ==&lt;br /&gt;
* [[PyPhonelog]] - daemon uses the framework to track and log all the calls made to and from the moko.&lt;br /&gt;
* [[Lscd]] - LSC library/daemon on Linux System.&lt;br /&gt;
&lt;br /&gt;
== An automatic list of application-related wiki pages ==&lt;br /&gt;
&lt;br /&gt;
The pages linked above are all maintained manually. We also maintain an automatic categorization system by tagging wiki pages. Here is the list of application-related pages in this wiki. Normally, every page listed below should be also listed above in the same category. The converse is false: there are applications without a wiki page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;border: solid 1px black; padding: 1ex&amp;quot;&amp;gt;&amp;lt;b&amp;gt;Applications in this Wiki:&amp;lt;/b&amp;gt;&lt;br /&gt;
&amp;lt;categorytree mode=pages depth=2 hideroot=on&amp;gt;Applications&amp;lt;/categorytree&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Where to find more applications? ==&lt;br /&gt;
&lt;br /&gt;
At [http://opkg.org opkg.org] !&lt;br /&gt;
&lt;br /&gt;
Not all Openmoko apps are listed on this wiki - there are much more [http://projects.openmoko.org/softwaremap/ projects at the Openmoko GForge] than the wiki can list, not to mention self-hosted applications on their own websites. Actually the phones can run most Linux based Free Software, using for example the [[Debian]] distribution. The [http://handhelds.freshmeat.net/browse/1038/ mobile phones section of Freshmeat] may be a interesting place to look.&lt;br /&gt;
&lt;br /&gt;
Note also that there are many packages in the repository that are not installed by default. If what you want is a classic, chances are that it is already packaged. Suppose you want to install Perl:&lt;br /&gt;
 opkg list|grep perl&lt;br /&gt;
 opkg install perl&lt;br /&gt;
&lt;br /&gt;
More application download related pages:&lt;br /&gt;
&lt;br /&gt;
* [[Community Repository]]&lt;br /&gt;
* [[Users Repositories]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;clear:both&amp;quot;&amp;gt;&amp;amp;nbsp;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Where to find full distributions ? ==&lt;br /&gt;
&lt;br /&gt;
* [[Download]]: for complete system downloads&lt;br /&gt;
&lt;br /&gt;
== The usual warnings ==&lt;br /&gt;
&amp;lt;small&amp;gt;&lt;br /&gt;
* Some of these software are developed by Openmoko Inc. and some are contributed by the community. Any problems with community contributed software should be reported to the individual software developer rather than the Openmoko core team.&lt;br /&gt;
* Most programs listed here are not mature/stable, but only useable/beta.&lt;br /&gt;
* Many programs listed here are not yet packaged for your distribution and integrated in its repositories. Whichever it is.&lt;br /&gt;
* Installing experimental software from the internet is certain to break things. Running it as root is a very insecure thing to do. Kown that you will be burned, have backups, and be ready to apologize to everybody in your phone contact list in case they receive strange SMSs...&lt;br /&gt;
&amp;lt;/small&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Applications|Applications]]&lt;br /&gt;
[[Category:Basic End User]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Buzz_or_not</id>
		<title>Buzz or not</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Buzz_or_not"/>
				<updated>2008-12-11T18:50:19Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Who suffers from the buzz and who doesn't? ==&lt;br /&gt;
&lt;br /&gt;
We, people who have a phone with an anoying buzz (and because off that are not able to place normal phone calls with this phone), need your input to identify why only some people suffer from the infamous buzz problem&lt;br /&gt;
&lt;br /&gt;
Who is &amp;quot;WE&amp;quot;? On OM-HW-EE side this poll isn't considered helpful, as it contains no info whatsoever about actual network-situation (which is widely assumed to be the cause of buzz appearing in a particular situation). Please note the original poster seems not affiliated to OM technical staff, and we (OM) might eventually ask our customers to support a different poll. Also note there's a rework paper to fix buzz, a non-verified draft for now [jOERG]&lt;br /&gt;
&lt;br /&gt;
We, I like to think, are the people who are having a problem using the FreeRunner as a phone. If you want to put up an official OpenMoko poll/questionnaire please do so, but can you make it quick? Tel us how people who can't handle a soldering tool in a professional way can fix their phones. [Michel an OpenMoko '''customer''' and believer that a phone can be open source] &lt;br /&gt;
&lt;br /&gt;
([http://docs.openmoko.org/trac/ticket/883 #883] [http://docs.openmoko.org/trac/ticket/1352 #1352]).&lt;br /&gt;
&lt;br /&gt;
Put your information in the form below.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;2&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
!Name&lt;br /&gt;
!Country&lt;br /&gt;
!Buzz Y/N&lt;br /&gt;
![http://docs.openmoko.org/trac/ticket/1267 Echo] Y/N&lt;br /&gt;
![http://docs.openmoko.org/trac/ticket/1841 WSOD] Y/N&lt;br /&gt;
![http://docs.openmoko.org/trac/ticket/1024 Bouncing Calypso] Y/N&lt;br /&gt;
!Date code (1)&lt;br /&gt;
!s/n&lt;br /&gt;
!p/n&lt;br /&gt;
!Carrier&lt;br /&gt;
!Mhz (2)&lt;br /&gt;
!Distro&lt;br /&gt;
!Remarks/Comments&lt;br /&gt;
|-&lt;br /&gt;
|mivaho&lt;br /&gt;
|NL&lt;br /&gt;
|Y&lt;br /&gt;
|?&lt;br /&gt;
|N&lt;br /&gt;
|?&lt;br /&gt;
|20080617&lt;br /&gt;
|8A8603161&lt;br /&gt;
|56-21147-00&lt;br /&gt;
|T-Mobile&lt;br /&gt;
|900&lt;br /&gt;
|FSO 4.1&lt;br /&gt;
|Didn't test buzz with headset&lt;br /&gt;
|-&lt;br /&gt;
|Rakshat&lt;br /&gt;
|India&lt;br /&gt;
|N&lt;br /&gt;
|N&lt;br /&gt;
|N&lt;br /&gt;
|?&lt;br /&gt;
|20080618&lt;br /&gt;
|8A8602471&lt;br /&gt;
|56-21147-00&lt;br /&gt;
|Airtel&lt;br /&gt;
|900&lt;br /&gt;
|QTExtended4.2.2&lt;br /&gt;
|No echo since flashing QTExtended&lt;br /&gt;
|-&lt;br /&gt;
|Vasco Nevoa&lt;br /&gt;
|Portugal&lt;br /&gt;
|Y&lt;br /&gt;
|Y&lt;br /&gt;
|N&lt;br /&gt;
|N&lt;br /&gt;
|20080621&lt;br /&gt;
|8A8602272&lt;br /&gt;
|56-21147-00&lt;br /&gt;
|Optimus (mostly GSM1800)&lt;br /&gt;
|900&lt;br /&gt;
|OM2008 testing (20081211)&lt;br /&gt;
|Didn't test buzz with headset&lt;br /&gt;
|-&lt;br /&gt;
|Andreas Fischer&lt;br /&gt;
|Germany&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|N&lt;br /&gt;
|?&lt;br /&gt;
|20080725&lt;br /&gt;
|8A8710691&lt;br /&gt;
|56-21147-00&lt;br /&gt;
|O2 (Telefonica)&lt;br /&gt;
|900&lt;br /&gt;
|OM2008 testing (20081211)&lt;br /&gt;
|Didn't test buzz with headset&lt;br /&gt;
|-&lt;br /&gt;
|Simon Fiebiger&lt;br /&gt;
|Germany&lt;br /&gt;
|Y&lt;br /&gt;
|Y&lt;br /&gt;
|N&lt;br /&gt;
|?&lt;br /&gt;
|20080722&lt;br /&gt;
|8A8704112&lt;br /&gt;
|56-21147-00&lt;br /&gt;
|Fonic / Blau&lt;br /&gt;
|1800 / 1800&lt;br /&gt;
|OM2008 testing (20081211)/ SHR&lt;br /&gt;
|tested w/o Headset - Buzz only with GSM1800&lt;br /&gt;
|-&lt;br /&gt;
|Simon Fiebiger&lt;br /&gt;
|Germany&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|N&lt;br /&gt;
|?&lt;br /&gt;
|20080722&lt;br /&gt;
|8A8704112&lt;br /&gt;
|56-21147-00&lt;br /&gt;
|Vodafone / Congstar&lt;br /&gt;
|900 / 900&lt;br /&gt;
|OM2008 testing (20081211)/ SHR&lt;br /&gt;
|tested w/o Headset - No Buzz at all with GSM900&lt;br /&gt;
|-&lt;br /&gt;
|Drac&lt;br /&gt;
|Canada&lt;br /&gt;
|Y&lt;br /&gt;
|Y&lt;br /&gt;
|?&lt;br /&gt;
|?&lt;br /&gt;
|20080620&lt;br /&gt;
|8A8604782&lt;br /&gt;
|56-21146-00&lt;br /&gt;
|Fido&lt;br /&gt;
|850 / 1900&lt;br /&gt;
|QTExt 4.2.2 / FDOM 23Oct&lt;br /&gt;
|Buzz 90% of the time , Echo 30% using QtExt&lt;br /&gt;
|-&lt;br /&gt;
|Nathan Kinkade&lt;br /&gt;
|U.S.A.&lt;br /&gt;
|N&lt;br /&gt;
|N&lt;br /&gt;
|N&lt;br /&gt;
|?&lt;br /&gt;
|20080621&lt;br /&gt;
|8A8604521&lt;br /&gt;
|56-21146-00&lt;br /&gt;
|T-Mobile / AT&amp;amp;T&lt;br /&gt;
|850&lt;br /&gt;
|FDOM (QtExt. 4.2.2, Om2008.[8,9])&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|marrano&lt;br /&gt;
|Italy&lt;br /&gt;
|Y&lt;br /&gt;
|Y&lt;br /&gt;
|Y&lt;br /&gt;
|?&lt;br /&gt;
|20080521&lt;br /&gt;
|8B8400153&lt;br /&gt;
|56-21147-00&lt;br /&gt;
|Wind&lt;br /&gt;
|900&lt;br /&gt;
|every&lt;br /&gt;
|&lt;br /&gt;
|-&lt;br /&gt;
|Treviño&lt;br /&gt;
|Italy&lt;br /&gt;
|N&lt;br /&gt;
|Y&lt;br /&gt;
|N&lt;br /&gt;
|N&lt;br /&gt;
|20080621&lt;br /&gt;
|8A8603221&lt;br /&gt;
|56-21147-00&lt;br /&gt;
|Wind&lt;br /&gt;
|900&lt;br /&gt;
|Om2008&lt;br /&gt;
|Echo solved by using the Calypso hidden commands.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1 = Date code on phone (under battery)&lt;br /&gt;
&lt;br /&gt;
2 = 850 (USA,etc.) or 900 (Europe,etc.)&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Android</id>
		<title>Android</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Android"/>
				<updated>2008-12-05T18:30:34Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: /* Building the Koolu Android Source */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|Android}}&lt;br /&gt;
{{Distributions|Android}}&lt;br /&gt;
&lt;br /&gt;
= Updates =&lt;br /&gt;
* 20081202 [http://www.koolu.com Koolu.com] has released the source code for the FreeRunner port of Android in their git repositories at [http://git.koolu.org/ Koolu GIT] ([http://koolu.com/Press-Release/ Press Release])&lt;br /&gt;
* 20081120 [http://www.koolu.com Koolu.com] has pushed back selling the OpenMoko Freerunner with Android pre-installed , as well as offering free downloads of the Freerunner port of Android to existing Freerunner owners. Untill December 2008&lt;br /&gt;
* 20081104 The first Android-image has been successfully created by Sean McNeil!  - sms and calling works, wifi and bluetooth doesn't. [http://onlinedev.blogspot.com/2008/11/porting-android-phase-3-done.html ''news-source'']&lt;br /&gt;
* 20081029 [[User:Cfriedt]] [http://benno.id.au Benno] has modified Android's build system so that it will output a JFFS2 image instead of YAFFS . Unlike JFFS2, which [http://wiki.openmoko.org/wiki/Userspace_root_image can be mounted read-only from an image], mounting a YAFFS image is not possible unless it's already been written to flash (it complains about the block device being of type '1' and not 'NAND'). JFFS2 also has the benefit that it's a standard OpenMoko image format (See [[Flashing the Neo FreeRunner]] or [[Flashing the Neo 1973]])&lt;br /&gt;
* 20081023 [[User:Bricode]] To track the status of which parts of the Android source tree contain ARMv5 specific code, I've created a table of where it is contained, and the status of patches. It can be found at: http://spreadsheets.google.com/pub?key=pzDEXnU19gkeTjpD28t-7fw&lt;br /&gt;
* 20081022 [[User:Cfriedt]] I was able to 'trivially' compile all of the Android source code without error for the ARMv4T architecture by removing v5TE instructions. Although it will definitely not run anything predictably, at least now that I know the build system will work with a few simple substitutions in build/core/combo/arm-linux.mk. At this point I am able to go ahead and re-implement v5TE instructions as v4T instruction sequences instead (or re-implement entire sections of assembly with hand-optimized v4T instructions).&lt;br /&gt;
* 20081021 [[User:Cfriedt]] Android -&amp;gt; FreeRunner updates on my [http://perpetual-notion.blogspot.com/search/label/android blog]&lt;br /&gt;
* 20081021 Google released the majority [http://source.android.com/download source code] for the phone under Apache free and open-source [http://source.android.com/license license], with portions covered by other existing licenses, such as the Linux kernel under GPLv2.&lt;br /&gt;
* 200810?? [http://www.koolu.com Koolu.com] has announced that they will be '''selling the OpenMoko Freerunner with Android pre-installed''' beginning in November 2008, as well as offering '''free downloads of the Freerunner port of Android''' to existing Freerunner owners. Well-known open-source advocate [http://koolu.com/The-Koolu-Team/maddog.html Jon &amp;quot;maddog&amp;quot; Hall] is CTO and Ambassador for Koolu.&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
This page is dedicated to porting the [http://www.android.com Android OS] to the [[Neo 1973]] and [[Neo FreeRunner]] handsets. Since the Android OS was [http://source.android.com/posts/opensource  publically released] on 20081021, [http://benno.id.au/blog/2007/11/21/android-neo1973 work] [http://perpetual-notion.blogspot.com/search/label/android is] [http://groups.google.com/group/android-porting currently underway] to port Android to the [[Neo1973 Hardware|Neo 1973]] and [[Neo_FreeRunner_GTA02_Hardware|FreeRunner]] handsets.&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
# Systematically introduce patches for ARMv4T in the Android codebase&lt;br /&gt;
# Provide Neo1973 and Neo FreeRunner hardware-dependent patches in the Android codebase, leveraging the work already done by the Openmoko developers, without forcing Android-specific changes upstream&lt;br /&gt;
# Provide a useable Android filesystem and kernel on the [[Distributions]] page that conform to current Openmoko installation routines&lt;br /&gt;
&lt;br /&gt;
== Early Attempts ==&lt;br /&gt;
As [http://benno.id.au Ben Leslie] had pointed out on his [http://benno.id.au/blog/2007/11/21/android-neo1973 blog] far before the source code was released, [http://www.android.com Android] was originally designed to work with the ARMv5TE [http://en.wikipedia.org/wiki/Instruction_set_architecture instruction set architecture] (ISA), which allows for [http://en.wikipedia.org/wiki/ARM_architecture#DSP_Enhancement_Instructions DSP enhanced instructions]. Contrary to the ARMv5TE ISA, the Neo1973 and FreeRunner handsets both feature an arm920t core, which comply to the ARMv4T ISA.&lt;br /&gt;
&lt;br /&gt;
Before the source code was released, kernel trap handlers were implemented to 'emulate' the ARMv5TE ISA. Although the results worked in many cases, trapping is costly and performance suffered as a result. Moreover, without explicitly knowing which conditions were set by various instructions, such as Thumb Mode execution, the result became nondeterministic.&lt;br /&gt;
&lt;br /&gt;
== Current State ==&lt;br /&gt;
&lt;br /&gt;
With the release of the Android [http://source.android.com source code], the Open Source community is no longer limited to dealing with a binary-only product. The Open Handset Alliance (OHA) has let their source code become their product for everyone enrich and benefit from.&lt;br /&gt;
&lt;br /&gt;
Currently, porting efforts are underway in many circles. Patches should be submitted via the [http://source.android.com/submit-patches official Android channels].&lt;br /&gt;
&lt;br /&gt;
[http://www.koolu.com Koolu], a Freerunner distributor, has released the source code of their Android port at [http://git.koolu.com http://git.koolu.com]. See the [[#Building the Koolu Android Source]] instructions below for how to build an Android image for Freerunner.&lt;br /&gt;
&lt;br /&gt;
To track the status of which parts of the Android source tree contain ARMv5 specific code, I've created a table of where it is contained, and the status of patches. It can be found at: http://spreadsheets.google.com/pub?key=pzDEXnU19gkeTjpD28t-7fw [[User:Bricode]]&lt;br /&gt;
&lt;br /&gt;
[[User:Seanmcneil3|Sean McNeil]] said that he was able to get Android running (including telephony) in his Freerunner [http://3v1n0.tuxfamily.org/tumblelog/post/368 source].&lt;br /&gt;
&lt;br /&gt;
Ben Leslie mentioned on the android-porting list that he was able to get the 'Android' logo to appear on his Neo 1973.&lt;br /&gt;
&lt;br /&gt;
=== Building the Koolu Android Source ===&lt;br /&gt;
&lt;br /&gt;
# Configure your machine with the prerequisites documented in the [http://source.android.com/download#TOC-Setting-up-your-machine Setting up your machine] section of Google's build instructions.&lt;br /&gt;
# Install &amp;lt;tt&amp;gt;repo&amp;lt;/tt&amp;gt; and download the source, as documented at http://trac.koolu.org/, '''but before running the &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt; command in step 7, do the following:'''&lt;br /&gt;
# Install the toolchain provided by Koolu at http://trac.koolu.org/attachment/wiki/Toolchain/android-toolchain_20081019-koolu1_i386.deb.&lt;br /&gt;
# Create a ''&amp;lt;tt&amp;gt;buildspec.mk&amp;lt;/tt&amp;gt;'' file at the top level of your Android source tree, and add the following line to it:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
TARGET_TOOLS_PREFIX := /opt/android-toolchain/bin/armv4t-android-eabi-&lt;br /&gt;
TARGET_PRODUCT := freerunner&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
as documented at http://trac.koolu.org/wiki/Toolchain.&lt;br /&gt;
# Now you can start the build with the following command: &amp;lt;pre&amp;gt;$ make &amp;lt;/pre&amp;gt;&lt;br /&gt;
# After the build finishes you can put together a root file system by editing and running Sean McNeil's scripts, which are attached to [http://lists.openmoko.org/pipermail/community/2008-December/036982.html this message]. The first script (cp_android_OS) is used to copy the newly built files into a staging area. The second one (mkjffs2) makes a jffs2 image from the staging area. Be sure to edit the paths in the two files to match your environment.&lt;br /&gt;
# The output of the second script is a file, &amp;lt;tt&amp;gt;androidfs.jffs2&amp;lt;/tt&amp;gt;, which may be flashed to your Freerunner.&lt;br /&gt;
&lt;br /&gt;
==== Building an jffs2 image ====&lt;br /&gt;
You can use this script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
currentdir=`pwd`&lt;br /&gt;
&lt;br /&gt;
ANDROID_OUT=out&lt;br /&gt;
ANDROID_DEVICE=freerunner&lt;br /&gt;
EXPORT_ROOT=$currentdir/build_jffs2_tmp&lt;br /&gt;
&lt;br /&gt;
Usage()&lt;br /&gt;
{&lt;br /&gt;
	echo &amp;quot;Usage: $0 release|debug jffs2filename&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
BuildImage()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	if [ -d $1 ]&lt;br /&gt;
	then&lt;br /&gt;
		echo &amp;quot;[INFO] Copying from... $1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
		sudo rm -rf $EXPORT_ROOT&lt;br /&gt;
		mkdir $EXPORT_ROOT&lt;br /&gt;
		mkdir $EXPORT_ROOT/root&lt;br /&gt;
&lt;br /&gt;
		# Copy the image...&lt;br /&gt;
		cd $1&lt;br /&gt;
		tar cf - root | (cd $EXPORT_ROOT; sudo tar xf -)&lt;br /&gt;
		tar cf - system | (cd $EXPORT_ROOT/root; sudo tar xf -)&lt;br /&gt;
&lt;br /&gt;
		# Change owner and permissions...&lt;br /&gt;
		cd $EXPORT_ROOT&lt;br /&gt;
		sudo chown -R root:root root&lt;br /&gt;
		sudo chmod -R 777 root&lt;br /&gt;
		&lt;br /&gt;
		cd $currentdir&lt;br /&gt;
&lt;br /&gt;
		# Make the JFFS2 file&lt;br /&gt;
		mkfs.jffs2 --pad=0x700000 -o $2 -e 0x20000 -n -d$EXPORT_ROOT/root/&lt;br /&gt;
		echo &amp;quot;[INFO] Image written to $2&amp;quot;&lt;br /&gt;
		&lt;br /&gt;
		sudo rm -rf $EXPORT_ROOT&lt;br /&gt;
	else&lt;br /&gt;
		echo &amp;quot;$1 does not exist!&amp;quot;&lt;br /&gt;
	fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if [ $# != 2 ]&lt;br /&gt;
then&lt;br /&gt;
	Usage&lt;br /&gt;
else&lt;br /&gt;
&lt;br /&gt;
	case $1 in&lt;br /&gt;
	    release)&lt;br /&gt;
		BuildImage $ANDROID_OUT/target/product/$ANDROID_DEVICE $2&lt;br /&gt;
		;;&lt;br /&gt;
	    debug)&lt;br /&gt;
		BuildImage $ANDROID_OUT/debug/target/product/$ANDROID_DEVICE $2&lt;br /&gt;
		;;&lt;br /&gt;
	    *)&lt;br /&gt;
		Usage&lt;br /&gt;
	esac&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is currently no documented way to build a Freerunner/Android kernel. [[User:Seanmcneil3|Sean McNeil]] has been releasing kernels at http://people.openmoko.org/sean_mcneil/. Most of the patches required to run Android have be incorporated into the &amp;lt;tt&amp;gt;andy-tracking&amp;lt;/tt&amp;gt; kernel branch, which will eventually be the new stable kernel. Once all the patches are in the kernel, it should be possible to run Android with a stock kernel.&lt;br /&gt;
&lt;br /&gt;
=== Windows Connectivity ===&lt;br /&gt;
&lt;br /&gt;
It is possible to get Windows to at least recognize the Android &amp;quot;Ethernet Gadget&amp;quot; and charge the FreeRunner using the Android USB Windows driver (http://dl.google.com/android/android_usb_windows.zip) by modifying the android_usb.inf file in that package before attempting to install the driver.  The following modifications are required:&lt;br /&gt;
&lt;br /&gt;
Add the following to the [Google.NTx86] section of the android_usb.inf file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; Neo FreeRunner&lt;br /&gt;
%USB\VID_1457&amp;amp;PID_5117.DeviceDescRelease%=androidusb.Dev, USB\VID_1457&amp;amp;PID_5117&lt;br /&gt;
%USB\VID_1457&amp;amp;PID_5117&amp;amp;MI_01.DeviceDescRelease%=androidusb.Dev, USB\VID_1457&amp;amp;PID_5117&amp;amp;MI_01&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and add the following to the to the [Strings] section of the android_usb.inf file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
USB\VID_1457&amp;amp;PID_5117.DeviceDescRelease=&amp;quot;Neo FreeRunner&amp;quot;&lt;br /&gt;
USB\VID_1457&amp;amp;PID_5117&amp;amp;MI_01.DeviceDescRelease=&amp;quot;Neo FreeRunner Composite ADB Interface&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Windows version of adb does not appear to recognize the connected device yet but at least the FreeRunner charges and the device driver indicates that &amp;quot;This device is working properly.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= How to Help =&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
You can start by following the instructions to download and build the Android source from scratch. Please see [http://source.android.com/download http://source.android.com/download] and follow the instructions for your architecture.&lt;br /&gt;
&lt;br /&gt;
== Publicize Your Efforts ==&lt;br /&gt;
&lt;br /&gt;
It's generally a good idea to make your efforts known via wiki systems, public mailing lists, forums, and publically open version control systems.&lt;br /&gt;
&lt;br /&gt;
Always take credit for your work but please don't do it in the form of comments. Some code is already hard enough to read without comments polluting the text. The best thing to do is to create a patch and put a header with your information at the top. Collaboration systems such as git might already do this for you (??).&lt;br /&gt;
&lt;br /&gt;
If you create something new and have the ability to designate the license for it, please consider license compatibility issues.&lt;br /&gt;
&lt;br /&gt;
== Porting Strategy ==&lt;br /&gt;
&lt;br /&gt;
* Analysis and leverage of the existing build system&lt;br /&gt;
** buid/core/combo/arm-linux.mk&lt;br /&gt;
*** -D__ARCH_ARM_4__ -D__ARCH_ARM_4T__&lt;br /&gt;
*** -march=armv4t -mcpu=arm920t&lt;br /&gt;
** fix various static references to 'armv5'&lt;br /&gt;
* Isolating ARMv5TE ISA dependent code&lt;br /&gt;
** e.g. grep -n -R -i &amp;quot;${armv5te_isa_pattern}&amp;quot; ~/android&lt;br /&gt;
* Abstracting&lt;br /&gt;
** ( C/C++ )&lt;br /&gt;
*** Use inlined functions / #ifdef statments to implement functions in a portable manner&lt;br /&gt;
*** For inlined assembler calls, it's acceptable for now to use generic C code instead, so long as later on we optimize it by hand.&lt;br /&gt;
** ( ASM )&lt;br /&gt;
*** Proprocessor statements based on ISA / architecture, e.g. #ifdef __ARCH_ARM_5__ ... #endif #ifdef __ARCH_ARM_4__ ... #endif&lt;br /&gt;
*** It's highly suggested that preprocessor statements should not be nested (i.e. make them mutually exclusive)&lt;br /&gt;
*** Some people have suggested that we should not do #ifdef's based on ARCH or ISA, but rather based on an AndroidConfig.h which would define macros like PLD(...) #ifdef HAVE_ARM_PLD pld #else ... #endif .&lt;br /&gt;
&lt;br /&gt;
For each ARMv5TE instruction, one could potentially&lt;br /&gt;
* Implement the instruction using general registers instead of DSP calls (i.e. eabi / softfloat)&lt;br /&gt;
* If that is a) nondeterministic, or b) slow, then sections of code need to be analyzed and hand-optimized for the ARMv4T isa&lt;br /&gt;
&lt;br /&gt;
== List of Unsupported Instructions ==&lt;br /&gt;
&lt;br /&gt;
This is a list of opcodes, extracted from the Android source, that are unsupported for ARMv4T compliant processors (specifically the arm920t). The opcodes represent instructions available for ARMv5, ARMv5T, and ARMv5TE architectures, which are not present in the ARMv4T ISA. The list was obtained by exhaustively editing the recompiling the Android source code until it compiled without error.&lt;br /&gt;
&lt;br /&gt;
Please keep in mind, that in some cases, translating these instructions into a sequence of ARMv4T instructions will be impossible and / or result in nondeterministic execution because of&lt;br /&gt;
* the requirement of additional context&lt;br /&gt;
* the tendencies of certain opcodes to change condition registers that may or may not be present in the arm920t core&lt;br /&gt;
&lt;br /&gt;
=== Opcodes ===&lt;br /&gt;
&lt;br /&gt;
{{scroll box|height=480px|text=&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Opcode&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Desription&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;[[http://www.arm.com/miscPDFs/14128.pdf PDF]] Page Number&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;C&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;ASM&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;BLX(1)&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Branch, Link, and Exchange&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;166&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;N/A (Unused in Android)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;N/A (Unused in Android)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;BLX(2)&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Branch, Link, and Exchange&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;168&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Remove from inline assembly with something like&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_BLX&lt;br /&gt;
... (inline asm) ...&lt;br /&gt;
#else&lt;br /&gt;
... (inline asm with equivalent blx code, as shown to the right) ...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Substitute with a macro reference such as&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_BLX&lt;br /&gt;
#define BLX(a) \&lt;br /&gt;
blx a&lt;br /&gt;
#else&lt;br /&gt;
#define BLX(a) \&lt;br /&gt;
mov pc,lr \&lt;br /&gt;
bx a&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;CLZ&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Count Leading Zeros&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;175&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Remove from inline assembly with something like&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_CLZ&lt;br /&gt;
... (inline asm) ...&lt;br /&gt;
#else&lt;br /&gt;
... (inline asm with equivalent clz code, as shown to the right) ...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081029&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_CLZ&lt;br /&gt;
#define CLZ(Rd,Rm) \&lt;br /&gt;
clz Rd,Rm&lt;br /&gt;
#else&lt;br /&gt;
#define CLZ(Rd,Rm) \&lt;br /&gt;
...&lt;br /&gt;
#endif&lt;br /&gt;
...&lt;br /&gt;
CLZ(Rd,Rm)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;LDRD&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Load Registers Doubleword&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;200&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Substitute different inline assembly code with something like&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_LDRD&lt;br /&gt;
... (inline asm) ...&lt;br /&gt;
#else&lt;br /&gt;
... (inline asm with ldrd substituted) ...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Substitute with a macro reference such as&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_LDRD&lt;br /&gt;
#define LDRD(a,b) \&lt;br /&gt;
ldrd a,b&lt;br /&gt;
#else&lt;br /&gt;
#define LDRD(a,b) \&lt;br /&gt;
...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;PLD&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Preload Data&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;240&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Remove from inline assembly with something like&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_PLD&lt;br /&gt;
... (inline asm) ...&lt;br /&gt;
#else&lt;br /&gt;
... (inline asm with pld removed) ...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Remove or substitute with a macro reference such as&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_PLD&lt;br /&gt;
#define PLD(a,b) \&lt;br /&gt;
pld a,b&lt;br /&gt;
#else&lt;br /&gt;
#define PLD(a,b)&lt;br /&gt;
#endif&lt;br /&gt;
...&lt;br /&gt;
PLD(r0,#0)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;SMLA&amp;amp;lt;x&amp;amp;gt;&amp;amp;lt;y&amp;amp;gt;&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Signed Multiply-Accumulate&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;291&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;SMLAL&amp;amp;lt;x&amp;amp;gt;&amp;amp;lt;y&amp;amp;gt;&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Signed Multiply Accumulate Long&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;298&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;SMLAW&amp;amp;lt;y&amp;amp;gt;&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Signed Multiply-Accumulate Word&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;302&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;SMUL&amp;amp;lt;x&amp;amp;gt;&amp;amp;lt;y&amp;amp;gt;&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Signed Multiply&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;316&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;SMULW&amp;amp;lt;y&amp;amp;gt;&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Signed Multiply Word&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;320&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;QADD&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Saturating Add&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;242&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;QDADD&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Saturating Double and Add&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;249&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;QDSUB&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Saturating Double and Subtract&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;251&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;QSUB&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Saturating Subtract&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;253&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;STRD&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Store Registers Doubleword&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;349&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Substitute different inline assembly code with something like&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_STRD&lt;br /&gt;
... (inline asm) ...&lt;br /&gt;
#else&lt;br /&gt;
... (inline asm without strd) ...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Substitute with a macro reference such as&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_STRD&lt;br /&gt;
#define STRD(a,b) \&lt;br /&gt;
strd a,b&lt;br /&gt;
#else&lt;br /&gt;
#define STRD(a,b) \&lt;br /&gt;
...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Scanning for Files That Use the ARMv5TE ISA ===&lt;br /&gt;
&lt;br /&gt;
Using the above list of opcodes, one can scan the Android source code for ARMv4T-incompatible instruction sequences.&lt;br /&gt;
&lt;br /&gt;
'''Code:'''&lt;br /&gt;
{{scroll box|height=240px|text=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
# $1 is the android directory&lt;br /&gt;
&lt;br /&gt;
if [ $# -ne 1 ]; then&lt;br /&gt;
exit -1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
cd &amp;quot;${1}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
opcodes=&amp;quot;blx clz ldrd pld smlabb smlabt smlatt&lt;br /&gt;
smlal smlawb smlawt smulbb smulbt smultt smulwb&lt;br /&gt;
smulwt qadd qdadd qdsub qsub strd&amp;quot;&lt;br /&gt;
&lt;br /&gt;
for op in ${opcodes}; do&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;* ${op} =====================================&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ ! -e .files.${op} ]; then&lt;br /&gt;
&lt;br /&gt;
files=&amp;quot;$(grep -R -i &amp;quot;${op} &amp;quot; * 2&amp;gt;/dev/null)&amp;quot;&lt;br /&gt;
files=&amp;quot;$(echo $files | grep -v &amp;quot;^Binary file&amp;quot; | sed -e 's/:.*//')&amp;quot;&lt;br /&gt;
files=&amp;quot;$(echo $files| grep -v &amp;quot;CREDIT\|README\|^\(kernel/\|.git/\)\|\(\.txt\)$&amp;quot; | sort -u)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;${files}&amp;quot; &amp;gt; .files.${op}&lt;br /&gt;
&lt;br /&gt;
else&lt;br /&gt;
files=&amp;quot;$(cat .files.${op})&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
for fil in ${files}; do&lt;br /&gt;
lines=&amp;quot;$(grep -n -i &amp;quot;${op} &amp;quot; ${fil} | sed -e 's/:.*//g' )&amp;quot;&lt;br /&gt;
lines=&amp;quot;$(echo $lines | sed -e 's/ /,/g')&amp;quot;&lt;br /&gt;
echo &amp;quot;** ${fil}: lines {${lines}}&amp;quot;&lt;br /&gt;
done&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Source Files in Android that Use the ARMv5TE ISA ===&lt;br /&gt;
&lt;br /&gt;
The list of files below may or may not be complete. There might also be some assembly code that is generated with a python script (verification?).&lt;br /&gt;
&lt;br /&gt;
{{scroll box|height=150px|text=&lt;br /&gt;
* blx =====================================&lt;br /&gt;
** bionic/libc/tools/gensyscalls.py: lines {168,186}&lt;br /&gt;
** bootloader/legacy/nandwrite/init.S: lines {77}&lt;br /&gt;
** bootloader/legacy/usbloader/init.S: lines {95}&lt;br /&gt;
** dalvik/vm/arch/arm/CallEABI.S: lines {239}&lt;br /&gt;
** dalvik/vm/arch/arm/CallOldABI.S: lines {145}&lt;br /&gt;
** development/emulator/qtools/thumbdis.cpp: lines {187,265}&lt;br /&gt;
** external/qemu/target-arm/translate.c: lines {1151,1971,2444}&lt;br /&gt;
** external/qemu/trace.c: lines {774,1353,1358}&lt;br /&gt;
** system/core/libpixelflinger/codeflinger/disassem.c: lines {416}&lt;br /&gt;
* clz =====================================&lt;br /&gt;
** development/emulator/qtools/armdis.cpp: lines {654}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/pv_normalize.h: lines {67,84}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/norm_l.h: lines {137}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/normalize_amr_wb.h: lines {78,95}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/pvmp3_normalize.h: lines {67,84}&lt;br /&gt;
** external/opencore/codecs_v2/video/avc_h264/dec/src/vlc.cpp: lines {23}&lt;br /&gt;
** external/opencore/codecs_v2/video/m4v_h263/enc/src/vlc_encode_inline.h: lines {125,162,168,204,218}&lt;br /&gt;
** external/qemu/target-arm/translate.c: lines {1247}&lt;br /&gt;
** external/skia/libcorecg/Sk64.cpp: lines {340,341,343}&lt;br /&gt;
** external/skia/libcorecg/SkMatrix.cpp: lines {500,501}&lt;br /&gt;
** external/skia/libsgl/effects/SkColorMatrixFilter.cpp: lines {135}&lt;br /&gt;
** external/skia/libsgl/sgl/SkBitmap.cpp: lines {945,946,947}&lt;br /&gt;
** external/skia/libsgl/sgl/SkBitmapShader.cpp: lines {32,33,34}&lt;br /&gt;
** external/skia/libsgl/sgl/SkGraphics.cpp: lines {429,437}&lt;br /&gt;
* ldrd =====================================&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_AGET_WIDE.S: lines {28}&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_IGET_WIDE.S: lines {37}&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_IGET_WIDE_QUICK.S: lines {10}&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_SGET_WIDE.S: lines {17}&lt;br /&gt;
** dalvik/vm/mterp/out/InterpAsm-armv5.S: lines {2653,7464,8318,8390}&lt;br /&gt;
** system/core/libpixelflinger/rotate90CW_4x4_16v6.S: lines {40,41,42,43}&lt;br /&gt;
* pld =====================================&lt;br /&gt;
** bionic/libc/arch-arm/bionic/memcmp.S: lines {37,44,45,56,57,107,108,195,196}&lt;br /&gt;
** bionic/libc/arch-arm/bionic/memcmp16.S: lines {37,44,45,67,68,116,117,198,199}&lt;br /&gt;
** bionic/libc/arch-arm/bionic/memcpy.S: lines {55,56,57,145,266,293,320}&lt;br /&gt;
** bionic/libc/arch-arm/bionic/strlen.c: lines {59,65}&lt;br /&gt;
** bionic/libc/kernel/arch-arm/asm/arch/irqs.h: lines {162}&lt;br /&gt;
** external/elfutils/src/Makefile: lines {243}&lt;br /&gt;
** external/elfutils/src/Makefile.am: lines {32}&lt;br /&gt;
** external/elfutils/src/Makefile.in: lines {243}&lt;br /&gt;
** external/jpeg/jidctfst.S: lines {69,235,247}&lt;br /&gt;
** external/qemu/target-arm/translate.c: lines {1149}&lt;br /&gt;
** system/core/libpixelflinger/codeflinger/ARMAssembler.cpp: lines {368}&lt;br /&gt;
** system/core/libpixelflinger/codeflinger/ARMAssemblerInterface.cpp: lines {104,108,117}&lt;br /&gt;
** system/core/libpixelflinger/t32cb16blend.S: lines {111,112,134,143}&lt;br /&gt;
* smlabb =====================================&lt;br /&gt;
** external/jpeg/jidctfst.S: lines {110,115,155,156}&lt;br /&gt;
** external/neven/Embedded/common/src/b_BasicEm/Math.c: lines {584,589}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {147,166}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {120,129}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {514,533}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {418,429}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {202}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {250}&lt;br /&gt;
** external/opencore/codecs_v2/video/m4v_h263/enc/src/dct_inline.h: lines {119,155,167,278,326,341}&lt;br /&gt;
** external/opencore/codecs_v2/video/m4v_h263/enc/src/fastquant_inline.h: lines {178,225,437,517}&lt;br /&gt;
** frameworks/base/libs/audioflinger/AudioMixer.cpp: lines {405,436}&lt;br /&gt;
* smlabt =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {184}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {138}&lt;br /&gt;
** external/opencore/codecs_v2/video/m4v_h263/enc/src/dct_inline.h: lines {131,143,294,310}&lt;br /&gt;
* smlatt =====================================&lt;br /&gt;
** external/neven/Embedded/common/src/b_BasicEm/Math.c: lines {585,590}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {157}&lt;br /&gt;
** frameworks/base/libs/audioflinger/AudioMixer.cpp: lines {441}&lt;br /&gt;
* smlal =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v4.h: lines {179,223,236,257,267}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v4_gcc.h: lines {264,341}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {178,188,198}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_dct_9.s: lines {84,90,96,101,109,114,116,118,121,132,138,150,163,165,167,174,176,178}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_dct_9_gcc.s: lines {73,79,86,90,98,103,105,107,110,121,127,139,152,154,156,163,165,167}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_mdct_18.asm: lines {143,162,178,188,192,199,207,217,225,231,237,241,244}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_mdct_18.s: lines {145,164,180,190,194,201,209,219,227,233,239,243,246}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_mdct_18_gcc.s: lines {143,162,178,188,192,199,207,217,225,231,237,241,244}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_polyphase_filter_window.asm: lines {62,63,66,72,76,77,81,82,85,90,94,97,99,100,103,108,113,114,118,119,122,129,136,137,176,179,183,187,190,193}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_polyphase_filter_window.s: lines {67,68,71,77,81,82,86,87,90,95,99,102,104,105,108,113,118,119,123,124,127,134,141,142,181,184,188,192,195,198}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_polyphase_filter_window_gcc.s: lines {65,66,69,75,79,80,84,85,88,93,97,100,102,103,106,111,116,117,121,122,125,132,139,140,179,182,186,190,193,196}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/pv_mp3dec_fxd_op_arm.h: lines {148}&lt;br /&gt;
** external/qemu/trace.c: lines {813}&lt;br /&gt;
** frameworks/base/opengl/libagl/iterators.S: lines {66,67}&lt;br /&gt;
** frameworks/base/opengl/libagl/matrix.h: lines {67,68,96,126,127,282,283,314,315,316}&lt;br /&gt;
* smlawb =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {203,259}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {166,416}&lt;br /&gt;
** frameworks/base/libs/audioflinger/AudioResamplerSinc.cpp: lines {93,109}&lt;br /&gt;
** frameworks/base/opengl/libagl/matrix.h: lines {163,203}&lt;br /&gt;
* smlawt =====================================&lt;br /&gt;
** frameworks/base/libs/audioflinger/AudioResamplerSinc.cpp: lines {114}&lt;br /&gt;
** frameworks/base/opengl/libagl/matrix.h: lines {162,202,243,244}&lt;br /&gt;
* smulbb =====================================&lt;br /&gt;
** external/jpeg/jidctfst.S: lines {109,114,151,153}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {79}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {71,81}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {207,251,297,348,361,375,427,440,487}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {199,234,274,314,316,326,367,369,404}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_mac.h: lines {121,137}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_msu.h: lines {123,142}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_mult.h: lines {122,140}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mpy_32.h: lines {132,134,138,164,177,191}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mpy_32_16.h: lines {127,129,150,163}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mult.h: lines {121,141}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {115,139,151,163,189,190,212}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {112,113,164,183,201,218,265}&lt;br /&gt;
** external/opencore/codecs_v2/video/m4v_h263/enc/src/fastquant_inline.h: lines {250,457,531}&lt;br /&gt;
** external/skia/include/corecg/SkMath.h: lines {170}&lt;br /&gt;
** frameworks/base/libs/audioflinger/AudioMixer.cpp: lines {420,462}&lt;br /&gt;
** system/core/libpixelflinger/t32cb16blend.S: lines {39,66,74,82}&lt;br /&gt;
* smulbt =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {115}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {109}&lt;br /&gt;
** system/core/libpixelflinger/codeflinger/texturing.cpp: lines {1091}&lt;br /&gt;
** system/core/libpixelflinger/t32cb16blend.S: lines {47,55}&lt;br /&gt;
* smultt =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {131}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {100}&lt;br /&gt;
** frameworks/base/libs/audioflinger/AudioMixer.cpp: lines {467}&lt;br /&gt;
** frameworks/base/libs/audioflinger/AudioResamplerSinc.cpp: lines {73}&lt;br /&gt;
* smulwb =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {221}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {373}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {222}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {283}&lt;br /&gt;
** external/opencore/codecs_v2/audio/sbc/enc/src/sbcenc_filter.h: lines {33}&lt;br /&gt;
** frameworks/base/opengl/libagl/matrix.h: lines {161,201,242}&lt;br /&gt;
* smulwt =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {202,240}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {385,415}&lt;br /&gt;
* qadd =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {64}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {60}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {130,256}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {128,235}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_add.h: lines {122,137}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_mult.h: lines {123,145}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {71,102,152,176,192}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {91,115,148,202,234}&lt;br /&gt;
** external/openssl/crypto/bn/bn_prime.c: lines {454,455}&lt;br /&gt;
* qdadd =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/calc_sbr_synfilterbank.cpp: lines {116,162}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/trans4m_freq_2_time_fxp.cpp: lines {472,494}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {212,356,370,385,435,449}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {200,315,321,331,368,371}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_mac.h: lines {122,142}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mpy_32.h: lines {133,136,140,172,186,201}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mpy_32_16.h: lines {128,131,158,172}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {116}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {184}&lt;br /&gt;
* qdsub =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {302}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {275}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_msu.h: lines {124,147}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {140}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {165}&lt;br /&gt;
* qsub =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {167}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {162}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_sub.h: lines {121,138}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {88,127}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {70,133}&lt;br /&gt;
* strd =====================================&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_APUT_WIDE.S: lines {31}&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_IPUT_WIDE.S: lines {39}&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_IPUT_WIDE_QUICK.S: lines {14}&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_SPUT_WIDE.S: lines {21}&lt;br /&gt;
** dalvik/vm/mterp/out/InterpAsm-armv5.S: lines {2834,7530,8331,8542}&lt;br /&gt;
** dalvik/vm/oo/Object.h: lines {589}&lt;br /&gt;
** external/opencore/fileformats/avi/parser/include/pv_avifile_streamlist.h: lines {179}&lt;br /&gt;
** external/opencore/fileformats/avi/parser/src/pv_avifile_streamlist.cpp: lines {153}&lt;br /&gt;
** system/core/libpixelflinger/rotate90CW_4x4_16v6.S: lines {47,52,56,60}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Discussion ===&lt;br /&gt;
=== Notes ===&lt;br /&gt;
The file&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
system/core/libpixelflinger/codeflinger/ARMAssembler.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will need special attention. It's responsible for dynamic generation of DSP code.&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
* [[User:Cfriedt]] 20081024 I'm not sure how feasible this is, given that the [http://wiki.openmoko.org/wiki/Neo_FreeRunner_Hardware_Issues#SMedia_3362_Documentation_.26_OpenGL_ES_Drivers SMedia 3362 is heavily NDA'd]. However, since the arm920t lacks a floating-point unit / DSP core, is it possible to use the SMedia chip for general-purpose math? This would help in the Android platform, at least, for things like audio and video codecs. Aside from an OpenGL ES driver, OpenMoko documentation for the SMedia would be highly appreciated.&lt;br /&gt;
&lt;br /&gt;
= Important Links =&lt;br /&gt;
(Please Update Me)&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
* [http://source.android.com/documentation Android Documentation]&lt;br /&gt;
* [http://www.arm.com/documentation/ ARM Documentation], (keywords: armv4t, armv5t, armv5te, arm920t, arm926ej-s)&lt;br /&gt;
* [http://www.arm.com/miscPDFs/9658.pdf ARM Assembly Language Programming]&lt;br /&gt;
* [http://www.cse.unsw.edu.au/~cs3221/labs/assembler-intro.pdf An Introduction to the GNU Assembler]&lt;br /&gt;
* [http://www.heyrick.co.uk/assembler/apcsintro.html ARM Procedure Call Standard], [http://en.wikipedia.org/wiki/Calling_convention#ARM ARM Calling Conventions]&lt;br /&gt;
&lt;br /&gt;
== Instruction Set References ==&lt;br /&gt;
* [http://www.arm.com/miscPDFs/14128.pdf ARM Architecture Reference Manual], The definitive ISA documentation&lt;br /&gt;
* [http://www.simplemachines.it/doc/QRC0001H_rvct_v2.1_arm.pdf ARM Instruction Set Quick Reference Card]&lt;br /&gt;
* [http://infocenter.arm.com/help/topic/com.arm.doc.qrc0001l/QRC0001_UAL.pdf ARM and Thumb -2 Instruction Set Quick Reference Card]&lt;br /&gt;
* [http://infocenter.arm.com/help/topic/com.arm.doc.dvi0025b/DVI0025.pdf ARMv4T] (See section 1.4.13)&lt;br /&gt;
* [http://infocenter.arm.com/help/topic/com.arm.doc.dvi0014a/DVI0014A_ARM10T_PO.pdf ARMv5T] (See section 4.16)&lt;br /&gt;
* [http://www.arm.com/pdfs/ARM-DSP.pdf ARM DSP Enhanced Instruction Set]&lt;br /&gt;
* [http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042c/IHI0042C_aapcs.pdf Procedure Call Standard for the ARM Architecture]&lt;br /&gt;
&lt;br /&gt;
== Hardware Reference ==&lt;br /&gt;
&lt;br /&gt;
* [[Neo1973 Hardware]]&lt;br /&gt;
* [[Neo FreeRunner GTA02 Hardware]]&lt;br /&gt;
&lt;br /&gt;
== Communities ==&lt;br /&gt;
* [http://source.android.com/discuss Android Public Mailing Lists]&lt;br /&gt;
** Specifically, [http://groups.google.com/group/android-porting android-porting]&lt;br /&gt;
* [http://lists.openmoko.org/mailman/listinfo OpenMoko Mailing Lists]&lt;br /&gt;
** Specifically, [http://lists.openmoko.org/mailman/listinfo/openmoko-kernel openmoko-kernel]&lt;br /&gt;
* [http://forum.koolu.org/viewforum.php?f=10 Android on FreeRunner] at KoolU.com&lt;br /&gt;
* [[Openmoko Local Groups]]&lt;br /&gt;
* [[Openmoko:Community_Portal]]&lt;br /&gt;
&lt;br /&gt;
= See also =&lt;br /&gt;
&lt;br /&gt;
* [[Debug_Board]]&lt;br /&gt;
&lt;br /&gt;
= External Links =&lt;br /&gt;
== Youtube video /Android on FreeRunner ==&lt;br /&gt;
&lt;br /&gt;
[http://tw.youtube.com/watch?v=m4NbsLmF9j0 Video 1]&lt;br /&gt;
&lt;br /&gt;
[http://tw.youtube.com/watch?v=r6Op-7tNTiw Video 2]&lt;br /&gt;
&lt;br /&gt;
== Headline text ==&lt;br /&gt;
&lt;br /&gt;
[[Category:Distributions]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Android</id>
		<title>Android</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Android"/>
				<updated>2008-12-05T18:29:43Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: /* Building the Koolu Android Source */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|Android}}&lt;br /&gt;
{{Distributions|Android}}&lt;br /&gt;
&lt;br /&gt;
= Updates =&lt;br /&gt;
* 20081202 [http://www.koolu.com Koolu.com] has released the source code for the FreeRunner port of Android in their git repositories at [http://git.koolu.org/ Koolu GIT] ([http://koolu.com/Press-Release/ Press Release])&lt;br /&gt;
* 20081120 [http://www.koolu.com Koolu.com] has pushed back selling the OpenMoko Freerunner with Android pre-installed , as well as offering free downloads of the Freerunner port of Android to existing Freerunner owners. Untill December 2008&lt;br /&gt;
* 20081104 The first Android-image has been successfully created by Sean McNeil!  - sms and calling works, wifi and bluetooth doesn't. [http://onlinedev.blogspot.com/2008/11/porting-android-phase-3-done.html ''news-source'']&lt;br /&gt;
* 20081029 [[User:Cfriedt]] [http://benno.id.au Benno] has modified Android's build system so that it will output a JFFS2 image instead of YAFFS . Unlike JFFS2, which [http://wiki.openmoko.org/wiki/Userspace_root_image can be mounted read-only from an image], mounting a YAFFS image is not possible unless it's already been written to flash (it complains about the block device being of type '1' and not 'NAND'). JFFS2 also has the benefit that it's a standard OpenMoko image format (See [[Flashing the Neo FreeRunner]] or [[Flashing the Neo 1973]])&lt;br /&gt;
* 20081023 [[User:Bricode]] To track the status of which parts of the Android source tree contain ARMv5 specific code, I've created a table of where it is contained, and the status of patches. It can be found at: http://spreadsheets.google.com/pub?key=pzDEXnU19gkeTjpD28t-7fw&lt;br /&gt;
* 20081022 [[User:Cfriedt]] I was able to 'trivially' compile all of the Android source code without error for the ARMv4T architecture by removing v5TE instructions. Although it will definitely not run anything predictably, at least now that I know the build system will work with a few simple substitutions in build/core/combo/arm-linux.mk. At this point I am able to go ahead and re-implement v5TE instructions as v4T instruction sequences instead (or re-implement entire sections of assembly with hand-optimized v4T instructions).&lt;br /&gt;
* 20081021 [[User:Cfriedt]] Android -&amp;gt; FreeRunner updates on my [http://perpetual-notion.blogspot.com/search/label/android blog]&lt;br /&gt;
* 20081021 Google released the majority [http://source.android.com/download source code] for the phone under Apache free and open-source [http://source.android.com/license license], with portions covered by other existing licenses, such as the Linux kernel under GPLv2.&lt;br /&gt;
* 200810?? [http://www.koolu.com Koolu.com] has announced that they will be '''selling the OpenMoko Freerunner with Android pre-installed''' beginning in November 2008, as well as offering '''free downloads of the Freerunner port of Android''' to existing Freerunner owners. Well-known open-source advocate [http://koolu.com/The-Koolu-Team/maddog.html Jon &amp;quot;maddog&amp;quot; Hall] is CTO and Ambassador for Koolu.&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
This page is dedicated to porting the [http://www.android.com Android OS] to the [[Neo 1973]] and [[Neo FreeRunner]] handsets. Since the Android OS was [http://source.android.com/posts/opensource  publically released] on 20081021, [http://benno.id.au/blog/2007/11/21/android-neo1973 work] [http://perpetual-notion.blogspot.com/search/label/android is] [http://groups.google.com/group/android-porting currently underway] to port Android to the [[Neo1973 Hardware|Neo 1973]] and [[Neo_FreeRunner_GTA02_Hardware|FreeRunner]] handsets.&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
# Systematically introduce patches for ARMv4T in the Android codebase&lt;br /&gt;
# Provide Neo1973 and Neo FreeRunner hardware-dependent patches in the Android codebase, leveraging the work already done by the Openmoko developers, without forcing Android-specific changes upstream&lt;br /&gt;
# Provide a useable Android filesystem and kernel on the [[Distributions]] page that conform to current Openmoko installation routines&lt;br /&gt;
&lt;br /&gt;
== Early Attempts ==&lt;br /&gt;
As [http://benno.id.au Ben Leslie] had pointed out on his [http://benno.id.au/blog/2007/11/21/android-neo1973 blog] far before the source code was released, [http://www.android.com Android] was originally designed to work with the ARMv5TE [http://en.wikipedia.org/wiki/Instruction_set_architecture instruction set architecture] (ISA), which allows for [http://en.wikipedia.org/wiki/ARM_architecture#DSP_Enhancement_Instructions DSP enhanced instructions]. Contrary to the ARMv5TE ISA, the Neo1973 and FreeRunner handsets both feature an arm920t core, which comply to the ARMv4T ISA.&lt;br /&gt;
&lt;br /&gt;
Before the source code was released, kernel trap handlers were implemented to 'emulate' the ARMv5TE ISA. Although the results worked in many cases, trapping is costly and performance suffered as a result. Moreover, without explicitly knowing which conditions were set by various instructions, such as Thumb Mode execution, the result became nondeterministic.&lt;br /&gt;
&lt;br /&gt;
== Current State ==&lt;br /&gt;
&lt;br /&gt;
With the release of the Android [http://source.android.com source code], the Open Source community is no longer limited to dealing with a binary-only product. The Open Handset Alliance (OHA) has let their source code become their product for everyone enrich and benefit from.&lt;br /&gt;
&lt;br /&gt;
Currently, porting efforts are underway in many circles. Patches should be submitted via the [http://source.android.com/submit-patches official Android channels].&lt;br /&gt;
&lt;br /&gt;
[http://www.koolu.com Koolu], a Freerunner distributor, has released the source code of their Android port at [http://git.koolu.com http://git.koolu.com]. See the [[#Building the Koolu Android Source]] instructions below for how to build an Android image for Freerunner.&lt;br /&gt;
&lt;br /&gt;
To track the status of which parts of the Android source tree contain ARMv5 specific code, I've created a table of where it is contained, and the status of patches. It can be found at: http://spreadsheets.google.com/pub?key=pzDEXnU19gkeTjpD28t-7fw [[User:Bricode]]&lt;br /&gt;
&lt;br /&gt;
[[User:Seanmcneil3|Sean McNeil]] said that he was able to get Android running (including telephony) in his Freerunner [http://3v1n0.tuxfamily.org/tumblelog/post/368 source].&lt;br /&gt;
&lt;br /&gt;
Ben Leslie mentioned on the android-porting list that he was able to get the 'Android' logo to appear on his Neo 1973.&lt;br /&gt;
&lt;br /&gt;
=== Building the Koolu Android Source ===&lt;br /&gt;
&lt;br /&gt;
# Configure your machine with the prerequisites documented in the [http://source.android.com/download#TOC-Setting-up-your-machine Setting up your machine] section of Google's build instructions.&lt;br /&gt;
# Install &amp;lt;tt&amp;gt;repo&amp;lt;/tt&amp;gt; and download the source, as documented at http://trac.koolu.org/, '''but before running the &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt; command in step 7, do the following:'''&lt;br /&gt;
# Install the toolchain provided by Koolu at http://trac.koolu.org/attachment/wiki/Toolchain/android-toolchain_20081019-koolu1_i386.deb.&lt;br /&gt;
# Create a ''&amp;lt;tt&amp;gt;buildspec.mk&amp;lt;/tt&amp;gt;'' file at the top level of your Android source tree, and add the following line to it: &amp;lt;pre&amp;gt;TARGET_TOOLS_PREFIX := /opt/android-toolchain/bin/armv4t-android-eabi-&lt;br /&gt;
TARGET_PRODUCT := freerunner&amp;lt;/pre&amp;gt; as documented at http://trac.koolu.org/wiki/Toolchain.&lt;br /&gt;
# Now you can start the build with the following command: &amp;lt;pre&amp;gt;$ make &amp;lt;/pre&amp;gt;&lt;br /&gt;
# After the build finishes you can put together a root file system by editing and running Sean McNeil's scripts, which are attached to [http://lists.openmoko.org/pipermail/community/2008-December/036982.html this message]. The first script (cp_android_OS) is used to copy the newly built files into a staging area. The second one (mkjffs2) makes a jffs2 image from the staging area. Be sure to edit the paths in the two files to match your environment.&lt;br /&gt;
# The output of the second script is a file, &amp;lt;tt&amp;gt;androidfs.jffs2&amp;lt;/tt&amp;gt;, which may be flashed to your Freerunner.&lt;br /&gt;
&lt;br /&gt;
==== Building an jffs2 image ====&lt;br /&gt;
You can use this script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
currentdir=`pwd`&lt;br /&gt;
&lt;br /&gt;
ANDROID_OUT=out&lt;br /&gt;
ANDROID_DEVICE=freerunner&lt;br /&gt;
EXPORT_ROOT=$currentdir/build_jffs2_tmp&lt;br /&gt;
&lt;br /&gt;
Usage()&lt;br /&gt;
{&lt;br /&gt;
	echo &amp;quot;Usage: $0 release|debug jffs2filename&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
BuildImage()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	if [ -d $1 ]&lt;br /&gt;
	then&lt;br /&gt;
		echo &amp;quot;[INFO] Copying from... $1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
		sudo rm -rf $EXPORT_ROOT&lt;br /&gt;
		mkdir $EXPORT_ROOT&lt;br /&gt;
		mkdir $EXPORT_ROOT/root&lt;br /&gt;
&lt;br /&gt;
		# Copy the image...&lt;br /&gt;
		cd $1&lt;br /&gt;
		tar cf - root | (cd $EXPORT_ROOT; sudo tar xf -)&lt;br /&gt;
		tar cf - system | (cd $EXPORT_ROOT/root; sudo tar xf -)&lt;br /&gt;
&lt;br /&gt;
		# Change owner and permissions...&lt;br /&gt;
		cd $EXPORT_ROOT&lt;br /&gt;
		sudo chown -R root:root root&lt;br /&gt;
		sudo chmod -R 777 root&lt;br /&gt;
		&lt;br /&gt;
		cd $currentdir&lt;br /&gt;
&lt;br /&gt;
		# Make the JFFS2 file&lt;br /&gt;
		mkfs.jffs2 --pad=0x700000 -o $2 -e 0x20000 -n -d$EXPORT_ROOT/root/&lt;br /&gt;
		echo &amp;quot;[INFO] Image written to $2&amp;quot;&lt;br /&gt;
		&lt;br /&gt;
		sudo rm -rf $EXPORT_ROOT&lt;br /&gt;
	else&lt;br /&gt;
		echo &amp;quot;$1 does not exist!&amp;quot;&lt;br /&gt;
	fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if [ $# != 2 ]&lt;br /&gt;
then&lt;br /&gt;
	Usage&lt;br /&gt;
else&lt;br /&gt;
&lt;br /&gt;
	case $1 in&lt;br /&gt;
	    release)&lt;br /&gt;
		BuildImage $ANDROID_OUT/target/product/$ANDROID_DEVICE $2&lt;br /&gt;
		;;&lt;br /&gt;
	    debug)&lt;br /&gt;
		BuildImage $ANDROID_OUT/debug/target/product/$ANDROID_DEVICE $2&lt;br /&gt;
		;;&lt;br /&gt;
	    *)&lt;br /&gt;
		Usage&lt;br /&gt;
	esac&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is currently no documented way to build a Freerunner/Android kernel. [[User:Seanmcneil3|Sean McNeil]] has been releasing kernels at http://people.openmoko.org/sean_mcneil/. Most of the patches required to run Android have be incorporated into the &amp;lt;tt&amp;gt;andy-tracking&amp;lt;/tt&amp;gt; kernel branch, which will eventually be the new stable kernel. Once all the patches are in the kernel, it should be possible to run Android with a stock kernel.&lt;br /&gt;
&lt;br /&gt;
=== Windows Connectivity ===&lt;br /&gt;
&lt;br /&gt;
It is possible to get Windows to at least recognize the Android &amp;quot;Ethernet Gadget&amp;quot; and charge the FreeRunner using the Android USB Windows driver (http://dl.google.com/android/android_usb_windows.zip) by modifying the android_usb.inf file in that package before attempting to install the driver.  The following modifications are required:&lt;br /&gt;
&lt;br /&gt;
Add the following to the [Google.NTx86] section of the android_usb.inf file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; Neo FreeRunner&lt;br /&gt;
%USB\VID_1457&amp;amp;PID_5117.DeviceDescRelease%=androidusb.Dev, USB\VID_1457&amp;amp;PID_5117&lt;br /&gt;
%USB\VID_1457&amp;amp;PID_5117&amp;amp;MI_01.DeviceDescRelease%=androidusb.Dev, USB\VID_1457&amp;amp;PID_5117&amp;amp;MI_01&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and add the following to the to the [Strings] section of the android_usb.inf file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
USB\VID_1457&amp;amp;PID_5117.DeviceDescRelease=&amp;quot;Neo FreeRunner&amp;quot;&lt;br /&gt;
USB\VID_1457&amp;amp;PID_5117&amp;amp;MI_01.DeviceDescRelease=&amp;quot;Neo FreeRunner Composite ADB Interface&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Windows version of adb does not appear to recognize the connected device yet but at least the FreeRunner charges and the device driver indicates that &amp;quot;This device is working properly.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= How to Help =&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
You can start by following the instructions to download and build the Android source from scratch. Please see [http://source.android.com/download http://source.android.com/download] and follow the instructions for your architecture.&lt;br /&gt;
&lt;br /&gt;
== Publicize Your Efforts ==&lt;br /&gt;
&lt;br /&gt;
It's generally a good idea to make your efforts known via wiki systems, public mailing lists, forums, and publically open version control systems.&lt;br /&gt;
&lt;br /&gt;
Always take credit for your work but please don't do it in the form of comments. Some code is already hard enough to read without comments polluting the text. The best thing to do is to create a patch and put a header with your information at the top. Collaboration systems such as git might already do this for you (??).&lt;br /&gt;
&lt;br /&gt;
If you create something new and have the ability to designate the license for it, please consider license compatibility issues.&lt;br /&gt;
&lt;br /&gt;
== Porting Strategy ==&lt;br /&gt;
&lt;br /&gt;
* Analysis and leverage of the existing build system&lt;br /&gt;
** buid/core/combo/arm-linux.mk&lt;br /&gt;
*** -D__ARCH_ARM_4__ -D__ARCH_ARM_4T__&lt;br /&gt;
*** -march=armv4t -mcpu=arm920t&lt;br /&gt;
** fix various static references to 'armv5'&lt;br /&gt;
* Isolating ARMv5TE ISA dependent code&lt;br /&gt;
** e.g. grep -n -R -i &amp;quot;${armv5te_isa_pattern}&amp;quot; ~/android&lt;br /&gt;
* Abstracting&lt;br /&gt;
** ( C/C++ )&lt;br /&gt;
*** Use inlined functions / #ifdef statments to implement functions in a portable manner&lt;br /&gt;
*** For inlined assembler calls, it's acceptable for now to use generic C code instead, so long as later on we optimize it by hand.&lt;br /&gt;
** ( ASM )&lt;br /&gt;
*** Proprocessor statements based on ISA / architecture, e.g. #ifdef __ARCH_ARM_5__ ... #endif #ifdef __ARCH_ARM_4__ ... #endif&lt;br /&gt;
*** It's highly suggested that preprocessor statements should not be nested (i.e. make them mutually exclusive)&lt;br /&gt;
*** Some people have suggested that we should not do #ifdef's based on ARCH or ISA, but rather based on an AndroidConfig.h which would define macros like PLD(...) #ifdef HAVE_ARM_PLD pld #else ... #endif .&lt;br /&gt;
&lt;br /&gt;
For each ARMv5TE instruction, one could potentially&lt;br /&gt;
* Implement the instruction using general registers instead of DSP calls (i.e. eabi / softfloat)&lt;br /&gt;
* If that is a) nondeterministic, or b) slow, then sections of code need to be analyzed and hand-optimized for the ARMv4T isa&lt;br /&gt;
&lt;br /&gt;
== List of Unsupported Instructions ==&lt;br /&gt;
&lt;br /&gt;
This is a list of opcodes, extracted from the Android source, that are unsupported for ARMv4T compliant processors (specifically the arm920t). The opcodes represent instructions available for ARMv5, ARMv5T, and ARMv5TE architectures, which are not present in the ARMv4T ISA. The list was obtained by exhaustively editing the recompiling the Android source code until it compiled without error.&lt;br /&gt;
&lt;br /&gt;
Please keep in mind, that in some cases, translating these instructions into a sequence of ARMv4T instructions will be impossible and / or result in nondeterministic execution because of&lt;br /&gt;
* the requirement of additional context&lt;br /&gt;
* the tendencies of certain opcodes to change condition registers that may or may not be present in the arm920t core&lt;br /&gt;
&lt;br /&gt;
=== Opcodes ===&lt;br /&gt;
&lt;br /&gt;
{{scroll box|height=480px|text=&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Opcode&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Desription&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;[[http://www.arm.com/miscPDFs/14128.pdf PDF]] Page Number&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;C&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;ASM&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;BLX(1)&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Branch, Link, and Exchange&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;166&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;N/A (Unused in Android)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;N/A (Unused in Android)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;BLX(2)&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Branch, Link, and Exchange&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;168&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Remove from inline assembly with something like&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_BLX&lt;br /&gt;
... (inline asm) ...&lt;br /&gt;
#else&lt;br /&gt;
... (inline asm with equivalent blx code, as shown to the right) ...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Substitute with a macro reference such as&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_BLX&lt;br /&gt;
#define BLX(a) \&lt;br /&gt;
blx a&lt;br /&gt;
#else&lt;br /&gt;
#define BLX(a) \&lt;br /&gt;
mov pc,lr \&lt;br /&gt;
bx a&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;CLZ&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Count Leading Zeros&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;175&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Remove from inline assembly with something like&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_CLZ&lt;br /&gt;
... (inline asm) ...&lt;br /&gt;
#else&lt;br /&gt;
... (inline asm with equivalent clz code, as shown to the right) ...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081029&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_CLZ&lt;br /&gt;
#define CLZ(Rd,Rm) \&lt;br /&gt;
clz Rd,Rm&lt;br /&gt;
#else&lt;br /&gt;
#define CLZ(Rd,Rm) \&lt;br /&gt;
...&lt;br /&gt;
#endif&lt;br /&gt;
...&lt;br /&gt;
CLZ(Rd,Rm)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;LDRD&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Load Registers Doubleword&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;200&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Substitute different inline assembly code with something like&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_LDRD&lt;br /&gt;
... (inline asm) ...&lt;br /&gt;
#else&lt;br /&gt;
... (inline asm with ldrd substituted) ...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Substitute with a macro reference such as&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_LDRD&lt;br /&gt;
#define LDRD(a,b) \&lt;br /&gt;
ldrd a,b&lt;br /&gt;
#else&lt;br /&gt;
#define LDRD(a,b) \&lt;br /&gt;
...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;PLD&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Preload Data&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;240&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Remove from inline assembly with something like&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_PLD&lt;br /&gt;
... (inline asm) ...&lt;br /&gt;
#else&lt;br /&gt;
... (inline asm with pld removed) ...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Remove or substitute with a macro reference such as&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_PLD&lt;br /&gt;
#define PLD(a,b) \&lt;br /&gt;
pld a,b&lt;br /&gt;
#else&lt;br /&gt;
#define PLD(a,b)&lt;br /&gt;
#endif&lt;br /&gt;
...&lt;br /&gt;
PLD(r0,#0)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;SMLA&amp;amp;lt;x&amp;amp;gt;&amp;amp;lt;y&amp;amp;gt;&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Signed Multiply-Accumulate&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;291&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;SMLAL&amp;amp;lt;x&amp;amp;gt;&amp;amp;lt;y&amp;amp;gt;&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Signed Multiply Accumulate Long&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;298&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;SMLAW&amp;amp;lt;y&amp;amp;gt;&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Signed Multiply-Accumulate Word&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;302&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;SMUL&amp;amp;lt;x&amp;amp;gt;&amp;amp;lt;y&amp;amp;gt;&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Signed Multiply&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;316&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;SMULW&amp;amp;lt;y&amp;amp;gt;&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Signed Multiply Word&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;320&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;QADD&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Saturating Add&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;242&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;QDADD&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Saturating Double and Add&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;249&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;QDSUB&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Saturating Double and Subtract&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;251&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;QSUB&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Saturating Subtract&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;253&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;STRD&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Store Registers Doubleword&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;349&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Substitute different inline assembly code with something like&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_STRD&lt;br /&gt;
... (inline asm) ...&lt;br /&gt;
#else&lt;br /&gt;
... (inline asm without strd) ...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Substitute with a macro reference such as&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_STRD&lt;br /&gt;
#define STRD(a,b) \&lt;br /&gt;
strd a,b&lt;br /&gt;
#else&lt;br /&gt;
#define STRD(a,b) \&lt;br /&gt;
...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Scanning for Files That Use the ARMv5TE ISA ===&lt;br /&gt;
&lt;br /&gt;
Using the above list of opcodes, one can scan the Android source code for ARMv4T-incompatible instruction sequences.&lt;br /&gt;
&lt;br /&gt;
'''Code:'''&lt;br /&gt;
{{scroll box|height=240px|text=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
# $1 is the android directory&lt;br /&gt;
&lt;br /&gt;
if [ $# -ne 1 ]; then&lt;br /&gt;
exit -1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
cd &amp;quot;${1}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
opcodes=&amp;quot;blx clz ldrd pld smlabb smlabt smlatt&lt;br /&gt;
smlal smlawb smlawt smulbb smulbt smultt smulwb&lt;br /&gt;
smulwt qadd qdadd qdsub qsub strd&amp;quot;&lt;br /&gt;
&lt;br /&gt;
for op in ${opcodes}; do&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;* ${op} =====================================&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ ! -e .files.${op} ]; then&lt;br /&gt;
&lt;br /&gt;
files=&amp;quot;$(grep -R -i &amp;quot;${op} &amp;quot; * 2&amp;gt;/dev/null)&amp;quot;&lt;br /&gt;
files=&amp;quot;$(echo $files | grep -v &amp;quot;^Binary file&amp;quot; | sed -e 's/:.*//')&amp;quot;&lt;br /&gt;
files=&amp;quot;$(echo $files| grep -v &amp;quot;CREDIT\|README\|^\(kernel/\|.git/\)\|\(\.txt\)$&amp;quot; | sort -u)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;${files}&amp;quot; &amp;gt; .files.${op}&lt;br /&gt;
&lt;br /&gt;
else&lt;br /&gt;
files=&amp;quot;$(cat .files.${op})&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
for fil in ${files}; do&lt;br /&gt;
lines=&amp;quot;$(grep -n -i &amp;quot;${op} &amp;quot; ${fil} | sed -e 's/:.*//g' )&amp;quot;&lt;br /&gt;
lines=&amp;quot;$(echo $lines | sed -e 's/ /,/g')&amp;quot;&lt;br /&gt;
echo &amp;quot;** ${fil}: lines {${lines}}&amp;quot;&lt;br /&gt;
done&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Source Files in Android that Use the ARMv5TE ISA ===&lt;br /&gt;
&lt;br /&gt;
The list of files below may or may not be complete. There might also be some assembly code that is generated with a python script (verification?).&lt;br /&gt;
&lt;br /&gt;
{{scroll box|height=150px|text=&lt;br /&gt;
* blx =====================================&lt;br /&gt;
** bionic/libc/tools/gensyscalls.py: lines {168,186}&lt;br /&gt;
** bootloader/legacy/nandwrite/init.S: lines {77}&lt;br /&gt;
** bootloader/legacy/usbloader/init.S: lines {95}&lt;br /&gt;
** dalvik/vm/arch/arm/CallEABI.S: lines {239}&lt;br /&gt;
** dalvik/vm/arch/arm/CallOldABI.S: lines {145}&lt;br /&gt;
** development/emulator/qtools/thumbdis.cpp: lines {187,265}&lt;br /&gt;
** external/qemu/target-arm/translate.c: lines {1151,1971,2444}&lt;br /&gt;
** external/qemu/trace.c: lines {774,1353,1358}&lt;br /&gt;
** system/core/libpixelflinger/codeflinger/disassem.c: lines {416}&lt;br /&gt;
* clz =====================================&lt;br /&gt;
** development/emulator/qtools/armdis.cpp: lines {654}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/pv_normalize.h: lines {67,84}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/norm_l.h: lines {137}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/normalize_amr_wb.h: lines {78,95}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/pvmp3_normalize.h: lines {67,84}&lt;br /&gt;
** external/opencore/codecs_v2/video/avc_h264/dec/src/vlc.cpp: lines {23}&lt;br /&gt;
** external/opencore/codecs_v2/video/m4v_h263/enc/src/vlc_encode_inline.h: lines {125,162,168,204,218}&lt;br /&gt;
** external/qemu/target-arm/translate.c: lines {1247}&lt;br /&gt;
** external/skia/libcorecg/Sk64.cpp: lines {340,341,343}&lt;br /&gt;
** external/skia/libcorecg/SkMatrix.cpp: lines {500,501}&lt;br /&gt;
** external/skia/libsgl/effects/SkColorMatrixFilter.cpp: lines {135}&lt;br /&gt;
** external/skia/libsgl/sgl/SkBitmap.cpp: lines {945,946,947}&lt;br /&gt;
** external/skia/libsgl/sgl/SkBitmapShader.cpp: lines {32,33,34}&lt;br /&gt;
** external/skia/libsgl/sgl/SkGraphics.cpp: lines {429,437}&lt;br /&gt;
* ldrd =====================================&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_AGET_WIDE.S: lines {28}&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_IGET_WIDE.S: lines {37}&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_IGET_WIDE_QUICK.S: lines {10}&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_SGET_WIDE.S: lines {17}&lt;br /&gt;
** dalvik/vm/mterp/out/InterpAsm-armv5.S: lines {2653,7464,8318,8390}&lt;br /&gt;
** system/core/libpixelflinger/rotate90CW_4x4_16v6.S: lines {40,41,42,43}&lt;br /&gt;
* pld =====================================&lt;br /&gt;
** bionic/libc/arch-arm/bionic/memcmp.S: lines {37,44,45,56,57,107,108,195,196}&lt;br /&gt;
** bionic/libc/arch-arm/bionic/memcmp16.S: lines {37,44,45,67,68,116,117,198,199}&lt;br /&gt;
** bionic/libc/arch-arm/bionic/memcpy.S: lines {55,56,57,145,266,293,320}&lt;br /&gt;
** bionic/libc/arch-arm/bionic/strlen.c: lines {59,65}&lt;br /&gt;
** bionic/libc/kernel/arch-arm/asm/arch/irqs.h: lines {162}&lt;br /&gt;
** external/elfutils/src/Makefile: lines {243}&lt;br /&gt;
** external/elfutils/src/Makefile.am: lines {32}&lt;br /&gt;
** external/elfutils/src/Makefile.in: lines {243}&lt;br /&gt;
** external/jpeg/jidctfst.S: lines {69,235,247}&lt;br /&gt;
** external/qemu/target-arm/translate.c: lines {1149}&lt;br /&gt;
** system/core/libpixelflinger/codeflinger/ARMAssembler.cpp: lines {368}&lt;br /&gt;
** system/core/libpixelflinger/codeflinger/ARMAssemblerInterface.cpp: lines {104,108,117}&lt;br /&gt;
** system/core/libpixelflinger/t32cb16blend.S: lines {111,112,134,143}&lt;br /&gt;
* smlabb =====================================&lt;br /&gt;
** external/jpeg/jidctfst.S: lines {110,115,155,156}&lt;br /&gt;
** external/neven/Embedded/common/src/b_BasicEm/Math.c: lines {584,589}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {147,166}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {120,129}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {514,533}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {418,429}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {202}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {250}&lt;br /&gt;
** external/opencore/codecs_v2/video/m4v_h263/enc/src/dct_inline.h: lines {119,155,167,278,326,341}&lt;br /&gt;
** external/opencore/codecs_v2/video/m4v_h263/enc/src/fastquant_inline.h: lines {178,225,437,517}&lt;br /&gt;
** frameworks/base/libs/audioflinger/AudioMixer.cpp: lines {405,436}&lt;br /&gt;
* smlabt =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {184}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {138}&lt;br /&gt;
** external/opencore/codecs_v2/video/m4v_h263/enc/src/dct_inline.h: lines {131,143,294,310}&lt;br /&gt;
* smlatt =====================================&lt;br /&gt;
** external/neven/Embedded/common/src/b_BasicEm/Math.c: lines {585,590}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {157}&lt;br /&gt;
** frameworks/base/libs/audioflinger/AudioMixer.cpp: lines {441}&lt;br /&gt;
* smlal =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v4.h: lines {179,223,236,257,267}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v4_gcc.h: lines {264,341}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {178,188,198}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_dct_9.s: lines {84,90,96,101,109,114,116,118,121,132,138,150,163,165,167,174,176,178}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_dct_9_gcc.s: lines {73,79,86,90,98,103,105,107,110,121,127,139,152,154,156,163,165,167}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_mdct_18.asm: lines {143,162,178,188,192,199,207,217,225,231,237,241,244}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_mdct_18.s: lines {145,164,180,190,194,201,209,219,227,233,239,243,246}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_mdct_18_gcc.s: lines {143,162,178,188,192,199,207,217,225,231,237,241,244}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_polyphase_filter_window.asm: lines {62,63,66,72,76,77,81,82,85,90,94,97,99,100,103,108,113,114,118,119,122,129,136,137,176,179,183,187,190,193}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_polyphase_filter_window.s: lines {67,68,71,77,81,82,86,87,90,95,99,102,104,105,108,113,118,119,123,124,127,134,141,142,181,184,188,192,195,198}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_polyphase_filter_window_gcc.s: lines {65,66,69,75,79,80,84,85,88,93,97,100,102,103,106,111,116,117,121,122,125,132,139,140,179,182,186,190,193,196}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/pv_mp3dec_fxd_op_arm.h: lines {148}&lt;br /&gt;
** external/qemu/trace.c: lines {813}&lt;br /&gt;
** frameworks/base/opengl/libagl/iterators.S: lines {66,67}&lt;br /&gt;
** frameworks/base/opengl/libagl/matrix.h: lines {67,68,96,126,127,282,283,314,315,316}&lt;br /&gt;
* smlawb =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {203,259}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {166,416}&lt;br /&gt;
** frameworks/base/libs/audioflinger/AudioResamplerSinc.cpp: lines {93,109}&lt;br /&gt;
** frameworks/base/opengl/libagl/matrix.h: lines {163,203}&lt;br /&gt;
* smlawt =====================================&lt;br /&gt;
** frameworks/base/libs/audioflinger/AudioResamplerSinc.cpp: lines {114}&lt;br /&gt;
** frameworks/base/opengl/libagl/matrix.h: lines {162,202,243,244}&lt;br /&gt;
* smulbb =====================================&lt;br /&gt;
** external/jpeg/jidctfst.S: lines {109,114,151,153}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {79}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {71,81}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {207,251,297,348,361,375,427,440,487}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {199,234,274,314,316,326,367,369,404}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_mac.h: lines {121,137}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_msu.h: lines {123,142}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_mult.h: lines {122,140}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mpy_32.h: lines {132,134,138,164,177,191}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mpy_32_16.h: lines {127,129,150,163}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mult.h: lines {121,141}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {115,139,151,163,189,190,212}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {112,113,164,183,201,218,265}&lt;br /&gt;
** external/opencore/codecs_v2/video/m4v_h263/enc/src/fastquant_inline.h: lines {250,457,531}&lt;br /&gt;
** external/skia/include/corecg/SkMath.h: lines {170}&lt;br /&gt;
** frameworks/base/libs/audioflinger/AudioMixer.cpp: lines {420,462}&lt;br /&gt;
** system/core/libpixelflinger/t32cb16blend.S: lines {39,66,74,82}&lt;br /&gt;
* smulbt =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {115}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {109}&lt;br /&gt;
** system/core/libpixelflinger/codeflinger/texturing.cpp: lines {1091}&lt;br /&gt;
** system/core/libpixelflinger/t32cb16blend.S: lines {47,55}&lt;br /&gt;
* smultt =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {131}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {100}&lt;br /&gt;
** frameworks/base/libs/audioflinger/AudioMixer.cpp: lines {467}&lt;br /&gt;
** frameworks/base/libs/audioflinger/AudioResamplerSinc.cpp: lines {73}&lt;br /&gt;
* smulwb =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {221}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {373}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {222}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {283}&lt;br /&gt;
** external/opencore/codecs_v2/audio/sbc/enc/src/sbcenc_filter.h: lines {33}&lt;br /&gt;
** frameworks/base/opengl/libagl/matrix.h: lines {161,201,242}&lt;br /&gt;
* smulwt =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {202,240}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {385,415}&lt;br /&gt;
* qadd =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {64}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {60}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {130,256}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {128,235}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_add.h: lines {122,137}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_mult.h: lines {123,145}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {71,102,152,176,192}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {91,115,148,202,234}&lt;br /&gt;
** external/openssl/crypto/bn/bn_prime.c: lines {454,455}&lt;br /&gt;
* qdadd =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/calc_sbr_synfilterbank.cpp: lines {116,162}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/trans4m_freq_2_time_fxp.cpp: lines {472,494}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {212,356,370,385,435,449}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {200,315,321,331,368,371}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_mac.h: lines {122,142}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mpy_32.h: lines {133,136,140,172,186,201}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mpy_32_16.h: lines {128,131,158,172}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {116}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {184}&lt;br /&gt;
* qdsub =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {302}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {275}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_msu.h: lines {124,147}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {140}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {165}&lt;br /&gt;
* qsub =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {167}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {162}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_sub.h: lines {121,138}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {88,127}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {70,133}&lt;br /&gt;
* strd =====================================&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_APUT_WIDE.S: lines {31}&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_IPUT_WIDE.S: lines {39}&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_IPUT_WIDE_QUICK.S: lines {14}&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_SPUT_WIDE.S: lines {21}&lt;br /&gt;
** dalvik/vm/mterp/out/InterpAsm-armv5.S: lines {2834,7530,8331,8542}&lt;br /&gt;
** dalvik/vm/oo/Object.h: lines {589}&lt;br /&gt;
** external/opencore/fileformats/avi/parser/include/pv_avifile_streamlist.h: lines {179}&lt;br /&gt;
** external/opencore/fileformats/avi/parser/src/pv_avifile_streamlist.cpp: lines {153}&lt;br /&gt;
** system/core/libpixelflinger/rotate90CW_4x4_16v6.S: lines {47,52,56,60}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Discussion ===&lt;br /&gt;
=== Notes ===&lt;br /&gt;
The file&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
system/core/libpixelflinger/codeflinger/ARMAssembler.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will need special attention. It's responsible for dynamic generation of DSP code.&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
* [[User:Cfriedt]] 20081024 I'm not sure how feasible this is, given that the [http://wiki.openmoko.org/wiki/Neo_FreeRunner_Hardware_Issues#SMedia_3362_Documentation_.26_OpenGL_ES_Drivers SMedia 3362 is heavily NDA'd]. However, since the arm920t lacks a floating-point unit / DSP core, is it possible to use the SMedia chip for general-purpose math? This would help in the Android platform, at least, for things like audio and video codecs. Aside from an OpenGL ES driver, OpenMoko documentation for the SMedia would be highly appreciated.&lt;br /&gt;
&lt;br /&gt;
= Important Links =&lt;br /&gt;
(Please Update Me)&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
* [http://source.android.com/documentation Android Documentation]&lt;br /&gt;
* [http://www.arm.com/documentation/ ARM Documentation], (keywords: armv4t, armv5t, armv5te, arm920t, arm926ej-s)&lt;br /&gt;
* [http://www.arm.com/miscPDFs/9658.pdf ARM Assembly Language Programming]&lt;br /&gt;
* [http://www.cse.unsw.edu.au/~cs3221/labs/assembler-intro.pdf An Introduction to the GNU Assembler]&lt;br /&gt;
* [http://www.heyrick.co.uk/assembler/apcsintro.html ARM Procedure Call Standard], [http://en.wikipedia.org/wiki/Calling_convention#ARM ARM Calling Conventions]&lt;br /&gt;
&lt;br /&gt;
== Instruction Set References ==&lt;br /&gt;
* [http://www.arm.com/miscPDFs/14128.pdf ARM Architecture Reference Manual], The definitive ISA documentation&lt;br /&gt;
* [http://www.simplemachines.it/doc/QRC0001H_rvct_v2.1_arm.pdf ARM Instruction Set Quick Reference Card]&lt;br /&gt;
* [http://infocenter.arm.com/help/topic/com.arm.doc.qrc0001l/QRC0001_UAL.pdf ARM and Thumb -2 Instruction Set Quick Reference Card]&lt;br /&gt;
* [http://infocenter.arm.com/help/topic/com.arm.doc.dvi0025b/DVI0025.pdf ARMv4T] (See section 1.4.13)&lt;br /&gt;
* [http://infocenter.arm.com/help/topic/com.arm.doc.dvi0014a/DVI0014A_ARM10T_PO.pdf ARMv5T] (See section 4.16)&lt;br /&gt;
* [http://www.arm.com/pdfs/ARM-DSP.pdf ARM DSP Enhanced Instruction Set]&lt;br /&gt;
* [http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042c/IHI0042C_aapcs.pdf Procedure Call Standard for the ARM Architecture]&lt;br /&gt;
&lt;br /&gt;
== Hardware Reference ==&lt;br /&gt;
&lt;br /&gt;
* [[Neo1973 Hardware]]&lt;br /&gt;
* [[Neo FreeRunner GTA02 Hardware]]&lt;br /&gt;
&lt;br /&gt;
== Communities ==&lt;br /&gt;
* [http://source.android.com/discuss Android Public Mailing Lists]&lt;br /&gt;
** Specifically, [http://groups.google.com/group/android-porting android-porting]&lt;br /&gt;
* [http://lists.openmoko.org/mailman/listinfo OpenMoko Mailing Lists]&lt;br /&gt;
** Specifically, [http://lists.openmoko.org/mailman/listinfo/openmoko-kernel openmoko-kernel]&lt;br /&gt;
* [http://forum.koolu.org/viewforum.php?f=10 Android on FreeRunner] at KoolU.com&lt;br /&gt;
* [[Openmoko Local Groups]]&lt;br /&gt;
* [[Openmoko:Community_Portal]]&lt;br /&gt;
&lt;br /&gt;
= See also =&lt;br /&gt;
&lt;br /&gt;
* [[Debug_Board]]&lt;br /&gt;
&lt;br /&gt;
= External Links =&lt;br /&gt;
== Youtube video /Android on FreeRunner ==&lt;br /&gt;
&lt;br /&gt;
[http://tw.youtube.com/watch?v=m4NbsLmF9j0 Video 1]&lt;br /&gt;
&lt;br /&gt;
[http://tw.youtube.com/watch?v=r6Op-7tNTiw Video 2]&lt;br /&gt;
&lt;br /&gt;
== Headline text ==&lt;br /&gt;
&lt;br /&gt;
[[Category:Distributions]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Android</id>
		<title>Android</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Android"/>
				<updated>2008-12-05T18:16:34Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: /* Building the Koolu Android Source */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|Android}}&lt;br /&gt;
{{Distributions|Android}}&lt;br /&gt;
&lt;br /&gt;
= Updates =&lt;br /&gt;
* 20081202 [http://www.koolu.com Koolu.com] has released the source code for the FreeRunner port of Android in their git repositories at [http://git.koolu.org/ Koolu GIT] ([http://koolu.com/Press-Release/ Press Release])&lt;br /&gt;
* 20081120 [http://www.koolu.com Koolu.com] has pushed back selling the OpenMoko Freerunner with Android pre-installed , as well as offering free downloads of the Freerunner port of Android to existing Freerunner owners. Untill December 2008&lt;br /&gt;
* 20081104 The first Android-image has been successfully created by Sean McNeil!  - sms and calling works, wifi and bluetooth doesn't. [http://onlinedev.blogspot.com/2008/11/porting-android-phase-3-done.html ''news-source'']&lt;br /&gt;
* 20081029 [[User:Cfriedt]] [http://benno.id.au Benno] has modified Android's build system so that it will output a JFFS2 image instead of YAFFS . Unlike JFFS2, which [http://wiki.openmoko.org/wiki/Userspace_root_image can be mounted read-only from an image], mounting a YAFFS image is not possible unless it's already been written to flash (it complains about the block device being of type '1' and not 'NAND'). JFFS2 also has the benefit that it's a standard OpenMoko image format (See [[Flashing the Neo FreeRunner]] or [[Flashing the Neo 1973]])&lt;br /&gt;
* 20081023 [[User:Bricode]] To track the status of which parts of the Android source tree contain ARMv5 specific code, I've created a table of where it is contained, and the status of patches. It can be found at: http://spreadsheets.google.com/pub?key=pzDEXnU19gkeTjpD28t-7fw&lt;br /&gt;
* 20081022 [[User:Cfriedt]] I was able to 'trivially' compile all of the Android source code without error for the ARMv4T architecture by removing v5TE instructions. Although it will definitely not run anything predictably, at least now that I know the build system will work with a few simple substitutions in build/core/combo/arm-linux.mk. At this point I am able to go ahead and re-implement v5TE instructions as v4T instruction sequences instead (or re-implement entire sections of assembly with hand-optimized v4T instructions).&lt;br /&gt;
* 20081021 [[User:Cfriedt]] Android -&amp;gt; FreeRunner updates on my [http://perpetual-notion.blogspot.com/search/label/android blog]&lt;br /&gt;
* 20081021 Google released the majority [http://source.android.com/download source code] for the phone under Apache free and open-source [http://source.android.com/license license], with portions covered by other existing licenses, such as the Linux kernel under GPLv2.&lt;br /&gt;
* 200810?? [http://www.koolu.com Koolu.com] has announced that they will be '''selling the OpenMoko Freerunner with Android pre-installed''' beginning in November 2008, as well as offering '''free downloads of the Freerunner port of Android''' to existing Freerunner owners. Well-known open-source advocate [http://koolu.com/The-Koolu-Team/maddog.html Jon &amp;quot;maddog&amp;quot; Hall] is CTO and Ambassador for Koolu.&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
This page is dedicated to porting the [http://www.android.com Android OS] to the [[Neo 1973]] and [[Neo FreeRunner]] handsets. Since the Android OS was [http://source.android.com/posts/opensource  publically released] on 20081021, [http://benno.id.au/blog/2007/11/21/android-neo1973 work] [http://perpetual-notion.blogspot.com/search/label/android is] [http://groups.google.com/group/android-porting currently underway] to port Android to the [[Neo1973 Hardware|Neo 1973]] and [[Neo_FreeRunner_GTA02_Hardware|FreeRunner]] handsets.&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
# Systematically introduce patches for ARMv4T in the Android codebase&lt;br /&gt;
# Provide Neo1973 and Neo FreeRunner hardware-dependent patches in the Android codebase, leveraging the work already done by the Openmoko developers, without forcing Android-specific changes upstream&lt;br /&gt;
# Provide a useable Android filesystem and kernel on the [[Distributions]] page that conform to current Openmoko installation routines&lt;br /&gt;
&lt;br /&gt;
== Early Attempts ==&lt;br /&gt;
As [http://benno.id.au Ben Leslie] had pointed out on his [http://benno.id.au/blog/2007/11/21/android-neo1973 blog] far before the source code was released, [http://www.android.com Android] was originally designed to work with the ARMv5TE [http://en.wikipedia.org/wiki/Instruction_set_architecture instruction set architecture] (ISA), which allows for [http://en.wikipedia.org/wiki/ARM_architecture#DSP_Enhancement_Instructions DSP enhanced instructions]. Contrary to the ARMv5TE ISA, the Neo1973 and FreeRunner handsets both feature an arm920t core, which comply to the ARMv4T ISA.&lt;br /&gt;
&lt;br /&gt;
Before the source code was released, kernel trap handlers were implemented to 'emulate' the ARMv5TE ISA. Although the results worked in many cases, trapping is costly and performance suffered as a result. Moreover, without explicitly knowing which conditions were set by various instructions, such as Thumb Mode execution, the result became nondeterministic.&lt;br /&gt;
&lt;br /&gt;
== Current State ==&lt;br /&gt;
&lt;br /&gt;
With the release of the Android [http://source.android.com source code], the Open Source community is no longer limited to dealing with a binary-only product. The Open Handset Alliance (OHA) has let their source code become their product for everyone enrich and benefit from.&lt;br /&gt;
&lt;br /&gt;
Currently, porting efforts are underway in many circles. Patches should be submitted via the [http://source.android.com/submit-patches official Android channels].&lt;br /&gt;
&lt;br /&gt;
[http://www.koolu.com Koolu], a Freerunner distributor, has released the source code of their Android port at [http://git.koolu.com http://git.koolu.com]. See the [[#Building the Koolu Android Source]] instructions below for how to build an Android image for Freerunner.&lt;br /&gt;
&lt;br /&gt;
To track the status of which parts of the Android source tree contain ARMv5 specific code, I've created a table of where it is contained, and the status of patches. It can be found at: http://spreadsheets.google.com/pub?key=pzDEXnU19gkeTjpD28t-7fw [[User:Bricode]]&lt;br /&gt;
&lt;br /&gt;
[[User:Seanmcneil3|Sean McNeil]] said that he was able to get Android running (including telephony) in his Freerunner [http://3v1n0.tuxfamily.org/tumblelog/post/368 source].&lt;br /&gt;
&lt;br /&gt;
Ben Leslie mentioned on the android-porting list that he was able to get the 'Android' logo to appear on his Neo 1973.&lt;br /&gt;
&lt;br /&gt;
=== Building the Koolu Android Source ===&lt;br /&gt;
&lt;br /&gt;
# Configure your machine with the prerequisites documented in the [http://source.android.com/download#TOC-Setting-up-your-machine Setting up your machine] section of Google's build instructions.&lt;br /&gt;
# Install &amp;lt;tt&amp;gt;repo&amp;lt;/tt&amp;gt; and download the source, as documented at http://trac.koolu.org/, '''but before running the &amp;lt;tt&amp;gt;make&amp;lt;/tt&amp;gt; command in step 7, do the following:'''&lt;br /&gt;
# Install the toolchain provided by Koolu at http://trac.koolu.org/attachment/wiki/Toolchain/android-toolchain_20081019-koolu1_i386.deb.&lt;br /&gt;
# Create a &amp;lt;tt&amp;gt;buildspec.mk&amp;lt;/tt&amp;gt; file at the top level of your Android source tree, and add the following line to it: &amp;lt;pre&amp;gt;TARGET_TOOLS_PREFIX := /opt/android-toolchain/bin/armv4t-android-eabi-&amp;lt;/pre&amp;gt; as documented at http://trac.koolu.org/wiki/Toolchain.&lt;br /&gt;
# Now you can start the build with the following command: &amp;lt;pre&amp;gt;$ make TARGET_PRODUCT=freerunner&amp;lt;/pre&amp;gt;&lt;br /&gt;
# After the build finishes you can put together a root file system by editing and running Sean McNeil's scripts, which are attached to [http://lists.openmoko.org/pipermail/community/2008-December/036982.html this message]. The first script (cp_android_OS) is used to copy the newly built files into a staging area. The second one (mkjffs2) makes a jffs2 image from the staging area. Be sure to edit the paths in the two files to match your environment.&lt;br /&gt;
# The output of the second script is a file, &amp;lt;tt&amp;gt;androidfs.jffs2&amp;lt;/tt&amp;gt;, which may be flashed to your Freerunner.&lt;br /&gt;
&lt;br /&gt;
==== Building an jffs2 image ====&lt;br /&gt;
You can use this script:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
currentdir=`pwd`&lt;br /&gt;
&lt;br /&gt;
ANDROID_OUT=out&lt;br /&gt;
ANDROID_DEVICE=freerunner&lt;br /&gt;
EXPORT_ROOT=$currentdir/build_jffs2_tmp&lt;br /&gt;
&lt;br /&gt;
Usage()&lt;br /&gt;
{&lt;br /&gt;
	echo &amp;quot;Usage: $0 release|debug jffs2filename&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
BuildImage()&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
	if [ -d $1 ]&lt;br /&gt;
	then&lt;br /&gt;
		echo &amp;quot;[INFO] Copying from... $1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
		sudo rm -rf $EXPORT_ROOT&lt;br /&gt;
		mkdir $EXPORT_ROOT&lt;br /&gt;
		mkdir $EXPORT_ROOT/root&lt;br /&gt;
&lt;br /&gt;
		# Copy the image...&lt;br /&gt;
		cd $1&lt;br /&gt;
		tar cf - root | (cd $EXPORT_ROOT; sudo tar xf -)&lt;br /&gt;
		tar cf - system | (cd $EXPORT_ROOT/root; sudo tar xf -)&lt;br /&gt;
&lt;br /&gt;
		# Change owner and permissions...&lt;br /&gt;
		cd $EXPORT_ROOT&lt;br /&gt;
		sudo chown -R root:root root&lt;br /&gt;
		sudo chmod -R 777 root&lt;br /&gt;
		&lt;br /&gt;
		cd $currentdir&lt;br /&gt;
&lt;br /&gt;
		# Make the JFFS2 file&lt;br /&gt;
		mkfs.jffs2 --pad=0x700000 -o $2 -e 0x20000 -n -d$EXPORT_ROOT/root/&lt;br /&gt;
		echo &amp;quot;[INFO] Image written to $2&amp;quot;&lt;br /&gt;
		&lt;br /&gt;
		sudo rm -rf $EXPORT_ROOT&lt;br /&gt;
	else&lt;br /&gt;
		echo &amp;quot;$1 does not exist!&amp;quot;&lt;br /&gt;
	fi&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if [ $# != 2 ]&lt;br /&gt;
then&lt;br /&gt;
	Usage&lt;br /&gt;
else&lt;br /&gt;
&lt;br /&gt;
	case $1 in&lt;br /&gt;
	    release)&lt;br /&gt;
		BuildImage $ANDROID_OUT/target/product/$ANDROID_DEVICE $2&lt;br /&gt;
		;;&lt;br /&gt;
	    debug)&lt;br /&gt;
		BuildImage $ANDROID_OUT/debug/target/product/$ANDROID_DEVICE $2&lt;br /&gt;
		;;&lt;br /&gt;
	    *)&lt;br /&gt;
		Usage&lt;br /&gt;
	esac&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There is currently no documented way to build a Freerunner/Android kernel. [[User:Seanmcneil3|Sean McNeil]] has been releasing kernels at http://people.openmoko.org/sean_mcneil/. Most of the patches required to run Android have be incorporated into the &amp;lt;tt&amp;gt;andy-tracking&amp;lt;/tt&amp;gt; kernel branch, which will eventually be the new stable kernel. Once all the patches are in the kernel, it should be possible to run Android with a stock kernel.&lt;br /&gt;
&lt;br /&gt;
=== Windows Connectivity ===&lt;br /&gt;
&lt;br /&gt;
It is possible to get Windows to at least recognize the Android &amp;quot;Ethernet Gadget&amp;quot; and charge the FreeRunner using the Android USB Windows driver (http://dl.google.com/android/android_usb_windows.zip) by modifying the android_usb.inf file in that package before attempting to install the driver.  The following modifications are required:&lt;br /&gt;
&lt;br /&gt;
Add the following to the [Google.NTx86] section of the android_usb.inf file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
; Neo FreeRunner&lt;br /&gt;
%USB\VID_1457&amp;amp;PID_5117.DeviceDescRelease%=androidusb.Dev, USB\VID_1457&amp;amp;PID_5117&lt;br /&gt;
%USB\VID_1457&amp;amp;PID_5117&amp;amp;MI_01.DeviceDescRelease%=androidusb.Dev, USB\VID_1457&amp;amp;PID_5117&amp;amp;MI_01&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
and add the following to the to the [Strings] section of the android_usb.inf file:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
USB\VID_1457&amp;amp;PID_5117.DeviceDescRelease=&amp;quot;Neo FreeRunner&amp;quot;&lt;br /&gt;
USB\VID_1457&amp;amp;PID_5117&amp;amp;MI_01.DeviceDescRelease=&amp;quot;Neo FreeRunner Composite ADB Interface&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Windows version of adb does not appear to recognize the connected device yet but at least the FreeRunner charges and the device driver indicates that &amp;quot;This device is working properly.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
= How to Help =&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
You can start by following the instructions to download and build the Android source from scratch. Please see [http://source.android.com/download http://source.android.com/download] and follow the instructions for your architecture.&lt;br /&gt;
&lt;br /&gt;
== Publicize Your Efforts ==&lt;br /&gt;
&lt;br /&gt;
It's generally a good idea to make your efforts known via wiki systems, public mailing lists, forums, and publically open version control systems.&lt;br /&gt;
&lt;br /&gt;
Always take credit for your work but please don't do it in the form of comments. Some code is already hard enough to read without comments polluting the text. The best thing to do is to create a patch and put a header with your information at the top. Collaboration systems such as git might already do this for you (??).&lt;br /&gt;
&lt;br /&gt;
If you create something new and have the ability to designate the license for it, please consider license compatibility issues.&lt;br /&gt;
&lt;br /&gt;
== Porting Strategy ==&lt;br /&gt;
&lt;br /&gt;
* Analysis and leverage of the existing build system&lt;br /&gt;
** buid/core/combo/arm-linux.mk&lt;br /&gt;
*** -D__ARCH_ARM_4__ -D__ARCH_ARM_4T__&lt;br /&gt;
*** -march=armv4t -mcpu=arm920t&lt;br /&gt;
** fix various static references to 'armv5'&lt;br /&gt;
* Isolating ARMv5TE ISA dependent code&lt;br /&gt;
** e.g. grep -n -R -i &amp;quot;${armv5te_isa_pattern}&amp;quot; ~/android&lt;br /&gt;
* Abstracting&lt;br /&gt;
** ( C/C++ )&lt;br /&gt;
*** Use inlined functions / #ifdef statments to implement functions in a portable manner&lt;br /&gt;
*** For inlined assembler calls, it's acceptable for now to use generic C code instead, so long as later on we optimize it by hand.&lt;br /&gt;
** ( ASM )&lt;br /&gt;
*** Proprocessor statements based on ISA / architecture, e.g. #ifdef __ARCH_ARM_5__ ... #endif #ifdef __ARCH_ARM_4__ ... #endif&lt;br /&gt;
*** It's highly suggested that preprocessor statements should not be nested (i.e. make them mutually exclusive)&lt;br /&gt;
*** Some people have suggested that we should not do #ifdef's based on ARCH or ISA, but rather based on an AndroidConfig.h which would define macros like PLD(...) #ifdef HAVE_ARM_PLD pld #else ... #endif .&lt;br /&gt;
&lt;br /&gt;
For each ARMv5TE instruction, one could potentially&lt;br /&gt;
* Implement the instruction using general registers instead of DSP calls (i.e. eabi / softfloat)&lt;br /&gt;
* If that is a) nondeterministic, or b) slow, then sections of code need to be analyzed and hand-optimized for the ARMv4T isa&lt;br /&gt;
&lt;br /&gt;
== List of Unsupported Instructions ==&lt;br /&gt;
&lt;br /&gt;
This is a list of opcodes, extracted from the Android source, that are unsupported for ARMv4T compliant processors (specifically the arm920t). The opcodes represent instructions available for ARMv5, ARMv5T, and ARMv5TE architectures, which are not present in the ARMv4T ISA. The list was obtained by exhaustively editing the recompiling the Android source code until it compiled without error.&lt;br /&gt;
&lt;br /&gt;
Please keep in mind, that in some cases, translating these instructions into a sequence of ARMv4T instructions will be impossible and / or result in nondeterministic execution because of&lt;br /&gt;
* the requirement of additional context&lt;br /&gt;
* the tendencies of certain opcodes to change condition registers that may or may not be present in the arm920t core&lt;br /&gt;
&lt;br /&gt;
=== Opcodes ===&lt;br /&gt;
&lt;br /&gt;
{{scroll box|height=480px|text=&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Opcode&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Desription&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;[[http://www.arm.com/miscPDFs/14128.pdf PDF]] Page Number&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;C&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;ASM&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;BLX(1)&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Branch, Link, and Exchange&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;166&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;N/A (Unused in Android)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;N/A (Unused in Android)&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;BLX(2)&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Branch, Link, and Exchange&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;168&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Remove from inline assembly with something like&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_BLX&lt;br /&gt;
... (inline asm) ...&lt;br /&gt;
#else&lt;br /&gt;
... (inline asm with equivalent blx code, as shown to the right) ...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Substitute with a macro reference such as&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_BLX&lt;br /&gt;
#define BLX(a) \&lt;br /&gt;
blx a&lt;br /&gt;
#else&lt;br /&gt;
#define BLX(a) \&lt;br /&gt;
mov pc,lr \&lt;br /&gt;
bx a&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;CLZ&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Count Leading Zeros&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;175&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Remove from inline assembly with something like&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_CLZ&lt;br /&gt;
... (inline asm) ...&lt;br /&gt;
#else&lt;br /&gt;
... (inline asm with equivalent clz code, as shown to the right) ...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081029&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_CLZ&lt;br /&gt;
#define CLZ(Rd,Rm) \&lt;br /&gt;
clz Rd,Rm&lt;br /&gt;
#else&lt;br /&gt;
#define CLZ(Rd,Rm) \&lt;br /&gt;
...&lt;br /&gt;
#endif&lt;br /&gt;
...&lt;br /&gt;
CLZ(Rd,Rm)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;LDRD&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Load Registers Doubleword&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;200&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Substitute different inline assembly code with something like&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_LDRD&lt;br /&gt;
... (inline asm) ...&lt;br /&gt;
#else&lt;br /&gt;
... (inline asm with ldrd substituted) ...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Substitute with a macro reference such as&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_LDRD&lt;br /&gt;
#define LDRD(a,b) \&lt;br /&gt;
ldrd a,b&lt;br /&gt;
#else&lt;br /&gt;
#define LDRD(a,b) \&lt;br /&gt;
...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;PLD&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Preload Data&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;240&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Remove from inline assembly with something like&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_PLD&lt;br /&gt;
... (inline asm) ...&lt;br /&gt;
#else&lt;br /&gt;
... (inline asm with pld removed) ...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Remove or substitute with a macro reference such as&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_PLD&lt;br /&gt;
#define PLD(a,b) \&lt;br /&gt;
pld a,b&lt;br /&gt;
#else&lt;br /&gt;
#define PLD(a,b)&lt;br /&gt;
#endif&lt;br /&gt;
...&lt;br /&gt;
PLD(r0,#0)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;SMLA&amp;amp;lt;x&amp;amp;gt;&amp;amp;lt;y&amp;amp;gt;&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Signed Multiply-Accumulate&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;291&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;SMLAL&amp;amp;lt;x&amp;amp;gt;&amp;amp;lt;y&amp;amp;gt;&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Signed Multiply Accumulate Long&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;298&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;SMLAW&amp;amp;lt;y&amp;amp;gt;&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Signed Multiply-Accumulate Word&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;302&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;SMUL&amp;amp;lt;x&amp;amp;gt;&amp;amp;lt;y&amp;amp;gt;&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Signed Multiply&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;316&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;SMULW&amp;amp;lt;y&amp;amp;gt;&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Signed Multiply Word&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;320&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;QADD&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Saturating Add&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;242&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;QDADD&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Saturating Double and Add&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;249&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;QDSUB&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Saturating Double and Subtract&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;251&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;QSUB&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Saturating Subtract&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;253&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;STRD&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Store Registers Doubleword&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;349&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Substitute different inline assembly code with something like&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_STRD&lt;br /&gt;
... (inline asm) ...&lt;br /&gt;
#else&lt;br /&gt;
... (inline asm without strd) ...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081028&lt;br /&gt;
Substitute with a macro reference such as&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#ifdef HAVE_STRD&lt;br /&gt;
#define STRD(a,b) \&lt;br /&gt;
strd a,b&lt;br /&gt;
#else&lt;br /&gt;
#define STRD(a,b) \&lt;br /&gt;
...&lt;br /&gt;
#endif&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Scanning for Files That Use the ARMv5TE ISA ===&lt;br /&gt;
&lt;br /&gt;
Using the above list of opcodes, one can scan the Android source code for ARMv4T-incompatible instruction sequences.&lt;br /&gt;
&lt;br /&gt;
'''Code:'''&lt;br /&gt;
{{scroll box|height=240px|text=&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
&lt;br /&gt;
# $1 is the android directory&lt;br /&gt;
&lt;br /&gt;
if [ $# -ne 1 ]; then&lt;br /&gt;
exit -1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
cd &amp;quot;${1}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
opcodes=&amp;quot;blx clz ldrd pld smlabb smlabt smlatt&lt;br /&gt;
smlal smlawb smlawt smulbb smulbt smultt smulwb&lt;br /&gt;
smulwt qadd qdadd qdsub qsub strd&amp;quot;&lt;br /&gt;
&lt;br /&gt;
for op in ${opcodes}; do&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;* ${op} =====================================&amp;quot;&lt;br /&gt;
&lt;br /&gt;
if [ ! -e .files.${op} ]; then&lt;br /&gt;
&lt;br /&gt;
files=&amp;quot;$(grep -R -i &amp;quot;${op} &amp;quot; * 2&amp;gt;/dev/null)&amp;quot;&lt;br /&gt;
files=&amp;quot;$(echo $files | grep -v &amp;quot;^Binary file&amp;quot; | sed -e 's/:.*//')&amp;quot;&lt;br /&gt;
files=&amp;quot;$(echo $files| grep -v &amp;quot;CREDIT\|README\|^\(kernel/\|.git/\)\|\(\.txt\)$&amp;quot; | sort -u)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
echo &amp;quot;${files}&amp;quot; &amp;gt; .files.${op}&lt;br /&gt;
&lt;br /&gt;
else&lt;br /&gt;
files=&amp;quot;$(cat .files.${op})&amp;quot;&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
for fil in ${files}; do&lt;br /&gt;
lines=&amp;quot;$(grep -n -i &amp;quot;${op} &amp;quot; ${fil} | sed -e 's/:.*//g' )&amp;quot;&lt;br /&gt;
lines=&amp;quot;$(echo $lines | sed -e 's/ /,/g')&amp;quot;&lt;br /&gt;
echo &amp;quot;** ${fil}: lines {${lines}}&amp;quot;&lt;br /&gt;
done&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Source Files in Android that Use the ARMv5TE ISA ===&lt;br /&gt;
&lt;br /&gt;
The list of files below may or may not be complete. There might also be some assembly code that is generated with a python script (verification?).&lt;br /&gt;
&lt;br /&gt;
{{scroll box|height=150px|text=&lt;br /&gt;
* blx =====================================&lt;br /&gt;
** bionic/libc/tools/gensyscalls.py: lines {168,186}&lt;br /&gt;
** bootloader/legacy/nandwrite/init.S: lines {77}&lt;br /&gt;
** bootloader/legacy/usbloader/init.S: lines {95}&lt;br /&gt;
** dalvik/vm/arch/arm/CallEABI.S: lines {239}&lt;br /&gt;
** dalvik/vm/arch/arm/CallOldABI.S: lines {145}&lt;br /&gt;
** development/emulator/qtools/thumbdis.cpp: lines {187,265}&lt;br /&gt;
** external/qemu/target-arm/translate.c: lines {1151,1971,2444}&lt;br /&gt;
** external/qemu/trace.c: lines {774,1353,1358}&lt;br /&gt;
** system/core/libpixelflinger/codeflinger/disassem.c: lines {416}&lt;br /&gt;
* clz =====================================&lt;br /&gt;
** development/emulator/qtools/armdis.cpp: lines {654}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/pv_normalize.h: lines {67,84}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/norm_l.h: lines {137}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/normalize_amr_wb.h: lines {78,95}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/pvmp3_normalize.h: lines {67,84}&lt;br /&gt;
** external/opencore/codecs_v2/video/avc_h264/dec/src/vlc.cpp: lines {23}&lt;br /&gt;
** external/opencore/codecs_v2/video/m4v_h263/enc/src/vlc_encode_inline.h: lines {125,162,168,204,218}&lt;br /&gt;
** external/qemu/target-arm/translate.c: lines {1247}&lt;br /&gt;
** external/skia/libcorecg/Sk64.cpp: lines {340,341,343}&lt;br /&gt;
** external/skia/libcorecg/SkMatrix.cpp: lines {500,501}&lt;br /&gt;
** external/skia/libsgl/effects/SkColorMatrixFilter.cpp: lines {135}&lt;br /&gt;
** external/skia/libsgl/sgl/SkBitmap.cpp: lines {945,946,947}&lt;br /&gt;
** external/skia/libsgl/sgl/SkBitmapShader.cpp: lines {32,33,34}&lt;br /&gt;
** external/skia/libsgl/sgl/SkGraphics.cpp: lines {429,437}&lt;br /&gt;
* ldrd =====================================&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_AGET_WIDE.S: lines {28}&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_IGET_WIDE.S: lines {37}&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_IGET_WIDE_QUICK.S: lines {10}&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_SGET_WIDE.S: lines {17}&lt;br /&gt;
** dalvik/vm/mterp/out/InterpAsm-armv5.S: lines {2653,7464,8318,8390}&lt;br /&gt;
** system/core/libpixelflinger/rotate90CW_4x4_16v6.S: lines {40,41,42,43}&lt;br /&gt;
* pld =====================================&lt;br /&gt;
** bionic/libc/arch-arm/bionic/memcmp.S: lines {37,44,45,56,57,107,108,195,196}&lt;br /&gt;
** bionic/libc/arch-arm/bionic/memcmp16.S: lines {37,44,45,67,68,116,117,198,199}&lt;br /&gt;
** bionic/libc/arch-arm/bionic/memcpy.S: lines {55,56,57,145,266,293,320}&lt;br /&gt;
** bionic/libc/arch-arm/bionic/strlen.c: lines {59,65}&lt;br /&gt;
** bionic/libc/kernel/arch-arm/asm/arch/irqs.h: lines {162}&lt;br /&gt;
** external/elfutils/src/Makefile: lines {243}&lt;br /&gt;
** external/elfutils/src/Makefile.am: lines {32}&lt;br /&gt;
** external/elfutils/src/Makefile.in: lines {243}&lt;br /&gt;
** external/jpeg/jidctfst.S: lines {69,235,247}&lt;br /&gt;
** external/qemu/target-arm/translate.c: lines {1149}&lt;br /&gt;
** system/core/libpixelflinger/codeflinger/ARMAssembler.cpp: lines {368}&lt;br /&gt;
** system/core/libpixelflinger/codeflinger/ARMAssemblerInterface.cpp: lines {104,108,117}&lt;br /&gt;
** system/core/libpixelflinger/t32cb16blend.S: lines {111,112,134,143}&lt;br /&gt;
* smlabb =====================================&lt;br /&gt;
** external/jpeg/jidctfst.S: lines {110,115,155,156}&lt;br /&gt;
** external/neven/Embedded/common/src/b_BasicEm/Math.c: lines {584,589}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {147,166}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {120,129}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {514,533}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {418,429}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {202}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {250}&lt;br /&gt;
** external/opencore/codecs_v2/video/m4v_h263/enc/src/dct_inline.h: lines {119,155,167,278,326,341}&lt;br /&gt;
** external/opencore/codecs_v2/video/m4v_h263/enc/src/fastquant_inline.h: lines {178,225,437,517}&lt;br /&gt;
** frameworks/base/libs/audioflinger/AudioMixer.cpp: lines {405,436}&lt;br /&gt;
* smlabt =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {184}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {138}&lt;br /&gt;
** external/opencore/codecs_v2/video/m4v_h263/enc/src/dct_inline.h: lines {131,143,294,310}&lt;br /&gt;
* smlatt =====================================&lt;br /&gt;
** external/neven/Embedded/common/src/b_BasicEm/Math.c: lines {585,590}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {157}&lt;br /&gt;
** frameworks/base/libs/audioflinger/AudioMixer.cpp: lines {441}&lt;br /&gt;
* smlal =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v4.h: lines {179,223,236,257,267}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v4_gcc.h: lines {264,341}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {178,188,198}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_dct_9.s: lines {84,90,96,101,109,114,116,118,121,132,138,150,163,165,167,174,176,178}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_dct_9_gcc.s: lines {73,79,86,90,98,103,105,107,110,121,127,139,152,154,156,163,165,167}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_mdct_18.asm: lines {143,162,178,188,192,199,207,217,225,231,237,241,244}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_mdct_18.s: lines {145,164,180,190,194,201,209,219,227,233,239,243,246}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_mdct_18_gcc.s: lines {143,162,178,188,192,199,207,217,225,231,237,241,244}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_polyphase_filter_window.asm: lines {62,63,66,72,76,77,81,82,85,90,94,97,99,100,103,108,113,114,118,119,122,129,136,137,176,179,183,187,190,193}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_polyphase_filter_window.s: lines {67,68,71,77,81,82,86,87,90,95,99,102,104,105,108,113,118,119,123,124,127,134,141,142,181,184,188,192,195,198}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_polyphase_filter_window_gcc.s: lines {65,66,69,75,79,80,84,85,88,93,97,100,102,103,106,111,116,117,121,122,125,132,139,140,179,182,186,190,193,196}&lt;br /&gt;
** external/opencore/codecs_v2/audio/mp3/dec/src/pv_mp3dec_fxd_op_arm.h: lines {148}&lt;br /&gt;
** external/qemu/trace.c: lines {813}&lt;br /&gt;
** frameworks/base/opengl/libagl/iterators.S: lines {66,67}&lt;br /&gt;
** frameworks/base/opengl/libagl/matrix.h: lines {67,68,96,126,127,282,283,314,315,316}&lt;br /&gt;
* smlawb =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {203,259}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {166,416}&lt;br /&gt;
** frameworks/base/libs/audioflinger/AudioResamplerSinc.cpp: lines {93,109}&lt;br /&gt;
** frameworks/base/opengl/libagl/matrix.h: lines {163,203}&lt;br /&gt;
* smlawt =====================================&lt;br /&gt;
** frameworks/base/libs/audioflinger/AudioResamplerSinc.cpp: lines {114}&lt;br /&gt;
** frameworks/base/opengl/libagl/matrix.h: lines {162,202,243,244}&lt;br /&gt;
* smulbb =====================================&lt;br /&gt;
** external/jpeg/jidctfst.S: lines {109,114,151,153}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {79}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {71,81}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {207,251,297,348,361,375,427,440,487}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {199,234,274,314,316,326,367,369,404}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_mac.h: lines {121,137}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_msu.h: lines {123,142}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_mult.h: lines {122,140}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mpy_32.h: lines {132,134,138,164,177,191}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mpy_32_16.h: lines {127,129,150,163}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mult.h: lines {121,141}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {115,139,151,163,189,190,212}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {112,113,164,183,201,218,265}&lt;br /&gt;
** external/opencore/codecs_v2/video/m4v_h263/enc/src/fastquant_inline.h: lines {250,457,531}&lt;br /&gt;
** external/skia/include/corecg/SkMath.h: lines {170}&lt;br /&gt;
** frameworks/base/libs/audioflinger/AudioMixer.cpp: lines {420,462}&lt;br /&gt;
** system/core/libpixelflinger/t32cb16blend.S: lines {39,66,74,82}&lt;br /&gt;
* smulbt =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {115}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {109}&lt;br /&gt;
** system/core/libpixelflinger/codeflinger/texturing.cpp: lines {1091}&lt;br /&gt;
** system/core/libpixelflinger/t32cb16blend.S: lines {47,55}&lt;br /&gt;
* smultt =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {131}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {100}&lt;br /&gt;
** frameworks/base/libs/audioflinger/AudioMixer.cpp: lines {467}&lt;br /&gt;
** frameworks/base/libs/audioflinger/AudioResamplerSinc.cpp: lines {73}&lt;br /&gt;
* smulwb =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {221}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {373}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {222}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {283}&lt;br /&gt;
** external/opencore/codecs_v2/audio/sbc/enc/src/sbcenc_filter.h: lines {33}&lt;br /&gt;
** frameworks/base/opengl/libagl/matrix.h: lines {161,201,242}&lt;br /&gt;
* smulwt =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {202,240}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {385,415}&lt;br /&gt;
* qadd =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {64}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {60}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {130,256}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {128,235}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_add.h: lines {122,137}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_mult.h: lines {123,145}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {71,102,152,176,192}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {91,115,148,202,234}&lt;br /&gt;
** external/openssl/crypto/bn/bn_prime.c: lines {454,455}&lt;br /&gt;
* qdadd =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/calc_sbr_synfilterbank.cpp: lines {116,162}&lt;br /&gt;
** external/opencore/codecs_v2/audio/aac/dec/src/trans4m_freq_2_time_fxp.cpp: lines {472,494}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {212,356,370,385,435,449}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {200,315,321,331,368,371}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_mac.h: lines {122,142}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mpy_32.h: lines {133,136,140,172,186,201}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mpy_32_16.h: lines {128,131,158,172}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {116}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {184}&lt;br /&gt;
* qdsub =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {302}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {275}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_msu.h: lines {124,147}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {140}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {165}&lt;br /&gt;
* qsub =====================================&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {167}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {162}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_sub.h: lines {121,138}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {88,127}&lt;br /&gt;
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {70,133}&lt;br /&gt;
* strd =====================================&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_APUT_WIDE.S: lines {31}&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_IPUT_WIDE.S: lines {39}&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_IPUT_WIDE_QUICK.S: lines {14}&lt;br /&gt;
** dalvik/vm/mterp/armv5/OP_SPUT_WIDE.S: lines {21}&lt;br /&gt;
** dalvik/vm/mterp/out/InterpAsm-armv5.S: lines {2834,7530,8331,8542}&lt;br /&gt;
** dalvik/vm/oo/Object.h: lines {589}&lt;br /&gt;
** external/opencore/fileformats/avi/parser/include/pv_avifile_streamlist.h: lines {179}&lt;br /&gt;
** external/opencore/fileformats/avi/parser/src/pv_avifile_streamlist.cpp: lines {153}&lt;br /&gt;
** system/core/libpixelflinger/rotate90CW_4x4_16v6.S: lines {47,52,56,60}&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Discussion ===&lt;br /&gt;
=== Notes ===&lt;br /&gt;
The file&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
system/core/libpixelflinger/codeflinger/ARMAssembler.cpp&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
will need special attention. It's responsible for dynamic generation of DSP code.&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
* [[User:Cfriedt]] 20081024 I'm not sure how feasible this is, given that the [http://wiki.openmoko.org/wiki/Neo_FreeRunner_Hardware_Issues#SMedia_3362_Documentation_.26_OpenGL_ES_Drivers SMedia 3362 is heavily NDA'd]. However, since the arm920t lacks a floating-point unit / DSP core, is it possible to use the SMedia chip for general-purpose math? This would help in the Android platform, at least, for things like audio and video codecs. Aside from an OpenGL ES driver, OpenMoko documentation for the SMedia would be highly appreciated.&lt;br /&gt;
&lt;br /&gt;
= Important Links =&lt;br /&gt;
(Please Update Me)&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
* [http://source.android.com/documentation Android Documentation]&lt;br /&gt;
* [http://www.arm.com/documentation/ ARM Documentation], (keywords: armv4t, armv5t, armv5te, arm920t, arm926ej-s)&lt;br /&gt;
* [http://www.arm.com/miscPDFs/9658.pdf ARM Assembly Language Programming]&lt;br /&gt;
* [http://www.cse.unsw.edu.au/~cs3221/labs/assembler-intro.pdf An Introduction to the GNU Assembler]&lt;br /&gt;
* [http://www.heyrick.co.uk/assembler/apcsintro.html ARM Procedure Call Standard], [http://en.wikipedia.org/wiki/Calling_convention#ARM ARM Calling Conventions]&lt;br /&gt;
&lt;br /&gt;
== Instruction Set References ==&lt;br /&gt;
* [http://www.arm.com/miscPDFs/14128.pdf ARM Architecture Reference Manual], The definitive ISA documentation&lt;br /&gt;
* [http://www.simplemachines.it/doc/QRC0001H_rvct_v2.1_arm.pdf ARM Instruction Set Quick Reference Card]&lt;br /&gt;
* [http://infocenter.arm.com/help/topic/com.arm.doc.qrc0001l/QRC0001_UAL.pdf ARM and Thumb -2 Instruction Set Quick Reference Card]&lt;br /&gt;
* [http://infocenter.arm.com/help/topic/com.arm.doc.dvi0025b/DVI0025.pdf ARMv4T] (See section 1.4.13)&lt;br /&gt;
* [http://infocenter.arm.com/help/topic/com.arm.doc.dvi0014a/DVI0014A_ARM10T_PO.pdf ARMv5T] (See section 4.16)&lt;br /&gt;
* [http://www.arm.com/pdfs/ARM-DSP.pdf ARM DSP Enhanced Instruction Set]&lt;br /&gt;
* [http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042c/IHI0042C_aapcs.pdf Procedure Call Standard for the ARM Architecture]&lt;br /&gt;
&lt;br /&gt;
== Hardware Reference ==&lt;br /&gt;
&lt;br /&gt;
* [[Neo1973 Hardware]]&lt;br /&gt;
* [[Neo FreeRunner GTA02 Hardware]]&lt;br /&gt;
&lt;br /&gt;
== Communities ==&lt;br /&gt;
* [http://source.android.com/discuss Android Public Mailing Lists]&lt;br /&gt;
** Specifically, [http://groups.google.com/group/android-porting android-porting]&lt;br /&gt;
* [http://lists.openmoko.org/mailman/listinfo OpenMoko Mailing Lists]&lt;br /&gt;
** Specifically, [http://lists.openmoko.org/mailman/listinfo/openmoko-kernel openmoko-kernel]&lt;br /&gt;
* [http://forum.koolu.org/viewforum.php?f=10 Android on FreeRunner] at KoolU.com&lt;br /&gt;
* [[Openmoko Local Groups]]&lt;br /&gt;
* [[Openmoko:Community_Portal]]&lt;br /&gt;
&lt;br /&gt;
= See also =&lt;br /&gt;
&lt;br /&gt;
* [[Debug_Board]]&lt;br /&gt;
&lt;br /&gt;
= External Links =&lt;br /&gt;
== Youtube video /Android on FreeRunner ==&lt;br /&gt;
&lt;br /&gt;
[http://tw.youtube.com/watch?v=m4NbsLmF9j0 Video 1]&lt;br /&gt;
&lt;br /&gt;
[http://tw.youtube.com/watch?v=r6Op-7tNTiw Video 2]&lt;br /&gt;
&lt;br /&gt;
== Headline text ==&lt;br /&gt;
&lt;br /&gt;
[[Category:Distributions]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Video_Player</id>
		<title>Video Player</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Video_Player"/>
				<updated>2008-12-02T15:52:33Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: /* Playback helper script */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Not a proper 'app' page, just an overview&lt;br /&gt;
&lt;br /&gt;
=FreeRunner=&lt;br /&gt;
It plays mpeg-4 320x240 stretched fullscreen, however other formats will require transcoding.&lt;br /&gt;
&lt;br /&gt;
==Playback==&lt;br /&gt;
The default media player doesn't seem to handle video very well, but mplayer does OK.&lt;br /&gt;
&lt;br /&gt;
=== Using standard Mplayer ===&lt;br /&gt;
It can be installed with the following command:&lt;br /&gt;
opkg install mplayer&lt;br /&gt;
&lt;br /&gt;
=== Using the Glamo XV acceleration ===&lt;br /&gt;
TBD, refer to: http://unadventure.wordpress.com/2008/06/08/accelerating-in-my-pocket/&lt;br /&gt;
&lt;br /&gt;
=== Controlling MPlayer from the Touchscreen ===&lt;br /&gt;
Create a file in /home/root/.mplayer/input.conf with this content:&lt;br /&gt;
 # Freerunner Optimizations&lt;br /&gt;
 MOUSE_BTN0 vo_fullscreen&lt;br /&gt;
 MOUSE_BTN0_DBL q&lt;br /&gt;
Now, you can toggle the fullscreen by tapping the screen and exit from mplayer by touble-tapping the LCD.&lt;br /&gt;
Accelerometers or hardware buttons could help more.&lt;br /&gt;
&lt;br /&gt;
=== Playback helper script ===&lt;br /&gt;
&lt;br /&gt;
Create a script named 'vidplay' in your home directory with the following commands:&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 xrandr -display :0 --output default --mode 240x320&lt;br /&gt;
 mplayer -vo fbdev &amp;quot;$1&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
 xrandr -display :0 --output default --mode 480x640&lt;br /&gt;
 reset&lt;br /&gt;
&lt;br /&gt;
Make the script executable:&lt;br /&gt;
 chmod 755 /home/root/vidplay&lt;br /&gt;
&lt;br /&gt;
Known issues with this approach:&lt;br /&gt;
*The output isn't in a proper window, so background stuff sometimes flickers through.&lt;br /&gt;
*When done on the local terminal the keyboard is obscured so you can't exit.  SSH works quite well.&lt;br /&gt;
*240x320 mode has some quirks:&lt;br /&gt;
**The gamma/brightness/contrast is weird.  Encoding adjustments into the media is a workaround.&lt;br /&gt;
**Vertical banding (as seen in landscape position) is quite noticeable.&lt;br /&gt;
*Using CTRL-C to exit vidplay doesn't reset the screen; use 'q' instead.&lt;br /&gt;
&lt;br /&gt;
Despite these issues, it proves that the horsepower is there and it can be done.&lt;br /&gt;
&lt;br /&gt;
=== Another derivated method : works like a charm for me ! ===&lt;br /&gt;
No ssh, no xrandr, no script needed, juste mplayer and qwerty keyboard :&lt;br /&gt;
Like it's said in the &amp;quot;Getting started with FreeRunner&amp;quot; wiki page, you have to install the full qwerty keyboard, see [http://www.ginguppin.de/node/15 these instructions].&lt;br /&gt;
After that, you can go to Terminal and type :&lt;br /&gt;
mplayer vid/my_video.avi&lt;br /&gt;
Mplayer starts in full screen, if your video is optimized like below 240x320 it's work like a charm and to quit just use the power button.&lt;br /&gt;
&lt;br /&gt;
Only issue : You can't forward/backward/pause...&lt;br /&gt;
&lt;br /&gt;
==Example - Big Buck Bunny==&lt;br /&gt;
===PC===&lt;br /&gt;
Download the source (no need to start with the giant full resolution version)&lt;br /&gt;
cd /tmp&lt;br /&gt;
wget http://proyectos.pixelamigo.com/open/movies/BigBuckBunny/unofficial_PSP/big_buck_bunny_480p_AVC_FW33.mp4&lt;br /&gt;
&lt;br /&gt;
Test the video filter settings (-vf crop=...) often omitting the last &amp;quot;rotate=2&amp;quot; (Optional, but recommended for long videos).&lt;br /&gt;
mplayer big_buck_bunny_480p_AVC_FW33.mp4 -vf crop=720:480:-1:-1,scale=320:-2,rotate=2 -zoom&lt;br /&gt;
&lt;br /&gt;
Transcode it&lt;br /&gt;
mencoder big_buck_bunny_480p_AVC_FW33.mp4 -ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=300 \&lt;br /&gt;
-vf crop=720:480:0:0,scale=320:-2,eq2=1.2:0.5:-0.25,rotate=2 -oac mp3lame -lameopts br=64:cbr \&lt;br /&gt;
-o big_buck_bunny_320.avi&lt;br /&gt;
&lt;br /&gt;
or if it doesn't work(for me the image and the colours aren't ok) replace scale=320:-2 by scale=320:240&lt;br /&gt;
&lt;br /&gt;
=== FreeRunner===&lt;br /&gt;
Transfer the resulting 27M file from the PC to the FreeRunner's MicroSD card&lt;br /&gt;
scp user@192.168.0.200:/tmp/big_buck_bunny_320.avi /media/card&lt;br /&gt;
&lt;br /&gt;
Play it&lt;br /&gt;
/home/root/vidplay /media/card/big_buck_bunny_320.avi&lt;br /&gt;
&lt;br /&gt;
==Other Info==&lt;br /&gt;
&lt;br /&gt;
To rotate the screen:&lt;br /&gt;
xrandr -o 0&lt;br /&gt;
xrandr -o 1&lt;br /&gt;
&lt;br /&gt;
=Neo1973=&lt;br /&gt;
&lt;br /&gt;
Video is problematic on [[Neo 1973]].&lt;br /&gt;
&lt;br /&gt;
On the minus side.&lt;br /&gt;
*The CPU is certainly not fast enough to decode 480*640 video.&lt;br /&gt;
*The display is portrait, which means that an additional rotation step is needed for most landscape video, adding to CPU usage.&lt;br /&gt;
*Downloading an arbitrary video, and playing it without transcoding it, then playing it later will not be possible.&lt;br /&gt;
However.&lt;br /&gt;
&lt;br /&gt;
On the positive side.&lt;br /&gt;
*The LCD can be switched to a 240*320 stretch mode, which is much less taxing.&lt;br /&gt;
*Re-encoding video to rotate it, and scale to 320*240, and encoding with a low CPU use codec such as MPEG-1 may well make half-screen doubled videos playable at 25fps.&lt;br /&gt;
*If not, then it almost certainly will be possible at 12fps.&lt;br /&gt;
&lt;br /&gt;
==Mode Switching==&lt;br /&gt;
For switching between QVGA and VGA mode do the following with a compatible kernel:&lt;br /&gt;
chvt 4 &amp;amp;&amp;amp; echo qvga-normal &amp;gt; /sys/devices/platform/s3c24xx-spi-gpio.1/spi0.0/state &amp;amp;&amp;amp; fbset qvga&lt;br /&gt;
vice versa:&lt;br /&gt;
echo normal &amp;gt; /sys/devices/platform/s3c24xx-spi-gpio.1/spi0.0/state &amp;amp;&amp;amp; fbset vga &amp;amp;&amp;amp; chvt 3&lt;br /&gt;
taken from http://lists.openmoko.org/pipermail/neo1973-hardware/2007-October/000267.html&lt;br /&gt;
&lt;br /&gt;
To avoid console blanking type&lt;br /&gt;
echo -e '\033[9;0]' &amp;gt; /dev/ttyX&lt;br /&gt;
where 'X' is your terminal number - for example if you did chvt 4 then /dev/tty4 is your terminal.&lt;br /&gt;
&lt;br /&gt;
To avoid kernel output in vt do&lt;br /&gt;
echo 0 &amp;gt; /proc/sys/kernel/printk&lt;br /&gt;
&lt;br /&gt;
==User Reports==&lt;br /&gt;
From a conversation with XorA, in the [irc://freenode.com/#openmoko IRC channel].&lt;br /&gt;
&lt;br /&gt;
400kbps mpeg4 works on a 200Mhz neo (without sound) on prerotated 240*320 ffmpeg codec videos, at 25fps, using stock mplayer.&lt;br /&gt;
&lt;br /&gt;
With sound, this drops to 18fps.&lt;br /&gt;
&lt;br /&gt;
There are optimisations for mplayer that look promising to get 25fps with sound.&lt;br /&gt;
&lt;br /&gt;
==Playback using 480x640 / 640x480==&lt;br /&gt;
&lt;br /&gt;
To get best speed on GTA01 (best size-speed-resolution-codec trade-off I could find - doesn't mean it's perfect though) crosscode using:&lt;br /&gt;
mencoder &amp;lt;sourcefile&amp;gt; -o &amp;lt;targetfile.avi&amp;gt; -ofps 13 -vf scale -zoom -xy 240 -af channels=1:0:0:1:0 -oac lavc -ovc lavc -lavcopts acodec=mp3:vcodec=h263p:autoaspect=1:vbitrate=300:abitrate=32&lt;br /&gt;
&lt;br /&gt;
Also working okay:&lt;br /&gt;
mencoder &amp;lt;sourcefile&amp;gt; -o &amp;lt;targetfile.avi&amp;gt; -ofps 13 -vf scale -zoom -xy 352 -af channels=1:0:0:1:0 -oac lavc -ovc lavc -lavcopts acodec=mp3:vcodec=h263p:autoaspect=1:vbitrate=200:abitrate=32&lt;br /&gt;
&lt;br /&gt;
You can playback the file using:&lt;br /&gt;
mplayer -sws 0 -nodouble -vo sdl -fs -framedrop &amp;lt;tagetfile.avi&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also want to use:&lt;br /&gt;
-autosync 30 -vf scale -zoom -xy 640 -vf rotate=1&lt;br /&gt;
&lt;br /&gt;
=Transcoding=&lt;br /&gt;
To make your videos/DVDs compatible use mencoder like this:&lt;br /&gt;
Find out the -vf cropping parameters with&lt;br /&gt;
mplayer input.avi -vf cropdetect&lt;br /&gt;
let it run a few seconds and insert the given cropping values into this command&lt;br /&gt;
mencoder input.avi -ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=300 -vf crop=xx:xx:xx:xx,rotate=2,scale=-2:320 -oac mp3lame -lameopts br=64:cbr -o output2.avi&lt;br /&gt;
To encode a DVD first find out the -vf cropping parameters with&lt;br /&gt;
mplayer -dvd-device /path/to/dvd dvd:// -vf cropdetect -sb 50000000&lt;br /&gt;
let it run a few seconds and insert the given cropping values into this command&lt;br /&gt;
mencoder -dvd-device /path/to/dvd dvd:// -ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=300 -vf crop=xx:xx:xx:xx,rotate=2,scale=-2:320 -oac mp3lame -lameopts br=64:cbr -o output.avi&lt;br /&gt;
This will rotate the video/DVD, scale it and encode it to mpeg4 with a bitrate of 300kBit/s. Works like a charm.&lt;br /&gt;
&lt;br /&gt;
=Frontend=&lt;br /&gt;
==gnome-mplayer==&lt;br /&gt;
'''Source Code released: No'''&lt;br /&gt;
&lt;br /&gt;
As a nice GUI gnome-mplayer can be recommended.&lt;br /&gt;
&lt;br /&gt;
On Debian you can install it from repository:&lt;br /&gt;
# apt-get install gnome-mplayer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;onlyinclude&amp;gt;&lt;br /&gt;
{{ApplicationBox|&lt;br /&gt;
Name=[[Video Player|mplayer]]|&lt;br /&gt;
Description=The popular command line video player.|&lt;br /&gt;
Screenshot=Mplayer.png|&lt;br /&gt;
Homepage=http://www.mplayerhq.hu|&lt;br /&gt;
&lt;br /&gt;
TestedOn=Om 2008.8 (default repository)|&lt;br /&gt;
PackageName=mplayer|&lt;br /&gt;
Source Code released=No|&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DeforaOS Player ==&lt;br /&gt;
'''Source Code released: Yes'''&lt;br /&gt;
&lt;br /&gt;
It provides another GUI to mplayer.&lt;br /&gt;
&lt;br /&gt;
It was released first there:&lt;br /&gt;
http://people.defora.org/~khorben/share/Openmoko/deforaos-player_0.1.0_armv4t.ipk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;onlyinclude&amp;gt;&lt;br /&gt;
{{ApplicationBox|&lt;br /&gt;
Name=[[DeforaOS Player|deforaos-player]]|&lt;br /&gt;
Description=The DeforaOS media player, a frontend to mplayer|&lt;br /&gt;
Screenshot=Player.png|&lt;br /&gt;
Homepage=http://www.defora.org/os/project/display/336/Player|&lt;br /&gt;
&lt;br /&gt;
TestedOn=Om 2008.8|&lt;br /&gt;
PackageName=deforaos-player|&lt;br /&gt;
Source Code released=Yes|&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Video Applications]]&lt;br /&gt;
[[Category:Debian]]&lt;br /&gt;
[[Category:Om 2008.8]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Video_Player</id>
		<title>Video Player</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Video_Player"/>
				<updated>2008-12-02T15:52:05Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: /* Controlling MPlayer from the Touchscreen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Not a proper 'app' page, just an overview&lt;br /&gt;
&lt;br /&gt;
=FreeRunner=&lt;br /&gt;
It plays mpeg-4 320x240 stretched fullscreen, however other formats will require transcoding.&lt;br /&gt;
&lt;br /&gt;
==Playback==&lt;br /&gt;
The default media player doesn't seem to handle video very well, but mplayer does OK.&lt;br /&gt;
&lt;br /&gt;
=== Using standard Mplayer ===&lt;br /&gt;
It can be installed with the following command:&lt;br /&gt;
opkg install mplayer&lt;br /&gt;
&lt;br /&gt;
=== Using the Glamo XV acceleration ===&lt;br /&gt;
TBD, refer to: http://unadventure.wordpress.com/2008/06/08/accelerating-in-my-pocket/&lt;br /&gt;
&lt;br /&gt;
=== Controlling MPlayer from the Touchscreen ===&lt;br /&gt;
Create a file in /home/root/.mplayer/input.conf with this content:&lt;br /&gt;
 # Freerunner Optimizations&lt;br /&gt;
 MOUSE_BTN0 vo_fullscreen&lt;br /&gt;
 MOUSE_BTN0_DBL q&lt;br /&gt;
Now, you can toggle the fullscreen by tapping the screen and exit from mplayer by touble-tapping the LCD.&lt;br /&gt;
Accelerometers or hardware buttons could help more.&lt;br /&gt;
&lt;br /&gt;
=== Playback helper script ===&lt;br /&gt;
&lt;br /&gt;
Create a script named 'vidplay' in your home directory with the following commands:&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
xrandr -display :0 --output default --mode 240x320&lt;br /&gt;
mplayer -vo fbdev &amp;quot;$1&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
xrandr -display :0 --output default --mode 480x640&lt;br /&gt;
reset&lt;br /&gt;
&lt;br /&gt;
Make the script executable:&lt;br /&gt;
chmod 755 /home/root/vidplay&lt;br /&gt;
&lt;br /&gt;
Known issues with this approach:&lt;br /&gt;
*The output isn't in a proper window, so background stuff sometimes flickers through.&lt;br /&gt;
*When done on the local terminal the keyboard is obscured so you can't exit.  SSH works quite well.&lt;br /&gt;
*240x320 mode has some quirks:&lt;br /&gt;
**The gamma/brightness/contrast is weird.  Encoding adjustments into the media is a workaround.&lt;br /&gt;
**Vertical banding (as seen in landscape position) is quite noticeable.&lt;br /&gt;
*Using CTRL-C to exit vidplay doesn't reset the screen; use 'q' instead.&lt;br /&gt;
&lt;br /&gt;
Despite these issues, it proves that the horsepower is there and it can be done.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Another derivated method : works like a charm for me ! ===&lt;br /&gt;
No ssh, no xrandr, no script needed, juste mplayer and qwerty keyboard :&lt;br /&gt;
Like it's said in the &amp;quot;Getting started with FreeRunner&amp;quot; wiki page, you have to install the full qwerty keyboard, see [http://www.ginguppin.de/node/15 these instructions].&lt;br /&gt;
After that, you can go to Terminal and type :&lt;br /&gt;
mplayer vid/my_video.avi&lt;br /&gt;
Mplayer starts in full screen, if your video is optimized like below 240x320 it's work like a charm and to quit just use the power button.&lt;br /&gt;
&lt;br /&gt;
Only issue : You can't forward/backward/pause...&lt;br /&gt;
&lt;br /&gt;
==Example - Big Buck Bunny==&lt;br /&gt;
===PC===&lt;br /&gt;
Download the source (no need to start with the giant full resolution version)&lt;br /&gt;
cd /tmp&lt;br /&gt;
wget http://proyectos.pixelamigo.com/open/movies/BigBuckBunny/unofficial_PSP/big_buck_bunny_480p_AVC_FW33.mp4&lt;br /&gt;
&lt;br /&gt;
Test the video filter settings (-vf crop=...) often omitting the last &amp;quot;rotate=2&amp;quot; (Optional, but recommended for long videos).&lt;br /&gt;
mplayer big_buck_bunny_480p_AVC_FW33.mp4 -vf crop=720:480:-1:-1,scale=320:-2,rotate=2 -zoom&lt;br /&gt;
&lt;br /&gt;
Transcode it&lt;br /&gt;
mencoder big_buck_bunny_480p_AVC_FW33.mp4 -ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=300 \&lt;br /&gt;
-vf crop=720:480:0:0,scale=320:-2,eq2=1.2:0.5:-0.25,rotate=2 -oac mp3lame -lameopts br=64:cbr \&lt;br /&gt;
-o big_buck_bunny_320.avi&lt;br /&gt;
&lt;br /&gt;
or if it doesn't work(for me the image and the colours aren't ok) replace scale=320:-2 by scale=320:240&lt;br /&gt;
&lt;br /&gt;
=== FreeRunner===&lt;br /&gt;
Transfer the resulting 27M file from the PC to the FreeRunner's MicroSD card&lt;br /&gt;
scp user@192.168.0.200:/tmp/big_buck_bunny_320.avi /media/card&lt;br /&gt;
&lt;br /&gt;
Play it&lt;br /&gt;
/home/root/vidplay /media/card/big_buck_bunny_320.avi&lt;br /&gt;
&lt;br /&gt;
==Other Info==&lt;br /&gt;
&lt;br /&gt;
To rotate the screen:&lt;br /&gt;
xrandr -o 0&lt;br /&gt;
xrandr -o 1&lt;br /&gt;
&lt;br /&gt;
=Neo1973=&lt;br /&gt;
&lt;br /&gt;
Video is problematic on [[Neo 1973]].&lt;br /&gt;
&lt;br /&gt;
On the minus side.&lt;br /&gt;
*The CPU is certainly not fast enough to decode 480*640 video.&lt;br /&gt;
*The display is portrait, which means that an additional rotation step is needed for most landscape video, adding to CPU usage.&lt;br /&gt;
*Downloading an arbitrary video, and playing it without transcoding it, then playing it later will not be possible.&lt;br /&gt;
However.&lt;br /&gt;
&lt;br /&gt;
On the positive side.&lt;br /&gt;
*The LCD can be switched to a 240*320 stretch mode, which is much less taxing.&lt;br /&gt;
*Re-encoding video to rotate it, and scale to 320*240, and encoding with a low CPU use codec such as MPEG-1 may well make half-screen doubled videos playable at 25fps.&lt;br /&gt;
*If not, then it almost certainly will be possible at 12fps.&lt;br /&gt;
&lt;br /&gt;
==Mode Switching==&lt;br /&gt;
For switching between QVGA and VGA mode do the following with a compatible kernel:&lt;br /&gt;
chvt 4 &amp;amp;&amp;amp; echo qvga-normal &amp;gt; /sys/devices/platform/s3c24xx-spi-gpio.1/spi0.0/state &amp;amp;&amp;amp; fbset qvga&lt;br /&gt;
vice versa:&lt;br /&gt;
echo normal &amp;gt; /sys/devices/platform/s3c24xx-spi-gpio.1/spi0.0/state &amp;amp;&amp;amp; fbset vga &amp;amp;&amp;amp; chvt 3&lt;br /&gt;
taken from http://lists.openmoko.org/pipermail/neo1973-hardware/2007-October/000267.html&lt;br /&gt;
&lt;br /&gt;
To avoid console blanking type&lt;br /&gt;
echo -e '\033[9;0]' &amp;gt; /dev/ttyX&lt;br /&gt;
where 'X' is your terminal number - for example if you did chvt 4 then /dev/tty4 is your terminal.&lt;br /&gt;
&lt;br /&gt;
To avoid kernel output in vt do&lt;br /&gt;
echo 0 &amp;gt; /proc/sys/kernel/printk&lt;br /&gt;
&lt;br /&gt;
==User Reports==&lt;br /&gt;
From a conversation with XorA, in the [irc://freenode.com/#openmoko IRC channel].&lt;br /&gt;
&lt;br /&gt;
400kbps mpeg4 works on a 200Mhz neo (without sound) on prerotated 240*320 ffmpeg codec videos, at 25fps, using stock mplayer.&lt;br /&gt;
&lt;br /&gt;
With sound, this drops to 18fps.&lt;br /&gt;
&lt;br /&gt;
There are optimisations for mplayer that look promising to get 25fps with sound.&lt;br /&gt;
&lt;br /&gt;
==Playback using 480x640 / 640x480==&lt;br /&gt;
&lt;br /&gt;
To get best speed on GTA01 (best size-speed-resolution-codec trade-off I could find - doesn't mean it's perfect though) crosscode using:&lt;br /&gt;
mencoder &amp;lt;sourcefile&amp;gt; -o &amp;lt;targetfile.avi&amp;gt; -ofps 13 -vf scale -zoom -xy 240 -af channels=1:0:0:1:0 -oac lavc -ovc lavc -lavcopts acodec=mp3:vcodec=h263p:autoaspect=1:vbitrate=300:abitrate=32&lt;br /&gt;
&lt;br /&gt;
Also working okay:&lt;br /&gt;
mencoder &amp;lt;sourcefile&amp;gt; -o &amp;lt;targetfile.avi&amp;gt; -ofps 13 -vf scale -zoom -xy 352 -af channels=1:0:0:1:0 -oac lavc -ovc lavc -lavcopts acodec=mp3:vcodec=h263p:autoaspect=1:vbitrate=200:abitrate=32&lt;br /&gt;
&lt;br /&gt;
You can playback the file using:&lt;br /&gt;
mplayer -sws 0 -nodouble -vo sdl -fs -framedrop &amp;lt;tagetfile.avi&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also want to use:&lt;br /&gt;
-autosync 30 -vf scale -zoom -xy 640 -vf rotate=1&lt;br /&gt;
&lt;br /&gt;
=Transcoding=&lt;br /&gt;
To make your videos/DVDs compatible use mencoder like this:&lt;br /&gt;
Find out the -vf cropping parameters with&lt;br /&gt;
mplayer input.avi -vf cropdetect&lt;br /&gt;
let it run a few seconds and insert the given cropping values into this command&lt;br /&gt;
mencoder input.avi -ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=300 -vf crop=xx:xx:xx:xx,rotate=2,scale=-2:320 -oac mp3lame -lameopts br=64:cbr -o output2.avi&lt;br /&gt;
To encode a DVD first find out the -vf cropping parameters with&lt;br /&gt;
mplayer -dvd-device /path/to/dvd dvd:// -vf cropdetect -sb 50000000&lt;br /&gt;
let it run a few seconds and insert the given cropping values into this command&lt;br /&gt;
mencoder -dvd-device /path/to/dvd dvd:// -ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=300 -vf crop=xx:xx:xx:xx,rotate=2,scale=-2:320 -oac mp3lame -lameopts br=64:cbr -o output.avi&lt;br /&gt;
This will rotate the video/DVD, scale it and encode it to mpeg4 with a bitrate of 300kBit/s. Works like a charm.&lt;br /&gt;
&lt;br /&gt;
=Frontend=&lt;br /&gt;
==gnome-mplayer==&lt;br /&gt;
'''Source Code released: No'''&lt;br /&gt;
&lt;br /&gt;
As a nice GUI gnome-mplayer can be recommended.&lt;br /&gt;
&lt;br /&gt;
On Debian you can install it from repository:&lt;br /&gt;
# apt-get install gnome-mplayer&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;onlyinclude&amp;gt;&lt;br /&gt;
{{ApplicationBox|&lt;br /&gt;
Name=[[Video Player|mplayer]]|&lt;br /&gt;
Description=The popular command line video player.|&lt;br /&gt;
Screenshot=Mplayer.png|&lt;br /&gt;
Homepage=http://www.mplayerhq.hu|&lt;br /&gt;
&lt;br /&gt;
TestedOn=Om 2008.8 (default repository)|&lt;br /&gt;
PackageName=mplayer|&lt;br /&gt;
Source Code released=No|&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== DeforaOS Player ==&lt;br /&gt;
'''Source Code released: Yes'''&lt;br /&gt;
&lt;br /&gt;
It provides another GUI to mplayer.&lt;br /&gt;
&lt;br /&gt;
It was released first there:&lt;br /&gt;
http://people.defora.org/~khorben/share/Openmoko/deforaos-player_0.1.0_armv4t.ipk&lt;br /&gt;
&lt;br /&gt;
&amp;lt;onlyinclude&amp;gt;&lt;br /&gt;
{{ApplicationBox|&lt;br /&gt;
Name=[[DeforaOS Player|deforaos-player]]|&lt;br /&gt;
Description=The DeforaOS media player, a frontend to mplayer|&lt;br /&gt;
Screenshot=Player.png|&lt;br /&gt;
Homepage=http://www.defora.org/os/project/display/336/Player|&lt;br /&gt;
&lt;br /&gt;
TestedOn=Om 2008.8|&lt;br /&gt;
PackageName=deforaos-player|&lt;br /&gt;
Source Code released=Yes|&lt;br /&gt;
&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Video Applications]]&lt;br /&gt;
[[Category:Debian]]&lt;br /&gt;
[[Category:Om 2008.8]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:Seanmcneil3</id>
		<title>User:Seanmcneil3</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:Seanmcneil3"/>
				<updated>2008-12-02T03:12:50Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: /* Images */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Android on Freerunner ==&lt;br /&gt;
&lt;br /&gt;
{{Languages|Android on Freerunner}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Google has released their open source version of the Android phone software distribution. In order to use it on the Freerunner, a number of patches need to be applied and a compiler with armv4 java exception support needs to be used to compile the software.&lt;br /&gt;
&lt;br /&gt;
== Compiler suite ==&lt;br /&gt;
&lt;br /&gt;
Android is a little picky about the version of gcc compiler. It also requires some java exception support that isn't available for armv4 without a minor modification. The following tools are what I use to build Android:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Binutils 2.18 ===&lt;br /&gt;
&lt;br /&gt;
At one time I had some armv5t code that was compiled into Android which would cause the linker to generate these blx instructions which fail on armv4. I'm not sure if this is still necessary, but I still have the following change applied to binutils:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
diff -urN binutils-2.18-orig/bfd/elf32-arm.c binutils-2.18/bfd/elf32-arm.c&lt;br /&gt;
--- binutils-2.18-orig/bfd/elf32-arm.c	2007-08-07 02:59:23.000000000 +0700&lt;br /&gt;
+++ binutils-2.18/bfd/elf32-arm.c	2008-03-15 11:30:17.000000000 +0700&lt;br /&gt;
@@ -3093,8 +3093,8 @@&lt;br /&gt;
 static void check_use_blx(struct elf32_arm_link_hash_table *globals)&lt;br /&gt;
 {&lt;br /&gt;
   if (bfd_elf_get_obj_attr_int (globals-&amp;gt;obfd, OBJ_ATTR_PROC,&lt;br /&gt;
-				Tag_CPU_arch) &amp;gt; 2)&lt;br /&gt;
-    globals-&amp;gt;use_blx = 1;&lt;br /&gt;
+				Tag_CPU_arch) &amp;gt;= TAG_CPU_ARCH_V5T)&lt;br /&gt;
+    globals-&amp;gt;use_blx = 0;&lt;br /&gt;
 }&lt;br /&gt;
 &lt;br /&gt;
 bfd_boolean&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
configure --prefix={devel path}/android/cross --target=arm-eabi&lt;br /&gt;
&lt;br /&gt;
=== gcc 4.2.4 with gcc41-java-arm4.patch ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
configure   --prefix={devel path}/android/cross --target=arm-eabi --with-arch=armv4t --enable-shared --enable-threads --disable-nls --disable-libmudflap --enable-target-optspace --with-abi=aapcs --enable-multilib --disable-libssp --disable-libstdcxx --enable-languages=c,c++&lt;br /&gt;
&lt;br /&gt;
=== java-6-sun ===&lt;br /&gt;
&lt;br /&gt;
This is the standard Linux package available for most (all?) distributions.&lt;br /&gt;
&lt;br /&gt;
== Patches ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Coming soon. I've posted a number of them on the devel mailing list so far. Eventually, I expect to provide everything necessary for people to build Android for themselves.&lt;br /&gt;
&lt;br /&gt;
== Images ==&lt;br /&gt;
&lt;br /&gt;
I have placed an older 2.6.26 kernel with Android support at:&lt;br /&gt;
&lt;br /&gt;
   [http://people.openmoko.org/sean_mcneil/uImage-android uImage-android]&lt;br /&gt;
&lt;br /&gt;
And also a stable-tracking testing 2.6.28 kernel image at:&lt;br /&gt;
&lt;br /&gt;
   http://people.openmoko.org/sean_mcneil/uImage-tracking uImage-tracking]&lt;br /&gt;
&lt;br /&gt;
I have put up a jffs2 image that replaces rootfs on the Freerunner at:&lt;br /&gt;
&lt;br /&gt;
   [http://people.openmoko.org/sean_mcneil/androidfs.jffs2 androidfs.jffs2]&lt;br /&gt;
&lt;br /&gt;
Warning!!! Installation of Android requires loading a new kernel and rootfs image onto your phone. I have not had time to produce a version that runs completely off an sdcard.&lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
&lt;br /&gt;
As noted above, this installation requires you to wipe out the existing kernel and rootfs in NAND on your Freerunner. You also must have an SDCARD and it needs to be configured with two (2) primary partitions: First is VFAT/MSDOS (16 or 32) which acts as the /sdcard storage area for pictures, movies, music, etc. and the Second is an ext3 primary partition for use of internal Android /data area to store settings, caches, etc.&lt;br /&gt;
&lt;br /&gt;
The first thing I suggest is to setup an SDCARD. You can flash the NAND first, but you must have an SDCARD with two partitions as stated before you'll be able to boot. I use a 2GB card which I have split in half. fdisk shows me:&lt;br /&gt;
&lt;br /&gt;
    /dev/mmcblk0p1               1        2454      996310    6  FAT16&amp;lt;br&amp;gt;&lt;br /&gt;
    /dev/mmcblk0p2            2455        4908      996324   83  Linux&lt;br /&gt;
&lt;br /&gt;
formatted as&lt;br /&gt;
&lt;br /&gt;
    sudo mkfs.vfat /dev/mmcblk0p1&amp;lt;br&amp;gt;&lt;br /&gt;
    sudo mkfs.ext3 /dev/mmcblk0p2&lt;br /&gt;
&lt;br /&gt;
There is no need to populate the ext3 partition at all. The VFAT partition can be populated with media content if you so desire.&lt;br /&gt;
&lt;br /&gt;
With your SDCARD all set, you are ready to flash the kernel and rootfs:&lt;br /&gt;
&lt;br /&gt;
    sudo {path_to}/dfu-util -d 0x1d50:0x5119 -a kernel -D uImage-android&amp;lt;br&amp;gt;&lt;br /&gt;
    sudo {path_to}/dfu-util -d 0x1d50:0x5119 -a rootfs -D androidfs.jffs2&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
&lt;br /&gt;
To assist in debugging and to gain shell access to the phone with Android, you can &lt;br /&gt;
&lt;br /&gt;
   [http://people.openmoko.org/sean_mcneil/adb adb]&lt;br /&gt;
&lt;br /&gt;
You should be able to connect to the phone as long as you start it up with the USB connected to your host. I don't think it will work if you plug it in after starting. Some helpful commands are:&lt;br /&gt;
&lt;br /&gt;
    ADBHOST=neo ./adb logcat           - like a tail -f of the android log&lt;br /&gt;
    ADBHOST=neo ./adb logcat -b radio  - same as above for the radio logs&lt;br /&gt;
    ADBHOST=neo ./adb shell            - bring up a command shell to the phone&lt;br /&gt;
    ADBHOST=neo ./adb kill-server      - kill the background server on the host&lt;br /&gt;
&lt;br /&gt;
Note: ADBHOST=neo assumes you have neo in your hosts file to point to the ip of the phone (192.168.0.202). Otherwise prefix the commands with &amp;quot;ADBHOST=192.168.0.202 ./adb [...]&amp;quot; It seems that simply adding IP to /etc/hosts doesn't work on Ubuntu, using IP address (192.168.0.202) instead neo will save your time. If you cannot to the device run &amp;quot;adb kill-server&amp;quot; before trying other commands.&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
&lt;br /&gt;
This version of the linux kernel will not successfully wake from suspend mode. Your battery life will be significantly lowered because of this and the phone will lock up unless you setup the phones screen timeout to never.&lt;br /&gt;
&lt;br /&gt;
This version of the kernel also uses a keypad hack. The buttons layout is as follows:&lt;br /&gt;
&lt;br /&gt;
    Aux left-hand upper button is the &amp;quot;back&amp;quot; key.&lt;br /&gt;
    Power button is:&lt;br /&gt;
        menu button when pushed quickly,&lt;br /&gt;
        end button when held for more than a second and released,&lt;br /&gt;
        power-off if held for 10 seconds.&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/GTA03</id>
		<title>GTA03</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/GTA03"/>
				<updated>2008-12-01T03:08:43Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: /* GTA03 Specifications */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;GTA03 is the codename of a phone that is currently in development by Openmoko. For more information about other phones in development, visit [[Phone Development]]. The GTA03 will be based on a more advanced system-on-a-chip of same family as the [[Neo FreeRunner]] ([[GTA02 revisions|GTA02]]). It will presumably differ from it by having EDGE and a camera. GTA03 will not include support for 3G networks.&lt;br /&gt;
&lt;br /&gt;
{{Speculations}}&lt;br /&gt;
&lt;br /&gt;
== GTA03 Specifications ==&lt;br /&gt;
The GTA03 will be based on the [[GTA02 revisions|GTA02]] introducing several major hardware changes&lt;br /&gt;
&lt;br /&gt;
New:&lt;br /&gt;
* New case design&lt;br /&gt;
* New GSM chip (2.75/EDGE): [http://www.cinterion.com/en/ktcm/modules_terminals/gerneral_purpose/Scalable_platform/MC75i_TC63i_TC65i Cinterion, (Siemens) MC75i]&lt;br /&gt;
* New WiFi/Bluetooth chip: [http://www.marvell.com/press/pressNewsDisplay.do?releaseID=603 Marvell 88W8688]&lt;br /&gt;
* Different Battery ([[Wishlist/LiFePO4 Battery]] based? - for long life?)&lt;br /&gt;
* Camera&lt;br /&gt;
* SoC: [http://semicon.samsung.de/applicationprocessors/tracking/aboutS3C6410.aspx s3c6410]&lt;br /&gt;
* GPS: [http://www.u-blox.com/technology/u-blox5/index.html ANTARIS 5]&lt;br /&gt;
Removed:&lt;br /&gt;
* SMEDIA Glamo&lt;br /&gt;
&lt;br /&gt;
== GTA03 Evaluation Board ==&lt;br /&gt;
* AUG.11.2008:  the 25 first GTA03EVB arrived in office&lt;br /&gt;
* Aug.12.2008:  U-boot ported to GTA03EVB (Matt)&lt;br /&gt;
* Aug.12.2008:  The core can run at 533 MHz with 133MHz SDRAM&lt;br /&gt;
* Aug.12.2008:  GTA03EVB Hardware Verification of the u-blox 5 Antaris&lt;br /&gt;
* Aug.12.2008:  GPS performance tested&lt;br /&gt;
* Aug.18.2008:  GTA03EVB Hardware Verification of the Siemens MC 75i EDGE MODEM&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
* http://n2.nabble.com/Weekly-Engineering-News-33-2008-tp729555p729555.html&lt;br /&gt;
* [[MokoForesight]]&lt;br /&gt;
&lt;br /&gt;
[[Category:GTA03]]&lt;br /&gt;
&lt;br /&gt;
[[Category:GTA03]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Flashing_the_GSM_Firmware</id>
		<title>Flashing the GSM Firmware</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Flashing_the_GSM_Firmware"/>
				<updated>2008-11-27T03:10:20Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Introduction==&lt;br /&gt;
&lt;br /&gt;
This is a step-by-step description of how the firmware is upgraded on a Neo with FLUID running on the device. Note that this process tolerates almost no variations. Stray from the instructions at your own peril. Instructions based on a posting by Werner (http://lists.openmoko.org/pipermail/openmoko-devel/2008-April/002605.html), thanks.&lt;br /&gt;
&lt;br /&gt;
Please note: Update to MOKO9-beta firmware isn't recommended by OM, and probably won't fix any recent issues like [http://docs.openmoko.org/trac/ticket/1024 #1024] et al.&lt;br /&gt;
&lt;br /&gt;
Please see http://people.openmoko.org/joerg/calypso_moko_FW for more recent FW-images.&lt;br /&gt;
For now there is some moko10, which should fix #666, and also has a new command AT+CSIM.&lt;br /&gt;
This version is not supposed to fix [http://docs.openmoko.org/trac/ticket/1024 #1024]&lt;br /&gt;
We are planning to include this version, renamed to moko10, to the factory image of A7 run. Version string will change though.&lt;br /&gt;
&lt;br /&gt;
We recommend you don't update by following this procedure, unless you feel very comfortable with commandline. Don't miss-spell any FLUID command!&lt;br /&gt;
There will be a SD-image shortly, that greatly simplifies the whole GSM-update process - we suggest everybody who's not feeling completely comfortable with the procedure described herein to wait for this improved method.&lt;br /&gt;
&lt;br /&gt;
'''Warning: there are chances to _completely_ brick your GSM modem on messing around with FLUID!  Please watch out for typos!'''&lt;br /&gt;
&lt;br /&gt;
The GSM-firmware didn't differ from GTA01 to GTA02, as the GSM-hardware didn't either. This means you can flash MOKO10 (or any other recent GSM-FW) to GTA01 as well.&lt;br /&gt;
According to mwester, this worked for him to update from MOKO1 on a GTA01Bv4 to MOKO10b2, by following the steps described herein.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Any reports on successful update, as well as problems encountered, or SIMs seen to work after update, all highly appreciated. Please add to the &amp;quot;discussion&amp;quot; tab of this wikipage. Thanks!&lt;br /&gt;
&lt;br /&gt;
==Phase 1: Preparations==&lt;br /&gt;
&lt;br /&gt;
* Download and install a distribution to your device that gives you SSH access. We recommend the fso-console image:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mickey@amethyst$ cd /tmp&lt;br /&gt;
mickey@amethyst$ wget http://people.openmoko.org/mickey/images/openmoko-fso-console-image-glibc-ipk--20081028-om-gta02.rootfs.jffs2.summary&lt;br /&gt;
mickey@amethyst$ dfu-util -a rootfs -R -D ./openmoko-fso-console-image-glibc-ipk--20081028-om-gta02.rootfs.jffs2.summary&lt;br /&gt;
mickey@amethyst$ wget http://people.openmoko.org/mickey/images/uImage-2.6.24+r10+gitr75999+54524f4531c8b262431b794fea610d81bb351c86-r10-om-gta02.bin&lt;br /&gt;
mickey@amethyst$ dfu-util -a kernel -R -D ./uImage-2.6.24+r10+gitr75999+54524f4531c8b262431b794fea610d81bb351c86-r10-om-gta02.bin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Install http://people.openmoko.org/joerg/calypso_moko_FW/fluid_0.0+svn20070817-r2_armv4t_eabi.ipk on your device:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@om-gta02:~# opkg install http://people.openmoko.org/joerg/calypso_moko_FW/fluid_0.0+svn20070817-r2_armv4t_eabi.ipk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Install http://people.openmoko.org/joerg/calypso_moko_FW/s3c24xx-gpio_1.0+svnr4130-r2.1_armv4t.ipk on your device:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@om-gta02:~# opkg install http://people.openmoko.org/joerg/calypso_moko_FW/s3c24xx-gpio_1.0+svnr4130-r2.1_armv4t.ipk&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
* Download http://people.openmoko.org/joerg/calypso_moko_FW/gsm_ac_gp_fd_pu_em_cph_ds_vc_cal35_ri_36_amd8_ts0-moko10.m0&lt;br /&gt;
and place it into the /home/root directory:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@om-gta02:~# cd $HOME&lt;br /&gt;
root@om-gta02:~# wget http://people.openmoko.org/joerg/calypso_moko_FW/gsm_ac_gp_fd_pu_em_cph_ds_vc_cal35_ri_36_amd8_ts0-moko10.m0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Phase 2: The Lobotomy==&lt;br /&gt;
&lt;br /&gt;
* Make sure '''nothing''' is accessing the GSM modem. If you're using the fso-console image from the link above, this will happen automagically on boot. On other systems, kill processes as you see fit.&lt;br /&gt;
&lt;br /&gt;
* Powercycle the modem:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@om-gta02:~# echo 0 &amp;gt;/sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
root@om-gta02:~# echo 1 &amp;gt;/sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
root@om-gta02:~# s3c24xx-gpio b7=0&lt;br /&gt;
root@om-gta02:~# echo &amp;quot;AT@POFF&amp;quot; &amp;gt;/dev/ttySAC0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Launch the FLUID binary:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@om-gta02:~# cd /usr/sbin&lt;br /&gt;
root@om-gta02:/usr/sbin# FLUID_PORT=/dev/ttySAC0 FLUID_FLOWCONTROL=h fluid.exe \&lt;br /&gt;
-oO -b 115200 \&lt;br /&gt;
-f $HOME/gsm_ac_gp_fd_pu_em_cph_ds_vc_cal35_ri_36_amd8_ts0-moko10.m0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
It should say something like this (takes a few seconds to load the file):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FLUID Revision 2.27, ...&lt;br /&gt;
Bootloader: (reset target)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(if this fails repeatedly, or flashing aborted and you have a broken and &amp;quot;bricked&amp;quot; gsm-firmware due to this, try -oo instead of -oO, to use the calypso ROM bootloader instead of the firmware bootloader. Also try without the 'FLUID_FLOWCONTROL=h' part, there are reports on ROM-bootloader not working with hardware-flowcontrol. Changing the -b to some lower baudrate might improve stability of flashing-process - the bootloader does autobaud, so you're free to use any rate)&lt;br /&gt;
&lt;br /&gt;
* Start a second SSH session and start the modem:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@om-gta02:~# s3c24xx-gpio b7=1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
FLUID should now say something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(fluid, version 3) ok&lt;br /&gt;
Checksumming (269 * 8kB = 2152kB):  ok&lt;br /&gt;
Flash Detect: (0xEC, 0x22A0) Samsung K5A3240CT ok&lt;br /&gt;
Program: (34 sectors, 267*8k=2136k) (*******************) ok&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Note: If you get this instead: MESSAGE: File cmd.m0 not found, then you didn't do the ''cd /usr/sbin''. Please pay attention ;-)'''&lt;br /&gt;
&lt;br /&gt;
If FLUID does nothing, curse your bad luck and repeat the reset sequence, this is the whole 'echo 0/1, b7=0/1 stuff'.&lt;br /&gt;
&lt;br /&gt;
* To verify that everything went well, do this in either of the two sessions:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
root@om-gta02:~# cat /dev/ttySAC0 &amp;amp;&lt;br /&gt;
root@om-gta02:~# echo -en 'AT\r' &amp;gt;/dev/ttySAC0&lt;br /&gt;
root@om-gta02:~# echo -en 'AT+CGMR\r' &amp;gt;/dev/ttySAC0&lt;br /&gt;
+CGMR: &amp;quot;HW: GTA, GSM: gsm_ac_gp_fd_pu_em_cph_ds_vc_cal_amd8_ts0-Moko10&amp;quot;&lt;br /&gt;
root@om-gta02:~# kill %1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In some case you may receive this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
(fluid, version 3) ok&lt;br /&gt;
Checksumming (269 * 8kB = 2152kB):  ok&lt;br /&gt;
Flash Detect: (0xEC, 0x22A0) Samsung K5A3240CT ok&lt;br /&gt;
Program: (0 sectors, 0*8k=0k) () ok&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If so reflash some older firmware that can be found here (http://people.openmoko.org/joerg/calypso_moko_FW/) -- but never downgrade to a version earlier than Moko6, or you will render the GSM unusable (certain internal data structures changed between Moko5 and Moko6).&lt;br /&gt;
Also PLEASE DON 'T USE moko9beta1, as there is at least one report on reflashing to another FW gets difficult from moko9b1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
&lt;br /&gt;
Some users wasn't able to complete the upgrade since they got an error while the firmware was uploading in the GSM chip (like ''Flash operation timeout'').&lt;br /&gt;
&lt;br /&gt;
However a solution [http://n2.nabble.com/problems-with-calypso-firmware-update-tp1565196p1566012.html has been found] and it allows to use again the GSM modem.&lt;br /&gt;
&lt;br /&gt;
Use the following fluid command:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
FLUID_PORT=/dev/ttySAC0 fluid.exe -oO -b 115200 -f $HOME/gsm_ac_gp_fd_pu_em_cph_ds_vc_cal35_ri_36_amd8_ts0-moko10.m0&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
(Without FLOWCONTROL and with -oo to choose the ROM bootloader)&lt;br /&gt;
&lt;br /&gt;
Then on a ''second ssh session'' please use this instead of the gpio command:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
echo 0 &amp;gt; /sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
echo 1 &amp;gt; /sys/bus/platform/devices/neo1973-pm-gsm.0/power_on&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The firmware download should start now.&lt;br /&gt;
&lt;br /&gt;
[[Category:GSM]]&lt;br /&gt;
[[Category:GSM]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Windows</id>
		<title>Windows</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Windows"/>
				<updated>2008-11-22T15:09:56Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: New page: * Neo 1973 and Windows *  Flashing with dfu-util under Windows * Android - Windows Connectivity&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[Neo 1973 and Windows]]&lt;br /&gt;
* [[Dfu-util-windows| Flashing with dfu-util under Windows]]&lt;br /&gt;
* [[Android#Windows_Connectivity|Android - Windows Connectivity]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Keyboards</id>
		<title>Keyboards</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Keyboards"/>
				<updated>2008-11-22T14:59:24Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: Redirecting to Keyboard Debate&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Keyboard_Debate]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Keyboards</id>
		<title>Keyboards</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Keyboards"/>
				<updated>2008-11-22T14:59:02Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: New page: ##REDIRECT Keyboard_Debate&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;##REDIRECT [[Keyboard_Debate]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User_talk:Seanmcneil3</id>
		<title>User talk:Seanmcneil3</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User_talk:Seanmcneil3"/>
				<updated>2008-11-07T18:43:40Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: /* Android and replying calls */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Android running problems ==&lt;br /&gt;
&lt;br /&gt;
I had flashed it now on my FR but it doesn't work. I see only a black screen.&lt;br /&gt;
&lt;br /&gt;
It works, but you need 2 partition on your SD card. First about 8MB formated vfat, secound ext3. That partitions must be empty.&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
Hi Sean, how can the imgages be put on the GTA02? I also flashed my GTA02 and android will not start, only black screen.&lt;br /&gt;
&lt;br /&gt;
Sean:&lt;br /&gt;
I've just begun adding more information to the page which explains what is necessary to bring up Android. Sorry for the delay.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hi Sean I split sd card to 2 partition fat32 and ext3, noting in fat32(1.5g) and in ext3(2.2G) have lostxxfound directory,I never set boot flag to sd card's partition, now I flash image and rootfs according your &amp;quot;setup guide&amp;quot; but now it not start just black screen. what's wrong with it&lt;br /&gt;
&lt;br /&gt;
== Android doesn't accept the pin ==&lt;br /&gt;
&lt;br /&gt;
I have flashed my GTA02 and android will boot but it does not accept the pin code for my SIM-card.&lt;br /&gt;
Jofry&lt;br /&gt;
&lt;br /&gt;
Sean:&lt;br /&gt;
Hi Jofry, I've never really tried a locked SIM, so I don't know if the dialpad comes up to let you type in the code. Does it? If so, then I can probably fix the issue. Otherwise, we are kind of stuck until a virtual keyboard is developed.&lt;br /&gt;
&lt;br /&gt;
Jofry: Yes, the dialpad comes up and ask for my pin number. But if i type in the number the application means that it was the wrong number. But it is the right one.&lt;br /&gt;
&lt;br /&gt;
Skamster: i've got the same problem. i could enter the pin as much as i want but it doesn't let me in. normaly, it lock the sim after 3 try's (i try 4-6 times), but here it doesn't. i flashed with qtopia again and don't need a puck. maybe it doesn't &amp;quot;send&amp;quot; the pin to the simcard?&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
i've got the same problem like jofry. i could enter the pin as much as i want but it doesn't let me in. normaly, it lock the sim after 3 try's (i try 4-6 times), but here it doesn't. i flashed with qtopia again and don't need a puck. maybe it doesn't &amp;quot;send&amp;quot; the pin to the simcard?&lt;br /&gt;
&lt;br /&gt;
That's a known issue. For more information about the things you have to do, before you can successful use Android, look at http://onlinedev.blogspot.com/2008/11/getting-started-with-android-on-neo.html [[User:Dolfje|Dolfje]] 12:03, 5 November 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Android rootfs for µSD boot ==&lt;br /&gt;
&lt;br /&gt;
Treviño: Could you set-up a rootfs for running Android from MicroSD?&lt;br /&gt;
&lt;br /&gt;
== Android and replying calls ==&lt;br /&gt;
&lt;br /&gt;
Actually it is not possible to reply to a call due to the missing hardware &amp;quot;accept&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
Treviño: So, what about adding a workaround to it by using the AUX button as an &amp;quot;accept&amp;quot; button if pressed briefly (below 0.5 second), while keeping it to the &amp;quot;reject&amp;quot; (home) button when pressed longer?!&lt;br /&gt;
&lt;br /&gt;
== Android Misc requests ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
dilersam:  thanks for having added more informations to the page. It helps a lot.&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User_talk:Seanmcneil3</id>
		<title>User talk:Seanmcneil3</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User_talk:Seanmcneil3"/>
				<updated>2008-11-07T18:42:58Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Android running problems ==&lt;br /&gt;
&lt;br /&gt;
I had flashed it now on my FR but it doesn't work. I see only a black screen.&lt;br /&gt;
&lt;br /&gt;
It works, but you need 2 partition on your SD card. First about 8MB formated vfat, secound ext3. That partitions must be empty.&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
Hi Sean, how can the imgages be put on the GTA02? I also flashed my GTA02 and android will not start, only black screen.&lt;br /&gt;
&lt;br /&gt;
Sean:&lt;br /&gt;
I've just begun adding more information to the page which explains what is necessary to bring up Android. Sorry for the delay.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hi Sean I split sd card to 2 partition fat32 and ext3, noting in fat32(1.5g) and in ext3(2.2G) have lostxxfound directory,I never set boot flag to sd card's partition, now I flash image and rootfs according your &amp;quot;setup guide&amp;quot; but now it not start just black screen. what's wrong with it&lt;br /&gt;
&lt;br /&gt;
== Android doesn't accept the pin ==&lt;br /&gt;
&lt;br /&gt;
I have flashed my GTA02 and android will boot but it does not accept the pin code for my SIM-card.&lt;br /&gt;
Jofry&lt;br /&gt;
&lt;br /&gt;
Sean:&lt;br /&gt;
Hi Jofry, I've never really tried a locked SIM, so I don't know if the dialpad comes up to let you type in the code. Does it? If so, then I can probably fix the issue. Otherwise, we are kind of stuck until a virtual keyboard is developed.&lt;br /&gt;
&lt;br /&gt;
Jofry: Yes, the dialpad comes up and ask for my pin number. But if i type in the number the application means that it was the wrong number. But it is the right one.&lt;br /&gt;
&lt;br /&gt;
Skamster: i've got the same problem. i could enter the pin as much as i want but it doesn't let me in. normaly, it lock the sim after 3 try's (i try 4-6 times), but here it doesn't. i flashed with qtopia again and don't need a puck. maybe it doesn't &amp;quot;send&amp;quot; the pin to the simcard?&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
i've got the same problem like jofry. i could enter the pin as much as i want but it doesn't let me in. normaly, it lock the sim after 3 try's (i try 4-6 times), but here it doesn't. i flashed with qtopia again and don't need a puck. maybe it doesn't &amp;quot;send&amp;quot; the pin to the simcard?&lt;br /&gt;
&lt;br /&gt;
That's a known issue. For more information about the things you have to do, before you can successful use Android, look at http://onlinedev.blogspot.com/2008/11/getting-started-with-android-on-neo.html [[User:Dolfje|Dolfje]] 12:03, 5 November 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Android rootfs for µSD boot ==&lt;br /&gt;
&lt;br /&gt;
Treviño: Could you set-up a rootfs for running Android from MicroSD?&lt;br /&gt;
&lt;br /&gt;
== Android and replying calls ==&lt;br /&gt;
&lt;br /&gt;
Actually it is not possible to reply to a call due to the missing hardware &amp;quot;accept&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
Treviño: So what about adding a workaround to it by using the AUX button as an &amp;quot;accept&amp;quot; button if pressed briefly (below 0.5 second), while keeping it to the &amp;quot;reject&amp;quot; (home) button when pressed longer...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Android Misc requests ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
dilersam:  thanks for having added more informations to the page. It helps a lot.&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User_talk:Seanmcneil3</id>
		<title>User talk:Seanmcneil3</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User_talk:Seanmcneil3"/>
				<updated>2008-11-07T18:42:04Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: /* Replying calls */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Android running problems ==&lt;br /&gt;
&lt;br /&gt;
I had flashed it now on my FR but it doesn't work. I see only a black screen.&lt;br /&gt;
&lt;br /&gt;
It works, but you need 2 partition on your SD card. First about 8MB formated vfat, secound ext3. That partitions must be empty.&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
Hi Sean, how can the imgages be put on the GTA02? I also flashed my GTA02 and android will not start, only black screen.&lt;br /&gt;
&lt;br /&gt;
Sean:&lt;br /&gt;
I've just begun adding more information to the page which explains what is necessary to bring up Android. Sorry for the delay.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Hi Sean I split sd card to 2 partition fat32 and ext3, noting in fat32(1.5g) and in ext3(2.2G) have lostxxfound directory,I never set boot flag to sd card's partition, now I flash image and rootfs according your &amp;quot;setup guide&amp;quot; but now it not start just black screen. what's wrong with it&lt;br /&gt;
&lt;br /&gt;
== Android doesn't accept the pin ==&lt;br /&gt;
&lt;br /&gt;
I have flashed my GTA02 and android will boot but it does not accept the pin code for my SIM-card.&lt;br /&gt;
Jofry&lt;br /&gt;
&lt;br /&gt;
Sean:&lt;br /&gt;
Hi Jofry, I've never really tried a locked SIM, so I don't know if the dialpad comes up to let you type in the code. Does it? If so, then I can probably fix the issue. Otherwise, we are kind of stuck until a virtual keyboard is developed.&lt;br /&gt;
&lt;br /&gt;
Jofry: Yes, the dialpad comes up and ask for my pin number. But if i type in the number the application means that it was the wrong number. But it is the right one.&lt;br /&gt;
&lt;br /&gt;
Skamster: i've got the same problem. i could enter the pin as much as i want but it doesn't let me in. normaly, it lock the sim after 3 try's (i try 4-6 times), but here it doesn't. i flashed with qtopia again and don't need a puck. maybe it doesn't &amp;quot;send&amp;quot; the pin to the simcard?&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
i've got the same problem like jofry. i could enter the pin as much as i want but it doesn't let me in. normaly, it lock the sim after 3 try's (i try 4-6 times), but here it doesn't. i flashed with qtopia again and don't need a puck. maybe it doesn't &amp;quot;send&amp;quot; the pin to the simcard?&lt;br /&gt;
&lt;br /&gt;
That's a known issue. For more information about the things you have to do, before you can successful use Android, look at http://onlinedev.blogspot.com/2008/11/getting-started-with-android-on-neo.html [[User:Dolfje|Dolfje]] 12:03, 5 November 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Android rootfs for µSD boot ==&lt;br /&gt;
&lt;br /&gt;
Could you set-up a rootfs for running Android from MicroSD?&lt;br /&gt;
&lt;br /&gt;
== Android Misc requests ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
dilersam:  thanks for having added more informations to the page. It helps a lot.&lt;br /&gt;
&lt;br /&gt;
== Replying calls ==&lt;br /&gt;
&lt;br /&gt;
Actually it is not possible to reply to a call due to the missing hardware &amp;quot;accept&amp;quot; button.&lt;br /&gt;
&lt;br /&gt;
So what about adding a workaround to it by using the AUX button as an &amp;quot;accept&amp;quot; button if pressed briefly (below 0.5 second), while keeping it to the &amp;quot;reject&amp;quot; (home) button when pressed longer...&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User_talk:Seanmcneil3</id>
		<title>User talk:Seanmcneil3</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User_talk:Seanmcneil3"/>
				<updated>2008-11-06T00:20:51Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Android running problems ==&lt;br /&gt;
&lt;br /&gt;
I had flashed it now on my FR but it doesn't work. I see only a black screen.&lt;br /&gt;
&lt;br /&gt;
It works, but you need 2 partition on your SD card. First about 8MB formated vfat, secound ext3. That partitions must be empty.&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
Hi Sean, how can the imgages be put on the GTA02? I also flashed my GTA02 and android will not start, only black screen.&lt;br /&gt;
&lt;br /&gt;
Sean:&lt;br /&gt;
I've just begun adding more information to the page which explains what is necessary to bring up Android. Sorry for the delay.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Android doesn't accept the pin ==&lt;br /&gt;
&lt;br /&gt;
I have flashed my GTA02 and android will boot but it does not accept the pin code for my SIM-card.&lt;br /&gt;
Jofry&lt;br /&gt;
&lt;br /&gt;
Sean:&lt;br /&gt;
Hi Jofry, I've never really tried a locked SIM, so I don't know if the dialpad comes up to let you type in the code. Does it? If so, then I can probably fix the issue. Otherwise, we are kind of stuck until a virtual keyboard is developed.&lt;br /&gt;
&lt;br /&gt;
Jofry: Yes, the dialpad comes up and ask for my pin number. But if i type in the number the application means that it was the wrong number. But it is the right one.&lt;br /&gt;
&lt;br /&gt;
Skamster: i've got the same problem. i could enter the pin as much as i want but it doesn't let me in. normaly, it lock the sim after 3 try's (i try 4-6 times), but here it doesn't. i flashed with qtopia again and don't need a puck. maybe it doesn't &amp;quot;send&amp;quot; the pin to the simcard?&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
i've got the same problem like jofry. i could enter the pin as much as i want but it doesn't let me in. normaly, it lock the sim after 3 try's (i try 4-6 times), but here it doesn't. i flashed with qtopia again and don't need a puck. maybe it doesn't &amp;quot;send&amp;quot; the pin to the simcard?&lt;br /&gt;
&lt;br /&gt;
That's a known issue. For more information about the things you have to do, before you can successful use Android, look at http://onlinedev.blogspot.com/2008/11/getting-started-with-android-on-neo.html [[User:Dolfje|Dolfje]] 12:03, 5 November 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Android rootfs for µSD boot ==&lt;br /&gt;
&lt;br /&gt;
Could you set-up a rootfs for running Android from MicroSD?&lt;br /&gt;
&lt;br /&gt;
== Android Misc requests ==&lt;br /&gt;
&lt;br /&gt;
ssh ?&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
dilersam:  thanks for having added more informations to the page. It helps a lot.&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User_talk:Seanmcneil3</id>
		<title>User talk:Seanmcneil3</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User_talk:Seanmcneil3"/>
				<updated>2008-11-06T00:20:31Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
== Android running problems ==&lt;br /&gt;
&lt;br /&gt;
I had flashed it now on my FR but it doesn't work. I see only a black screen.&lt;br /&gt;
&lt;br /&gt;
It works, but you need 2 partition on your SD card. First about 8MB formated vfat, secound ext3. That partitions must be empty.&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
Hi Sean, how can the imgages be put on the GTA02? I also flashed my GTA02 and android will not start, only black screen.&lt;br /&gt;
&lt;br /&gt;
Sean:&lt;br /&gt;
I've just begun adding more information to the page which explains what is necessary to bring up Android. Sorry for the delay.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Android doesn't accept the pin ==&lt;br /&gt;
&lt;br /&gt;
I have flashed my GTA02 and android will boot but it does not accept the pin code for my SIM-card.&lt;br /&gt;
Jofry&lt;br /&gt;
&lt;br /&gt;
Sean:&lt;br /&gt;
Hi Jofry, I've never really tried a locked SIM, so I don't know if the dialpad comes up to let you type in the code. Does it? If so, then I can probably fix the issue. Otherwise, we are kind of stuck until a virtual keyboard is developed.&lt;br /&gt;
&lt;br /&gt;
Jofry: Yes, the dialpad comes up and ask for my pin number. But if i type in the number the application means that it was the wrong number. But it is the right one.&lt;br /&gt;
&lt;br /&gt;
Skamster: i've got the same problem. i could enter the pin as much as i want but it doesn't let me in. normaly, it lock the sim after 3 try's (i try 4-6 times), but here it doesn't. i flashed with qtopia again and don't need a puck. maybe it doesn't &amp;quot;send&amp;quot; the pin to the simcard?&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
i've got the same problem like jofry. i could enter the pin as much as i want but it doesn't let me in. normaly, it lock the sim after 3 try's (i try 4-6 times), but here it doesn't. i flashed with qtopia again and don't need a puck. maybe it doesn't &amp;quot;send&amp;quot; the pin to the simcard?&lt;br /&gt;
&lt;br /&gt;
That's a known issue. For more information about the things you have to do, before you can successful use Android, look at http://onlinedev.blogspot.com/2008/11/getting-started-with-android-on-neo.html [[User:Dolfje|Dolfje]] 12:03, 5 November 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Android Misc requests ==&lt;br /&gt;
&lt;br /&gt;
ssh ?&lt;br /&gt;
&lt;br /&gt;
--&lt;br /&gt;
&lt;br /&gt;
dilersam:  thanks for having added more informations to the page. It helps a lot.&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Talk:Community_Updates</id>
		<title>Talk:Community Updates</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Talk:Community_Updates"/>
				<updated>2008-11-03T15:06:48Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: /* Flashing the Neo GSM modem */ new section&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Add news to this page, and from time to time we will issue a community update.&lt;br /&gt;
&lt;br /&gt;
How are newsletters organized elsewhere:&lt;br /&gt;
http://lists.openmoko.org/pipermail/community/2008-October/032628.html&lt;br /&gt;
&lt;br /&gt;
[[/Archive 1]]&lt;br /&gt;
&lt;br /&gt;
== Flashing the Neo GSM modem ==&lt;br /&gt;
&lt;br /&gt;
[http://wiki.openmoko.org/wiki/GSM/Flashing This is a Wiki] that explains how to upgrade the GSM modem firmware of the Neo.&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Recording_audio</id>
		<title>Recording audio</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Recording_audio"/>
				<updated>2008-10-31T16:43:11Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Mixer settings for voice recording: It is required that DAI Mode (alsa control number 50) is &amp;quot;DAI 1&amp;quot; - only recording, or &amp;quot;DAI 2&amp;quot; - recording and playback simultaneously. &amp;quot;DAI 0&amp;quot; is only for playback. There's also &amp;quot;DAI 3&amp;quot;, but I don't know what this is.&lt;br /&gt;
&lt;br /&gt;
Depending on the recording source, Mic1 for headset or Mic2 for handset have to be set accordingly via the Mic Selection Mux, which is alsa control number 53. Also, set Capture Left Mux and Capture Right Mux (65, 64) to PGA.&lt;br /&gt;
&lt;br /&gt;
Below is an alsa state file, which can be used to put the device into voice recording mode. It's advisable to have a programm connected to e.g. /dev/dsp, else the device might crash. Change settings via:&lt;br /&gt;
&lt;br /&gt;
 alsactl -f voice-recording.state restore&lt;br /&gt;
&lt;br /&gt;
http://wildsau.enemy.org/~moko/voice-recording.state&lt;br /&gt;
&lt;br /&gt;
 arecord -D hw -f cd  -v -t wav rec-$(date +%Y-%m-%d-%H-%M).wav&lt;br /&gt;
&lt;br /&gt;
[[Category:Audio]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Talk:Community_Updates</id>
		<title>Talk:Community Updates</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Talk:Community_Updates"/>
				<updated>2008-10-29T07:59:38Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: /* From the stars */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Add news to this page, and from time to time we will issue a community update.&lt;br /&gt;
&lt;br /&gt;
= Images =&lt;br /&gt;
* [[FDOM]]: David [http://lists.openmoko.org/pipermail/community/2008-October/034219.html released again], announcing that development moved to a new home. Mirrors added, more needed. FDOM now exists as an installer script: the FDOMizer. It is meant to be run over the 2008.10 image or over existing FDOM installation.&lt;br /&gt;
* Qt Extended 4.4.2 released. [http://qtextended.org/modules/mydownloads/index.php Downloads].&lt;br /&gt;
* Open Handset Alliance announces the launch of [http://source.android.com/ Android Open Source Project]. Koolu [http://koolu.com/ announces] that Koolu Beta port of Android for Freerunner will be available to download  for existing Freerunner owners and installed on phones for sale in November 2008, contact Brian Code there. Sean McNeil [http://lists.openmoko.org/nabble.html#nabble-td1361683 has been working on it] too.&lt;br /&gt;
&lt;br /&gt;
= Applications =&lt;br /&gt;
* [[Sephora]] settings manager 0.2 alpha 3 released, adds GERMAN localization.&lt;br /&gt;
* [[Mokoko]] yet another media player.&lt;br /&gt;
* Telephone auto-reply scripts were proposed. Kamil send one that replies with a &amp;quot;not available&amp;quot; SMS when one [http://lists.openmoko.org/pipermail/community/2008-October/034327.html flips the FreeRunner] face down. Alex showcased a project for a full [http://lists.openmoko.org/pipermail/community/2008-October/034409.html phone firewall] stack, with GUI.&lt;br /&gt;
* On the same thread, Mickey reminded about the power of ''oeventsd'' 's rules file. This is a user-tweakable rules engine using yaml-syntax to configure system-wide behaviour on DBus events (what a mouthful !). It was introduced in FSO Milestones 3 and needs user feedback, and [[OpenmokoFramework/Status Update 4#What.27s new since Milestone II| more documentation]] I guess.&lt;br /&gt;
* [http://lists.openmoko.org/nabble.html#nabble-td786719 fso-control]. A (suspend, reboot, shutdown) menu designed to pop up with the POWER button. Uses python, edje and frameworkd.&lt;br /&gt;
&lt;br /&gt;
= Hardware =&lt;br /&gt;
* [http://www.opkg.org/specials/ Customize the case] look.&lt;br /&gt;
&lt;br /&gt;
= Wiki and community =&lt;br /&gt;
* Academic projects at National Taipei University: [[The Bicycle Motion Information Displayer]], [[Business Card Exchange system]], [[Location-based mobile video streaming system]], [[Dancing With the Mobile Phone]]&lt;br /&gt;
* Following the three GSoC interns at OpenMoko Inc., [[Tsing Hua OpenLab]] held a workshop on 10/29.&lt;br /&gt;
* The [[Erlang]] wiki page deserves a special mention in this newsletter for a few reasons. First, it received some TLC this week and is now one of the best articles in our wiki. Second, Erlang is based on concurrent functional programming, an interesting paradigm that needs more advertising. Third, it's nice to think that around the FreeRunner's cradle, there is not only Nokia, Swisscom and Google's electromechanical avatar, but also a sign of Ericsson research. Fourth, [http://www.erlang.org Erlang] rocks for reliable soft real-time distributed telecoms applications and this is where the future is - see what [http://www.dash.net Dash] made of the Neo 1973 platform.&lt;br /&gt;
&lt;br /&gt;
= From the stars =&lt;br /&gt;
Harald looked at [http://laforge.gnumonks.org/weblog/2008/10/20#20081020-nand_speed optimizing the NAND memory speed timings on the GTA02]:'' Some initial experiments show that the performance can be easily improved by 41%. However, the actual speed (6.59MBytes/sec) is still much lower than the theoretical maximum read performance of 15.64MBytes/sec. It seems there is more room for improvement inside the MTD layer of the Linux kernel.''&lt;br /&gt;
&lt;br /&gt;
Tick merged the fix written by [[User:Treviño|Treviño]] that applied to qtopia-x11 the [[User:Mickey|Mickey Lauer]] suggestions for the 'Echo Bug’ {{Ticket|1267}} in the git around October 15th, it works, can use more field testing. See also the thread [http://lists.openmoko.org/pipermail/community/2008-October/033312.html Echo issue on OM2008.08 solved] on the community mailing list.&lt;br /&gt;
&lt;br /&gt;
= Outside Openmoko =&lt;br /&gt;
&lt;br /&gt;
= See also =&lt;br /&gt;
* John's team [http://lists.openmoko.org/pipermail/community/2008-October/034258.html status update] for first week. They already have one minute of boot time shaved (static /dev is a big gain) and stomped on the &amp;quot;echo&amp;quot; bug, working on {{Ticket|2071}}, python loader speed and resume visual feedback. Also [http://lists.openmoko.org/nabble.html#nabble-f528198 improved touch screen useability].&lt;br /&gt;
&lt;br /&gt;
How are newsletters organized elsewhere:&lt;br /&gt;
http://lists.openmoko.org/pipermail/community/2008-October/032628.html&lt;br /&gt;
&lt;br /&gt;
[[/Archive 1]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Android</id>
		<title>Android</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Android"/>
				<updated>2008-10-28T13:46:18Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: /* Current State */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Distributions|Android}}&lt;br /&gt;
&lt;br /&gt;
= Updates =&lt;br /&gt;
&lt;br /&gt;
* 20081021 [[User:Cfriedt]] Android -&amp;gt; FreeRunner updates on my [http://perpetual-notion.blogspot.com/search/label/android blog]&lt;br /&gt;
* 20081022 [[User:Cfriedt]] I was able to 'trivially' compile all of the Android source code without error for the ARMv4T architecture by removing v5TE instructions. Although it will definitely not run anything predictably, at least now that I know the build system will work with a few simple substitutions in build/core/combo/arm-linux.mk. At this point I am able to go ahead and re-implement v5TE instructions as v4T instruction sequences instead (or re-implement entire sections of assembly with hand-optimized v4T instructions).&lt;br /&gt;
* 20081023 [[User:Bricode]] To track the status of which parts of the Android source tree contain ARMv5 specific code, I've created a table of where it is contained, and the status of patches. It can be found at: http://spreadsheets.google.com/pub?key=pzDEXnU19gkeTjpD28t-7fw&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
This page is dedicated to porting the [http://www.android.com Android OS] to the [[Neo 1973]] and [[Neo FreeRunner]] handsets. Since the Android OS was [http://source.android.com/posts/opensource  publically released] on 20081021, [http://benno.id.au/blog/2007/11/21/android-neo1973 work] [http://perpetual-notion.blogspot.com/search/label/android is] [http://groups.google.com/group/android-porting currently underway] to port Android to the [[Neo1973 Hardware|Neo 1973]] and [[Neo_FreeRunner_GTA02_Hardware|FreeRunner]] handsets.&lt;br /&gt;
&lt;br /&gt;
== Goals ==&lt;br /&gt;
# Systematically introduce patches for ARMv4T in the Android codebase&lt;br /&gt;
# Provide Neo1973 and Neo FreeRunner hardware-dependent patches in the Android codebase, leveraging the work already done by the Openmoko developers, without forcing Android-specific changes upstream&lt;br /&gt;
# Provide a useable Android filesystem and kernel on the [[Distributions]] page that conform to current Openmoko installation routines&lt;br /&gt;
&lt;br /&gt;
== Early Attempts ==&lt;br /&gt;
As [http://benno.id.au Ben Leslie] had pointed out on his [http://benno.id.au/blog/2007/11/21/android-neo1973 blog] far before the source code was released, [http://www.android.com Android] was originally designed to work with the ARMv5TE [http://en.wikipedia.org/wiki/Instruction_set_architecture instruction set architecture] (ISA), which allows for [http://en.wikipedia.org/wiki/ARM_architecture#DSP_Enhancement_Instructions DSP enhanced instructions]. Contrary to the ARMv5TE ISA, the Neo1973 and FreeRunner handsets both feature an arm920t core, which comply to the ARMv4T ISA.&lt;br /&gt;
&lt;br /&gt;
Before the source code was released, kernel trap handlers were implemented to 'emulate' the ARMv5TE ISA. Although the results worked in many cases, trapping is costly and performance suffered as a result. Moreover, without explicitly knowing which conditions were set by various instructions, such as Thumb Mode execution, the result became nondeterministic.&lt;br /&gt;
&lt;br /&gt;
== Current State ==&lt;br /&gt;
&lt;br /&gt;
With the release of the Android [http://source.android.com source code], the Open Source community is no longer limited to dealing with a binary-only product. The Open Handset Alliance (OHA) has let their source code become their product for everyone enrich and benefit from.&lt;br /&gt;
&lt;br /&gt;
Currently, porting efforts are underway in many circles. Patches should be submitted via the [http://source.android.com/submit-patches official Android channels].&lt;br /&gt;
&lt;br /&gt;
To track the status of which parts of the Android source tree contain ARMv5 specific code, I've created a table of where it is contained, and the status of patches. It can be found at: http://spreadsheets.google.com/pub?key=pzDEXnU19gkeTjpD28t-7fw [[User:Bricode]]&lt;br /&gt;
&lt;br /&gt;
Sean McNail said that he was able to get Androind running (including telephony) in his Freerunner [http://3v1n0.tuxfamily.org/tumblelog/post/368 source].&lt;br /&gt;
&lt;br /&gt;
Ben Leslie mentioned on the android-porting list that he was able to get the 'Android' logo to appear on his Neo 1973.&lt;br /&gt;
&lt;br /&gt;
= How to Help =&lt;br /&gt;
&lt;br /&gt;
== Getting Started ==&lt;br /&gt;
&lt;br /&gt;
You can start by following the instructions to download and build the Android source from scratch. Please see [http://source.android.com/download http://source.android.com/download] and follow the instructions for your architecture.&lt;br /&gt;
&lt;br /&gt;
== Publicize Your Efforts ==&lt;br /&gt;
&lt;br /&gt;
It's generally a good idea to make your efforts known via wiki systems, public mailing lists, forums, and publically open version control systems.&lt;br /&gt;
&lt;br /&gt;
Always take credit for your work but please don't do it in the form of comments. Some code is already hard enough to read without comments polluting the text. The best thing to do is to create a patch and put a header with your information at the top. Collaboration systems such as git might already do this for you (??).&lt;br /&gt;
&lt;br /&gt;
If you create something new and have the ability to designate the license for it, please consider license compatibility issues.&lt;br /&gt;
&lt;br /&gt;
== Porting Strategy ==&lt;br /&gt;
&lt;br /&gt;
* Analysis and leverage of the existing build system&lt;br /&gt;
** buid/core/combo/arm-linux.mk&lt;br /&gt;
*** -D__ARCH_ARM_4__ -D__ARCH_ARM_4T__&lt;br /&gt;
*** -march=armv4t -mcpu=arm920t&lt;br /&gt;
** fix various static references to 'armv5'&lt;br /&gt;
* Isolating ARMv5TE ISA dependent code&lt;br /&gt;
** e.g. grep -n -R -i &amp;quot;${armv5te_isa_pattern}&amp;quot; ~/android&lt;br /&gt;
* Abstracting&lt;br /&gt;
** ( C/C++ )&lt;br /&gt;
*** Use inlined functions / #ifdef statments to implement functions in a portable manner&lt;br /&gt;
*** For inlined assembler calls, it's acceptable for now to use generic C code instead, so long as later on we optimize it by hand.&lt;br /&gt;
** ( ASM )&lt;br /&gt;
*** Proprocessor statements based on ISA / architecture, e.g. #ifdef __ARCH_ARM_5__ ... #endif #ifdef __ARCH_ARM_4__ ... #endif&lt;br /&gt;
*** It's highly suggested that preprocessor statements should not be nested (i.e. make them mutually exclusive)&lt;br /&gt;
*** Some people have suggested that we should not do #ifdef's based on ARCH or ISA, but rather based on an AndroidConfig.h which would define macros like PLD(...) #ifdef HAVE_ARM_PLD pld #else ... #endif .&lt;br /&gt;
&lt;br /&gt;
For each ARMv5TE instruction, one could potentially&lt;br /&gt;
* Implement the instruction using general registers instead of DSP calls (i.e. eabi / softfloat)&lt;br /&gt;
* If that is a) nondeterministic, or b) slow, then sections of code need to be analyzed and hand-optimized for the ARMv4T isa&lt;br /&gt;
&lt;br /&gt;
== List of Unsupported Instructions ==&lt;br /&gt;
&lt;br /&gt;
This is a list of opcodes, extracted from the Android source, that are unsupported for ARMv4T compliant processors (specifically the arm920t). The opcodes represent instructions available for ARMv5, ARMv5T, and ARMv5TE architectures, which are not present in the ARMv4T ISA. The list was obtained by exhaustively editing the recompiling the Android source code until it compiled without error.&lt;br /&gt;
&lt;br /&gt;
Please keep in mind, that in some cases, translating these instructions into a sequence of ARMv4T instructions will be impossible and / or result in nondeterministic execution because of&lt;br /&gt;
* the requirement of additional context&lt;br /&gt;
* the tendencies of certain opcodes to change condition registers that may or may not be present in the arm920t core&lt;br /&gt;
&lt;br /&gt;
=== Opcodes ===&lt;br /&gt;
&lt;br /&gt;
For now, so that the code is clearer, I would just suggest using C instead of assembly language so that less space is used.&lt;br /&gt;
&lt;br /&gt;
{{scroll box|height=480px|text=&lt;br /&gt;
&amp;lt;TABLE BORDER=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Opcode&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;Desription&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;[[http://www.arm.com/miscPDFs/14128.pdf PDF]] Page Number&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;C&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TH&amp;gt;ASM&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;BLX(1)&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Branch, Link, and Exchange&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;166&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;BLX(2)&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Branch, Link, and Exchange&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;168&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;CLZ&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Count Leading Zeros&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;175&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
[[User:Cfriedt]] 20081026&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#include &amp;lt;stdint.h&amp;gt;&lt;br /&gt;
&lt;br /&gt;
void clz( uint32_t * Rd, uint32_t * Rm )&lt;br /&gt;
{&lt;br /&gt;
uint32_t mask = 0x80000000;&lt;br /&gt;
&lt;br /&gt;
// in case Rd == Rm&lt;br /&gt;
uint32_t dummy = 0;&lt;br /&gt;
&lt;br /&gt;
if ( *Rm == 0 )&lt;br /&gt;
{&lt;br /&gt;
&lt;br /&gt;
dummy = 32;&lt;br /&gt;
&lt;br /&gt;
} else {&lt;br /&gt;
&lt;br /&gt;
for ( 	dummy = 0 ;&lt;br /&gt;
dummy &amp;lt; 32 &amp;amp;&amp;amp;&lt;br /&gt;
( ! ( mask &amp;amp; (*Rm) ) ) ;&lt;br /&gt;
dummy++, mask &amp;gt;&amp;gt;= 1&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
(*Rd) = dummy;&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&lt;br /&gt;
&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;LDRD&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Load Registers Doubleword&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;200&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;PLD&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Preload Data&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;240&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Remove&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Remove&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;SMLA&amp;amp;lt;x&amp;amp;gt;&amp;amp;lt;y&amp;amp;gt;&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Signed Multiply-Accumulate&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;291&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;SMLAL&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Signed Multiply Accumulate Long&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;296&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;SMLAW&amp;amp;lt;x&amp;amp;gt;&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Signed Multiply-Accumulate Word&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;302&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;SMULL&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Signed Multiply Long&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;318&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;SMUL&amp;amp;lt;x&amp;amp;gt;&amp;amp;lt;y&amp;amp;gt;&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Signed Multiply&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;316&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;SMULW&amp;amp;lt;y&amp;amp;gt;&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Signed Multiply Word&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;320&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;QADD&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Saturating Add&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;242&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;QDADD&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Saturating Double and Add&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;249&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;QSUB&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Saturating Subtract&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;253&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;QDSUB&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Saturating Double and Subtract&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;251&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;TR&amp;gt;&lt;br /&gt;
&amp;lt;TH VALIGN=&amp;quot;TOP&amp;quot;&amp;gt;STRD&amp;lt;/TH&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;Store Registers Doubleword&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;349&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;TD&amp;gt;&amp;lt;/TD&amp;gt;&lt;br /&gt;
&amp;lt;/TR&amp;gt;&lt;br /&gt;
&amp;lt;/TABLE&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Scanning for Files That Use the ARMv5TE ISA ===&lt;br /&gt;
&lt;br /&gt;
Using the above list of opcodes, one can scan the Android source code for ARMv4T-incompatible instruction sequences.&lt;br /&gt;
&lt;br /&gt;
'''Code:'''&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
opcodes=&amp;quot;blx clz ldrd pld smlabb smlabt smlatt smlal smlawb smlawt smulbb smulbt smull smultt smulwb smulwt qadd qdadd qsub qdsub strd&amp;quot;&lt;br /&gt;
&lt;br /&gt;
opcodePat=&amp;quot;$(echo ${opcodes} | sed -e 's/ /\\\|/g')&amp;quot;&lt;br /&gt;
&lt;br /&gt;
fileList=&amp;quot;$(grep -R -i &amp;quot;\(${opcodePat}\) &amp;quot; * 2&amp;gt;/dev/null | grep -v &amp;quot;^Binary file&amp;quot; | sed -e 's/:.*//' | grep -v &amp;quot;CREDITS\|README\|^\(kernel/\)\|\(\.txt\)$&amp;quot; | sort -u)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
for i in ${fileList}; do&lt;br /&gt;
echo &amp;quot;* ${i}&amp;quot;&lt;br /&gt;
done&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Source Files in Android that Use the ARMv5TE ISA ===&lt;br /&gt;
&lt;br /&gt;
The list of files below may or may not be complete. There might also be some assembly code that is generated with a python script (verification?).&lt;br /&gt;
&lt;br /&gt;
{{scroll box|height=150px|text=&lt;br /&gt;
* bionic/libc/arch-arm/bionic/memcmp.S&lt;br /&gt;
* bionic/libc/arch-arm/bionic/memcmp16.S&lt;br /&gt;
* bionic/libc/arch-arm/bionic/memcpy.S&lt;br /&gt;
* bionic/libc/arch-arm/bionic/strlen.c&lt;br /&gt;
* bionic/libc/kernel/arch-arm/asm/arch/irqs.h&lt;br /&gt;
* bionic/libc/tools/gensyscalls.py&lt;br /&gt;
* bootloader/legacy/nandwrite/init.S&lt;br /&gt;
* bootloader/legacy/usbloader/init.S&lt;br /&gt;
* dalvik/vm/arch/arm/CallEABI.S&lt;br /&gt;
* dalvik/vm/arch/arm/CallOldABI.S&lt;br /&gt;
* dalvik/vm/mterp/armv5/OP_AGET_WIDE.S&lt;br /&gt;
* dalvik/vm/mterp/armv5/OP_APUT_WIDE.S&lt;br /&gt;
* dalvik/vm/mterp/armv5/OP_IGET_WIDE.S&lt;br /&gt;
* dalvik/vm/mterp/armv5/OP_IGET_WIDE_QUICK.S&lt;br /&gt;
* dalvik/vm/mterp/armv5/OP_IPUT_WIDE.S&lt;br /&gt;
* dalvik/vm/mterp/armv5/OP_IPUT_WIDE_QUICK.S&lt;br /&gt;
* dalvik/vm/mterp/armv5/OP_SGET_WIDE.S&lt;br /&gt;
* dalvik/vm/mterp/armv5/OP_SPUT_WIDE.S&lt;br /&gt;
* dalvik/vm/mterp/out/InterpAsm-armv5.S&lt;br /&gt;
* dalvik/vm/oo/Object.h&lt;br /&gt;
* development/emulator/qtools/armdis.cpp&lt;br /&gt;
* development/emulator/qtools/thumbdis.cpp&lt;br /&gt;
* external/elfutils/src/Makefile&lt;br /&gt;
* external/elfutils/src/Makefile.am&lt;br /&gt;
* external/elfutils/src/Makefile.in&lt;br /&gt;
* external/freetype/include/freetype/config/ftconfig.h&lt;br /&gt;
* external/jpeg/jidctfst.S&lt;br /&gt;
* external/neven/Embedded/common/src/b_BasicEm/Math.c&lt;br /&gt;
* external/opencore/codecs_v2/audio/aac/dec/src/calc_sbr_synfilterbank.cpp&lt;br /&gt;
* external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h&lt;br /&gt;
* external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v4.h&lt;br /&gt;
* external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v4_gcc.h&lt;br /&gt;
* external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h&lt;br /&gt;
* external/opencore/codecs_v2/audio/aac/dec/src/pv_normalize.h&lt;br /&gt;
* external/opencore/codecs_v2/audio/aac/dec/src/trans4m_freq_2_time_fxp.cpp&lt;br /&gt;
* external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h&lt;br /&gt;
* external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h&lt;br /&gt;
* external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_add.h&lt;br /&gt;
* external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_mac.h&lt;br /&gt;
* external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_msu.h&lt;br /&gt;
* external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_mult.h&lt;br /&gt;
* external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_sub.h&lt;br /&gt;
* external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mpy_32.h&lt;br /&gt;
* external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mpy_32_16.h&lt;br /&gt;
* external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mult.h&lt;br /&gt;
* external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/norm_l.h&lt;br /&gt;
* external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/normalize_amr_wb.h&lt;br /&gt;
* external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h&lt;br /&gt;
* external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h&lt;br /&gt;
* external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_dct_16_gcc.s&lt;br /&gt;
* external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_dct_9.s&lt;br /&gt;
* external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_dct_9_gcc.s&lt;br /&gt;
* external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_mdct_18.asm&lt;br /&gt;
* external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_mdct_18.s&lt;br /&gt;
* external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_mdct_18_gcc.s&lt;br /&gt;
* external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_polyphase_filter_window.asm&lt;br /&gt;
* external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_polyphase_filter_window.s&lt;br /&gt;
* external/opencore/codecs_v2/audio/mp3/dec/src/asm/pvmp3_polyphase_filter_window_gcc.s&lt;br /&gt;
* external/opencore/codecs_v2/audio/mp3/dec/src/pv_mp3dec_fxd_op_arm.h&lt;br /&gt;
* external/opencore/codecs_v2/audio/mp3/dec/src/pv_mp3dec_fxd_op_arm_gcc.h&lt;br /&gt;
* external/opencore/codecs_v2/audio/mp3/dec/src/pvmp3_normalize.h&lt;br /&gt;
* external/opencore/codecs_v2/audio/sbc/enc/src/sbcenc_filter.h&lt;br /&gt;
* external/opencore/codecs_v2/video/avc_h264/dec/src/vlc.cpp&lt;br /&gt;
* external/opencore/codecs_v2/video/m4v_h263/enc/src/dct_inline.h&lt;br /&gt;
* external/opencore/codecs_v2/video/m4v_h263/enc/src/fastquant_inline.h&lt;br /&gt;
* external/opencore/codecs_v2/video/m4v_h263/enc/src/vlc_encode_inline.h&lt;br /&gt;
* external/opencore/fileformats/avi/parser/include/pv_avifile_streamlist.h&lt;br /&gt;
* external/opencore/fileformats/avi/parser/src/pv_avifile_streamlist.cpp&lt;br /&gt;
* external/openssl/crypto/bn/bn_prime.c&lt;br /&gt;
* external/qemu/target-arm/translate.c&lt;br /&gt;
* external/qemu/trace.c&lt;br /&gt;
* external/skia/include/corecg/SkFixed.h&lt;br /&gt;
* external/skia/include/corecg/SkMath.h&lt;br /&gt;
* external/skia/libcorecg/Sk64.cpp&lt;br /&gt;
* external/skia/libcorecg/SkMatrix.cpp&lt;br /&gt;
* external/skia/libsgl/effects/SkColorMatrixFilter.cpp&lt;br /&gt;
* external/skia/libsgl/sgl/SkBitmap.cpp&lt;br /&gt;
* external/skia/libsgl/sgl/SkBitmapShader.cpp&lt;br /&gt;
* external/skia/libsgl/sgl/SkGraphics.cpp&lt;br /&gt;
* external/srec/config/en.us/dictionary/c0.6.ok&lt;br /&gt;
* frameworks/base/libs/audioflinger/AudioMixer.cpp&lt;br /&gt;
* frameworks/base/libs/audioflinger/AudioResamplerSinc.cpp&lt;br /&gt;
* frameworks/base/opengl/libagl/iterators.S&lt;br /&gt;
* frameworks/base/opengl/libagl/matrix.h&lt;br /&gt;
* system/core/include/private/pixelflinger/ggl_fixed.h&lt;br /&gt;
* system/core/libpixelflinger/codeflinger/ARMAssembler.cpp&lt;br /&gt;
* system/core/libpixelflinger/codeflinger/ARMAssemblerInterface.cpp&lt;br /&gt;
* system/core/libpixelflinger/codeflinger/disassem.c&lt;br /&gt;
* system/core/libpixelflinger/codeflinger/texturing.cpp&lt;br /&gt;
* system/core/libpixelflinger/rotate90CW_4x4_16v6.S&lt;br /&gt;
* system/core/libpixelflinger/t32cb16blend.S&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
=== Discussion ===&lt;br /&gt;
=== Notes ===&lt;br /&gt;
* (ASM) In order to return from a subroutine, use methods that are known to work from ARMv4T onwards &amp;lt;pre&amp;gt;mov pc,lr ==&amp;gt; bx lr&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Suggestions ==&lt;br /&gt;
* [[User:Cfriedt]] 20081024 I'm not sure how feasible this is, given that the [http://wiki.openmoko.org/wiki/Neo_FreeRunner_Hardware_Issues#SMedia_3362_Documentation_.26_OpenGL_ES_Drivers SMedia 3362 is heavily NDA'd]. However, since the arm920t lacks a floating-point unit / DSP core, is it possible to use the SMedia chip for general-purpose math? This would help in the Android platform, at least, for things like audio and video codecs. Aside from an OpenGL ES driver, OpenMoko documentation for the SMedia would be highly appreciated.&lt;br /&gt;
&lt;br /&gt;
= Important Links =&lt;br /&gt;
(Please Update Me)&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
* [http://source.android.com/documentation Android Documentation]&lt;br /&gt;
* [http://www.arm.com/documentation/ ARM Documentation], (keywords: armv4t, armv5t, armv5te, arm920t, arm926ej-s)&lt;br /&gt;
* [http://www.arm.com/miscPDFs/9658.pdf ARM Assembly Language Programming]&lt;br /&gt;
* [http://www.cse.unsw.edu.au/~cs3221/labs/assembler-intro.pdf An Introduction to the GNU Assembler]&lt;br /&gt;
* [http://www.heyrick.co.uk/assembler/apcsintro.html ARM Procedure Call Standard], [http://en.wikipedia.org/wiki/Calling_convention#ARM ARM Calling Conventions]&lt;br /&gt;
&lt;br /&gt;
== Instruction Set References ==&lt;br /&gt;
* [http://www.arm.com/miscPDFs/14128.pdf ARM Architecture Reference Manual], The definitive ISA documentation&lt;br /&gt;
* [http://www.simplemachines.it/doc/QRC0001H_rvct_v2.1_arm.pdf ARM Instruction Set Quick Reference Card]&lt;br /&gt;
* [http://infocenter.arm.com/help/topic/com.arm.doc.qrc0001l/QRC0001_UAL.pdf ARM and Thumb -2 Instruction Set Quick Reference Card]&lt;br /&gt;
* [http://infocenter.arm.com/help/topic/com.arm.doc.dvi0025b/DVI0025.pdf ARMv4T] (See section 1.4.13)&lt;br /&gt;
* [http://infocenter.arm.com/help/topic/com.arm.doc.dvi0014a/DVI0014A_ARM10T_PO.pdf ARMv5T] (See section 4.16)&lt;br /&gt;
* [http://www.arm.com/pdfs/ARM-DSP.pdf ARM DSP Enhanced Instruction Set]&lt;br /&gt;
* [http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042c/IHI0042C_aapcs.pdf Procedure Call Standard for the ARM Architecture]&lt;br /&gt;
&lt;br /&gt;
== Hardware Reference ==&lt;br /&gt;
&lt;br /&gt;
* [[Neo1973 Hardware]]&lt;br /&gt;
* [[Neo FreeRunner GTA02 Hardware]]&lt;br /&gt;
&lt;br /&gt;
== Communities ==&lt;br /&gt;
* [http://source.android.com/discuss Android Public Mailing Lists]&lt;br /&gt;
** Specifically, [http://groups.google.com/group/android-porting android-porting]&lt;br /&gt;
* [http://lists.openmoko.org/mailman/listinfo OpenMoko Mailing Lists]&lt;br /&gt;
** Specifically, [http://lists.openmoko.org/mailman/listinfo/openmoko-kernel openmoko-kernel]&lt;br /&gt;
* [http://forum.koolu.org/viewforum.php?f=10 Android on FreeRunner] at KoolU.com&lt;br /&gt;
* [[Openmoko Local Groups]]&lt;br /&gt;
* [[Openmoko:Community_Portal]]&lt;br /&gt;
&lt;br /&gt;
= See also =&lt;br /&gt;
&lt;br /&gt;
* [[Debug_Board]]&lt;br /&gt;
&lt;br /&gt;
= External Links =&lt;br /&gt;
&lt;br /&gt;
[[Category:Distributions]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Ipkg</id>
		<title>Ipkg</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Ipkg"/>
				<updated>2008-10-12T21:53:48Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''NB:''' Current (2008-04-04+) builds of Openmoko now come with the syntax compatible [[Opkg]] tool, not ipkg.&lt;br /&gt;
&lt;br /&gt;
{{Todo|Integrate useful content into [[Opkg]] as a usage section.}}&lt;br /&gt;
&lt;br /&gt;
The practical way to install software on Openmoko is with the [http://handhelds.org/moin/moin.cgi/Ipkg Ipkg package manager], possibly via the graphical Application Manager. Naturally, you need to have obtained an Openmoko system by other means initially.&lt;br /&gt;
&lt;br /&gt;
In the shell, &amp;quot;opkg update&amp;quot; will update the list of available packages, &amp;quot;opkg upgrade&amp;quot; will download and install all packages that have a newer version available and &amp;quot;ipkg install new-app&amp;quot; will download and install &amp;quot;new-app&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Have a look at [[Users Repositories]] to get addresses of alternative software repositories, e.g. ScaredyCat's ipkg repository.&lt;br /&gt;
&lt;br /&gt;
== History ==&lt;br /&gt;
&lt;br /&gt;
Ipkg re-implements for embedded systems the functionality of Debian tools dpkg, apt, and apt-get. For example, it uses much less disk space for the package metadata.&lt;br /&gt;
&lt;br /&gt;
== Installing Packages to the Memory Card ==&lt;br /&gt;
&lt;br /&gt;
You can use ipkg to install packages to a folder on the memory card.  To do this you'll need the following:&lt;br /&gt;
&lt;br /&gt;
=== Ext2 Formatted Memory Card ===&lt;br /&gt;
&lt;br /&gt;
By default, the memory card comes formated with VFAT (Windows Format).  You need to re-format the card with EXT2.  You will not be able to view the files on the card using a windows system after this.&lt;br /&gt;
&lt;br /&gt;
To check if your card is using vfat or ext, run the 'mount' command, and look for: /dev/mmcblk0p1 on /media/card.&lt;br /&gt;
&lt;br /&gt;
On the NEO, run the following:&lt;br /&gt;
''' This will erase everything on your memory card '''&lt;br /&gt;
&lt;br /&gt;
umount /media/card&lt;br /&gt;
fdisk /dev/mmcblk0&lt;br /&gt;
t&lt;br /&gt;
83&lt;br /&gt;
w&lt;br /&gt;
mke2fs /dev/mmcblk0p1&lt;br /&gt;
mount /media/card&lt;br /&gt;
&lt;br /&gt;
=== Entry in opkg.conf File ===&lt;br /&gt;
&lt;br /&gt;
In your /etc/opkg.conf file, after &amp;quot;dest root /&amp;quot; add a new line:&lt;br /&gt;
dest card /media/card/opkg&lt;br /&gt;
&lt;br /&gt;
Create /media/card/opkg folder&lt;br /&gt;
mkdir /media/card/opkg&lt;br /&gt;
&lt;br /&gt;
=== Installing Packages on the Card ===&lt;br /&gt;
&lt;br /&gt;
When installing a package, use the -d option to have the package installed into the &amp;quot;card&amp;quot; destination:&lt;br /&gt;
opkg install -d card python-core&lt;br /&gt;
&lt;br /&gt;
This will put all files (binaries and libraries) on the card, under the folder specified in the ipkg.conf file.&lt;br /&gt;
&lt;br /&gt;
=== Linking/Using Packages on the Card ===&lt;br /&gt;
&lt;br /&gt;
Your system will not be able to see the packages that you just added to your card.  There are two ways to remedy this.&lt;br /&gt;
The better solution is to use ipkg-link from the 'ipkg-utils' package, but 'better' is always subjective - YMMV.&lt;br /&gt;
&lt;br /&gt;
==== 1: Ipkg Utils and ipkg-link ====&lt;br /&gt;
&lt;br /&gt;
Ipkg-utils is a package that provides some additional functionality for ipkg.  A very useful tool is ipkg-link, which creates symbolic links for packages installed in non-root locations (such as a card) back to the root file system.&lt;br /&gt;
&lt;br /&gt;
To make this working with Opkg, you've simply to do:&lt;br /&gt;
ln -s /etc/opkg.conf /etc/ipkg.conf&lt;br /&gt;
ln -s /media/card/opkg/usr/lib/opkg /media/card/opkg/usr/lib/ipkg&lt;br /&gt;
&lt;br /&gt;
To get ipkg-utils, run:&lt;br /&gt;
ipkg install ipkg-utils&lt;br /&gt;
&lt;br /&gt;
To create symbolic links to your root system for a specific package, run: ipkg-link add &amp;lt;package&amp;gt;.  For example, for python-core use:&lt;br /&gt;
ipkg-link add python-core&lt;br /&gt;
&lt;br /&gt;
To create symbolic links for all packages installed in a location, run:&lt;br /&gt;
ipkg-link mount /media/card/ipkg&lt;br /&gt;
&lt;br /&gt;
The ''ipkg-link remove'' and ''ipkg-link unmount'' commands remove the symlinks for a package or all packages.&lt;br /&gt;
&lt;br /&gt;
There is a list of the options for the ipkg command under &amp;quot;How do I use it?&amp;quot; [http://handhelds.org/moin/moin.cgi/Ipkg here.]&lt;br /&gt;
&lt;br /&gt;
==== 2: Adding the card PATH and LIB directories to your path  ====&lt;br /&gt;
Another way to add bin and lib files to your system is by modifying your environment variables in /etc/profile as follows:&lt;br /&gt;
&lt;br /&gt;
On the line that defines the PATH variable, add:&lt;br /&gt;
PATH=$PATH:/usr/local/sbin:/usr/sbin:/sbin:/media/card/ipkg/usr/bin&lt;br /&gt;
&lt;br /&gt;
Then, before the 'export' line add:&lt;br /&gt;
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/media/card/ipkg/usr/lib&lt;br /&gt;
&lt;br /&gt;
Then modify the 'export' line and add LD_LIBRARY_PATH to the end.&lt;br /&gt;
&lt;br /&gt;
This will let the system see the binary and library files, but it will not see other resources, such as images, configuration files, desktop files, etc.  For this reason, ipkg-link is preferred.&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/FreeRunner/Buttons_and_LEDs</id>
		<title>FreeRunner/Buttons and LEDs</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/FreeRunner/Buttons_and_LEDs"/>
				<updated>2008-09-18T04:24:23Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: /* Leds */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the Software specification for the Openmoko Neo FreeRunner Button and LEDs.&lt;br /&gt;
''Note that this is a future specification which is not yet implemented in the software''&lt;br /&gt;
&lt;br /&gt;
=Taxonomy=&lt;br /&gt;
&lt;br /&gt;
==What's currently implemented==&lt;br /&gt;
 /sys/devices/platform/gta02-led.0/leds/gta02-aux:red/&lt;br /&gt;
 /sys/devices/platform/gta02-led.0/leds/gta02-power:blue/&lt;br /&gt;
 /sys/devices/platform/gta02-led.0/leds/gta02-power:orange/&lt;br /&gt;
Those are all userspace directories for controlling the LEDs. echo 0 &amp;gt; brightness will turn the LED off. echo 1 &amp;gt; brightness will turn it on.&lt;br /&gt;
trigger currently does nothing.&lt;br /&gt;
&lt;br /&gt;
==Buttons==&lt;br /&gt;
* AUX = Button on the left side of the device, upper area&lt;br /&gt;
* POWER = Button on the right side of the device, center area (right below the USB socket)&lt;br /&gt;
&lt;br /&gt;
==Leds==&lt;br /&gt;
{| border=1 cellspacing=0 cellpadding=5&lt;br /&gt;
| EVENT&lt;br /&gt;
|style=&amp;quot;background:#FF0000;color:white;&amp;quot;| '''red'''&lt;br /&gt;
| behind AUX button&lt;br /&gt;
|-&lt;br /&gt;
| HEARTBEAT&lt;br /&gt;
|style=&amp;quot;background:#FF8040;color:white;&amp;quot;| '''orange'''&lt;br /&gt;
| behind POWER button&lt;br /&gt;
|-&lt;br /&gt;
| WIRELESS / BLUETOOTH&lt;br /&gt;
|style=&amp;quot;background:#0000FF;color:white;&amp;quot;| '''blue'''&lt;br /&gt;
| behind POWER button&lt;br /&gt;
|-&lt;br /&gt;
| MIXING TWO LEDS&lt;br /&gt;
|style=&amp;quot;background:#80409F;color:white;&amp;quot;| '''purple'''&lt;br /&gt;
| behind POWER button if turning on the blue and the orang buttons together&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Modes==&lt;br /&gt;
* OFF = Device has no power or has been shutdown&lt;br /&gt;
* ON = Device is fully powered&lt;br /&gt;
* ON+CHARGING = Device is fully powered and has been connected to a USB host or Openmoko charger.&lt;br /&gt;
* LOCK = Device is fully powered, but has screen lock displayed&lt;br /&gt;
* SUSPEND = Device has been suspended to low-power mode&lt;br /&gt;
&lt;br /&gt;
=Basic Button Usage=&lt;br /&gt;
&lt;br /&gt;
This is grouped by mode:&lt;br /&gt;
&lt;br /&gt;
==Mode: OFF==&lt;br /&gt;
&lt;br /&gt;
* To switch the device on: Press and hold POWER until the boot logo appears.&lt;br /&gt;
* To enter the &amp;quot;normal&amp;quot; (NAND) boot menu: Press and hold POWER, one second later press and hold AUX.&lt;br /&gt;
* To enter the &amp;quot;rescue&amp;quot; (NOR) boot menu: Press and hold AUX, then press and hold POWER.&lt;br /&gt;
&lt;br /&gt;
==Mode: ON==&lt;br /&gt;
&lt;br /&gt;
* To suspend the device: Press POWER.&lt;br /&gt;
* To shut down the device: Press and hold POWER for 4 seconds. If the device hangs, press and hold POWER for 8 seconds. If it still hangs, remove the battery and disconnect from USB.&lt;br /&gt;
* To go to the home screen: Press AUX.&lt;br /&gt;
* To display the profile screen: Press and hold AUX until it appears.&lt;br /&gt;
&lt;br /&gt;
==Mode: SUSPEND==&lt;br /&gt;
&lt;br /&gt;
* To wakeup the device: Press POWER.&lt;br /&gt;
&lt;br /&gt;
=Basic LED Usage=&lt;br /&gt;
&lt;br /&gt;
LEDs are very useful in broadcasting valuable basic status information to the user in a way that the user does not have to unlock the device, enable the screen or turning the screen saver off and subsequently search the screen for basic status information.&lt;br /&gt;
&lt;br /&gt;
''This is grouped by mode:''&lt;br /&gt;
&lt;br /&gt;
==Mode: OFF==&lt;br /&gt;
&lt;br /&gt;
* All LEDs will be turned off.&lt;br /&gt;
&lt;br /&gt;
==Mode: ON==&lt;br /&gt;
&lt;br /&gt;
* HEARTBEAT will emit a short blink every 4 seconds.&lt;br /&gt;
* If Bluetooth is powered on, WIRELESS will emit a short blink every 2 seconds.&lt;br /&gt;
* If Wifi is powered on, WIRELESS will emit a long blink every 2 seconds.&lt;br /&gt;
* If Bluetooth and Wifi are powered on, WIRELESS will be lit continuosly.&lt;br /&gt;
&lt;br /&gt;
==Mode: ON+CHARGING==&lt;br /&gt;
&lt;br /&gt;
''Same as ON, with the exception of''&lt;br /&gt;
* HEARTBEAT will increase blinking as the charge level of the battery increases.&lt;br /&gt;
* HEARTBEAT will be continuosly lit, if the battery has been fully charged.&lt;br /&gt;
&lt;br /&gt;
==Mode: SUSPEND==&lt;br /&gt;
&lt;br /&gt;
* All LEDs will be turned off.&lt;br /&gt;
&lt;br /&gt;
=Advanced Button/LED Usage=&lt;br /&gt;
&lt;br /&gt;
* In ON-Mode, EVENT will blink every 2 seconds if there's an event that needs your attention.&lt;br /&gt;
* The more events, the faster EVENT will blink.&lt;br /&gt;
* Pressing AUX will acknowledge the event with the topmost priority and display it to you.&lt;br /&gt;
* EVENT will stop to blink once all events have been acknowledged.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=A first rules implementation=&lt;br /&gt;
A C implementation of these rules has been [http://lists.openmoko.org/pipermail/openmoko-devel/2008-July/003458.html done by smurfy - phil] and is available at http://www.smurfy.de/files/neo/openmoko-led-v1.tar.gz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Python Script For Blinking Leds By Beats=&lt;br /&gt;
Reads beats from a file and blinks FreeRunners leds.&lt;br /&gt;
 &lt;br /&gt;
File format is human readable text, consisting of a simple sequence of integer quartet (4 numbers).  The first number representing status of blue power-led, second means status of orange power-led and third means status of red aux-led. 0=OFF, 1=ON. (If blue=1 and orange=1 then power=lila. This has nothing to do with this python script or this file format.) The last number represents the duration in milliseconds to hold that situation of leds.  Any non digit characters in the file count as a separators between numbers, but are otherwise ignored.&lt;br /&gt;
&lt;br /&gt;
It requires packages python-core and python-re from opkg.&lt;br /&gt;
==== Led blinker ====&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &amp;quot;&amp;quot;&amp;quot;Led Blinker Player&lt;br /&gt;
 &lt;br /&gt;
 Usage: python leds.py [filename]&lt;br /&gt;
 &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
 import sys&lt;br /&gt;
 import time&lt;br /&gt;
 import re&lt;br /&gt;
 &lt;br /&gt;
 def loadFromTextFile(filename):&lt;br /&gt;
    infile = open(filename)&lt;br /&gt;
    contents = infile.read()&lt;br /&gt;
    return re.findall(&amp;quot;(\d+)\D*(\d+)\D*(\d+)\D*(\d+)&amp;quot;, contents)&lt;br /&gt;
 &lt;br /&gt;
 def playNote(blue_value, orange_value, red_value, duration):&lt;br /&gt;
    blue.write(str(blue_value) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    orange.write(str(orange_value) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    red.write(str(red_value) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    time.sleep(float(duration) / 1000.0)&lt;br /&gt;
 &lt;br /&gt;
 def playFile(filename):&lt;br /&gt;
    global blue, orange, red &lt;br /&gt;
    notes = loadFromTextFile(filename)&lt;br /&gt;
    blue = open(&amp;quot;/sys/class/leds/gta02-power:blue/brightness&amp;quot;, &amp;quot;w&amp;quot;, 1)&lt;br /&gt;
    orange = open(&amp;quot;/sys/class/leds/gta02-power:orange/brightness&amp;quot;, &amp;quot;w&amp;quot;, 1)&lt;br /&gt;
    red = open(&amp;quot;/sys/class/leds/gta02-aux:red/brightness&amp;quot;, &amp;quot;w&amp;quot;, 1)&lt;br /&gt;
 &lt;br /&gt;
    for first,second,third, duration in notes:&lt;br /&gt;
        playNote(first,second,third,duration)&lt;br /&gt;
 &lt;br /&gt;
    playNote(0, 0, 0, 0)&lt;br /&gt;
    blue.close()&lt;br /&gt;
    orange.close()&lt;br /&gt;
    red.close()&lt;br /&gt;
 &lt;br /&gt;
 if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    playFile(sys.argv[1])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Example Beat ====&lt;br /&gt;
The following is an example &amp;quot;fireworks&amp;quot;-file that can be used to test the led blinker.&lt;br /&gt;
&lt;br /&gt;
 1 0 0 100&lt;br /&gt;
 1 0 1 100&lt;br /&gt;
 1 1 0 100&lt;br /&gt;
 0 1 0 100&lt;br /&gt;
 0 1 1 100&lt;br /&gt;
 0 0 1 100&lt;br /&gt;
 1 1 1 100&lt;br /&gt;
 1 0 0 100&lt;br /&gt;
 1 0 1 100&lt;br /&gt;
 1 1 0 100&lt;br /&gt;
 0 1 0 100&lt;br /&gt;
 0 1 1 100&lt;br /&gt;
 0 0 1 100&lt;br /&gt;
 1 1 1 100&lt;br /&gt;
 1 0 0 100&lt;br /&gt;
 1 0 1 100&lt;br /&gt;
 1 1 0 100&lt;br /&gt;
 0 1 0 100&lt;br /&gt;
 0 1 1 100&lt;br /&gt;
 0 0 1 100&lt;br /&gt;
 1 1 1 100&lt;br /&gt;
&lt;br /&gt;
[[Category:Neo FreeRunner Hardware]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Themes</id>
		<title>Themes</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Themes"/>
				<updated>2008-09-16T14:54:09Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This page is a stub about making Openmoko pretty, waiting for openmono-look.org .&lt;br /&gt;
&lt;br /&gt;
One may already [[Customize Application Icons]], change [[Ringtones]] and customize the windows decoration with [[Edje]].&lt;br /&gt;
But there is not much yet by way of ready-to-use themes for changing the look and feel of the phone with `opkg'.&lt;br /&gt;
&lt;br /&gt;
== Where to find themes ==&lt;br /&gt;
&lt;br /&gt;
A Tango variant for Illume based distros is at [http://52grad.de/.stuff/freerunner/].&lt;br /&gt;
&lt;br /&gt;
A GTK theme for the tango theme is at [http://www.3v1n0.net/openmoko/moko-sun-gtkrc]&lt;br /&gt;
&lt;br /&gt;
The [http://exchange.enlightenment.org/ Enlightenment exchange] repository has themes, modules and applications.&lt;br /&gt;
&lt;br /&gt;
There are a few background images for the [[Display Locker]] screen in Om 2007.2.&lt;br /&gt;
&lt;br /&gt;
== How to customize the boot screens ==&lt;br /&gt;
&lt;br /&gt;
There are three steps: u-boot, kernel and X.&lt;br /&gt;
&lt;br /&gt;
=== Changing the u-boot splash image ===&lt;br /&gt;
&lt;br /&gt;
The u-boot splash image is on its own partition. According to ticket &amp;lt;strike&amp;gt;[http://docs.openmoko.org/trac/ticket/1735 1735]&amp;lt;/strike&amp;gt;:&lt;br /&gt;
 To replace the splash screen image on the device you need to convert the PNG file to a compressed raw frame buffer content and then flash this into the splash screen partition.&lt;br /&gt;
 For the conversion, go to svn.openmoko.org/trunk/src/host/splash/ and run&lt;br /&gt;
   ./splashimg.pl boot_image.png | gzip -9 &amp;gt;new_splash.gz&lt;br /&gt;
 If your update process runs under Linux (OE package ?) you'd then execute the following commands:&lt;br /&gt;
   flash_eraseall /dev/mtd4&lt;br /&gt;
   nandwrite -p /dev/mtd4 new_splash.gz&lt;br /&gt;
 If you update through DFU, you would:&lt;br /&gt;
   dfu-util -a splash -R -D new_splash.gz&lt;br /&gt;
 Note the NOR also contains a copy of the splash screen. If you generate a new NOR image with &amp;quot;mknor&amp;quot;, just specify the new image with -s boot_image.png, and it will put the &amp;quot;openmoko&amp;quot; text near the bottom of the screen. &lt;br /&gt;
&lt;br /&gt;
=== Changing the Kernel's boot splash image ===&lt;br /&gt;
&lt;br /&gt;
TBD&lt;br /&gt;
&lt;br /&gt;
=== Changing X's startup ===&lt;br /&gt;
&lt;br /&gt;
TBD&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/FreeRunner/Buttons_and_LEDs</id>
		<title>FreeRunner/Buttons and LEDs</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/FreeRunner/Buttons_and_LEDs"/>
				<updated>2008-09-03T03:14:58Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is the Software specification for the Openmoko Neo FreeRunner Button and LEDs.&lt;br /&gt;
''Note that this is a future specification which is not yet implemented in the software''&lt;br /&gt;
&lt;br /&gt;
=Taxonomy=&lt;br /&gt;
&lt;br /&gt;
==What's currently implemented==&lt;br /&gt;
 /sys/devices/platform/gta02-led.0/leds/gta02-aux:red/&lt;br /&gt;
 /sys/devices/platform/gta02-led.0/leds/gta02-power:blue/&lt;br /&gt;
 /sys/devices/platform/gta02-led.0/leds/gta02-power:orange/&lt;br /&gt;
Those are all userspace directories for controlling the LEDs. echo 0 &amp;gt; brightness will turn the LED off. echo 1 &amp;gt; brightness will turn it on.&lt;br /&gt;
trigger currently does nothing.&lt;br /&gt;
&lt;br /&gt;
==Buttons==&lt;br /&gt;
* AUX = Button on the left side of the device, upper area&lt;br /&gt;
* POWER = Button on the right side of the device, center area (right below the USB socket)&lt;br /&gt;
&lt;br /&gt;
==Leds==&lt;br /&gt;
{| border=1 cellspacing=0 cellpadding=5&lt;br /&gt;
| EVENT&lt;br /&gt;
|style=&amp;quot;background:#FF0000;color:white;&amp;quot;| '''red'''&lt;br /&gt;
| behind AUX button&lt;br /&gt;
|-&lt;br /&gt;
| HEARTBEAT&lt;br /&gt;
|style=&amp;quot;background:#FF8040;color:white;&amp;quot;| '''orange'''&lt;br /&gt;
| behind POWER button&lt;br /&gt;
|-&lt;br /&gt;
| WIRELESS&lt;br /&gt;
|style=&amp;quot;background:#0000FF;color:white;&amp;quot;| '''blue'''&lt;br /&gt;
| behind POWER button&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Modes==&lt;br /&gt;
* OFF = Device has no power or has been shutdown&lt;br /&gt;
* ON = Device is fully powered&lt;br /&gt;
* ON+CHARGING = Device is fully powered and has been connected to a USB host or Openmoko charger.&lt;br /&gt;
* LOCK = Device is fully powered, but has screen lock displayed&lt;br /&gt;
* SUSPEND = Device has been suspended to low-power mode&lt;br /&gt;
&lt;br /&gt;
=Basic Button Usage=&lt;br /&gt;
&lt;br /&gt;
This is grouped by mode:&lt;br /&gt;
&lt;br /&gt;
==Mode: OFF==&lt;br /&gt;
&lt;br /&gt;
* To switch the device on: Press and hold POWER until the boot logo appears.&lt;br /&gt;
* To enter the &amp;quot;normal&amp;quot; (NAND) boot menu: Press and hold POWER, one second later press and hold AUX.&lt;br /&gt;
* To enter the &amp;quot;rescue&amp;quot; (NOR) boot menu: Press and hold AUX, then press and hold POWER.&lt;br /&gt;
&lt;br /&gt;
==Mode: ON==&lt;br /&gt;
&lt;br /&gt;
* To suspend the device: Press POWER.&lt;br /&gt;
* To shut down the device: Press and hold POWER for 4 seconds. If the device hangs, press and hold POWER for 8 seconds. If it still hangs, remove the battery and disconnect from USB.&lt;br /&gt;
* To go to the home screen: Press AUX.&lt;br /&gt;
* To display the profile screen: Press and hold AUX until it appears.&lt;br /&gt;
&lt;br /&gt;
==Mode: SUSPEND==&lt;br /&gt;
&lt;br /&gt;
* To wakeup the device: Press POWER.&lt;br /&gt;
&lt;br /&gt;
=Basic LED Usage=&lt;br /&gt;
&lt;br /&gt;
LEDs are very useful in broadcasting valuable basic status information to the user in a way that the user does not have to unlock the device, enable the screen or turning the screen saver off and subsequently search the screen for basic status information.&lt;br /&gt;
&lt;br /&gt;
''This is grouped by mode:''&lt;br /&gt;
&lt;br /&gt;
==Mode: OFF==&lt;br /&gt;
&lt;br /&gt;
* All LEDs will be turned off.&lt;br /&gt;
&lt;br /&gt;
==Mode: ON==&lt;br /&gt;
&lt;br /&gt;
* HEARTBEAT will emit a short blink every 4 seconds.&lt;br /&gt;
* If Bluetooth is powered on, WIRELESS will emit a short blink every 2 seconds.&lt;br /&gt;
* If Wifi is powered on, WIRELESS will emit a long blink every 2 seconds.&lt;br /&gt;
* If Bluetooth and Wifi are powered on, WIRELESS will be lit continuosly.&lt;br /&gt;
&lt;br /&gt;
==Mode: ON+CHARGING==&lt;br /&gt;
&lt;br /&gt;
''Same as ON, with the exception of''&lt;br /&gt;
* HEARTBEAT will increase blinking as the charge level of the battery increases.&lt;br /&gt;
* HEARTBEAT will be continuosly lit, if the battery has been fully charged.&lt;br /&gt;
&lt;br /&gt;
==Mode: SUSPEND==&lt;br /&gt;
&lt;br /&gt;
* All LEDs will be turned off.&lt;br /&gt;
&lt;br /&gt;
=Advanced Button/LED Usage=&lt;br /&gt;
&lt;br /&gt;
* In ON-Mode, EVENT will blink every 2 seconds if there's an event that needs your attention.&lt;br /&gt;
* The more events, the faster EVENT will blink.&lt;br /&gt;
* Pressing AUX will acknowledge the event with the topmost priority and display it to you.&lt;br /&gt;
* EVENT will stop to blink once all events have been acknowledged.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=A first rules implementation=&lt;br /&gt;
A C implementation of these rules has been [http://lists.openmoko.org/pipermail/openmoko-devel/2008-July/003458.html done by smurfy - phil] and is available at http://www.smurfy.de/files/neo/openmoko-led-v1.tar.gz&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Python Script For Blinking Leds By Beats=&lt;br /&gt;
Reads beats from a file and blinks FreeRunners leds.&lt;br /&gt;
 &lt;br /&gt;
File format is human readable text, consisting of a simple sequence of integer quartet (4 numbers).  The first number representing status of blue power-led, second means status of orange power-led and third means status of red aux-led. 0=OFF, 1=ON. (If blue=1 and orange=1 then power=lila. This has nothing to do with this python script or this file format.) The last number represents the duration in milliseconds to hold that situation of leds.  Any non digit characters in the file count as a separators between numbers, but are otherwise ignored.&lt;br /&gt;
&lt;br /&gt;
It requires packages python-core and python-re from opkg.&lt;br /&gt;
==== Led blinker ====&lt;br /&gt;
&lt;br /&gt;
 #!/usr/bin/python&lt;br /&gt;
 &amp;quot;&amp;quot;&amp;quot;Led Blinker Player&lt;br /&gt;
 &lt;br /&gt;
 Usage: python leds.py [filename]&lt;br /&gt;
 &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
 import sys&lt;br /&gt;
 import time&lt;br /&gt;
 import re&lt;br /&gt;
 &lt;br /&gt;
 def loadFromTextFile(filename):&lt;br /&gt;
    infile = open(filename)&lt;br /&gt;
    contents = infile.read()&lt;br /&gt;
    return re.findall(&amp;quot;(\d+)\D*(\d+)\D*(\d+)\D*(\d+)&amp;quot;, contents)&lt;br /&gt;
 &lt;br /&gt;
 def playNote(blue_value, orange_value, red_value, duration):&lt;br /&gt;
    blue.write(str(blue_value) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    orange.write(str(orange_value) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    red.write(str(red_value) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    time.sleep(float(duration) / 1000.0)&lt;br /&gt;
 &lt;br /&gt;
 def playFile(filename):&lt;br /&gt;
    global blue, orange, red &lt;br /&gt;
    notes = loadFromTextFile(filename)&lt;br /&gt;
    blue = open(&amp;quot;/sys/class/leds/gta02-power:blue/brightness&amp;quot;, &amp;quot;w&amp;quot;, 1)&lt;br /&gt;
    orange = open(&amp;quot;/sys/class/leds/gta02-power:orange/brightness&amp;quot;, &amp;quot;w&amp;quot;, 1)&lt;br /&gt;
    red = open(&amp;quot;/sys/class/leds/gta02-aux:red/brightness&amp;quot;, &amp;quot;w&amp;quot;, 1)&lt;br /&gt;
 &lt;br /&gt;
    for first,second,third, duration in notes:&lt;br /&gt;
        playNote(first,second,third,duration)&lt;br /&gt;
 &lt;br /&gt;
    playNote(0, 0, 0, 0)&lt;br /&gt;
    blue.close()&lt;br /&gt;
    orange.close()&lt;br /&gt;
    red.close()&lt;br /&gt;
 &lt;br /&gt;
 if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    playFile(sys.argv[1])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== Example Beat ====&lt;br /&gt;
The following is an example &amp;quot;fireworks&amp;quot;-file that can be used to test the led blinker.&lt;br /&gt;
&lt;br /&gt;
 1 0 0 100&lt;br /&gt;
 1 0 1 100&lt;br /&gt;
 1 1 0 100&lt;br /&gt;
 0 1 0 100&lt;br /&gt;
 0 1 1 100&lt;br /&gt;
 0 0 1 100&lt;br /&gt;
 1 1 1 100&lt;br /&gt;
 1 0 0 100&lt;br /&gt;
 1 0 1 100&lt;br /&gt;
 1 1 0 100&lt;br /&gt;
 0 1 0 100&lt;br /&gt;
 0 1 1 100&lt;br /&gt;
 0 0 1 100&lt;br /&gt;
 1 1 1 100&lt;br /&gt;
 1 0 0 100&lt;br /&gt;
 1 0 1 100&lt;br /&gt;
 1 1 0 100&lt;br /&gt;
 0 1 0 100&lt;br /&gt;
 0 1 1 100&lt;br /&gt;
 0 0 1 100&lt;br /&gt;
 1 1 1 100&lt;br /&gt;
&lt;br /&gt;
[[Category:Neo FreeRunner Hardware]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Video_Player</id>
		<title>Video Player</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Video_Player"/>
				<updated>2008-09-01T02:58:59Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Not a proper 'app' page, just an overview&lt;br /&gt;
&lt;br /&gt;
=FreeRunner=&lt;br /&gt;
It plays mpeg-4 320x240 stretched fullscreen, however other formats will require transcoding.&lt;br /&gt;
&lt;br /&gt;
==Playback==&lt;br /&gt;
The default media player doesn't seem to handle video very well, but mplayer does OK.&lt;br /&gt;
&lt;br /&gt;
=== Using standard Mplayer ===&lt;br /&gt;
It can be installed with the following command:&lt;br /&gt;
 opkg install mplayer&lt;br /&gt;
&lt;br /&gt;
=== Using the Glamo XV acceleration ===&lt;br /&gt;
TBD, refer to: http://unadventure.wordpress.com/2008/06/08/accelerating-in-my-pocket/&lt;br /&gt;
&lt;br /&gt;
=== Controlling MPlayer from the Touchscreen ===&lt;br /&gt;
Create a file in /home/root/.mplayer/input.conf with this content:&lt;br /&gt;
 # Freerunner Optimizations&lt;br /&gt;
 MOUSE_BTN0 vo_fullscreen&lt;br /&gt;
 MOUSE_BTN0_DBL q&lt;br /&gt;
Now, you can toggle the fullscreen by tapping the screen and exit from mplayer by touble-tapping the LCD.&lt;br /&gt;
Accelerometers or hardware buttons could help more.&lt;br /&gt;
&lt;br /&gt;
=== Playback helper script ===&lt;br /&gt;
&lt;br /&gt;
Create a script named 'vidplay' in your home directory with the following commands:&lt;br /&gt;
 #!/bin/sh&lt;br /&gt;
 xrandr -display :0 --output default --mode 240x320&lt;br /&gt;
 mplayer -vo fbdev &amp;quot;$1&amp;quot; &amp;gt; /dev/null&lt;br /&gt;
 xrandr -display :0 --output default --mode 480x640&lt;br /&gt;
 reset&lt;br /&gt;
&lt;br /&gt;
Make the script executable:&lt;br /&gt;
 chmod 755 /home/root/vidplay&lt;br /&gt;
&lt;br /&gt;
Known issues with this approach:&lt;br /&gt;
*The output isn't in a proper window, so background stuff sometimes flickers through.&lt;br /&gt;
*When done on the local terminal the keyboard is obscured so you can't exit.  SSH works quite well.&lt;br /&gt;
*240x320 mode has some quirks:&lt;br /&gt;
**The gamma/brightness/contrast is weird.  Encoding adjustments into the media is a workaround.&lt;br /&gt;
**Vertical banding (as seen in landscape position) is quite noticeable.&lt;br /&gt;
*Using CTRL-C to exit vidplay doesn't reset the screen; use 'q' instead.&lt;br /&gt;
&lt;br /&gt;
Despite these issues, it proves that the horsepower is there and it can be done.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Another derivated method : works like a charm for me ! ===&lt;br /&gt;
No ssh, no xrandr, no script needed, juste mplayer and qwerty keyboard :&lt;br /&gt;
Like it's said in the &amp;quot;Getting started with FreeRunner&amp;quot; wiki page, you have to install the full qwerty keyboard, see [http://www.ginguppin.de/node/15 these instructions].&lt;br /&gt;
After that, you can go to Terminal and type :&lt;br /&gt;
 mplayer vid/my_video.avi&lt;br /&gt;
Mplayer starts in full screen, if your video is optimized like below 240x320 it's work like a charm and to quit just use the power button.&lt;br /&gt;
&lt;br /&gt;
Only issue : You can't forward/backward/pause...&lt;br /&gt;
&lt;br /&gt;
==Example - Big Buck Bunny==&lt;br /&gt;
===PC===&lt;br /&gt;
Download the source (no need to start with the giant full resolution version)&lt;br /&gt;
 cd /tmp&lt;br /&gt;
 wget http://mirror.botux.net/pub/peach.blender/psp/big_buck_bunny_480p_AVC_FW33.mp4&lt;br /&gt;
&lt;br /&gt;
Transcode it&lt;br /&gt;
 mencoder big_buck_bunny_480p_AVC_FW33.mp4 -ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=300 -vf crop=720:480:0:0,rotate=2,scale=-2:320,eq=1.2:0.5:-0.25 -oac mp3lame -lameopts br=64:cbr -o big_buck_bunny_320.avi&lt;br /&gt;
&lt;br /&gt;
=== FreeRunner===&lt;br /&gt;
Transfer the resulting 27M file from the PC to the FreeRunner's MicroSD card&lt;br /&gt;
 scp user@192.168.0.200:/tmp/big_buck_bunny_320.avi /media/card&lt;br /&gt;
&lt;br /&gt;
Play it&lt;br /&gt;
 /home/root/vidplay /media/card/big_buck_bunny_320.avi&lt;br /&gt;
&lt;br /&gt;
Now go outside and play; you've been spending too much time at the computer.&lt;br /&gt;
==Other Info==&lt;br /&gt;
&lt;br /&gt;
To rotate the screen:&lt;br /&gt;
 xrandr -o 0&lt;br /&gt;
 xrandr -o 1&lt;br /&gt;
&lt;br /&gt;
=Neo1973=&lt;br /&gt;
&lt;br /&gt;
Video is problematic on [[Neo 1973]].&lt;br /&gt;
&lt;br /&gt;
On the minus side.&lt;br /&gt;
*The CPU is certainly not fast enough to decode 480*640 video.&lt;br /&gt;
*The display is portrait, which means that an additional rotation step is needed for most landscape video, adding to CPU usage.&lt;br /&gt;
*Downloading an arbitrary video, and playing it without transcoding it, then playing it later will not be possible.&lt;br /&gt;
However.&lt;br /&gt;
&lt;br /&gt;
On the positive side.&lt;br /&gt;
*The LCD can be switched to a 240*320 stretch mode, which is much less taxing.&lt;br /&gt;
*Re-encoding video to rotate it, and scale to 320*240, and encoding with a low CPU use codec such as MPEG-1 may well make half-screen doubled videos playable at 25fps.&lt;br /&gt;
*If not, then it almost certainly will be possible at 12fps.&lt;br /&gt;
&lt;br /&gt;
==Mode Switching==&lt;br /&gt;
For switching between QVGA and VGA mode do the following with a compatible kernel:&lt;br /&gt;
 chvt 4 &amp;amp;&amp;amp; echo qvga-normal &amp;gt; /sys/devices/platform/s3c24xx-spi-gpio.1/spi0.0/state &amp;amp;&amp;amp; fbset qvga&lt;br /&gt;
vice versa:&lt;br /&gt;
 echo normal &amp;gt; /sys/devices/platform/s3c24xx-spi-gpio.1/spi0.0/state &amp;amp;&amp;amp; fbset vga &amp;amp;&amp;amp; chvt 3&lt;br /&gt;
taken from http://lists.openmoko.org/pipermail/neo1973-hardware/2007-October/000267.html&lt;br /&gt;
&lt;br /&gt;
To avoid console blanking type&lt;br /&gt;
 echo -e '\033[9;0]' &amp;gt; /dev/ttyX&lt;br /&gt;
where 'X' is your terminal number - for example if you did chvt 4 then /dev/tty4 is your terminal.&lt;br /&gt;
&lt;br /&gt;
To avoid kernel output in vt do&lt;br /&gt;
 echo 0 &amp;gt; /proc/sys/kernel/printk&lt;br /&gt;
&lt;br /&gt;
==User Reports==&lt;br /&gt;
From a conversation with XorA, in the [irc://freenode.com/#openmoko IRC channel].&lt;br /&gt;
&lt;br /&gt;
400kbps mpeg4 works on a 200Mhz neo (without sound) on prerotated 240*320 ffmpeg codec videos, at 25fps, using stock mplayer.&lt;br /&gt;
&lt;br /&gt;
With sound, this drops to 18fps.&lt;br /&gt;
&lt;br /&gt;
There are optimisations for mplayer that look promising to get 25fps with sound.&lt;br /&gt;
&lt;br /&gt;
==Playback using 480x640 / 640x480==&lt;br /&gt;
&lt;br /&gt;
To get best speed on GTA01 (best size-speed-resolution-codec trade-off I could find - doesn't mean it's perfect though) crosscode using:&lt;br /&gt;
 mencoder &amp;lt;sourcefile&amp;gt; -o &amp;lt;targetfile.avi&amp;gt; -ofps 13 -vf scale -zoom -xy 240 -af channels=1:0:0:1:0 -oac lavc -ovc lavc -lavcopts acodec=mp3:vcodec=h263p:autoaspect=1:vbitrate=300:abitrate=32&lt;br /&gt;
&lt;br /&gt;
Also working okay:&lt;br /&gt;
 mencoder &amp;lt;sourcefile&amp;gt; -o &amp;lt;targetfile.avi&amp;gt; -ofps 13 -vf scale -zoom -xy 352 -af channels=1:0:0:1:0 -oac lavc -ovc lavc -lavcopts acodec=mp3:vcodec=h263p:autoaspect=1:vbitrate=200:abitrate=32&lt;br /&gt;
&lt;br /&gt;
You can playback the file using:&lt;br /&gt;
 mplayer -sws 0 -nodouble -vo sdl -fs -framedrop &amp;lt;tagetfile.avi&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may also want to use:&lt;br /&gt;
 -autosync 30 -vf scale -zoom -xy 640 -vf rotate=1&lt;br /&gt;
&lt;br /&gt;
=Transcoding=&lt;br /&gt;
To make your videos/DVDs compatible use mencoder like this:&lt;br /&gt;
Find out the -vf cropping parameters with&lt;br /&gt;
 mplayer input.avi -vf cropdetect&lt;br /&gt;
let it run a few seconds and insert the given cropping values into this command&lt;br /&gt;
 mencoder input.avi -ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=300 -vf crop=xx:xx:xx:xx,rotate=2,scale=-2:320 -oac mp3lame -lameopts br=64:cbr -o output2.avi&lt;br /&gt;
To encode a DVD first find out the -vf cropping parameters with&lt;br /&gt;
 mplayer -dvd-device /path/to/dvd dvd:// -vf cropdetect -sb 50000000&lt;br /&gt;
let it run a few seconds and insert the given cropping values into this command&lt;br /&gt;
 mencoder -dvd-device /path/to/dvd dvd:// -ovc lavc -lavcopts vcodec=mpeg4:vhq:vbitrate=300 -vf crop=xx:xx:xx:xx,rotate=2,scale=-2:320 -oac mp3lame -lameopts br=64:cbr -o output.avi&lt;br /&gt;
This will rotate the video/DVD, scale it and encode it to mpeg4 with a bitrate of 300kBit/s. Works like a charm.&lt;br /&gt;
&lt;br /&gt;
[[Category:Openmoko]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Backup</id>
		<title>Backup</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Backup"/>
				<updated>2008-08-31T23:36:15Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: /* Backing up everything */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Backing up just /home/root ==&lt;br /&gt;
&lt;br /&gt;
To backup the home folder (all your files personal files in theory).&lt;br /&gt;
&lt;br /&gt;
From the desktop pc run:&lt;br /&gt;
&lt;br /&gt;
 ssh root@phone 'tar -cpz /home/root' &amp;gt; moko-home-`date +%Y%m%d-%H%M%S`.tar.gz&lt;br /&gt;
&lt;br /&gt;
Where phone is the ip address of your phone (192.168.0.202).&lt;br /&gt;
&lt;br /&gt;
Personally I added an entry to /etc/hosts so the above works for me. I also added the desktop key to /home/root/.ssh/authorized_keys on the phone as per the instructions in [[USB_Networking#SSH_Keys]].&lt;br /&gt;
&lt;br /&gt;
If you want to check what is in the backup, run the following, replacing the filename with what was just created.&lt;br /&gt;
&lt;br /&gt;
 tar -tzf moko-home-20080802-203108.tar.gz | less&lt;br /&gt;
&lt;br /&gt;
[http://timwise.wikispaces.com/my+neo+freerunner reference]&lt;br /&gt;
&lt;br /&gt;
== Backing up everything ==&lt;br /&gt;
&lt;br /&gt;
You may either :&lt;br /&gt;
* Backup the flash contents, in order to be able to restore (see bellow)&lt;br /&gt;
* or move the system to SD to be able to boot it from SD in case of need. See [[Moving current system from flash to SD]]&lt;br /&gt;
&lt;br /&gt;
=== Backing-up flash images ===&lt;br /&gt;
&lt;br /&gt;
You will need the [[Dfu-util]] to make a backup of your existing image.&lt;br /&gt;
&lt;br /&gt;
As when [[Flashing_the_Neo_FreeRunner|flashing]], you will need to be in [[Booting_the_Neo_FreeRunner#Log_into_U-Boot_in_the_NOR_Flash|U-Boot in the NOR Flash]]. Log into the NOR uBoot menu and select ''Set console to USB'' (for NRF just stay in NOR uBoot menu, do not select or enter anything). Now you will be able to flash, make backups of your FreeRunner or query the FreeRunner with [[Dfu-util|dfu-util]].  Backup is fairly slow; it took over ten minutes to back up a 247 MB rootfs.&lt;br /&gt;
&lt;br /&gt;
It is important that you connect the USB cable directly from your computer to your phone.  If there is a hub between them, backup (and flashing) will mostly likely fail.&lt;br /&gt;
&lt;br /&gt;
{{note|On a Windows host, omit the &amp;quot;./&amp;quot; or &amp;quot;sudo ./&amp;quot; that precedes the commands listed on this page}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
sudo ./dfu-util -a kernel -R -U good-kernel.bin&lt;br /&gt;
sudo ./dfu-util -a rootfs -R -U good-rootfs.jffs2&lt;br /&gt;
sudo ./dfu-util -a splash -R -U good-splash.bin&lt;br /&gt;
sudo ./dfu-util -a u-boot -R -U good-u-boot.bin&lt;br /&gt;
sudo ./dfu-util -a u-boot_env -R -U good-u-boot_env.bin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here is what a successful dfu-util backup run looks like:&lt;br /&gt;
&lt;br /&gt;
on the host PC:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
$ sudo ./dfu-util -a kernel -R -U good-kernel.img&lt;br /&gt;
dfu-util - (C) 2007 by Openmoko Inc.&lt;br /&gt;
This program is Free Software and has ABSOLUTELY NO WARRANTY&lt;br /&gt;
&lt;br /&gt;
Opening USB Device 0x0000:0x0000...&lt;br /&gt;
Claiming USB DFU Runtime Interface...&lt;br /&gt;
Determining device status: state = appIDLE, status = 0&lt;br /&gt;
Device really in Runtime Mode, send DFU detach request...&lt;br /&gt;
Resetting USB...&lt;br /&gt;
Opening USB Device...&lt;br /&gt;
Found Runtime: [0x1d50:0x5119] devnum=12, cfg=0, intf=0, alt=3, name=&amp;quot;kernel&amp;quot;&lt;br /&gt;
Claiming USB DFU Interface...&lt;br /&gt;
Setting Alternate Setting ...&lt;br /&gt;
Determining device status: state = dfuIDLE, status = 0&lt;br /&gt;
dfuIDLE, continuing&lt;br /&gt;
Transfer Size = 0x1000&lt;br /&gt;
Resetting USB to switch back to runtime mode&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
on the FreeRunner:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DFU: Switching to DFU Mode&lt;br /&gt;
DEVICE_CONFIGURED: 1&lt;br /&gt;
Starting DFU Upload of partition 'kernel'&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A failed run of dfu-util looks like this:&lt;br /&gt;
&lt;br /&gt;
 dfu-util - (C) 2007 by Openmoko Inc.&lt;br /&gt;
 This program is Free Software and has ABSOLUTELY NO WARRANTY&lt;br /&gt;
 &lt;br /&gt;
 Opening USB Device 0x0000:0x0000...&lt;br /&gt;
 Claiming USB DFU Runtime Interface... &lt;br /&gt;
 Determining device status: state = appIDLE, status = 0&lt;br /&gt;
 Device really in Runtime Mode, send DFU detach request...&lt;br /&gt;
 Resetting USB... &lt;br /&gt;
 Opening USB Device...&lt;br /&gt;
 Found Runtime: [0x1d50:0x5119] devnum=20, cfg=0, intf=0, alt=6, name=&amp;quot;rootfs&amp;quot;&lt;br /&gt;
 Claiming USB DFU Interface...&lt;br /&gt;
 Setting Alternate Setting ...&lt;br /&gt;
 Determining device status: state = dfuIDLE, status = 0&lt;br /&gt;
 dfuIDLE, continuing&lt;br /&gt;
 Transfer Size = 0x1000&lt;br /&gt;
 dfu_upload error -110&lt;br /&gt;
&lt;br /&gt;
And shows errors demsg like this:&lt;br /&gt;
 usb 5-2: usbfs: USBDEVFS_CONTROL failed cmd dfu-util rqt 161 rq 2 len 4096 ret -110&lt;br /&gt;
&lt;br /&gt;
=== Backing-up flash images (alternative) ===&lt;br /&gt;
&lt;br /&gt;
On the device:&lt;br /&gt;
 mkdir /var/tmp/root&lt;br /&gt;
 mount /dev/root /var/tmp/root&lt;br /&gt;
&lt;br /&gt;
On your workstation:&lt;br /&gt;
 ssh root@192.168.0.202 &amp;quot;mkfs.jffs2 -d /var/tmp/root -e 128 --pad --no-cleanmarkers&amp;quot; | pv -W &amp;gt; rootfs.jffs2&lt;br /&gt;
(The &amp;quot;| pv -W&amp;quot; is optional, it just gives you something to watch as the bytes fly by.)&lt;br /&gt;
&lt;br /&gt;
On the device:&lt;br /&gt;
 umount /var/tmp/root&lt;br /&gt;
&lt;br /&gt;
=== Backing-up in a tar archive ===&lt;br /&gt;
&lt;br /&gt;
 ssh root@192.168.0.202 &amp;quot;tar c /bin /etc /home /lib /opt /sbin /tmp /usr /var&amp;quot; | pv -W &amp;gt; rootfs.tar&lt;br /&gt;
(The &amp;quot;| pv -W&amp;quot; is optional, it just gives you something to watch as the bytes fly by.)&lt;br /&gt;
&lt;br /&gt;
Extract it and use &amp;lt;code&amp;gt;mkfs.jffs2&amp;lt;/code&amp;gt; if you want convert it to a jffs2 image.&lt;br /&gt;
&lt;br /&gt;
==Backup Scripts==&lt;br /&gt;
&lt;br /&gt;
If you plan on backing up frequently, using a script will simplify the process:&lt;br /&gt;
&lt;br /&gt;
===Simple backup script===&lt;br /&gt;
&lt;br /&gt;
This script works well if you want to configure it to backup always the same device.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/sh&lt;br /&gt;
#&lt;br /&gt;
# Back up all partitions of the phone to a backup directory,&lt;br /&gt;
# adding today's date to the saved filenames.&lt;br /&gt;
&lt;br /&gt;
DATE=`date +%Y-%m-%d`&lt;br /&gt;
DFU=./dfu-util&lt;br /&gt;
BACKUP_DIR=bak/&lt;br /&gt;
&lt;br /&gt;
${DFU} -a kernel -R -U ${BACKUP_DIR}kernel-${DATE}.bin&lt;br /&gt;
${DFU} -a rootfs -R -U ${BACKUP_DIR}rootfs-${DATE}.jffs2&lt;br /&gt;
${DFU} -a splash -R -U ${BACKUP_DIR}splash-${DATE}.bin&lt;br /&gt;
${DFU} -a u-boot -R -U ${BACKUP_DIR}u-boot-${DATE}.bin&lt;br /&gt;
${DFU} -a u-boot_env -R -U ${BACKUP_DIR}u-boot_env-${DATE}.bin&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Interactive script===&lt;br /&gt;
&lt;br /&gt;
This script is based on the above &amp;quot;Simple backup script&amp;quot; (by unknown). It does the backup of what you want and choose promting you for choices. Enjoy it! test it! contribute! You can find us at /server irc.freenode.net /j #openmoko and we'll be pleased to accept you help (ideas || code).                                &lt;br /&gt;
&lt;br /&gt;
NOTE that the script works for me(tm) but it still needs some love. especially on traps and catches for wrong choices.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
#############################################################################################################&lt;br /&gt;
##                                                                                                         ##&lt;br /&gt;
## This script is Free Software is licensed under the GPLv3 and has ABSOLUTELY NO WARRANTY                 ##&lt;br /&gt;
## you can find and read the complete version of the GPLv3 @ http://www.gnu.org/licenses/gpl.html          ##&lt;br /&gt;
##                                                                                                         ##&lt;br /&gt;
## Q: what does this script do?                                                                            ##&lt;br /&gt;
## A: the script back up all partitions of the phone to a backup directory, interactively,                 ## &lt;br /&gt;
##    adding today's date to the saved filenames.                                                          ##&lt;br /&gt;
##                                                                                                         ##&lt;br /&gt;
## IMPORTANT:!!! REMEMBER TO RUN THIS SCRIPT AS ROOT SINCE dfu-util HAS TO BE USED AS ROOT!!!              ##&lt;br /&gt;
##                                                                                                         ##&lt;br /&gt;
## based on the orginal simple backup script at http://wiki.openmoko.org/wiki/Pre-Flash_Backup             ##&lt;br /&gt;
##                                                                                                         ##&lt;br /&gt;
## this version has been conceived and written by cga, x77686d, Infoport, jomat at /server irc.freenode.net##&lt;br /&gt;
## /j #openmoko,#bash and my collegue aubba @ work.                                                        ##&lt;br /&gt;
##                                                                                                         ##&lt;br /&gt;
## for any suggestions and contributions contact cga (or one of the above) in the #openmoko channel        ##&lt;br /&gt;
##                                                                                                         ##&lt;br /&gt;
#############################################################################################################&lt;br /&gt;
&lt;br /&gt;
## let's roll!!&lt;br /&gt;
&lt;br /&gt;
## sets the date format for the date in the backup file, change accordingly to your local custom if you need&lt;br /&gt;
DATE=`date +%d-%m-%Y`&lt;br /&gt;
&lt;br /&gt;
## here the scripts try to find the dfu-util binary and set it as the DFU var:&lt;br /&gt;
if which dfu-util &amp;gt;/dev/null ; then&lt;br /&gt;
	echo&lt;br /&gt;
	echo &amp;quot;dfu-util found in your path&amp;quot;&lt;br /&gt;
	echo&lt;br /&gt;
	## 1 the function use this if you placed/linked dfu-util in your $PATH&lt;br /&gt;
	DFU=dfu-util&lt;br /&gt;
&lt;br /&gt;
elif ls dfu-util &amp;gt;/dev/null ; then&lt;br /&gt;
	echo&lt;br /&gt;
	echo &amp;quot;dfu-util found in current directory&amp;quot; &lt;br /&gt;
	echo&lt;br /&gt;
	## or 2 use following line if dfu-util is placed in the same directory where you run the script&lt;br /&gt;
	DFU=./dfu-util&lt;br /&gt;
	 &lt;br /&gt;
else&lt;br /&gt;
	## or 3 if the script doesn't find dfu-util shows the link for installing it and exit&lt;br /&gt;
	echo&lt;br /&gt;
	echo &amp;quot;dfu-util NOT found! install and use howto @ http://wiki.openmoko.org/wiki/Dfu-util&amp;quot;&lt;br /&gt;
	echo&lt;br /&gt;
	exit 1&lt;br /&gt;
fi&lt;br /&gt;
&lt;br /&gt;
## here we get the hex code for devices found with dfu-util --list &lt;br /&gt;
## the hex code is grabbed and the name of the device is shown accordingly and you are prompetd to chose the right one:&lt;br /&gt;
echo&lt;br /&gt;
echo 'these are the devices i found:' &lt;br /&gt;
echo&lt;br /&gt;
for device in `${DFU} --list | grep 0x | cut -f3 -d' ' | tr -d '[]'` ; do&lt;br /&gt;
	if [ &amp;quot;$device&amp;quot; == '0x1457:0x5119' ] ; then&lt;br /&gt;
		echo 'Neo 1973'&lt;br /&gt;
	elif [ &amp;quot;$device&amp;quot; == '0x1d50:0x5119' ] ;	then&lt;br /&gt;
		echo &amp;quot;Neo FreeRunner&amp;quot;&lt;br /&gt;
	else&lt;br /&gt;
		echo 'other device found, DO NOT use dfu-util on this!!! it might bork it...'&lt;br /&gt;
		exit 1&lt;br /&gt;
	fi&lt;br /&gt;
done | nl&lt;br /&gt;
echo&lt;br /&gt;
echo 'choose the device to backup:' &lt;br /&gt;
echo&lt;br /&gt;
read selection&lt;br /&gt;
HEX=$(${DFU} --list | grep 0x | head -n $selection | tail -1 | cut -f3 -d' ' | tr -d '[]') &lt;br /&gt;
&lt;br /&gt;
## use the built-in read command to ask you and use the directory for the backup&lt;br /&gt;
while [ -z &amp;quot;$BACKUP_DIR&amp;quot; ] ; do&lt;br /&gt;
	echo&lt;br /&gt;
	read -e -p $&amp;quot;enter the directory for the backup:&amp;quot; BACKUP_DIR&lt;br /&gt;
	echo&lt;br /&gt;
&lt;br /&gt;
	## chek wether the dir exist and proceed, else create it and proceed.&lt;br /&gt;
	if [ ! -d &amp;quot;$BACKUP_DIR&amp;quot; ] ; then&lt;br /&gt;
		echo&lt;br /&gt;
		echo -n &amp;quot;$BACKUP_DIR does not exist, create it? [Y/n] &amp;quot;&lt;br /&gt;
		echo&lt;br /&gt;
		read CREATE_DIR&lt;br /&gt;
		if [ x&amp;quot;$CREATE_DIR&amp;quot; = xy -o x&amp;quot;$CREATE_DIR&amp;quot; = xY -o -z &amp;quot;$CREATE_DIR&amp;quot; ] ; then&lt;br /&gt;
			mkdir -p -v &amp;quot;${BACKUP_DIR}&amp;quot;&lt;br /&gt;
		else&lt;br /&gt;
			BACKUP_DIR=&lt;br /&gt;
		fi&lt;br /&gt;
	fi&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
## here you get prompted to chose the backup you want, you can backup single files or all of them.&lt;br /&gt;
echo&lt;br /&gt;
echo 'choose the component to backup from the list:'&lt;br /&gt;
echo&lt;br /&gt;
&lt;br /&gt;
select howto in kernel splash u-boot u-boot_env rootfs all quit; do&lt;br /&gt;
	if [ &amp;quot;$howto&amp;quot; == &amp;quot;kernel&amp;quot; -o &amp;quot;$howto&amp;quot; == &amp;quot;all&amp;quot; ] ; then&lt;br /&gt;
		${DFU} -d ${HEX} -a kernel -R -U ${BACKUP_DIR}/kernel-${DATE}.bin&lt;br /&gt;
	fi&lt;br /&gt;
	if [ &amp;quot;$howto&amp;quot; == &amp;quot;splash&amp;quot; -o &amp;quot;$howto&amp;quot; == &amp;quot;all&amp;quot; ] ; then&lt;br /&gt;
		${DFU} -d ${HEX} -a splash -R -U ${BACKUP_DIR}/splash-${DATE}.bin&lt;br /&gt;
	fi&lt;br /&gt;
	if [ &amp;quot;$howto&amp;quot; == &amp;quot;u-boot&amp;quot; -o &amp;quot;$howto&amp;quot; == &amp;quot;all&amp;quot; ] ; then&lt;br /&gt;
		${DFU} -d ${HEX} -a u-boot -R -U ${BACKUP_DIR}/u-boot-${DATE}.bin&lt;br /&gt;
	fi&lt;br /&gt;
	if [ &amp;quot;$howto&amp;quot; == &amp;quot;u-boot_env&amp;quot; -o &amp;quot;$howto&amp;quot; == &amp;quot;all&amp;quot; ] ; then&lt;br /&gt;
		${DFU} -d ${HEX} -a u-boot_env -R -U ${BACKUP_DIR}/u-boot_env-${DATE}.bin&lt;br /&gt;
	fi&lt;br /&gt;
	if [ &amp;quot;$howto&amp;quot; == &amp;quot;rootfs&amp;quot; -o &amp;quot;$howto&amp;quot; == &amp;quot;all&amp;quot; ] ; then&lt;br /&gt;
		${DFU} -d ${HEX} -a rootfs -R -U ${BACKUP_DIR}/rootfs-${DATE}.jffs2&lt;br /&gt;
	fi&lt;br /&gt;
	if [ &amp;quot;$howto&amp;quot; == &amp;quot;quit&amp;quot; ] ; then&lt;br /&gt;
		exit 0&lt;br /&gt;
	fi&lt;br /&gt;
	echo&lt;br /&gt;
	echo 'the component(s) has/have been backed up, what next? (press enter for menu)'&lt;br /&gt;
	echo&lt;br /&gt;
done&lt;br /&gt;
&lt;br /&gt;
exit 0&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
[[category:Guides]]&lt;br /&gt;
[[category:Technical]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Toolchain</id>
		<title>Toolchain</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Toolchain"/>
				<updated>2008-07-29T18:35:20Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: /* Installing additional libraries into the toolchain */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|Toolchain}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
A toolchain is a set of tools that allows you to compile code. For Openmoko, we have to differentiate between the following use-cases:&lt;br /&gt;
&lt;br /&gt;
== Developing a single application ==&lt;br /&gt;
&lt;br /&gt;
For this, you should use a prebuilt toolchain from the Openmoko project. Here you can find a recipe to get started with this toolchain leading you through a series of steps to compile a project and run it on your target device. You might have heard about [[OpenEmbedded]], however as an application programmer, you should '''not''' be using [[OpenEmbedded]].&lt;br /&gt;
&lt;br /&gt;
== System Integration and customizing a distribution ==&lt;br /&gt;
&lt;br /&gt;
For this task, you should use [[OpenEmbedded]] which builds its own cross compiler during the bootstrapping/build process. System Integration and customizing a distribution is out of scope of this page.&lt;br /&gt;
&lt;br /&gt;
=Basic toolchain usage=&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
You should be reasonably familiar with Linux and its command line tools, have an x86-compatible computer with at least 1G of free disk space. You should have experience with compiling programs from source using your local compiler. The remainder of this document will also assume you have write access in your home directory (~) and &amp;lt;tt&amp;gt;/usr/local/&amp;lt;/tt&amp;gt; (becoming root if needed). If any of this is not the case, please call your local administrator for help.&lt;br /&gt;
&lt;br /&gt;
Last but not least you should have a working setup that allows you to compile native software packages using the autotools build system (the triade of '''./configure, make, make install''').&lt;br /&gt;
&lt;br /&gt;
A (partial) list of required packages -- please append as necessary:&lt;br /&gt;
&lt;br /&gt;
* For most Linux version you might only need to install the packages&lt;br /&gt;
** autoconf, automake&lt;br /&gt;
** binutils, gcc, gcc-c++&lt;br /&gt;
** libtool&lt;br /&gt;
** ccache&lt;br /&gt;
** intltool&lt;br /&gt;
&lt;br /&gt;
* For Ubuntu 8.04 ( Previous versions don't support libmokoui2 ) the following is required:&lt;br /&gt;
 sudo apt-get install gcc g++ autoconf automake binutils libtool libglib2.0-dev \&lt;br /&gt;
 ccache libxrender-dev intltool libmokoui2-dev libgconf2-dev mtools&lt;br /&gt;
&lt;br /&gt;
* For Fedora-Core the following is required, while logged in as &amp;lt;tt&amp;gt;root&amp;lt;/tt&amp;gt;:&lt;br /&gt;
 yum install gcc gcc-c++ autoconf automake binutils libtool glib2-devel \&lt;br /&gt;
 ccache libXrender-devel intltool GConf2-devel mtools&lt;br /&gt;
Fedora-Core does not appear to have &amp;lt;tt&amp;gt;libmokoui2&amp;lt;/tt&amp;gt; available.&lt;br /&gt;
&lt;br /&gt;
==Downloading and installing==&lt;br /&gt;
&lt;br /&gt;
{{Note|Debian and Ubuntu i386 users (or others who can install a .deb) may wish to skip the below and instead use:&lt;br /&gt;
[http://andreasdalsgaard.blogspot.com/2008/07/openmoko-development-in-5-minutes.html Openmoko application development in 5 minutes] by Andreas Dalsgaard.}}&lt;br /&gt;
&lt;br /&gt;
The prebuilt toolchain can be downloaded from [http://downloads.openmoko.org/toolchains downloads.openmoko.org]:&lt;br /&gt;
&lt;br /&gt;
* Creating a destination directory can be anywhere, but for example:&lt;br /&gt;
&lt;br /&gt;
  mkdir ~/sources&lt;br /&gt;
  cd ~/sources&lt;br /&gt;
&lt;br /&gt;
* Depending on your CPU type (x86_64 or i686) download the proper package:&lt;br /&gt;
&lt;br /&gt;
  wget http://downloads.openmoko.org/toolchains/openmoko-x86_64-arm-linux-gnueabi-toolchain.tar.bz2&lt;br /&gt;
 or&lt;br /&gt;
  wget http://downloads.openmoko.org/toolchains/openmoko-i686-arm-linux-gnueabi-toolchain.tar.bz2&lt;br /&gt;
&lt;br /&gt;
{{Note|Several people have had problems with the latest toolchain built 20080521.  If you experience errors, try an older version. (as of July 23, 2008)}}&lt;br /&gt;
&lt;br /&gt;
Next, you want to extract it on your filesystem. This toolchain is ''not'' relocatable, it needs to be installed into &amp;lt;tt&amp;gt;/usr/local/openmoko/&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Now you have the following options:&lt;br /&gt;
&lt;br /&gt;
* Extract it directly as root, so use command &amp;quot;su&amp;quot; first (or prefix the tar command with &amp;quot;sudo&amp;quot; when you are using Debian/Ubuntu):&lt;br /&gt;
&lt;br /&gt;
   cd /&lt;br /&gt;
   tar -xjvf ~/sources/openmoko-XYZ-arm-linux-gnueabi-toolchain.tar.bz2&lt;br /&gt;
&lt;br /&gt;
* On Debian-based systems, you can use alien(+fakeroot) to create an easy-to-uninstall package from this .tar.bz2:&lt;br /&gt;
&lt;br /&gt;
   bunzip2 openmoko-*-arm-linux-gnueabi-toolchain.tar.bz2&lt;br /&gt;
   gzip openmoko-*-arm-linux-gnueabi-toolchain.tar&lt;br /&gt;
   fakeroot alien -d openmoko-*-arm-linux-gnueabi-toolchain.tar.gz&lt;br /&gt;
   sudo dpkg -i openmoko_*-arm-linux-gnueabi-toolchain*.deb&lt;br /&gt;
&lt;br /&gt;
* The prebuilt toolchain is for x86_64 or i686. If you wanted, you could build it on your own with OE:&lt;br /&gt;
&lt;br /&gt;
   bitbake meta-toolchain-openmoko&lt;br /&gt;
&lt;br /&gt;
Finally, everytime you want to use this toolchain, you need to alter some environment variables, so that your tools will be found. The toolchain provides a script to do that, so the only thing you need to do is to source it.&lt;br /&gt;
Note that if you are not using a &amp;quot;sh&amp;quot; or &amp;quot;bash&amp;quot; shell (check with &amp;quot;echo $SHELL&amp;quot;) that you need&lt;br /&gt;
to start &amp;quot;sh&amp;quot; or &amp;quot;bash&amp;quot; first.&lt;br /&gt;
&lt;br /&gt;
 . /usr/local/openmoko/arm/setup-env&lt;br /&gt;
&lt;br /&gt;
* At least, you should add /usr/local/openmoko/arm/bin to your $PATH variable, otherwise the next steps won't work (om-conf and make).&lt;br /&gt;
&lt;br /&gt;
==Building OpenMoko Kernel from git repo using Toolchain==&lt;br /&gt;
&lt;br /&gt;
 git clone git://git.openmoko.org/git/kernel.git linux-2.6&lt;br /&gt;
 cd linux-2.6&lt;br /&gt;
 git checkout origin/stable&lt;br /&gt;
 cp defconfig-gta02 .config&lt;br /&gt;
 ./build&lt;br /&gt;
&lt;br /&gt;
Will fail with error message &amp;quot;arm-angstrom-linux-gnueabi-ld: unrecognized option '-Wl,-rpath-link,/usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/lib'&amp;quot; until /usr/local/openmoko/arm/setup-env is modified. LDFLAGS should be changed from:&lt;br /&gt;
&lt;br /&gt;
 export LDFLAGS=&amp;quot;-L${OMTOOL_DIR}/arm/arm-angstrom-linux-gnueabi/lib -Wl,-rpath-link,${OMTOOL_DIR}/arm/arm-angstrom-linux-gnueabi/lib -Wl,-O1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to:&lt;br /&gt;
&lt;br /&gt;
 export LDFLAGS=&amp;quot;-L${OMTOOL_DIR}/arm/arm-angstrom-linux-gnueabi/lib -rpath-link ${OMTOOL_DIR}/arm/arm-angstrom-linux-gnueabi/lib -O1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Building a sample project==&lt;br /&gt;
&lt;br /&gt;
In a chosen destination directory (in this example ~/):&lt;br /&gt;
&lt;br /&gt;
* copy the downloaded sample application source:&lt;br /&gt;
&lt;br /&gt;
 cp -r /usr/local/openmoko/source/openmoko-sample2 ~/&lt;br /&gt;
&lt;br /&gt;
* Remember to set the proper environment variables (again with &amp;quot;sh&amp;quot; or &amp;quot;bash&amp;quot;) for openmoko:&lt;br /&gt;
&lt;br /&gt;
 . /usr/local/openmoko/arm/setup-env&lt;br /&gt;
&lt;br /&gt;
* You need to create a build configuration for this application. This also checks if all needed libraries, tools, etc.. is available on your system. If this fails see the notes about the needed packages in the section &amp;quot;Prerequisites&amp;quot; mentioned earlier.&lt;br /&gt;
&lt;br /&gt;
 om-conf openmoko-sample2&lt;br /&gt;
&lt;br /&gt;
* Optionally now you can modify the source code in openmoko-sample2/src.  Before the next step, go into the sample directory.&lt;br /&gt;
&lt;br /&gt;
 cd openmoko-sample2&lt;br /&gt;
&lt;br /&gt;
* If you are using an older version of the toolchain, you may have to create the makefile by running &amp;quot;./autogen.sh&amp;quot;.  Otherwise, to build the application from the source code just type:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
* If there are errors (i.e. &amp;quot;You need to install gnome-common from the GNOME CVS&amp;quot;) deal with them.  Also see &amp;quot;Troubleshooting&amp;quot; section at the end of this page for known issues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to install this project on host for staging usage later, a shared library, for example, you can do the following to install it into a given configured prefix.&lt;br /&gt;
 om-conf --prefix=/usr/local/openmoko openmoko-sample2&lt;br /&gt;
 cd openmoko-sample2&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
==How to modify the sample project==&lt;br /&gt;
&lt;br /&gt;
In order to build your own project by using openmoko-sample2 files, some changes are needed:&lt;br /&gt;
&lt;br /&gt;
* copy the downloaded sample application source&lt;br /&gt;
&lt;br /&gt;
 cp -r /usr/local/openmoko/source/openmoko-sample2 ~/&lt;br /&gt;
 &lt;br /&gt;
* rename the folder with the name of your project (in this example your-project-name) and delete old sample files &lt;br /&gt;
&lt;br /&gt;
 mv openmoko-sample2 your-project-name&lt;br /&gt;
 cd your-project-name&lt;br /&gt;
 cd src&lt;br /&gt;
 rm *.c&lt;br /&gt;
&lt;br /&gt;
* copy your sources (in this example your-sources) into src/&lt;br /&gt;
&lt;br /&gt;
 cp your-sources .&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
* now in the main folder modify autogen.sh by updating the following lines&lt;br /&gt;
&lt;br /&gt;
 PKG_NAME=&amp;quot;your-project-name&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* modify configure.ac by updating the following lines ('main.c' should be the main file in your project)&lt;br /&gt;
&lt;br /&gt;
 AC_INIT(your-project-name, 0.0.1, http://www.openmoko.org/)    &lt;br /&gt;
 AC_CONFIG_SRCDIR(src/main.c)&lt;br /&gt;
&lt;br /&gt;
* go into data/ folder and rename these files with the name of your project&lt;br /&gt;
&lt;br /&gt;
 cd data&lt;br /&gt;
 mv openmoko-sample.png your-project-name.png&lt;br /&gt;
 mv openmoko-sample.desktop your-project-name.desktop&lt;br /&gt;
&lt;br /&gt;
* modify Makefile.am inside data/ by updating the following lines&lt;br /&gt;
&lt;br /&gt;
 dist_desktop_DATA = your-project-name.desktop&lt;br /&gt;
 dist_appicon_DATA = your-project-name.png&lt;br /&gt;
&lt;br /&gt;
* modify Makefile.in inside data/ by updating the following lines&lt;br /&gt;
 &lt;br /&gt;
 dist_desktop_DATA = your-project-name.desktop&lt;br /&gt;
 dist_appicon_DATA = your-project-name.png&lt;br /&gt;
&lt;br /&gt;
* modify your-project-name.desktop by updating the following lines&lt;br /&gt;
&lt;br /&gt;
 Name=your-project-name&lt;br /&gt;
 Encoding=UTF-8&lt;br /&gt;
 Version=0.0.1&lt;br /&gt;
 Type=Application&lt;br /&gt;
 Exec=your-project-name&lt;br /&gt;
&lt;br /&gt;
* and by adding the following line&lt;br /&gt;
&lt;br /&gt;
 Icon=your-project-name&lt;br /&gt;
&lt;br /&gt;
* move into src/ folder&lt;br /&gt;
&lt;br /&gt;
 cd ..&lt;br /&gt;
 cd src&lt;br /&gt;
&lt;br /&gt;
* modify Makefile.am by updating the following lines&lt;br /&gt;
&lt;br /&gt;
 bin_PROGRAMS = your-project-name	&lt;br /&gt;
 your_project_name_SOURCES = \				&lt;br /&gt;
  		main.c &lt;br /&gt;
 your_project_name_LDADD  = @DEPENDENCIES_LIBS@&lt;br /&gt;
&lt;br /&gt;
* be sure to put instead of main.c all your .c and .h files and modify all the '-' characters with '_' in the variable names&lt;br /&gt;
&lt;br /&gt;
==Packaging your application==&lt;br /&gt;
&lt;br /&gt;
We have included a script to make an ipkg out of your application. Note that this is not needed to test your application on the Neo (for that you can just scp the resulting binary and data over), however it's very handy if you want to distribute your application to others.&lt;br /&gt;
&lt;br /&gt;
 om-make-ipkg openmoko-sample2&lt;br /&gt;
&lt;br /&gt;
Now you got openmoko-sample2_0.1_armv4t.ipk , you can `scp' it to your&lt;br /&gt;
Neo and install it:&lt;br /&gt;
&lt;br /&gt;
 scp openmoko-sample2_0.1_armv4t.ipk root@192.168.0.202:&lt;br /&gt;
 ssh root@192.168.0.202 opkg install openmoko-sample2_0.1_armv4t.ipk&lt;br /&gt;
&lt;br /&gt;
Note that while you can redistribute the generated ipkg, be aware that this is a bare-bones ipk that contains no further information, i.e. you will lack library dependencies. See below how to fix this.&lt;br /&gt;
&lt;br /&gt;
You can also supply the version number, a description, and an author / contacts string in a control file:&lt;br /&gt;
&lt;br /&gt;
 om-make-ipkg myapp myapp_control&lt;br /&gt;
&lt;br /&gt;
A template of myapp_control:&lt;br /&gt;
&lt;br /&gt;
 Package: $appname&lt;br /&gt;
 Version: 0.1&lt;br /&gt;
 Description: package built by openmoko toolchain&lt;br /&gt;
 Section: openmoko/applications&lt;br /&gt;
 Priority: optional&lt;br /&gt;
 Maintainer: $USER&lt;br /&gt;
 Architecture: armv4t&lt;br /&gt;
 Homepage: http://www.openmoko.org/&lt;br /&gt;
 Depends: &lt;br /&gt;
 Source: ${SRC}&lt;br /&gt;
&lt;br /&gt;
==Where to go from here==&lt;br /&gt;
&lt;br /&gt;
Using the external toolchain is an easy way to build applications for your Neo. If you are familiar with this procedure, you might also want to look into&lt;br /&gt;
* Using [[Qemu]] to test your applications in an emulated environment&lt;br /&gt;
** Ubuntu users might prefer to look at [[Automatic_emulation_in_Ubuntu]]&lt;br /&gt;
* Using [[Host-based_development_with_Xoo_and_Xephyr|host-based development]] to improve your efficiency&lt;br /&gt;
* Using [[OpenEmbedded]] to customize your Openmoko distribution image&lt;br /&gt;
&lt;br /&gt;
=Advanced topics=&lt;br /&gt;
==Using toolchain provided libraries==&lt;br /&gt;
Add the necessary libraries to the _LDADD field in src/Makefile.am, for example:&lt;br /&gt;
 openmoko_sample2_LDADD  = @DEPENDENCIES_LIBS@ -lmokogsmd2&lt;br /&gt;
&lt;br /&gt;
make sure to run om-conf again after this.&lt;br /&gt;
&lt;br /&gt;
==Installing additional libraries into the toolchain==&lt;br /&gt;
&lt;br /&gt;
Sooner or later you will want to compile an application that has dependencies which can't be fulfilled by the precompiled toolchain, e.g. some obscure libraries.&lt;br /&gt;
&lt;br /&gt;
In that case, feel free to request the inclusion of additional libraries into the next release of the OpenMoko toolchain. Until then, here is how you enhance your already installed toolchain. Say, we want to add the library called liburiparse:&lt;br /&gt;
&lt;br /&gt;
 cd ~/source&lt;br /&gt;
 wget http://downloads.sourceforge.net/uriparser/uriparser-0.6.0.tar.bz2&lt;br /&gt;
 ./configure --host=arm-angstrom-linux-gnueabi \&lt;br /&gt;
 --prefix=/usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/usr&lt;br /&gt;
 make&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
That's it.&lt;br /&gt;
&lt;br /&gt;
==Getting your application packaged by OE==&lt;br /&gt;
&lt;br /&gt;
If you have written a cool application which you want to share with others, the best way to do that is to&lt;br /&gt;
&lt;br /&gt;
# upload your application source code to a public location&lt;br /&gt;
# submit a [[BitBake]] recipe to [[OpenEmbedded]], preferably via the [http://bugzilla.openembedded.org OpenEmbedded bugtracker].&lt;br /&gt;
&lt;br /&gt;
See also [[Customizing the Openmoko Distribution]].&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
&lt;br /&gt;
* Some Versions of the Toolchain have corrupt .la files. If you compile an application using the Toolchain and you receive a '/space/fic/openmoko-daily/neo1973/work/armv4t-angstrom-linux-gnueabi/pango-1.18.3-r0/pango-1.18.3/pango/libpangoft2-1.0.la' error, you are affected. To fix that you should go to your &amp;quot;/usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/usr/lib&amp;quot; directory and open the affected .la files and change &amp;quot;/space/fic...&amp;quot; to &amp;quot;/usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/usr/lib&amp;quot;. You have to fix more than one .la file. For the pango error you have to change &amp;quot;libpangocairo-1.0.la&amp;quot;, but there are more corrupt .la files.&lt;br /&gt;
&lt;br /&gt;
* Please use the [http://lists.openmoko.org/mailman/listinfo/openmoko-devel Openmoko-Devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Developer]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Toolchain</id>
		<title>Toolchain</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Toolchain"/>
				<updated>2008-07-29T17:30:40Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: /* Building a sample project */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|Toolchain}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
A toolchain is a set of tools that allows you to compile code. For Openmoko, we have to differentiate between the following use-cases:&lt;br /&gt;
&lt;br /&gt;
== Developing a single application ==&lt;br /&gt;
&lt;br /&gt;
For this, you should use a prebuilt toolchain from the Openmoko project. Here you can find a recipe to get started with this toolchain leading you through a series of steps to compile a project and run it on your target device. You might have heard about [[OpenEmbedded]], however as an application programmer, you should '''not''' be using [[OpenEmbedded]].&lt;br /&gt;
&lt;br /&gt;
== System Integration and customizing a distribution ==&lt;br /&gt;
&lt;br /&gt;
For this task, you should use [[OpenEmbedded]] which builds its own cross compiler during the bootstrapping/build process. System Integration and customizing a distribution is out of scope of this page.&lt;br /&gt;
&lt;br /&gt;
=Basic toolchain usage=&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
You should be reasonably familiar with Linux and its command line tools, have an x86-compatible computer with at least 1G of free disk space. You should have experience with compiling programs from source using your local compiler. The remainder of this document will also assume you have write access in your home directory (~) and &amp;lt;tt&amp;gt;/usr/local/&amp;lt;/tt&amp;gt; (becoming root if needed). If any of this is not the case, please call your local administrator for help.&lt;br /&gt;
&lt;br /&gt;
Last but not least you should have a working setup that allows you to compile native software packages using the autotools build system (the triade of '''./configure, make, make install''').&lt;br /&gt;
&lt;br /&gt;
A (partial) list of required packages -- please append as necessary:&lt;br /&gt;
&lt;br /&gt;
* For most Linux version you might only need to install the packages&lt;br /&gt;
** autoconf, automake&lt;br /&gt;
** binutils, gcc, gcc-c++&lt;br /&gt;
** libtool&lt;br /&gt;
** ccache&lt;br /&gt;
** intltool&lt;br /&gt;
&lt;br /&gt;
* For Ubuntu 8.04 ( Previous versions don't support libmokoui2 ) the following is required:&lt;br /&gt;
 sudo apt-get install gcc g++ autoconf automake binutils libtool libglib2.0-dev \&lt;br /&gt;
 ccache libxrender-dev intltool libmokoui2-dev libgconf2-dev mtools&lt;br /&gt;
&lt;br /&gt;
* For Fedora-Core the following is required, while logged in as &amp;lt;tt&amp;gt;root&amp;lt;/tt&amp;gt;:&lt;br /&gt;
 yum install gcc gcc-c++ autoconf automake binutils libtool glib2-devel \&lt;br /&gt;
 ccache libXrender-devel intltool GConf2-devel mtools&lt;br /&gt;
Fedora-Core does not appear to have &amp;lt;tt&amp;gt;libmokoui2&amp;lt;/tt&amp;gt; available.&lt;br /&gt;
&lt;br /&gt;
==Downloading and installing==&lt;br /&gt;
&lt;br /&gt;
{{Note|Debian and Ubuntu i386 users (or others who can install a .deb) may wish to skip the below and instead use:&lt;br /&gt;
[http://andreasdalsgaard.blogspot.com/2008/07/openmoko-development-in-5-minutes.html Openmoko application development in 5 minutes] by Andreas Dalsgaard.}}&lt;br /&gt;
&lt;br /&gt;
The prebuilt toolchain can be downloaded from [http://downloads.openmoko.org/toolchains downloads.openmoko.org]:&lt;br /&gt;
&lt;br /&gt;
* Creating a destination directory can be anywhere, but for example:&lt;br /&gt;
&lt;br /&gt;
  mkdir ~/sources&lt;br /&gt;
  cd ~/sources&lt;br /&gt;
&lt;br /&gt;
* Depending on your CPU type (x86_64 or i686) download the proper package:&lt;br /&gt;
&lt;br /&gt;
  wget http://downloads.openmoko.org/toolchains/openmoko-x86_64-arm-linux-gnueabi-toolchain.tar.bz2&lt;br /&gt;
 or&lt;br /&gt;
  wget http://downloads.openmoko.org/toolchains/openmoko-i686-arm-linux-gnueabi-toolchain.tar.bz2&lt;br /&gt;
&lt;br /&gt;
{{Note|Several people have had problems with the latest toolchain built 20080521.  If you experience errors, try an older version. (as of July 23, 2008)}}&lt;br /&gt;
&lt;br /&gt;
Next, you want to extract it on your filesystem. This toolchain is ''not'' relocatable, it needs to be installed into &amp;lt;tt&amp;gt;/usr/local/openmoko/&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Now you have the following options:&lt;br /&gt;
&lt;br /&gt;
* Extract it directly as root, so use command &amp;quot;su&amp;quot; first (or prefix the tar command with &amp;quot;sudo&amp;quot; when you are using Debian/Ubuntu):&lt;br /&gt;
&lt;br /&gt;
   cd /&lt;br /&gt;
   tar -xjvf ~/sources/openmoko-XYZ-arm-linux-gnueabi-toolchain.tar.bz2&lt;br /&gt;
&lt;br /&gt;
* On Debian-based systems, you can use alien(+fakeroot) to create an easy-to-uninstall package from this .tar.bz2:&lt;br /&gt;
&lt;br /&gt;
   bunzip2 openmoko-*-arm-linux-gnueabi-toolchain.tar.bz2&lt;br /&gt;
   gzip openmoko-*-arm-linux-gnueabi-toolchain.tar&lt;br /&gt;
   fakeroot alien -d openmoko-*-arm-linux-gnueabi-toolchain.tar.gz&lt;br /&gt;
   sudo dpkg -i openmoko_*-arm-linux-gnueabi-toolchain*.deb&lt;br /&gt;
&lt;br /&gt;
* The prebuilt toolchain is for x86_64 or i686. If you wanted, you could build it on your own with OE:&lt;br /&gt;
&lt;br /&gt;
   bitbake meta-toolchain-openmoko&lt;br /&gt;
&lt;br /&gt;
Finally, everytime you want to use this toolchain, you need to alter some environment variables, so that your tools will be found. The toolchain provides a script to do that, so the only thing you need to do is to source it.&lt;br /&gt;
Note that if you are not using a &amp;quot;sh&amp;quot; or &amp;quot;bash&amp;quot; shell (check with &amp;quot;echo $SHELL&amp;quot;) that you need&lt;br /&gt;
to start &amp;quot;sh&amp;quot; or &amp;quot;bash&amp;quot; first.&lt;br /&gt;
&lt;br /&gt;
 . /usr/local/openmoko/arm/setup-env&lt;br /&gt;
&lt;br /&gt;
* At least, you should add /usr/local/openmoko/arm/bin to your $PATH variable, otherwise the next steps won't work (om-conf and make).&lt;br /&gt;
&lt;br /&gt;
==Building OpenMoko Kernel from git repo using Toolchain==&lt;br /&gt;
&lt;br /&gt;
 git clone git://git.openmoko.org/git/kernel.git linux-2.6&lt;br /&gt;
 cd linux-2.6&lt;br /&gt;
 git checkout origin/stable&lt;br /&gt;
 cp defconfig-gta02 .config&lt;br /&gt;
 ./build&lt;br /&gt;
&lt;br /&gt;
Will fail with error message &amp;quot;arm-angstrom-linux-gnueabi-ld: unrecognized option '-Wl,-rpath-link,/usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/lib'&amp;quot; until /usr/local/openmoko/arm/setup-env is modified. LDFLAGS should be changed from:&lt;br /&gt;
&lt;br /&gt;
 export LDFLAGS=&amp;quot;-L${OMTOOL_DIR}/arm/arm-angstrom-linux-gnueabi/lib -Wl,-rpath-link,${OMTOOL_DIR}/arm/arm-angstrom-linux-gnueabi/lib -Wl,-O1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to:&lt;br /&gt;
&lt;br /&gt;
 export LDFLAGS=&amp;quot;-L${OMTOOL_DIR}/arm/arm-angstrom-linux-gnueabi/lib -rpath-link ${OMTOOL_DIR}/arm/arm-angstrom-linux-gnueabi/lib -O1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Building a sample project==&lt;br /&gt;
&lt;br /&gt;
In a chosen destination directory (in this example ~/):&lt;br /&gt;
&lt;br /&gt;
* copy the downloaded sample application source:&lt;br /&gt;
&lt;br /&gt;
 cp -r /usr/local/openmoko/source/openmoko-sample2 ~/&lt;br /&gt;
&lt;br /&gt;
* Remember to set the proper environment variables (again with &amp;quot;sh&amp;quot; or &amp;quot;bash&amp;quot;) for openmoko:&lt;br /&gt;
&lt;br /&gt;
 . /usr/local/openmoko/arm/setup-env&lt;br /&gt;
&lt;br /&gt;
* You need to create a build configuration for this application. This also checks if all needed libraries, tools, etc.. is available on your system. If this fails see the notes about the needed packages in the section &amp;quot;Prerequisites&amp;quot; mentioned earlier.&lt;br /&gt;
&lt;br /&gt;
 om-conf openmoko-sample2&lt;br /&gt;
&lt;br /&gt;
* Optionally now you can modify the source code in openmoko-sample2/src.  Before the next step, go into the sample directory.&lt;br /&gt;
&lt;br /&gt;
 cd openmoko-sample2&lt;br /&gt;
&lt;br /&gt;
* If you are using an older version of the toolchain, you may have to create the makefile by running &amp;quot;./autogen.sh&amp;quot;.  Otherwise, to build the application from the source code just type:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
* If there are errors (i.e. &amp;quot;You need to install gnome-common from the GNOME CVS&amp;quot;) deal with them.  Also see &amp;quot;Troubleshooting&amp;quot; section at the end of this page for known issues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to install this project on host for staging usage later, a shared library, for example, you can do the following to install it into a given configured prefix.&lt;br /&gt;
 om-conf --prefix=/usr/local/openmoko openmoko-sample2&lt;br /&gt;
 cd openmoko-sample2&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
==How to modify the sample project==&lt;br /&gt;
&lt;br /&gt;
In order to build your own project by using openmoko-sample2 files, some changes are needed:&lt;br /&gt;
&lt;br /&gt;
* copy the downloaded sample application source&lt;br /&gt;
&lt;br /&gt;
 cp -r /usr/local/openmoko/source/openmoko-sample2 ~/&lt;br /&gt;
 &lt;br /&gt;
* rename the folder with the name of your project (in this example your-project-name) and delete old sample files &lt;br /&gt;
&lt;br /&gt;
 mv openmoko-sample2 your-project-name&lt;br /&gt;
 cd your-project-name&lt;br /&gt;
 cd src&lt;br /&gt;
 rm *.c&lt;br /&gt;
&lt;br /&gt;
* copy your sources (in this example your-sources) into src/&lt;br /&gt;
&lt;br /&gt;
 cp your-sources .&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
* now in the main folder modify autogen.sh by updating the following lines&lt;br /&gt;
&lt;br /&gt;
 PKG_NAME=&amp;quot;your-project-name&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* modify configure.ac by updating the following lines ('main.c' should be the main file in your project)&lt;br /&gt;
&lt;br /&gt;
 AC_INIT(your-project-name, 0.0.1, http://www.openmoko.org/)    &lt;br /&gt;
 AC_CONFIG_SRCDIR(src/main.c)&lt;br /&gt;
&lt;br /&gt;
* go into data/ folder and rename these files with the name of your project&lt;br /&gt;
&lt;br /&gt;
 cd data&lt;br /&gt;
 mv openmoko-sample.png your-project-name.png&lt;br /&gt;
 mv openmoko-sample.desktop your-project-name.desktop&lt;br /&gt;
&lt;br /&gt;
* modify Makefile.am inside data/ by updating the following lines&lt;br /&gt;
&lt;br /&gt;
 dist_desktop_DATA = your-project-name.desktop&lt;br /&gt;
 dist_appicon_DATA = your-project-name.png&lt;br /&gt;
&lt;br /&gt;
* modify Makefile.in inside data/ by updating the following lines&lt;br /&gt;
 &lt;br /&gt;
 dist_desktop_DATA = your-project-name.desktop&lt;br /&gt;
 dist_appicon_DATA = your-project-name.png&lt;br /&gt;
&lt;br /&gt;
* modify your-project-name.desktop by updating the following lines&lt;br /&gt;
&lt;br /&gt;
 Name=your-project-name&lt;br /&gt;
 Encoding=UTF-8&lt;br /&gt;
 Version=0.0.1&lt;br /&gt;
 Type=Application&lt;br /&gt;
 Exec=your-project-name&lt;br /&gt;
&lt;br /&gt;
* and by adding the following line&lt;br /&gt;
&lt;br /&gt;
 Icon=your-project-name&lt;br /&gt;
&lt;br /&gt;
* move into src/ folder&lt;br /&gt;
&lt;br /&gt;
 cd ..&lt;br /&gt;
 cd src&lt;br /&gt;
&lt;br /&gt;
* modify Makefile.am by updating the following lines&lt;br /&gt;
&lt;br /&gt;
 bin_PROGRAMS = your-project-name	&lt;br /&gt;
 your_project_name_SOURCES = \				&lt;br /&gt;
  		main.c &lt;br /&gt;
 your_project_name_LDADD  = @DEPENDENCIES_LIBS@&lt;br /&gt;
&lt;br /&gt;
* be sure to put instead of main.c all your .c and .h files and modify all the '-' characters with '_' in the variable names&lt;br /&gt;
&lt;br /&gt;
==Packaging your application==&lt;br /&gt;
&lt;br /&gt;
We have included a script to make an ipkg out of your application. Note that this is not needed to test your application on the Neo (for that you can just scp the resulting binary and data over), however it's very handy if you want to distribute your application to others.&lt;br /&gt;
&lt;br /&gt;
 om-make-ipkg openmoko-sample2&lt;br /&gt;
&lt;br /&gt;
Now you got openmoko-sample2_0.1_armv4t.ipk , you can `scp' it to your&lt;br /&gt;
Neo and install it:&lt;br /&gt;
&lt;br /&gt;
 scp openmoko-sample2_0.1_armv4t.ipk root@192.168.0.202:&lt;br /&gt;
 ssh root@192.168.0.202 opkg install openmoko-sample2_0.1_armv4t.ipk&lt;br /&gt;
&lt;br /&gt;
Note that while you can redistribute the generated ipkg, be aware that this is a bare-bones ipk that contains no further information, i.e. you will lack library dependencies. See below how to fix this.&lt;br /&gt;
&lt;br /&gt;
You can also supply the version number, a description, and an author / contacts string in a control file:&lt;br /&gt;
&lt;br /&gt;
 om-make-ipkg myapp myapp_control&lt;br /&gt;
&lt;br /&gt;
A template of myapp_control:&lt;br /&gt;
&lt;br /&gt;
 Package: $appname&lt;br /&gt;
 Version: 0.1&lt;br /&gt;
 Description: package built by openmoko toolchain&lt;br /&gt;
 Section: openmoko/applications&lt;br /&gt;
 Priority: optional&lt;br /&gt;
 Maintainer: $USER&lt;br /&gt;
 Architecture: armv4t&lt;br /&gt;
 Homepage: http://www.openmoko.org/&lt;br /&gt;
 Depends: &lt;br /&gt;
 Source: ${SRC}&lt;br /&gt;
&lt;br /&gt;
==Where to go from here==&lt;br /&gt;
&lt;br /&gt;
Using the external toolchain is an easy way to build applications for your Neo. If you are familiar with this procedure, you might also want to look into&lt;br /&gt;
* Using [[Qemu]] to test your applications in an emulated environment&lt;br /&gt;
** Ubuntu users might prefer to look at [[Automatic_emulation_in_Ubuntu]]&lt;br /&gt;
* Using [[Host-based_development_with_Xoo_and_Xephyr|host-based development]] to improve your efficiency&lt;br /&gt;
* Using [[OpenEmbedded]] to customize your Openmoko distribution image&lt;br /&gt;
&lt;br /&gt;
=Advanced topics=&lt;br /&gt;
==Using toolchain provided libraries==&lt;br /&gt;
Add the necessary libraries to the _LDADD field in src/Makefile.am, for example:&lt;br /&gt;
 openmoko_sample2_LDADD  = @DEPENDENCIES_LIBS@ -lmokogsmd2&lt;br /&gt;
&lt;br /&gt;
make sure to run om-conf again after this.&lt;br /&gt;
&lt;br /&gt;
==Installing additional libraries into the toolchain==&lt;br /&gt;
&lt;br /&gt;
Sooner or later you will want to compile an application that has dependencies which can't be fulfilled by the precompiled toolchain, e.g. some obscure libraries.&lt;br /&gt;
&lt;br /&gt;
In that case, feel free to request the inclusion of additional libraries into the next release of the OpenMoko toolchain. Until then, here is how you enhance your already installed toolchain. Say, we want to add the library called liburiparse:&lt;br /&gt;
&lt;br /&gt;
 cd ~/source&lt;br /&gt;
 wget http://downloads.sourceforge.net/uriparser/uriparser-0.6.0.tar.bz2&lt;br /&gt;
 ./configure --host=arm-angstrom-linux-gnueabi \&lt;br /&gt;
 --prefix=/usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/&lt;br /&gt;
 make&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
That's it.&lt;br /&gt;
&lt;br /&gt;
==Getting your application packaged by OE==&lt;br /&gt;
&lt;br /&gt;
If you have written a cool application which you want to share with others, the best way to do that is to&lt;br /&gt;
&lt;br /&gt;
# upload your application source code to a public location&lt;br /&gt;
# submit a [[BitBake]] recipe to [[OpenEmbedded]], preferably via the [http://bugzilla.openembedded.org OpenEmbedded bugtracker].&lt;br /&gt;
&lt;br /&gt;
See also [[Customizing the Openmoko Distribution]].&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
&lt;br /&gt;
* Some Versions of the Toolchain have corrupt .la files. If you compile an application using the Toolchain and you receive a '/space/fic/openmoko-daily/neo1973/work/armv4t-angstrom-linux-gnueabi/pango-1.18.3-r0/pango-1.18.3/pango/libpangoft2-1.0.la' error, you are affected. To fix that you should go to your &amp;quot;/usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/usr/lib&amp;quot; directory and open the affected .la files and change &amp;quot;/space/fic...&amp;quot; to &amp;quot;/usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/usr/lib&amp;quot;. You have to fix more than one .la file. For the pango error you have to change &amp;quot;libpangocairo-1.0.la&amp;quot;, but there are more corrupt .la files.&lt;br /&gt;
&lt;br /&gt;
* Please use the [http://lists.openmoko.org/mailman/listinfo/openmoko-devel Openmoko-Devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Developer]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Toolchain</id>
		<title>Toolchain</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Toolchain"/>
				<updated>2008-07-29T16:44:58Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: /* Building a sample project */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|Toolchain}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
A toolchain is a set of tools that allows you to compile code. For Openmoko, we have to differentiate between the following use-cases:&lt;br /&gt;
&lt;br /&gt;
== Developing a single application ==&lt;br /&gt;
&lt;br /&gt;
For this, you should use a prebuilt toolchain from the Openmoko project. Here you can find a recipe to get started with this toolchain leading you through a series of steps to compile a project and run it on your target device. You might have heard about [[OpenEmbedded]], however as an application programmer, you should '''not''' be using [[OpenEmbedded]].&lt;br /&gt;
&lt;br /&gt;
== System Integration and customizing a distribution ==&lt;br /&gt;
&lt;br /&gt;
For this task, you should use [[OpenEmbedded]] which builds its own cross compiler during the bootstrapping/build process. System Integration and customizing a distribution is out of scope of this page.&lt;br /&gt;
&lt;br /&gt;
=Basic toolchain usage=&lt;br /&gt;
&lt;br /&gt;
==Prerequisites==&lt;br /&gt;
&lt;br /&gt;
You should be reasonably familiar with Linux and its command line tools, have an x86-compatible computer with at least 1G of free disk space. You should have experience with compiling programs from source using your local compiler. The remainder of this document will also assume you have write access in your home directory (~) and &amp;lt;tt&amp;gt;/usr/local/&amp;lt;/tt&amp;gt; (becoming root if needed). If any of this is not the case, please call your local administrator for help.&lt;br /&gt;
&lt;br /&gt;
Last but not least you should have a working setup that allows you to compile native software packages using the autotools build system (the triade of '''./configure, make, make install''').&lt;br /&gt;
&lt;br /&gt;
A (partial) list of required packages -- please append as necessary:&lt;br /&gt;
&lt;br /&gt;
* For most Linux version you might only need to install the packages&lt;br /&gt;
** autoconf, automake&lt;br /&gt;
** binutils, gcc, gcc-c++&lt;br /&gt;
** libtool&lt;br /&gt;
** ccache&lt;br /&gt;
** intltool&lt;br /&gt;
&lt;br /&gt;
* For Ubuntu 8.04 ( Previous versions don't support libmokoui2 ) the following is required:&lt;br /&gt;
 sudo apt-get install gcc g++ autoconf automake binutils libtool libglib2.0-dev \&lt;br /&gt;
 ccache libxrender-dev intltool libmokoui2-dev libgconf2-dev mtools&lt;br /&gt;
&lt;br /&gt;
* For Fedora-Core the following is required, while logged in as &amp;lt;tt&amp;gt;root&amp;lt;/tt&amp;gt;:&lt;br /&gt;
 yum install gcc gcc-c++ autoconf automake binutils libtool glib2-devel \&lt;br /&gt;
 ccache libXrender-devel intltool GConf2-devel mtools&lt;br /&gt;
Fedora-Core does not appear to have &amp;lt;tt&amp;gt;libmokoui2&amp;lt;/tt&amp;gt; available.&lt;br /&gt;
&lt;br /&gt;
==Downloading and installing==&lt;br /&gt;
&lt;br /&gt;
{{Note|Debian and Ubuntu i386 users (or others who can install a .deb) may wish to skip the below and instead use:&lt;br /&gt;
[http://andreasdalsgaard.blogspot.com/2008/07/openmoko-development-in-5-minutes.html Openmoko application development in 5 minutes] by Andreas Dalsgaard.}}&lt;br /&gt;
&lt;br /&gt;
The prebuilt toolchain can be downloaded from [http://downloads.openmoko.org/toolchains downloads.openmoko.org]:&lt;br /&gt;
&lt;br /&gt;
* Creating a destination directory can be anywhere, but for example:&lt;br /&gt;
&lt;br /&gt;
  mkdir ~/sources&lt;br /&gt;
  cd ~/sources&lt;br /&gt;
&lt;br /&gt;
* Depending on your CPU type (x86_64 or i686) download the proper package:&lt;br /&gt;
&lt;br /&gt;
  wget http://downloads.openmoko.org/toolchains/openmoko-x86_64-arm-linux-gnueabi-toolchain.tar.bz2&lt;br /&gt;
 or&lt;br /&gt;
  wget http://downloads.openmoko.org/toolchains/openmoko-i686-arm-linux-gnueabi-toolchain.tar.bz2&lt;br /&gt;
&lt;br /&gt;
{{Note|Several people have had problems with the latest toolchain built 20080521.  If you experience errors, try an older version. (as of July 23, 2008)}}&lt;br /&gt;
&lt;br /&gt;
Next, you want to extract it on your filesystem. This toolchain is ''not'' relocatable, it needs to be installed into &amp;lt;tt&amp;gt;/usr/local/openmoko/&amp;lt;/tt&amp;gt;.&lt;br /&gt;
Now you have the following options:&lt;br /&gt;
&lt;br /&gt;
* Extract it directly as root, so use command &amp;quot;su&amp;quot; first (or prefix the tar command with &amp;quot;sudo&amp;quot; when you are using Debian/Ubuntu):&lt;br /&gt;
&lt;br /&gt;
   cd /&lt;br /&gt;
   tar -xjvf ~/sources/openmoko-XYZ-arm-linux-gnueabi-toolchain.tar.bz2&lt;br /&gt;
&lt;br /&gt;
* On Debian-based systems, you can use alien(+fakeroot) to create an easy-to-uninstall package from this .tar.bz2:&lt;br /&gt;
&lt;br /&gt;
   bunzip2 openmoko-*-arm-linux-gnueabi-toolchain.tar.bz2&lt;br /&gt;
   gzip openmoko-*-arm-linux-gnueabi-toolchain.tar&lt;br /&gt;
   fakeroot alien -d openmoko-*-arm-linux-gnueabi-toolchain.tar.gz&lt;br /&gt;
   sudo dpkg -i openmoko_*-arm-linux-gnueabi-toolchain*.deb&lt;br /&gt;
&lt;br /&gt;
* The prebuilt toolchain is for x86_64 or i686. If you wanted, you could build it on your own with OE:&lt;br /&gt;
&lt;br /&gt;
   bitbake meta-toolchain-openmoko&lt;br /&gt;
&lt;br /&gt;
Finally, everytime you want to use this toolchain, you need to alter some environment variables, so that your tools will be found. The toolchain provides a script to do that, so the only thing you need to do is to source it.&lt;br /&gt;
Note that if you are not using a &amp;quot;sh&amp;quot; or &amp;quot;bash&amp;quot; shell (check with &amp;quot;echo $SHELL&amp;quot;) that you need&lt;br /&gt;
to start &amp;quot;sh&amp;quot; or &amp;quot;bash&amp;quot; first.&lt;br /&gt;
&lt;br /&gt;
 . /usr/local/openmoko/arm/setup-env&lt;br /&gt;
&lt;br /&gt;
* At least, you should add /usr/local/openmoko/arm/bin to your $PATH variable, otherwise the next steps won't work (om-conf and make).&lt;br /&gt;
&lt;br /&gt;
==Building OpenMoko Kernel from git repo using Toolchain==&lt;br /&gt;
&lt;br /&gt;
 git clone git://git.openmoko.org/git/kernel.git linux-2.6&lt;br /&gt;
 cd linux-2.6&lt;br /&gt;
 git checkout origin/stable&lt;br /&gt;
 cp defconfig-gta02 .config&lt;br /&gt;
 ./build&lt;br /&gt;
&lt;br /&gt;
Will fail with error message &amp;quot;arm-angstrom-linux-gnueabi-ld: unrecognized option '-Wl,-rpath-link,/usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/lib'&amp;quot; until /usr/local/openmoko/arm/setup-env is modified. LDFLAGS should be changed from:&lt;br /&gt;
&lt;br /&gt;
 export LDFLAGS=&amp;quot;-L${OMTOOL_DIR}/arm/arm-angstrom-linux-gnueabi/lib -Wl,-rpath-link,${OMTOOL_DIR}/arm/arm-angstrom-linux-gnueabi/lib -Wl,-O1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
to:&lt;br /&gt;
&lt;br /&gt;
 export LDFLAGS=&amp;quot;-L${OMTOOL_DIR}/arm/arm-angstrom-linux-gnueabi/lib -rpath-link ${OMTOOL_DIR}/arm/arm-angstrom-linux-gnueabi/lib -O1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Building a sample project==&lt;br /&gt;
&lt;br /&gt;
In a chosen destination directory (in this example ~/):&lt;br /&gt;
&lt;br /&gt;
* copy the downloaded sample application source:&lt;br /&gt;
&lt;br /&gt;
 cp -r /usr/local/openmoko/source/openmoko-sample2 ~/&lt;br /&gt;
&lt;br /&gt;
* Remember to set the proper environment variables (again with &amp;quot;sh&amp;quot; or &amp;quot;bash&amp;quot;) for openmoko:&lt;br /&gt;
&lt;br /&gt;
 . /usr/local/openmoko/arm/setup-env&lt;br /&gt;
&lt;br /&gt;
* You need to create a build configuration for this application. This also checks if all needed libraries, tools, etc.. is available on your system. If this fails see the notes about the needed packages in the section &amp;quot;Prerequisites&amp;quot; mentioned earlier.&lt;br /&gt;
&lt;br /&gt;
 om-conf openmoko-sample2&lt;br /&gt;
&lt;br /&gt;
* Optionally now you can modify the source code in openmoko-sample2/src.  Before the next step, go into the sample directory.&lt;br /&gt;
&lt;br /&gt;
 cd openmoko-sample2&lt;br /&gt;
&lt;br /&gt;
* If you are using an older version of the toolchain, you may have to create the makefile by running &amp;quot;./autogen.sh&amp;quot;.  Otherwise, to build the application from the source code just type:&lt;br /&gt;
&lt;br /&gt;
 make&lt;br /&gt;
&lt;br /&gt;
* If there are errors (i.e. &amp;quot;You need to install gnome-common from the GNOME CVS&amp;quot;) deal with them.  Also see &amp;quot;Troubleshooting&amp;quot; section at the end of this page for known issues.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
If you want to install this project on host for staging usage later, a shared library, for example, you can do the following to install it into a given configured prefix.&lt;br /&gt;
&lt;br /&gt;
 PKG_CONFIG_PATH=&amp;quot;PKG_CONFIG_PATH:/usr/lib/pkgconfig&amp;quot; om-conf --prefix=/usr/local/openmoko openmoko-sample2&lt;br /&gt;
 cd openmoko-sample2&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
==How to modify the sample project==&lt;br /&gt;
&lt;br /&gt;
In order to build your own project by using openmoko-sample2 files, some changes are needed:&lt;br /&gt;
&lt;br /&gt;
* copy the downloaded sample application source&lt;br /&gt;
&lt;br /&gt;
 cp -r /usr/local/openmoko/source/openmoko-sample2 ~/&lt;br /&gt;
 &lt;br /&gt;
* rename the folder with the name of your project (in this example your-project-name) and delete old sample files &lt;br /&gt;
&lt;br /&gt;
 mv openmoko-sample2 your-project-name&lt;br /&gt;
 cd your-project-name&lt;br /&gt;
 cd src&lt;br /&gt;
 rm *.c&lt;br /&gt;
&lt;br /&gt;
* copy your sources (in this example your-sources) into src/&lt;br /&gt;
&lt;br /&gt;
 cp your-sources .&lt;br /&gt;
 cd ..&lt;br /&gt;
&lt;br /&gt;
* now in the main folder modify autogen.sh by updating the following lines&lt;br /&gt;
&lt;br /&gt;
 PKG_NAME=&amp;quot;your-project-name&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* modify configure.ac by updating the following lines ('main.c' should be the main file in your project)&lt;br /&gt;
&lt;br /&gt;
 AC_INIT(your-project-name, 0.0.1, http://www.openmoko.org/)    &lt;br /&gt;
 AC_CONFIG_SRCDIR(src/main.c)&lt;br /&gt;
&lt;br /&gt;
* go into data/ folder and rename these files with the name of your project&lt;br /&gt;
&lt;br /&gt;
 cd data&lt;br /&gt;
 mv openmoko-sample.png your-project-name.png&lt;br /&gt;
 mv openmoko-sample.desktop your-project-name.desktop&lt;br /&gt;
&lt;br /&gt;
* modify Makefile.am inside data/ by updating the following lines&lt;br /&gt;
&lt;br /&gt;
 dist_desktop_DATA = your-project-name.desktop&lt;br /&gt;
 dist_appicon_DATA = your-project-name.png&lt;br /&gt;
&lt;br /&gt;
* modify Makefile.in inside data/ by updating the following lines&lt;br /&gt;
 &lt;br /&gt;
 dist_desktop_DATA = your-project-name.desktop&lt;br /&gt;
 dist_appicon_DATA = your-project-name.png&lt;br /&gt;
&lt;br /&gt;
* modify your-project-name.desktop by updating the following lines&lt;br /&gt;
&lt;br /&gt;
 Name=your-project-name&lt;br /&gt;
 Encoding=UTF-8&lt;br /&gt;
 Version=0.0.1&lt;br /&gt;
 Type=Application&lt;br /&gt;
 Exec=your-project-name&lt;br /&gt;
&lt;br /&gt;
* and by adding the following line&lt;br /&gt;
&lt;br /&gt;
 Icon=your-project-name&lt;br /&gt;
&lt;br /&gt;
* move into src/ folder&lt;br /&gt;
&lt;br /&gt;
 cd ..&lt;br /&gt;
 cd src&lt;br /&gt;
&lt;br /&gt;
* modify Makefile.am by updating the following lines&lt;br /&gt;
&lt;br /&gt;
 bin_PROGRAMS = your-project-name	&lt;br /&gt;
 your_project_name_SOURCES = \				&lt;br /&gt;
  		main.c &lt;br /&gt;
 your_project_name_LDADD  = @DEPENDENCIES_LIBS@&lt;br /&gt;
&lt;br /&gt;
* be sure to put instead of main.c all your .c and .h files and modify all the '-' characters with '_' in the variable names&lt;br /&gt;
&lt;br /&gt;
==Packaging your application==&lt;br /&gt;
&lt;br /&gt;
We have included a script to make an ipkg out of your application. Note that this is not needed to test your application on the Neo (for that you can just scp the resulting binary and data over), however it's very handy if you want to distribute your application to others.&lt;br /&gt;
&lt;br /&gt;
 om-make-ipkg openmoko-sample2&lt;br /&gt;
&lt;br /&gt;
Now you got openmoko-sample2_0.1_armv4t.ipk , you can `scp' it to your&lt;br /&gt;
Neo and install it:&lt;br /&gt;
&lt;br /&gt;
 scp openmoko-sample2_0.1_armv4t.ipk root@192.168.0.202:&lt;br /&gt;
 ssh root@192.168.0.202 opkg install openmoko-sample2_0.1_armv4t.ipk&lt;br /&gt;
&lt;br /&gt;
Note that while you can redistribute the generated ipkg, be aware that this is a bare-bones ipk that contains no further information, i.e. you will lack library dependencies. See below how to fix this.&lt;br /&gt;
&lt;br /&gt;
You can also supply the version number, a description, and an author / contacts string in a control file:&lt;br /&gt;
&lt;br /&gt;
 om-make-ipkg myapp myapp_control&lt;br /&gt;
&lt;br /&gt;
A template of myapp_control:&lt;br /&gt;
&lt;br /&gt;
 Package: $appname&lt;br /&gt;
 Version: 0.1&lt;br /&gt;
 Description: package built by openmoko toolchain&lt;br /&gt;
 Section: openmoko/applications&lt;br /&gt;
 Priority: optional&lt;br /&gt;
 Maintainer: $USER&lt;br /&gt;
 Architecture: armv4t&lt;br /&gt;
 Homepage: http://www.openmoko.org/&lt;br /&gt;
 Depends: &lt;br /&gt;
 Source: ${SRC}&lt;br /&gt;
&lt;br /&gt;
==Where to go from here==&lt;br /&gt;
&lt;br /&gt;
Using the external toolchain is an easy way to build applications for your Neo. If you are familiar with this procedure, you might also want to look into&lt;br /&gt;
* Using [[Qemu]] to test your applications in an emulated environment&lt;br /&gt;
** Ubuntu users might prefer to look at [[Automatic_emulation_in_Ubuntu]]&lt;br /&gt;
* Using [[Host-based_development_with_Xoo_and_Xephyr|host-based development]] to improve your efficiency&lt;br /&gt;
* Using [[OpenEmbedded]] to customize your Openmoko distribution image&lt;br /&gt;
&lt;br /&gt;
=Advanced topics=&lt;br /&gt;
==Using toolchain provided libraries==&lt;br /&gt;
Add the necessary libraries to the _LDADD field in src/Makefile.am, for example:&lt;br /&gt;
 openmoko_sample2_LDADD  = @DEPENDENCIES_LIBS@ -lmokogsmd2&lt;br /&gt;
&lt;br /&gt;
make sure to run om-conf again after this.&lt;br /&gt;
&lt;br /&gt;
==Installing additional libraries into the toolchain==&lt;br /&gt;
&lt;br /&gt;
Sooner or later you will want to compile an application that has dependencies which can't be fulfilled by the precompiled toolchain, e.g. some obscure libraries.&lt;br /&gt;
&lt;br /&gt;
In that case, feel free to request the inclusion of additional libraries into the next release of the OpenMoko toolchain. Until then, here is how you enhance your already installed toolchain. Say, we want to add the library called liburiparse:&lt;br /&gt;
&lt;br /&gt;
 cd ~/source&lt;br /&gt;
 wget http://downloads.sourceforge.net/uriparser/uriparser-0.6.0.tar.bz2&lt;br /&gt;
 ./configure --host=arm-angstrom-linux-gnueabi \&lt;br /&gt;
 --prefix=/usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/&lt;br /&gt;
 make&lt;br /&gt;
 make install&lt;br /&gt;
&lt;br /&gt;
That's it.&lt;br /&gt;
&lt;br /&gt;
==Getting your application packaged by OE==&lt;br /&gt;
&lt;br /&gt;
If you have written a cool application which you want to share with others, the best way to do that is to&lt;br /&gt;
&lt;br /&gt;
# upload your application source code to a public location&lt;br /&gt;
# submit a [[BitBake]] recipe to [[OpenEmbedded]], preferably via the [http://bugzilla.openembedded.org OpenEmbedded bugtracker].&lt;br /&gt;
&lt;br /&gt;
See also [[Customizing the Openmoko Distribution]].&lt;br /&gt;
&lt;br /&gt;
==Troubleshooting==&lt;br /&gt;
&lt;br /&gt;
* Some Versions of the Toolchain have corrupt .la files. If you compile an application using the Toolchain and you receive a '/space/fic/openmoko-daily/neo1973/work/armv4t-angstrom-linux-gnueabi/pango-1.18.3-r0/pango-1.18.3/pango/libpangoft2-1.0.la' error, you are affected. To fix that you should go to your &amp;quot;/usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/usr/lib&amp;quot; directory and open the affected .la files and change &amp;quot;/space/fic...&amp;quot; to &amp;quot;/usr/local/openmoko/arm/arm-angstrom-linux-gnueabi/usr/lib&amp;quot;. You have to fix more than one .la file. For the pango error you have to change &amp;quot;libpangocairo-1.0.la&amp;quot;, but there are more corrupt .la files.&lt;br /&gt;
&lt;br /&gt;
* Please use the [http://lists.openmoko.org/mailman/listinfo/openmoko-devel Openmoko-Devel] mailing list.&lt;br /&gt;
&lt;br /&gt;
[[Category:Application Developer]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Import_Vcf_Contacts</id>
		<title>Import Vcf Contacts</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Import_Vcf_Contacts"/>
				<updated>2008-07-27T03:02:14Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: /* Import for ASU/Qtopia */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Import for 2007.2 ==&lt;br /&gt;
=== Basic Informations ===&lt;br /&gt;
&lt;br /&gt;
Neo FreeRunner uses Evolution data server (eds) to save contacts. &lt;br /&gt;
However, the specific version used differs from what is probably used on your desktop (if you have Evolution installed).&lt;br /&gt;
&lt;br /&gt;
You ''cannot'' copy your addressbook.db from your desktop to Neo ([http://docs.openmoko.org/trac/ticket/1119 bug 1119]).&lt;br /&gt;
&lt;br /&gt;
=== Import and Manage Scripts ===&lt;br /&gt;
&lt;br /&gt;
If you want to import your old contacts to the Neo you could use this script:&lt;br /&gt;
&lt;br /&gt;
[http://www.smurfy.de/files/neo/manage-contacts Manage Contacts script] [http://www.placard.fr.eu.org/~roland/tmp/manage-contacts.py mirror]&lt;br /&gt;
&lt;br /&gt;
If you first want to remove all existing contacts you could use this script.&lt;br /&gt;
&lt;br /&gt;
[http://www.smurfy.de/files/neo/remove_all_contacts remove all script]&lt;br /&gt;
&lt;br /&gt;
If you have all contacts in seperate vcf files and just want to import all at once:&lt;br /&gt;
&lt;br /&gt;
[http://www.smurfy.de/files/neo/ac Simple script]&lt;br /&gt;
&lt;br /&gt;
[http://www.smurfy.de/files/neo/import_contacts Simple script for one big contactsfile]&lt;br /&gt;
&lt;br /&gt;
(please add a .py after the filename, sorry my hoster gives an error if i link to .py files, even .py.txt)&lt;br /&gt;
&lt;br /&gt;
=== Exporting old contacts to VCard format ===&lt;br /&gt;
&lt;br /&gt;
To use the manage Script you need your Contacts in VCF format.&lt;br /&gt;
&lt;br /&gt;
# on nokia phones i used the nokia phone manager (long time ago)&lt;br /&gt;
# on windows mobile phones you could use active sync to sync with Outlook and then use a Outlook export plugin to export as vcf&lt;br /&gt;
# on lg phones the backup function to memory card creates one file with multiple VCards.&lt;br /&gt;
&lt;br /&gt;
=== Usage ===&lt;br /&gt;
&lt;br /&gt;
The script is for the 2007.2 Version (default install on Neo FreeRunner), not for Qtopia&lt;br /&gt;
&lt;br /&gt;
You need Python to use this script so do a&lt;br /&gt;
&lt;br /&gt;
 opkg install python-dbus&lt;br /&gt;
&lt;br /&gt;
to install python and the python dbus module&lt;br /&gt;
&lt;br /&gt;
==== Manage Contacts Script ====&lt;br /&gt;
&lt;br /&gt;
'''This script needs all contacts in one big file'''&lt;br /&gt;
&lt;br /&gt;
'''You also could run this script on a ssh session!'''&lt;br /&gt;
&lt;br /&gt;
# Copy your big contacts file (contacts.txt) to your Neo&lt;br /&gt;
# Copy script to your Neo&lt;br /&gt;
# Connect via ssh to your Neo&lt;br /&gt;
# Fix special chars in your contacts file with you favorite text editor&lt;br /&gt;
# To import the file run on the SSH shell:&lt;br /&gt;
&lt;br /&gt;
 python manage-contacts.py load &amp;lt; contacts.txt&lt;br /&gt;
&lt;br /&gt;
# For a backup your existing contacts on the Neo&lt;br /&gt;
&lt;br /&gt;
 python manage-contacts.py dump &amp;gt; contacts.txt&lt;br /&gt;
&lt;br /&gt;
==== Simple Script ====&lt;br /&gt;
&lt;br /&gt;
'''You must run the script in the OM Terminal, not over ssh'''&lt;br /&gt;
&lt;br /&gt;
The script does a listdir and imports ALL files it found in that dir. (i'm a bad python programmer)&lt;br /&gt;
&lt;br /&gt;
# Copy all vcf files to a separate directory on my freerunner&lt;br /&gt;
# Copy the ac script to the parent directory also on my freerunner&lt;br /&gt;
# Have the contacts program running (so you have eds running too)&lt;br /&gt;
# Go to the terminal on the freerunner and type in the vcf directory: &amp;quot;python ../ac&amp;quot; (root@om-gta02:~/vcf# python ../ac)&lt;br /&gt;
## Note: '''You must call the script in the OM terminal''' not via Bluetooth or USB or you get a dbus error.&lt;br /&gt;
# Done :D &lt;br /&gt;
&lt;br /&gt;
==== Troubleshooting ====&lt;br /&gt;
* Make sure you have python and python-dbus installed&lt;br /&gt;
* Make sure you have no illegal chars (utf) in the filename and inside the vcf files. (I had problems with Ü,Ä etc)&lt;br /&gt;
** The characters seem to work if you convert them from =C3=A4 type of format to proper UTF-8, and the vcards also specify UTF-8 charset. you cannot use other charsets besides UTF-8 since they are delivered via DBus which does not allow others.&lt;br /&gt;
* Only vcf files should be in your current directory so do a ../ac.&lt;br /&gt;
* You must call the script in the OM terminal not via Bluetooth or USB. If you do so a dbus error occur&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Authors ===&lt;br /&gt;
* Simple script by smurfy - phil &amp;lt;openmoko at smurfy.de&amp;gt;&lt;br /&gt;
* Manage Contacts script by Roland Mas &amp;lt;lolando at debian.org&amp;gt;&lt;br /&gt;
* Remove all Contacts script / simple script for one big file by Andreas Dalsgaard &amp;lt;andreas.dalsgaard at gmail.com&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Thanks to [[Import_Sim_Contacts]] for the original Python Script.&lt;br /&gt;
&lt;br /&gt;
== Import for ASU/Qtopia ==&lt;br /&gt;
The Qtopia addressbook application suports import of VCF files out of the box:&lt;br /&gt;
  LD_LIBRARY_PATH=/opt/Qtopia/lib /opt/Qtopia/bin/addressbook /home/root/addressbook.vcf&lt;br /&gt;
&lt;br /&gt;
You will be asked if you want to import the contacts form addressbook.vcf (the contact name will be taken from the &amp;quot;N:&amp;quot; vCard field).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[category:Openmoko]]&lt;br /&gt;
[[category:Documentation]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/GPS_Problems</id>
		<title>GPS Problems</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/GPS_Problems"/>
				<updated>2008-07-16T01:45:25Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: /* Possible SD Card Issue */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;See [[GPS]] for details on how to evaluate the Freerunner GPS with command line utilities.&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;3&amp;quot;&lt;br /&gt;
|+'''Problems with the GPS'''&lt;br /&gt;
!Username||Checked outside?||External antenna?||Note&lt;br /&gt;
|-&lt;br /&gt;
|Pthorin ||Yes|| No ||I tried for about 40 minutes outside, I'm running om-gta02 P1-Snapshot-20080622. Did get GPS time outside, but only got lines like: &lt;br /&gt;
$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30&lt;br /&gt;
&lt;br /&gt;
--[[User:Pthorin|Pthorin]] 05:11, 11 July 2008 (UTC) I tried it out once again after removing the front cover and got a fix quite fast, less than five minutes. Could there be an issue with the case blocking the signals? Could the snap/latch above the antenna be a problem?&lt;br /&gt;
|-&lt;br /&gt;
|iandouglas ||Yes|| No ||Spent over a half hour outdoors, the NMEA port on my Samsung Blackjack 2 found my position just fine, but also got the same 99.99,99.99,99.99*30 line as Pthorin when powering on the GPS unit, starting gpsd, then running gpspipe at the command line&lt;br /&gt;
|-&lt;br /&gt;
| genki || Yes || Yes || Same here. Does not get a fix without external antenna. GPS output is 99.99,99.99,99.99*30 as well&lt;br /&gt;
|-&lt;br /&gt;
| Ole || Yes || Yes || Tried 15min outside w/o external antenna. Did not get any activity on the SS tab. With external antenna from my window TTFS 33s. ||&lt;br /&gt;
|-&lt;br /&gt;
| Adsllc  || Yes || No || Tried 15min outside one night.  Got UTC time and a couple of satellites on the SS tab, but no fix.  Reseated the GPS connector, still had no luck.  Later I set it outside, did other stuff for 30 mins or so, then came back to see a successful fix and all tabs in the OM AGPS UI app working.  Worked fine on a trip to the post office.  Tried again later, no joy.&lt;br /&gt;
&lt;br /&gt;
Tried another day - left it outside propped upright against the luggage rack of the car for 15 minutes+; zero satellites on AGPS UI.  Picked it up, pressed &amp;quot;run&amp;quot; then &amp;quot;Cold reset&amp;quot;.  BAM - it saw its first satellite about 10 seconds later.  It still took around 5 minutes to get a fix, but it's a lot better than nothing.&lt;br /&gt;
&lt;br /&gt;
I was doing a lot of screwing around before my first success (which did involve a Cold reset), so it's hard to assign causation.  The second time seemed to be pretty solid cause/effect.&lt;br /&gt;
&lt;br /&gt;
If anyone confirms this as a fix/workaround, please make it more prominent on this page.&lt;br /&gt;
|-&lt;br /&gt;
| Bumbl || Yes || No || Tried outside and never got to see a single satellite. I even went on the highest point nearby but it got no satellite although I tried for 45min.&lt;br /&gt;
|-&lt;br /&gt;
|Dummy ||?|| ? ||&lt;br /&gt;
|-&lt;br /&gt;
| Sitwon || Yes || No || Tried three different times in two different locations. Followed all the advice I could find on wiki &amp;amp; lists. Left it pointed up for 30-45min and have never gotten a single satellite to connect. :,(  &lt;br /&gt;
&lt;br /&gt;
Edit: Tried again w/ no MicroSD card, TTFF=21s indoors.&lt;br /&gt;
|-&lt;br /&gt;
| banahogg || Yes || No || Left pointed up in a mug as recommended. After ~30min, one satellite showed up in signal screen. Three after 60min, but no lock. Three other GPS systems locked on from the same location in at most 10 minutes.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|border=&amp;quot;3&amp;quot;&lt;br /&gt;
|+'''Success stories'''&lt;br /&gt;
!Username||Checked outside?||External antenna?||Note&lt;br /&gt;
|-&lt;br /&gt;
|[[User:TimoJyrinki|timo]] || Yes || No || 11-07: Spent over a half hour outdoors in an open area without nearby buildings. Zero good fixes, no time gotten, GPS output scrolled along with same numbers for the whole time. When I played some more, very rarely I noticed that in the AZ tab a satellite blob had appeared, always at 0 degrees at the top of the picture. But still no fixes at all or anything. [postscript: I probably moved around a bit, ie. had Neo in my hand]&lt;br /&gt;
''12-07 update'': Was able to get a fix in (completely) another location. Looks like the signal may be non-existent in many situations even in seemingly very open places, and together with the shaky software it may be sometimes really hard to say if there is a hw problem...&lt;br /&gt;
&lt;br /&gt;
''13-07 update'': Enabled the assistive data for the GPS, didn't touch to AGPS UI which always clears all data, got a fix in just a couple of minutes (maybe less, didn't look) and the fix stayed completely properly for the duration of my car trip. If someone codes also &amp;quot;agps daemon&amp;quot; to support Neo by saving data before gps chip is turned off, this'd be just great (considering the small antenna etc.).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Solved problems ==&lt;br /&gt;
&lt;br /&gt;
''Let's collect hints which could solve the above problems here. E.g.: How to get the best results with your internal antenna''&lt;br /&gt;
&lt;br /&gt;
=== Basic GPS debugging ===&lt;br /&gt;
&lt;br /&gt;
It could be that your GPS device is functioning properly, but needs to be &amp;quot;coaxed&amp;quot; into getting an initial fix.&lt;br /&gt;
&lt;br /&gt;
* Before reporting a problem here, please check that you've had the GPS out in the open air, preferably with the GPS antenna pointed up for over 15 mins. (the screen the right way up, with the top of the phone facing up, and the screen facing the horizon).  This should get a lock in even the worst cases.&lt;br /&gt;
&lt;br /&gt;
* However, you might not obtain a lock if the orientation or position of your phone continuously changes.  It needs to be stationary long enough to download a frame of data from one of the satellites.  Frames are 1500 bits and take 30 seconds to broadcast. The first 6 seconds of the frame contains clock data; the remainder describes the satellite position.  Downloading this data can take a surprisingly long time for two reasons.&lt;br /&gt;
*# The GPS reception is sensitive to the orientation of the phone.  When you move the phone, it can corrupt part of the current frame.&lt;br /&gt;
*# GPS signals reflect off buildings, interfering with reception in seemingly random ways.  If local objects cause signal reflections between you and the satellites, the data may repeatedly fail to download; try facing a different direction (and then holding still) after a few minutes without a lock.&lt;br /&gt;
* Is your unit obtaining signal at all?  Check using the AGPS test program &amp;quot;Openmoko AGPS UI&amp;quot;.  Click &amp;quot;Power On&amp;quot; to begin the test.  &lt;br /&gt;
** The &amp;quot;ss&amp;quot; button lists satellites and signal strengths; pressing the &amp;quot;dBm&amp;quot; or &amp;quot;C/N0&amp;quot; button at the bottom of the screen cycles through different scales; a signal between 130dBM and 150dBm should be adequate for a lock, assuming the Neo obtains a consistent signal (lower numbers / taller bars are better).&lt;br /&gt;
** It may take a few minutes for the first satellite to appear in this display.  You'll need multiple satellite signals to get a lock.&lt;br /&gt;
** Before getting a lock, the &amp;quot;UTC&amp;quot; field in the &amp;quot;run&amp;quot; tab should start displaying the current time.  This value is obtained via the GPS antenna; it may take a few minutes for this field to become populated.&lt;br /&gt;
&lt;br /&gt;
Finally, there is probably room for improvement in the way GPS fixes are currently obtained.  GPS devices can obtain fixes at least three different ways.  The least sophisticated method downloads a set of current satellite orbits by downloading frames.  If part of a frame is corrupted, the GPS device must wait 30 seconds for it to be retransmitted.&lt;br /&gt;
&lt;br /&gt;
A slightly more sophisticated approach uses an initial estimate of the current time and your position to obtain a lock more quickly.  Finally, instead of downloading orbit and position data from the satellites, some modern GPS devices simply recalculate the information locally.  Some (or all?) of these optimizations are supported by the Freerunner's GPS device, though the software installed at the factory does not seem to make use of them.&lt;br /&gt;
&lt;br /&gt;
==== More Info to get a fix ====&lt;br /&gt;
I'd like to stress what is written above, it really helped. I put my FR on a table outside, standing vertically with something to hold it upright, switched to the SS display, clicked the db button, waited about 2 mins to get a bar, then turned it around its vertical axis slowly watching the bar go up and down. When it was facing the right way for a maximum bar length I left it like this, without touching it for about 10 mins, and it was able to find the other satellites and get a fix. It is important to not touch it or move it once it gets the first satellite. However it did lock up solid after about 30 minutes, and power button did not reset, needed to remove the battery which of course lost the fix.&lt;br /&gt;
&lt;br /&gt;
==== Comment on possible software solution ====&lt;br /&gt;
&lt;br /&gt;
I tested the FR outside with internal antenna and did not see a single sat for&lt;br /&gt;
15min. With external antenna I have a TTFS of 33s.&lt;br /&gt;
If I plug out the external after the fix is stable,&lt;br /&gt;
it almost instantly gets lost.&lt;br /&gt;
I still see one to three sats but get no fix.&lt;br /&gt;
&lt;br /&gt;
So apparently the information obtain through the external antenna&lt;br /&gt;
is not enough to assist the internal antenna in getting a fix.&lt;br /&gt;
Orbit and positon data should be known to the device by then?&lt;br /&gt;
If you download this data from the internet or recalculate it locally,&lt;br /&gt;
in what way would this be superior to what I tested?&lt;br /&gt;
&lt;br /&gt;
=== Information about faulty antennas ===&lt;br /&gt;
&lt;br /&gt;
* If you list your problems above, note if you've tried unplugging and replugging the internal GPS connector. (See [[Disassembling_Neo1973]] about 2/3 of the way down.  (this may differ on freerunner, pictures appreciated)&lt;br /&gt;
Also note that there is a trac ticket for this issue: [http://docs.openmoko.org/trac/ticket/1542 #1542]&lt;br /&gt;
&lt;br /&gt;
[[FreeRunner_GPS_antenna_repair_SOP]] Indicates that the problem may be bad soldering, and includes a guide to fix. This will presumably void your warranty.&lt;br /&gt;
&lt;br /&gt;
=== MicroSD Card Issue ===&lt;br /&gt;
&lt;br /&gt;
[http://lists.openmoko.org/pipermail/community/2008-July/021774.html This thread] indicates that the problem might be interference from the SD card slot, and recommends trying without the SD card inserted. A [http://lists.openmoko.org/pipermail/openmoko-kernel/2008-July/003777.html software workaround] is under testing...&lt;br /&gt;
&lt;br /&gt;
[[Category:GPS]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Neo_FreeRunner_Hardware_Issues</id>
		<title>Neo FreeRunner Hardware Issues</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Neo_FreeRunner_Hardware_Issues"/>
				<updated>2008-07-16T01:43:05Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: /* Active Issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a community-written page that discusses '''hardware issues''' with the Freerunner/[[GTA02]] device. Information here is unofficial (and possibly incorrect) unless otherwise stated. Corrections and clarifications from [[Openmoko]] employees would be greatly appreciated.&lt;br /&gt;
&lt;br /&gt;
Also please '''DON'T PANIC''' when reading this page. Please give Openmoko employees time to investigate these issues and to develop a solution.  Some of the items may turn out to be non-issues, or may have software workarounds.&lt;br /&gt;
&lt;br /&gt;
=== Active Issues ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== GPS Slow TTFF ====&lt;br /&gt;
&lt;br /&gt;
Issue: The GPS signal is degraded to the point where the unit cannot reliably get a &amp;quot;cold-start&amp;quot; fix. See [[GPS_Problems]]. &lt;br /&gt;
&lt;br /&gt;
Reason #1: For some reason, the [http://lists.openmoko.org/pipermail/community/2008-July/021774.html MicroSD controller] on the Freerunner is interfering with GPS reception.&lt;br /&gt;
&lt;br /&gt;
Reason #2: Poor soldering and/or mechanical deformation of the internal GPS antenna connector on some devices. See [[FreeRunner_GPS_antenna_repair_SOP]]&lt;br /&gt;
&lt;br /&gt;
Affects: unknown percentage of devices&lt;br /&gt;
&lt;br /&gt;
Status: [http://lists.openmoko.org/pipermail/openmoko-kernel/2008-July/003777.html Software workaround] found; hardware fix under investigation.&lt;br /&gt;
&lt;br /&gt;
Workarounds: Remove the microSD card. Use an external GPS antenna. Supplying almanac data and approximate coordinates in software (so that the chip can perform a &amp;quot;warm&amp;quot; acquisition) may also help. &lt;br /&gt;
&lt;br /&gt;
==== Poor Audio Quality ====&lt;br /&gt;
&lt;br /&gt;
Issue: The person on the other end of a GSM phone call may experience poor audio quality, to the point where he/she cannot carry on a normal conversation.&lt;br /&gt;
&lt;br /&gt;
There are three related aspects to this issue:&lt;br /&gt;
* Call is too quiet (mixer settings for mic and/or earpiece are set too low)&lt;br /&gt;
* Caller hears a loud echo of their own voice [http://docs.openmoko.org/trac/ticket/1267 #1267]&lt;br /&gt;
* Buzzing noise caused by GSM radio interference [http://docs.openmoko.org/trac/ticket/883 #883] [http://docs.openmoko.org/trac/ticket/1352 #1352]&lt;br /&gt;
&lt;br /&gt;
Affects: all devices but only some users (depending on many factors)&lt;br /&gt;
&lt;br /&gt;
Status: Under investigation. There is a possibility that the quality can be made &amp;quot;good enough&amp;quot; through software (mixer settings). &lt;br /&gt;
&lt;br /&gt;
Workarounds: Using a bluetooth headset is a possibility. &lt;br /&gt;
&lt;br /&gt;
==== PMU/Charger Issues ====&lt;br /&gt;
&lt;br /&gt;
Issue: The device may fail to turn on if the battery is deeply discharged, or may fail to charge the battery properly. See for example this thread on the [http://lists.openmoko.org/pipermail/openmoko-kernel/2008-June/003326.html kernel list].&lt;br /&gt;
&lt;br /&gt;
Affects: Unknown. Some discussions on the mailing list may refer to pre-production devices. &lt;br /&gt;
&lt;br /&gt;
Status: Fixed with [http://lists.openmoko.org/pipermail/openmoko-kernel/2008-July/003799.html Werner Almesberger patches] - [http://lists.openmoko.org/pipermail/commitlog/2008-July/005403.html more here]&lt;br /&gt;
&lt;br /&gt;
Workarounds: See http://lists.openmoko.org/pipermail/community/2008-July/021556.html&lt;br /&gt;
&lt;br /&gt;
==== Some SIMs Don't Work ====&lt;br /&gt;
&lt;br /&gt;
Issue: There are reports that some users cannot register with their GSM network when using certain SIM cards. See for example http://lists.openmoko.org/pipermail/community/2008-July/020370.html&lt;br /&gt;
&lt;br /&gt;
Recent investigations suggest that this is related to the voltage specification of the SIM - &amp;quot;2.9V&amp;quot; works while &amp;quot;1.8V&amp;quot; may have problems.&lt;br /&gt;
&lt;br /&gt;
Note that there have also been a couple of reports where the failure to register was caused by an incorrectly-mounted SD card (which in turn prevented the SIM from making proper electrical contact).&lt;br /&gt;
&lt;br /&gt;
Note also that there was a related issue with certain AT&amp;amp;T SIMs in early Neo1973 devices. The Freerunner is shipping with a newer GSM firmware in which the original Neo1973 issue has been fixed.&lt;br /&gt;
&lt;br /&gt;
Affects: Only a subset of users (details unknown).&lt;br /&gt;
&lt;br /&gt;
Status: Under investigation&lt;br /&gt;
&lt;br /&gt;
Workarounds: It may be possible to obtain a different model of SIM from your GSM carrier.&lt;br /&gt;
&lt;br /&gt;
==== Empty NOR Flash ====&lt;br /&gt;
&lt;br /&gt;
Issue: NOR flash (backup copy of u-boot) is not programmed. [http://docs.openmoko.org/trac/ticket/1568 #1568]&lt;br /&gt;
&lt;br /&gt;
Affects: Unknown - maybe only 1 or 2 devices? Also need to confirm that the bug report was from a mass-production unit rather than an earlier prototype.&lt;br /&gt;
&lt;br /&gt;
Status: Unknown&lt;br /&gt;
&lt;br /&gt;
Workarounds: Use the NAND copy of u-boot and be careful not to brick the device unless a debug-board is available.&lt;br /&gt;
&lt;br /&gt;
==== Debug board has wrong vendor/product ID ====&lt;br /&gt;
&lt;br /&gt;
Issue: A debug board is not reporting the expected USB Vendor/Product ID.&lt;br /&gt;
&lt;br /&gt;
Affects: Only [http://lists.openmoko.org/pipermail/device-owners/2008-July/001775.html one report] has been seen so far.&lt;br /&gt;
&lt;br /&gt;
Status: Unknown&lt;br /&gt;
&lt;br /&gt;
Workarounds: Edit configuration files (e.g. openocd.conf) to use the IDs that the board is reporting.&lt;br /&gt;
&lt;br /&gt;
=== Known/Accepted Issues ===&lt;br /&gt;
&lt;br /&gt;
This section lists items that are acknowledged as being less than ideal, but are considered to be acceptable in the shipping product. They will not be discussed in detail on this page.&lt;br /&gt;
&lt;br /&gt;
* Poor performance + slow bus speed of the Glamo GPU - discussed to death on the mailing lists and IRC.  &lt;br /&gt;
* [http://lists.openmoko.org/pipermail/hardware/2008-April/000055.html GPS antenna switch] driven out-of-spec - does not appear to have a significant effect on device performance&lt;br /&gt;
* Poor low-frequency audio response with low-impedance headphones, e.g. as discussed in this thread:   http://lists.openmoko.org/pipermail/openmoko-kernel/2008-March/001999.html  (NOTE - this thread refers to pre-mass-production devices)&lt;br /&gt;
&lt;br /&gt;
=== Resolved Issues ===&lt;br /&gt;
&lt;br /&gt;
These are issues that have been discussed in the past, but have been fixed (or turned out not to be a problem) for the mass-produced devices.&lt;br /&gt;
&lt;br /&gt;
* Excessive LED current - Some early units lacked a current-limiting resistor for the LEDs. This has been fixed for the production units.&lt;br /&gt;
* Battery life - At this time it appears that the Freerunner battery life will be acceptable once suspend/resume support has been implemented in software.&lt;br /&gt;
&lt;br /&gt;
[[Category:GTA02 Hardware]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/FreeRunner:_Selected_Blogs_and_Articles</id>
		<title>FreeRunner: Selected Blogs and Articles</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/FreeRunner:_Selected_Blogs_and_Articles"/>
				<updated>2008-07-16T01:27:47Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: /* English */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|align=right&lt;br /&gt;
  |__TOC__&lt;br /&gt;
  |}&lt;br /&gt;
 &lt;br /&gt;
This page contains references to personal blog entries and reflections of the mind about FreeRunner. Please see [[Press_Coverage]] for more official pieces of information.&lt;br /&gt;
&lt;br /&gt;
Newest on top.&lt;br /&gt;
&lt;br /&gt;
== Languages ==&lt;br /&gt;
&lt;br /&gt;
=== English ===&lt;br /&gt;
&lt;br /&gt;
==== July 2008 ====&lt;br /&gt;
* jThinks: [http://jthinks.com/index.php/freerunner-at-last/ Freerunner, at last]&lt;br /&gt;
* Holden's Blog: [http://blog.holdenkarau.com/2008/07/unboxing-openmokofreerunner-including.html Unboxing the OpenMoko/FreeRunner including the spares kit, debug board]&lt;br /&gt;
* Wolfmans Howlings: [http://blog.wolfman.com/articles/2008/07/11/openmoko-freerunner-first-impressions OpenMoko Freerunner first impressions]&lt;br /&gt;
* Free Software Foundation (John Sullivan): [http://www.fsf.org/blogs/community/5-reasons-to-avoid-iphone-3g 5 reasons to avoid iPhone 3G]&lt;br /&gt;
* Joseph Reeves: [http://blogs.thehumanjourney.net/finds/entry/20080710 FreeRunner retail unboxing]&lt;br /&gt;
* Ars Technica: [http://arstechnica.com/reviews/os/open-moko-software.ars Ars Technica First Look at OpenMoko]&lt;br /&gt;
* Juan Lucas Domínguez Rubio: [http://gvsigmobileonopenmoko.wordpress.com/2008/07/02/first-experience-with-openmoko/ First experience with Openmoko]&lt;br /&gt;
* Philipp Kern: [http://www.philkern.de/weblog/en/neo_freerunner.html Neo Freerunner: First impressions]&lt;br /&gt;
&lt;br /&gt;
==== May 2008 ====&lt;br /&gt;
&lt;br /&gt;
* Kevin Dean: [http://www.monochromementality.com/index.php/blog/show/Day-One-Openmoko-Freerunner.html Day One: Openmoko Freerunner]&lt;br /&gt;
&lt;br /&gt;
==== Earlier ====&lt;br /&gt;
* Michael Shiloh: [http://gettingstartedopenmoko.wordpress.com/ Getting Started with OpenMoko] (many blog entries in this dedicated blog)&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Neo_FreeRunner_Hardware_Issues</id>
		<title>Neo FreeRunner Hardware Issues</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Neo_FreeRunner_Hardware_Issues"/>
				<updated>2008-07-15T18:43:35Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: /* PMU/Charger Issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This is a community-written page that discusses '''hardware issues''' with the Freerunner/[[GTA02]] device. Information here is unofficial (and possibly incorrect) unless otherwise stated. Corrections and clarifications from [[Openmoko]] employees would be greatly appreciated.&lt;br /&gt;
&lt;br /&gt;
Also please '''DON'T PANIC''' when reading this page. Please give Openmoko employees time to investigate these issues and to develop a solution.  Some of the items may turn out to be non-issues, or may have software workarounds.&lt;br /&gt;
&lt;br /&gt;
=== Active Issues ===&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==== GPS Slow TTFF ====&lt;br /&gt;
&lt;br /&gt;
Issue: The GPS signal is degraded to the point where the unit cannot reliably get a &amp;quot;cold-start&amp;quot; fix. See [[GPS_Problems]]. &lt;br /&gt;
&lt;br /&gt;
Reason #1: For some reason, the [http://lists.openmoko.org/pipermail/community/2008-July/021774.html MicroSD controller] on the Freerunner is interfering with GPS reception.&lt;br /&gt;
&lt;br /&gt;
Reason #2: Poor soldering and/or mechanical deformation of the internal GPS antenna connector on some devices. See [[FreeRunner_GPS_antenna_repair_SOP]]&lt;br /&gt;
&lt;br /&gt;
Affects: unknown percentage of devices&lt;br /&gt;
&lt;br /&gt;
Status: Under investigation. Openmoko has not yet made an official statement regarding this problem.&lt;br /&gt;
&lt;br /&gt;
Workarounds: Remove the microSD card. Use an external GPS antenna. Supplying almanac data and approximate coordinates in software (so that the chip can perform a &amp;quot;warm&amp;quot; acquisition) may also help. &lt;br /&gt;
&lt;br /&gt;
==== Poor Audio Quality ====&lt;br /&gt;
&lt;br /&gt;
Issue: The person on the other end of a GSM phone call may experience poor audio quality, to the point where he/she cannot carry on a normal conversation.&lt;br /&gt;
&lt;br /&gt;
There are three related aspects to this issue:&lt;br /&gt;
* Call is too quiet (mixer settings for mic and/or earpiece are set too low)&lt;br /&gt;
* Caller hears a loud echo of their own voice [http://docs.openmoko.org/trac/ticket/1267 #1267]&lt;br /&gt;
* Buzzing noise caused by GSM radio interference [http://docs.openmoko.org/trac/ticket/883 #883] [http://docs.openmoko.org/trac/ticket/1352 #1352]&lt;br /&gt;
&lt;br /&gt;
Affects: all devices but only some users (depending on many factors)&lt;br /&gt;
&lt;br /&gt;
Status: Under investigation. There is a possibility that the quality can be made &amp;quot;good enough&amp;quot; through software (mixer settings). &lt;br /&gt;
&lt;br /&gt;
Workarounds: Using a bluetooth headset is a possibility. &lt;br /&gt;
&lt;br /&gt;
==== PMU/Charger Issues ====&lt;br /&gt;
&lt;br /&gt;
Issue: The device may fail to turn on if the battery is deeply discharged, or may fail to charge the battery properly. See for example this thread on the [http://lists.openmoko.org/pipermail/openmoko-kernel/2008-June/003326.html kernel list].&lt;br /&gt;
&lt;br /&gt;
Affects: Unknown. Some discussions on the mailing list may refer to pre-production devices. &lt;br /&gt;
&lt;br /&gt;
Status: Fixed with [http://lists.openmoko.org/pipermail/openmoko-kernel/2008-July/003799.html Werner Almesberger patches]&lt;br /&gt;
&lt;br /&gt;
Workarounds: See http://lists.openmoko.org/pipermail/community/2008-July/021556.html&lt;br /&gt;
&lt;br /&gt;
==== Some SIMs Don't Work ====&lt;br /&gt;
&lt;br /&gt;
Issue: There are reports that some users cannot register with their GSM network when using certain SIM cards. See for example http://lists.openmoko.org/pipermail/community/2008-July/020370.html&lt;br /&gt;
&lt;br /&gt;
Recent investigations suggest that this is related to the voltage specification of the SIM - &amp;quot;2.9V&amp;quot; works while &amp;quot;1.8V&amp;quot; may have problems.&lt;br /&gt;
&lt;br /&gt;
Note that there have also been a couple of reports where the failure to register was caused by an incorrectly-mounted SD card (which in turn prevented the SIM from making proper electrical contact).&lt;br /&gt;
&lt;br /&gt;
Note also that there was a related issue with certain AT&amp;amp;T SIMs in early Neo1973 devices. The Freerunner is shipping with a newer GSM firmware in which the original Neo1973 issue has been fixed.&lt;br /&gt;
&lt;br /&gt;
Affects: Only a subset of users (details unknown).&lt;br /&gt;
&lt;br /&gt;
Status: Under investigation&lt;br /&gt;
&lt;br /&gt;
Workarounds: It may be possible to obtain a different model of SIM from your GSM carrier.&lt;br /&gt;
&lt;br /&gt;
==== Empty NOR Flash ====&lt;br /&gt;
&lt;br /&gt;
Issue: NOR flash (backup copy of u-boot) is not programmed. [http://docs.openmoko.org/trac/ticket/1568 #1568]&lt;br /&gt;
&lt;br /&gt;
Affects: Unknown - maybe only 1 or 2 devices? Also need to confirm that the bug report was from a mass-production unit rather than an earlier prototype.&lt;br /&gt;
&lt;br /&gt;
Status: Unknown&lt;br /&gt;
&lt;br /&gt;
Workarounds: Use the NAND copy of u-boot and be careful not to brick the device unless a debug-board is available.&lt;br /&gt;
&lt;br /&gt;
==== Debug board has wrong vendor/product ID ====&lt;br /&gt;
&lt;br /&gt;
Issue: A debug board is not reporting the expected USB Vendor/Product ID.&lt;br /&gt;
&lt;br /&gt;
Affects: Only [http://lists.openmoko.org/pipermail/device-owners/2008-July/001775.html one report] has been seen so far.&lt;br /&gt;
&lt;br /&gt;
Status: Unknown&lt;br /&gt;
&lt;br /&gt;
Workarounds: Edit configuration files (e.g. openocd.conf) to use the IDs that the board is reporting.&lt;br /&gt;
&lt;br /&gt;
=== Known/Accepted Issues ===&lt;br /&gt;
&lt;br /&gt;
This section lists items that are acknowledged as being less than ideal, but are considered to be acceptable in the shipping product. They will not be discussed in detail on this page.&lt;br /&gt;
&lt;br /&gt;
* Poor performance + slow bus speed of the Glamo GPU - discussed to death on the mailing lists and IRC.  &lt;br /&gt;
* [http://lists.openmoko.org/pipermail/hardware/2008-April/000055.html GPS antenna switch] driven out-of-spec - does not appear to have a significant effect on device performance&lt;br /&gt;
* Poor low-frequency audio response with low-impedance headphones, e.g. as discussed in this thread:   http://lists.openmoko.org/pipermail/openmoko-kernel/2008-March/001999.html  (NOTE - this thread refers to pre-mass-production devices)&lt;br /&gt;
&lt;br /&gt;
=== Resolved Issues ===&lt;br /&gt;
&lt;br /&gt;
These are issues that have been discussed in the past, but have been fixed (or turned out not to be a problem) for the mass-produced devices.&lt;br /&gt;
&lt;br /&gt;
* Excessive LED current - Some early units lacked a current-limiting resistor for the LEDs. This has been fixed for the production units.&lt;br /&gt;
* Battery life - At this time it appears that the Freerunner battery life will be acceptable once suspend/resume support has been implemented in software.&lt;br /&gt;
&lt;br /&gt;
[[Category:GTA02 Hardware]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/FreeRunner:_Selected_Blogs_and_Articles</id>
		<title>FreeRunner: Selected Blogs and Articles</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/FreeRunner:_Selected_Blogs_and_Articles"/>
				<updated>2008-07-15T14:56:11Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: /* July 2008 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{|align=right&lt;br /&gt;
  |__TOC__&lt;br /&gt;
  |}&lt;br /&gt;
 &lt;br /&gt;
This page contains references to personal blog entries and reflections of the mind about FreeRunner. Please see [[Press_Coverage]] for more official pieces of information.&lt;br /&gt;
&lt;br /&gt;
Newest on top.&lt;br /&gt;
&lt;br /&gt;
== Languages ==&lt;br /&gt;
&lt;br /&gt;
=== English ===&lt;br /&gt;
&lt;br /&gt;
==== July 2008 ====&lt;br /&gt;
* Holden's Blog: [http://blog.holdenkarau.com/2008/07/unboxing-openmokofreerunner-including.html Unboxing the OpenMoko/FreeRunner including the spares kit, debug board]&lt;br /&gt;
* Wolfmans Howlings: [http://blog.wolfman.com/articles/2008/07/11/openmoko-freerunner-first-impressions OpenMoko Freerunner first impressions]&lt;br /&gt;
* Free Software Foundation (John Sullivan): [http://www.fsf.org/blogs/community/5-reasons-to-avoid-iphone-3g 5 reasons to avoid iPhone 3G]&lt;br /&gt;
* Joseph Reeves: [http://blogs.thehumanjourney.net/finds/entry/20080710 FreeRunner retail unboxing]&lt;br /&gt;
* Ars Technica: [http://arstechnica.com/reviews/os/open-moko-software.ars Ars Technica First Look at OpenMoko]&lt;br /&gt;
* Juan Lucas Domínguez Rubio: [http://gvsigmobileonopenmoko.wordpress.com/2008/07/02/first-experience-with-openmoko/ First experience with Openmoko]&lt;br /&gt;
* Philipp Kern: [http://www.philkern.de/weblog/en/neo_freerunner.html Neo Freerunner: First impressions]&lt;br /&gt;
&lt;br /&gt;
==== May 2008 ====&lt;br /&gt;
&lt;br /&gt;
* Kevin Dean: [http://www.monochromementality.com/index.php/blog/show/Day-One-Openmoko-Freerunner.html Day One: Openmoko Freerunner]&lt;br /&gt;
&lt;br /&gt;
==== Earlier ====&lt;br /&gt;
* Michael Shiloh: [http://gettingstartedopenmoko.wordpress.com/ Getting Started with OpenMoko] (many blog entries in this dedicated blog)&lt;br /&gt;
&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Userspace_root_image</id>
		<title>Userspace root image</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Userspace_root_image"/>
				<updated>2008-07-14T23:24:25Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: /* Mounting the JFFS2 image on a loop back device (Block Memory MTD Emulation) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Creating a root filesystem from scratch ==&lt;br /&gt;
&lt;br /&gt;
To create a root file system image for storage in NAND flash, we use the mkfs.jffs2 program contained in the Debian package ''mtd-tools''.&lt;br /&gt;
&lt;br /&gt;
 mkfs.jffs2 --pad=0x700000 -o rootfs.jffs2 -e 0x4000 -n -d/tmp/jffsroot/&lt;br /&gt;
&lt;br /&gt;
is a typical command.  It creates a FS image for our erase block size of 16k, padded to 0x700000 bytes in length from the files contained in the ''/tmp/jffsroot'' directory and stores the FS image in ''rootfs.jffs2''.&lt;br /&gt;
&lt;br /&gt;
== Using pre-created root fs image ==&lt;br /&gt;
&lt;br /&gt;
=== Prebuilt ===&lt;br /&gt;
&lt;br /&gt;
See [[Repositories]] and update the list if you have more information.&lt;br /&gt;
&lt;br /&gt;
=== OpenEmbedded ===&lt;br /&gt;
&lt;br /&gt;
OpenEmbedded will itself create a jffs2 image at the end of the build process.&lt;br /&gt;
&lt;br /&gt;
Once the build server is running, it will create root filesystem images for us.&lt;br /&gt;
&lt;br /&gt;
=== demo JFFS2 root image ===&lt;br /&gt;
&lt;br /&gt;
Check the [[Flashing openmoko]] page for pre-built root images. Please note that this image may take long to boot the first time, since this boot finishes the installation process.&lt;br /&gt;
&lt;br /&gt;
=== Mounting the JFFS2 image on a loop back device (Block Memory MTD Emulation) ===&lt;br /&gt;
 export loop=$(losetup -f)&lt;br /&gt;
 losetup $loop &amp;lt;rootfs.jffs2&amp;gt;&lt;br /&gt;
 modprobe block2mtd block2mtd=$loop,131072&lt;br /&gt;
 modprobe jffs2&lt;br /&gt;
 modprobe mtdblock&lt;br /&gt;
 mkdir &amp;lt;mountpoint&amp;gt;&lt;br /&gt;
 mount -t jffs2 -o ro /dev/mtdblock0 &amp;lt;mountpoint&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Based on this [http://www.internettablettalk.com/forums/showthread.php?p=192475#post192475 script by fanoush].&lt;br /&gt;
&lt;br /&gt;
=== Mounting the JFFS2 image on a loop back device (Kernel Memory MTD Emulation) ===&lt;br /&gt;
&lt;br /&gt;
As mounting the JFFS2 image from /dev/loop0 device is not supported, use the mtdram device as described in http://www.handhelds.org/hypermail/familiar/62/6232.html&lt;br /&gt;
&lt;br /&gt;
(On Fedora the first module to load is mtd, not mtdcore and you need to set e.g. vmalloc=256m as a kernel boot parameter for this to work.)&lt;br /&gt;
&lt;br /&gt;
 modprobe mtdcore&lt;br /&gt;
 modprobe jffs2&lt;br /&gt;
 modprobe mtdram total_size=59024  # default is 4 MByte - set to max. available size&lt;br /&gt;
 modprobe mtdchar&lt;br /&gt;
 modprobe mtdblock&lt;br /&gt;
&lt;br /&gt;
Using ''total_size=59024'' will set the filesystem size to the available space on /dev/mtd4 of the GTA1 device. So when you copy the image back it will be about 58 MB. You can set this to smaller values though.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be careful to really use the mtd-ram-disk (maybe there is a real Flash-device somewhere in your development system)&lt;br /&gt;
&lt;br /&gt;
So check for that looking into /proc/mtd:&lt;br /&gt;
 cat /proc/mtd &lt;br /&gt;
 # dev:    size   erasesize  name&lt;br /&gt;
 # mtd0: 039a4000 00020000 &amp;quot;mtdram test device&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Then write the image to that device and mount it:&lt;br /&gt;
&lt;br /&gt;
 dd if=&amp;lt;rootfs.jffs2&amp;gt; of=/dev/mtd0&lt;br /&gt;
 mount -t jffs2 /dev/mtdblock0 &amp;lt;mountpoint&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The image is an Little Endian jffs2 image. To mount it on Big Endian architectures (like PowerPC) it'll have to be converted:&lt;br /&gt;
&lt;br /&gt;
 jffs2dump -l -c -e &amp;lt;rootfs.jffs2.be&amp;gt; &amp;lt;rootfs.jffs2&amp;gt; # only needed on non little endian archs&lt;br /&gt;
&lt;br /&gt;
==== create the new image ====&lt;br /&gt;
To get the changed image back there are two ways. The obvious one is to unmount it and copy the data back from the MTD block device (the image will be 58 MB):&lt;br /&gt;
&lt;br /&gt;
 umount /dev/mtdblock0&lt;br /&gt;
 dd if=/dev/mtdblock0 of=&amp;lt;rootfs.jffs2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also create a new image using the mounted file system and the method described [[Userspace_root_image#Creating_a_root_filesystem_from_scratch | above]] (the image will have the size of its data):&lt;br /&gt;
 &lt;br /&gt;
 mkfs.jffs2 --pad=0x700000 -o new_rootfs.jffs2 -e 0x4000 -n -d &amp;lt;mountpoint&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Flashing a root filesystem into NAND ==&lt;br /&gt;
&lt;br /&gt;
See [[U-boot#Writing_rootfs_to_NAND]]&lt;br /&gt;
&lt;br /&gt;
== Converting a GTA02 image for GTA01 ==&lt;br /&gt;
&lt;br /&gt;
The techniques on this page may be used to convert a GTA02 (Freerunner) image for use on a GTA01, provided that it is small enough to fit into the GTA01's flash. &lt;br /&gt;
&lt;br /&gt;
The steps I used are shown below (corrections welcome). Please read all of this page before executing these commands, in particular the warning to make sure that /dev/mtd0 does not map to a real flash device on your system.&lt;br /&gt;
&lt;br /&gt;
 modprobe jffs2&lt;br /&gt;
 modprobe mtdchar&lt;br /&gt;
 modprobe mtdblock&lt;br /&gt;
 modprobe mtdram erase_size=128 total_size=262144&lt;br /&gt;
 dd if=gta02_image.jffs2 of=/dev/mtd0&lt;br /&gt;
 mount -t jffs2 -o ro /dev/mtdblock0 /mnt&lt;br /&gt;
 mkfs.jffs2 --little-endian -e 16 -x lzo --pad -n -r /mnt -o for_gta01.jffs2&lt;br /&gt;
&lt;br /&gt;
To clean up when you're done:&lt;br /&gt;
 umount /mnt&lt;br /&gt;
 rmmod mtdram&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Languages|Userspace_root_image}}&lt;br /&gt;
[[Category:Openmoko]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Userspace_root_image</id>
		<title>Userspace root image</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Userspace_root_image"/>
				<updated>2008-07-14T19:42:48Z</updated>
		
		<summary type="html">&lt;p&gt;Treviño: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Creating a root filesystem from scratch ==&lt;br /&gt;
&lt;br /&gt;
To create a root file system image for storage in NAND flash, we use the mkfs.jffs2 program contained in the Debian package ''mtd-tools''.&lt;br /&gt;
&lt;br /&gt;
 mkfs.jffs2 --pad=0x700000 -o rootfs.jffs2 -e 0x4000 -n -d/tmp/jffsroot/&lt;br /&gt;
&lt;br /&gt;
is a typical command.  It creates a FS image for our erase block size of 16k, padded to 0x700000 bytes in length from the files contained in the ''/tmp/jffsroot'' directory and stores the FS image in ''rootfs.jffs2''.&lt;br /&gt;
&lt;br /&gt;
== Using pre-created root fs image ==&lt;br /&gt;
&lt;br /&gt;
=== Prebuilt ===&lt;br /&gt;
&lt;br /&gt;
See [[Repositories]] and update the list if you have more information.&lt;br /&gt;
&lt;br /&gt;
=== OpenEmbedded ===&lt;br /&gt;
&lt;br /&gt;
OpenEmbedded will itself create a jffs2 image at the end of the build process.&lt;br /&gt;
&lt;br /&gt;
Once the build server is running, it will create root filesystem images for us.&lt;br /&gt;
&lt;br /&gt;
=== demo JFFS2 root image ===&lt;br /&gt;
&lt;br /&gt;
Check the [[Flashing openmoko]] page for pre-built root images. Please note that this image may take long to boot the first time, since this boot finishes the installation process.&lt;br /&gt;
&lt;br /&gt;
=== Mounting the JFFS2 image on a loop back device (Block Memory MTD Emulation) ===&lt;br /&gt;
 losetup $(losetup -f) &amp;lt;rootfs.jffs2&amp;gt;&lt;br /&gt;
 modprobe block2mtd block2mtd=$(losetup -f),131072&lt;br /&gt;
 modprobe jffs2&lt;br /&gt;
 modprobe mtdblock&lt;br /&gt;
 mkdir &amp;lt;mountpoint&amp;gt;&lt;br /&gt;
 mount -t jffs2 -o ro /dev/mtdblock0 &amp;lt;mountpoint&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Based on this [http://www.internettablettalk.com/forums/showthread.php?p=192475#post192475 script by fanoush].&lt;br /&gt;
&lt;br /&gt;
=== Mounting the JFFS2 image on a loop back device (Kernel Memory MTD Emulation) ===&lt;br /&gt;
&lt;br /&gt;
As mounting the JFFS2 image from /dev/loop0 device is not supported, use the mtdram device as described in http://www.handhelds.org/hypermail/familiar/62/6232.html&lt;br /&gt;
&lt;br /&gt;
(On Fedora the first module to load is mtd, not mtdcore and you need to set e.g. vmalloc=256m as a kernel boot parameter for this to work.)&lt;br /&gt;
&lt;br /&gt;
 modprobe mtdcore&lt;br /&gt;
 modprobe jffs2&lt;br /&gt;
 modprobe mtdram total_size=59024  # default is 4 MByte - set to max. available size&lt;br /&gt;
 modprobe mtdchar&lt;br /&gt;
 modprobe mtdblock&lt;br /&gt;
&lt;br /&gt;
Using ''total_size=59024'' will set the filesystem size to the available space on /dev/mtd4 of the GTA1 device. So when you copy the image back it will be about 58 MB. You can set this to smaller values though.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Be careful to really use the mtd-ram-disk (maybe there is a real Flash-device somewhere in your development system)&lt;br /&gt;
&lt;br /&gt;
So check for that looking into /proc/mtd:&lt;br /&gt;
 cat /proc/mtd &lt;br /&gt;
 # dev:    size   erasesize  name&lt;br /&gt;
 # mtd0: 039a4000 00020000 &amp;quot;mtdram test device&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Then write the image to that device and mount it:&lt;br /&gt;
&lt;br /&gt;
 dd if=&amp;lt;rootfs.jffs2&amp;gt; of=/dev/mtd0&lt;br /&gt;
 mount -t jffs2 /dev/mtdblock0 &amp;lt;mountpoint&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The image is an Little Endian jffs2 image. To mount it on Big Endian architectures (like PowerPC) it'll have to be converted:&lt;br /&gt;
&lt;br /&gt;
 jffs2dump -l -c -e &amp;lt;rootfs.jffs2.be&amp;gt; &amp;lt;rootfs.jffs2&amp;gt; # only needed on non little endian archs&lt;br /&gt;
&lt;br /&gt;
==== create the new image ====&lt;br /&gt;
To get the changed image back there are two ways. The obvious one is to unmount it and copy the data back from the MTD block device (the image will be 58 MB):&lt;br /&gt;
&lt;br /&gt;
 umount /dev/mtdblock0&lt;br /&gt;
 dd if=/dev/mtdblock0 of=&amp;lt;rootfs.jffs2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You can also create a new image using the mounted file system and the method described [[Userspace_root_image#Creating_a_root_filesystem_from_scratch | above]] (the image will have the size of its data):&lt;br /&gt;
 &lt;br /&gt;
 mkfs.jffs2 --pad=0x700000 -o new_rootfs.jffs2 -e 0x4000 -n -d &amp;lt;mountpoint&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Flashing a root filesystem into NAND ==&lt;br /&gt;
&lt;br /&gt;
See [[U-boot#Writing_rootfs_to_NAND]]&lt;br /&gt;
&lt;br /&gt;
== Converting a GTA02 image for GTA01 ==&lt;br /&gt;
&lt;br /&gt;
The techniques on this page may be used to convert a GTA02 (Freerunner) image for use on a GTA01, provided that it is small enough to fit into the GTA01's flash. &lt;br /&gt;
&lt;br /&gt;
The steps I used are shown below (corrections welcome). Please read all of this page before executing these commands, in particular the warning to make sure that /dev/mtd0 does not map to a real flash device on your system.&lt;br /&gt;
&lt;br /&gt;
 modprobe jffs2&lt;br /&gt;
 modprobe mtdchar&lt;br /&gt;
 modprobe mtdblock&lt;br /&gt;
 modprobe mtdram erase_size=128 total_size=262144&lt;br /&gt;
 dd if=gta02_image.jffs2 of=/dev/mtd0&lt;br /&gt;
 mount -t jffs2 -o ro /dev/mtdblock0 /mnt&lt;br /&gt;
 mkfs.jffs2 --little-endian -e 16 -x lzo --pad -n -r /mnt -o for_gta01.jffs2&lt;br /&gt;
&lt;br /&gt;
To clean up when you're done:&lt;br /&gt;
 umount /mnt&lt;br /&gt;
 rmmod mtdram&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Languages|Userspace_root_image}}&lt;br /&gt;
[[Category:Openmoko]]&lt;br /&gt;
[[Category:Guides]]&lt;/div&gt;</summary>
		<author><name>Treviño</name></author>	</entry>

	</feed>