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

	<entry>
		<id>http://wiki.openmoko.org/wiki/Community_Resources</id>
		<title>Community Resources</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Community_Resources"/>
				<updated>2010-09-18T14:46:36Z</updated>
		
		<summary type="html">&lt;p&gt;Jancona: /* IRC */  Update Android on Freerunner channel name&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|Community Resources}}&lt;br /&gt;
&lt;br /&gt;
All resources listed here are available to the general public.  Everyone is invited to participate.&lt;br /&gt;
&lt;br /&gt;
See also the [[Community Updates]] board &lt;br /&gt;
&lt;br /&gt;
== Applications Directory ==&lt;br /&gt;
&lt;br /&gt;
We are currently working at a [http://opkg-repo.org/ new application repository] where people can browse online for their favourite app, vote, comment, and so on.&lt;br /&gt;
&lt;br /&gt;
If you wish to help please subscribe to the [http://lists.shr-project.org/mailman/listinfo/shr-devel SHR-devel] mailing list or join our irc channel:&lt;br /&gt;
&lt;br /&gt;
Server: irc.freenode.net&lt;br /&gt;
&lt;br /&gt;
Channel: #openmoko-cdevel&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We need your help!&lt;br /&gt;
&lt;br /&gt;
== Blogs Aggregator ==&lt;br /&gt;
&lt;br /&gt;
The blogs of openmoko fans and developpers are aggregated at [http://planet.openmoko.org/ planet.openmoko.org]. Only posts tagged ''openmoko'' are syndicated. The planet is multilingual. To get your blog added, please open a ticket on the [http://admin-trac.openmoko.org/trac admin-trac] (you will need to open an account first).&lt;br /&gt;
&lt;br /&gt;
== Forums and Jabber Multi-User Chats ==&lt;br /&gt;
&lt;br /&gt;
See [[Discussion Forums]]. There is very little activity at the [http://forums.makeopensource.com/ The Unofficial OpenMoko Forums], but others forums are more busy.&lt;br /&gt;
&lt;br /&gt;
== Discussion boards ==&lt;br /&gt;
See [[Discussion Boards]].&lt;br /&gt;
&lt;br /&gt;
== Git Servers ==&lt;br /&gt;
&lt;br /&gt;
The new official set of repositories for [[OpenEmbedded]] as well as Linux [[kernel]], X.org and other used projects can be found at http://git.openmoko.org/, browsable via gitweb. Nowadays (2009 -&amp;gt;) the only active ones are qi, kernel and xf86-video-glamo.git. Everything else has moved to respective upstreams (like git.openembedded.net / [[OpenEmbedded]]).&lt;br /&gt;
&lt;br /&gt;
To get write access to git.openmoko.org, see instructions on using trac to ask for access in the mailing list post http://lists.openmoko.org/pipermail/devel/2009-February/004563.html.&lt;br /&gt;
&lt;br /&gt;
The git repositories use gitosis. If you have read &amp;amp; write access to the repositories, asked via the link above, see guide on how to eg. checkout at http://lists.openmoko.org/pipermail/devel/2009-February/004718.html. For example: ''git clone git+ssh://git@git.openmoko.org/kernel''.&lt;br /&gt;
&lt;br /&gt;
=== Personal repositories and branches ===&lt;br /&gt;
&lt;br /&gt;
Some members of the community have published their copy of the openmoko repository with private or not-yet-applied changes.&lt;br /&gt;
&lt;br /&gt;
* [[User:Nomeata|Nomeata]]: http://git.nomeata.de/?p=openmoko.git;a=summary&lt;br /&gt;
&lt;br /&gt;
== IRC ==&lt;br /&gt;
&lt;br /&gt;
* '''#openmoko''' of Freenode has always a good group for general discussion.&lt;br /&gt;
* '''#openmoko-cdevel''' is for community developer channel&lt;br /&gt;
* '''#openmoko-devel''' is for Openmoko Inc. internal developers only, sorry&lt;br /&gt;
* '''#openmoko-de''' is active within the time constraints of middle Europe. English spoken, if necessary.&lt;br /&gt;
* '''#android-on-freerunner''' can be used to discuss running [Android] on Freerunner&lt;br /&gt;
* '''#openmoko-debian''' has users and developers running Debian on FreeRunner&lt;br /&gt;
&lt;br /&gt;
If you experience any build problems and need help from other developers, it is important that you share your complete output log. To share your output log, just paste it to [http://www.pastebin.ca/ pastebin] after submitting it, paste the resulting URL to the IRC channel.&lt;br /&gt;
&lt;br /&gt;
If you aren't an IRC-er, you might want to review the discussions of #openmoko anyways:&lt;br /&gt;
&lt;br /&gt;
* [http://logs.nslu2-linux.org/livelogs/openmoko.txt Current 24h live log]&lt;br /&gt;
* [http://logs.nslu2-linux.org/livelogs/openmoko-prev.txt Previous 24h log]&lt;br /&gt;
* [http://logs.nslu2-linux.org/livelogs/openmoko/ Archives back to 29 November 2006]&lt;br /&gt;
&lt;br /&gt;
(Courtesy of the NSLU2-Linux project)&lt;br /&gt;
(currently broken as of 2010-02. Use ~logs in IRC)&lt;br /&gt;
&lt;br /&gt;
== Mailing Lists ==&lt;br /&gt;
&lt;br /&gt;
There are several [http://lists.openmoko.org/mailman/listinfo/ Mailing lists]. Archives of these lists can be searched with [http://openmoko.markmail.org/ Markmail]. There is a [http://lists.openmoko.org/nabble.html Nabble web interface] to read and post to the lists.&lt;br /&gt;
&lt;br /&gt;
You should ask for help on the [https://lists.openmoko.org/mailman/listinfo/support support mailing list].&lt;br /&gt;
&lt;br /&gt;
The [http://lists.openmoko.org/pipermail/community/ openmoko community mailing list] is perhaps the most active.&lt;br /&gt;
As of July 2008, its volume amounts to dozens of messages per day. Openmoko people are there too. When posting about a specific distribution, please start the subject line with its name between bracket: [FSO], [2008.9]...&lt;br /&gt;
&lt;br /&gt;
Lots of Debian and FSO discussions among the pkg-fso team takes place on the [http://lists.linuxtogo.org/cgi-bin/mailman/listinfo/smartphones-userland Smartphones-userland] list.&lt;br /&gt;
&lt;br /&gt;
If you feel uncomfortable using mailing lists, you can use [http://gmane.org gmane] forum-like interface.&lt;br /&gt;
&lt;br /&gt;
''' announce@lists.openmoko.org '''&lt;br /&gt;
&lt;br /&gt;
A read-only list where the project does official announcements. We strongly recommend subscribing to this list if you want to stay up-to-date with the major project achievements.&lt;br /&gt;
&lt;br /&gt;
http://lists.openmoko.org/mailman/listinfo/announce&lt;br /&gt;
&lt;br /&gt;
Gmane: http://news.gmane.org/gmane.comp.handhelds.openmoko.announce&lt;br /&gt;
&lt;br /&gt;
''' community@lists.openmoko.org '''&lt;br /&gt;
&lt;br /&gt;
This is a public mailinglist for generic discussion of our user + developer community. It acts as a place where people discuss their dreams/wishes/ideas about Openmoko software and supported hardware, applications, and the like.  It's an area of general talking and chatting. Please do ''not'' post usage or development questions here.&lt;br /&gt;
&lt;br /&gt;
http://lists.openmoko.org/mailman/listinfo/community&lt;br /&gt;
&lt;br /&gt;
Gmane: http://news.gmane.org/gmane.comp.handhelds.openmoko.community&lt;br /&gt;
&lt;br /&gt;
''' devel@lists.openmoko.org '''&lt;br /&gt;
&lt;br /&gt;
This is a mailinglist on the Openmoko Distribution. Here issues such as ipk packaging related and root fs image related topics should be discussed. Also, questions regarding the OpenEmbedded based build process go here.&lt;br /&gt;
&lt;br /&gt;
http://lists.openmoko.org/mailman/listinfo/devel&lt;br /&gt;
&lt;br /&gt;
Gmane: http://news.gmane.org/gmane.comp.handhelds.openmoko.distro&lt;br /&gt;
&lt;br /&gt;
''' documentation@lists.openmoko.org '''&lt;br /&gt;
&lt;br /&gt;
The meetingplace of the documentation team.&lt;br /&gt;
&lt;br /&gt;
https://lists.openmoko.org/mailman/listinfo/documentation&lt;br /&gt;
&lt;br /&gt;
''' hardware@lists.openmoko.org '''&lt;br /&gt;
&lt;br /&gt;
This is a mailinglist on Openmoko hardware development: digital, RF, schematics.&lt;br /&gt;
&lt;br /&gt;
http://lists.openmoko.org/mailman/listinfo/hardware&lt;br /&gt;
&lt;br /&gt;
Gmane: http://news.gmane.org/gmane.comp.handhelds.openmoko.hardware&lt;br /&gt;
&lt;br /&gt;
''' openmoko-kernel@lists.openmoko.org '''&lt;br /&gt;
&lt;br /&gt;
This is a public mailinglist for discussion of kernel and bootloader development.&lt;br /&gt;
&lt;br /&gt;
http://lists.openmoko.org/mailman/listinfo/openmoko-kernel&lt;br /&gt;
&lt;br /&gt;
Gmane: http://news.gmane.org/gmane.comp.handhelds.openmoko.kernel&lt;br /&gt;
&lt;br /&gt;
''' support@lists.openmoko.org '''&lt;br /&gt;
&lt;br /&gt;
This is a public mailinglist for discussion among actual owners of an Openmoko based device. Here you can ask for assistance, share your experiences, etc. Please keep this list clean of any philosophical debates or general openmoko related discussion. That's what ''community@lists.openmoko.org'' is for!  (This list was formerly called device-owners).&lt;br /&gt;
&lt;br /&gt;
http://lists.openmoko.org/mailman/listinfo/support&lt;br /&gt;
&lt;br /&gt;
''' local-openmoko lists '''&lt;br /&gt;
&lt;br /&gt;
Mailing lists in of your region in you own language please ask Michael Siloh (michael at openmoko dot org) to create you own&lt;br /&gt;
&lt;br /&gt;
''''' local-openmoko-spain@projects.openmoko.org '''''&lt;br /&gt;
&lt;br /&gt;
This is the mailing list for spanish community in spanish language, if you need help, orientation or know what's going on please join us.&lt;br /&gt;
&lt;br /&gt;
http://lists.projects.openmoko.org/mailman/listinfo/local-openmoko-spain&lt;br /&gt;
 &lt;br /&gt;
nabble: http://n2.nabble.com/Openmoko-spanish-community-list-f1077272.html&lt;br /&gt;
&lt;br /&gt;
Gmane: http://news.gmane.org/gmane.org.user-groups.openmoko.spain&lt;br /&gt;
&lt;br /&gt;
''' log mailing lists '''&lt;br /&gt;
&lt;br /&gt;
''''' buglog@lists.openmoko.org ''''': A read-only list where every status updates to bugs (bugzilla entries) were get posted. Nice to keep updated on the bug squashing progress. http://lists.openmoko.org/mailman/listinfo/buglog. Gmane: http://news.gmane.org/gmane.comp.handhelds.openmoko.buglog&lt;br /&gt;
&lt;br /&gt;
''''' commitlog@lists.openmoko.org ''''': A read-only list where every source code change (commit to the subversion server) gets posted. Nice to keep posted on development progress. http://lists.openmoko.org/mailman/listinfo/commitlog&lt;br /&gt;
&lt;br /&gt;
''''' webdesign-commitlog@lists.openmoko.org ''''': This is a public read-only mailinglist receiving commit log messages of our web designers. Subscribe to this list if you want to get notified if some of the static content or the templates/skins of our websites change. http://lists.openmoko.org/mailman/listinfo/webdesign-commitlog&lt;br /&gt;
&lt;br /&gt;
== Newsletters ==&lt;br /&gt;
&lt;br /&gt;
* [[Community Updates]] try to sum up what has been happening all over. Updates are also mailed to the openmoko-community mailing list, and major updates are also sent to the announce list.&lt;br /&gt;
&lt;br /&gt;
* Wolfgang Spraul tries to give a weekly summary of what's going on in Openmoko. You can follow it at the devel mailing list or follow the [[Weekly Engineering News]] page.&lt;br /&gt;
&lt;br /&gt;
== Openmoko Inc. Internal Resources ==&lt;br /&gt;
&lt;br /&gt;
There are some resources which are internal.  This means that they are only available for internal developers of Openmoko Inc.   The reason they are internal is either because they deal with information under NDA, or about business strategy.  We kindly ask for your understanding that while we really try to be as open as possible, there are some topics which we have to discuss without public participation.&lt;br /&gt;
&lt;br /&gt;
The internal systems have the domain ''*.internal.openmoko.org''.&lt;br /&gt;
&lt;br /&gt;
== Projects Hosting ==&lt;br /&gt;
&lt;br /&gt;
At http://projects.openmoko.org/ we have a GForge installation.  Users can use this as hosting service for their contributed applications.&lt;br /&gt;
&lt;br /&gt;
== Trac / Bug Reporting ==&lt;br /&gt;
&lt;br /&gt;
Our bug ticketing and documentation system for software issues is available at http://docs.openmoko.org/trac/.  This obsoleted the previously used bugzilla installation which was found at http://bugzilla.openmoko.org/.&lt;br /&gt;
Admin team has extra trac system: http://admin-trac.openmoko.org/trac/intertrac/.&lt;br /&gt;
&lt;br /&gt;
== Wiki ==&lt;br /&gt;
&lt;br /&gt;
This Wiki is our public wiki, http://wiki.openmoko.org/. You're already in it, if you're reading this. Due to continued defacements/spam we were forced to limit editing in this wiki to registered users which provide a working email address. Sorry for that.&lt;br /&gt;
&lt;br /&gt;
You can reference the following pages to get more information.&lt;br /&gt;
* [[Edit Wiki]]&lt;br /&gt;
* [[Openmoko Wiki Editing Guidelines]]&lt;br /&gt;
&lt;br /&gt;
== Local Communities / Non-English Languages ==&lt;br /&gt;
&lt;br /&gt;
See the [[Openmoko_Local_Groups|Openmoko Local Groups]]&lt;br /&gt;
&lt;br /&gt;
=== Czech/Slovak ===&lt;br /&gt;
* http://www.openmoko.cz&lt;br /&gt;
* [http://forum.openmoko.cz forum]&lt;br /&gt;
* [http://www.jabber.cz Jabber] [http://www.jabber.cz/wiki/Konference conference]: ''openmoko@muc.openmoko.cz'' [http://muc.unart.cz/logs/openmoko@muc.openmoko.cz/ logs]&lt;br /&gt;
&lt;br /&gt;
=== Finnish ===&lt;br /&gt;
&lt;br /&gt;
* [http://linux.fi/foorumi/index.php?board=18.0 forum]&lt;br /&gt;
* [irc://chat.eu.freenode.net/openmoko-fi IRC channel]&lt;br /&gt;
* [[Openmoko Local Groups: Finland|wiki start page]]&lt;br /&gt;
* [http://www.vapaasuomi.fi/ possibly some related blog posts]&lt;br /&gt;
&lt;br /&gt;
=== French ===&lt;br /&gt;
&lt;br /&gt;
* [http://openmoko-fr.org/wiki/index.php/Bienvenue wiki]&lt;br /&gt;
* [http://openmoko-fr.org/forum/index.php forums]&lt;br /&gt;
* [http://openmoko-fr.org/blog/ blog]&lt;br /&gt;
* [irc://chat.eu.freenode.net/openmoko-fr IRC channel]&lt;br /&gt;
&lt;br /&gt;
=== German ===&lt;br /&gt;
&lt;br /&gt;
The German Neo1973 community created a Trac-based web site with SVN version control for their community projects: http://neo1973-germany.de/ The most notable project is Zad, which consists of a GUI and daemons for GSM/GPRS muxing, GSM, GPS and more, written using Enlightment for smooth, smooth, fast, alpha-blended graphics and glib and dbus for daemons, but the actual code of the project is all python. And yes, you can even make phone calls with it (even without &amp;quot;echo&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
FreeYourPhone - erstes deutsches Openmoko Forum: http://freeyourphone.de&lt;br /&gt;
&lt;br /&gt;
=== Polish ===&lt;br /&gt;
&lt;br /&gt;
* [http://openmoko.opendevice.org wiki]&lt;br /&gt;
* irc-room #openmoko.pl@freenode&lt;br /&gt;
* [http://openmoko.opendevice.org/planeta planet]&lt;br /&gt;
* [http://tytanick.net/openmoko forums]&lt;br /&gt;
* Users [http://tinyurl.com/62ja5k map]&lt;br /&gt;
&lt;br /&gt;
=== Spanish ===&lt;br /&gt;
&lt;br /&gt;
There is a spanish mailing list.&lt;br /&gt;
&lt;br /&gt;
=== Italian ===&lt;br /&gt;
&lt;br /&gt;
* [http://wiki.telefoninux.org/ wiki]&lt;br /&gt;
* [http://telefoninux.org/ forums]&lt;br /&gt;
* [http://planet.telefoninux.org planet]&lt;br /&gt;
* IRC channel : #telefoninux@freenode&lt;br /&gt;
&lt;br /&gt;
=== Russian ===&lt;br /&gt;
&lt;br /&gt;
[http://www.linuxphone.ru/ LinuxPhone.ru] is a site dedicated to Openmoko phones, its distributions and other Linux/Open Source mobile initiatives (such as [[Android]], Palm webOS, open Symbian Platform and Linux-powered Motorola phones). Also, it serves as a place for general community meeting point.&lt;br /&gt;
&lt;br /&gt;
These are Openmoko-related resources:&lt;br /&gt;
* [http://www.linuxphone.ru/tag/openmoko/ news]&lt;br /&gt;
* [http://wiki.linuxphone.ru/Category:Openmoko wiki]&lt;br /&gt;
* [http://www.linuxphone.ru/forum/viewforum.php?f=1 forum]&lt;br /&gt;
* [http://dl.linuxphone.ru/openmoko/ files] (distribution images, scripts, packages and so on made by Russian community members)&lt;br /&gt;
&lt;br /&gt;
== Appendix: Obsolete resources ==&lt;br /&gt;
&lt;br /&gt;
=== SVN ===&lt;br /&gt;
&lt;br /&gt;
There was a [http://subversion.tigris.org/ Subversion] server available at svn.openmoko.org. '''It is now not used anymore'''. See obsolete information on [http://wiki.openmoko.org/index.php?title=Development_resources&amp;amp;oldid=63119#SVN this history version of this page].&lt;br /&gt;
&lt;br /&gt;
=== Obsolete mailing lists ===&lt;br /&gt;
''' framework-devel@lists.openmoko.org '''&lt;br /&gt;
''' NOTE: This mailing list has been closed. Discussion should continue on devel. '''&lt;br /&gt;
&lt;br /&gt;
This is a mailinglist on the Openmoko Framework. Please use this list to post questions with regard to the Openmoko Framework, the API's, their usage, API change requests and the like.&lt;br /&gt;
&lt;br /&gt;
http://lists.openmoko.org/mailman/listinfo/framework-devel&lt;br /&gt;
&lt;br /&gt;
Gmane: http://news.gmane.org/gmane.comp.handhelds.openmoko.framework&lt;br /&gt;
&lt;br /&gt;
''' gsmd-devel@lists.openmoko.org '''&lt;br /&gt;
&lt;br /&gt;
This is a mailinglist on the Openmoko gsmd (GSM daemon) and the corresponding libgsmd.&lt;br /&gt;
&lt;br /&gt;
http://lists.openmoko.org/mailman/listinfo/gsmd-devel&lt;br /&gt;
&lt;br /&gt;
Gmane: http://news.gmane.org/gmane.comp.handhelds.openmoko.gsmd&lt;br /&gt;
&lt;br /&gt;
''' openmoko-apps@lists.openmoko.org '''&lt;br /&gt;
'''NOTE: This mailing list has been closed. Discussion should continue on devel.'''&lt;br /&gt;
&lt;br /&gt;
This is a public mailinglist about the development of the &amp;quot;official&amp;quot; Openmoko applications, e.g. openmoko-dialer2, openmoko-dates2, openmoko-contacts2, and openmoko-today2. Please do ''not'' use this list for issues related to third party applications.&lt;br /&gt;
&lt;br /&gt;
http://lists.openmoko.org/mailman/listinfo/openmoko-apps/&lt;br /&gt;
&lt;br /&gt;
Gmane: http://news.gmane.org/gmane.comp.handhelds.openmoko.apps&lt;br /&gt;
&lt;br /&gt;
''' openmoko-devel@lists.openmoko.org ''''&lt;br /&gt;
'''NOTE: This mailing list has been closed. Discussion should continue on devel.'''&lt;br /&gt;
&lt;br /&gt;
This is a public mailing list for discussion of development related to Openmoko in general. The mailing lists framework-devel and openmoko-apps have been merged into this one. Developers who are writing applications using the Openmoko framework should join this.&lt;br /&gt;
&lt;br /&gt;
http://lists.openmoko.org/mailman/listinfo/openmoko-devel&lt;br /&gt;
&lt;br /&gt;
[[Category:Developer resources]]&lt;br /&gt;
[[Category:Community]]&lt;/div&gt;</summary>
		<author><name>Jancona</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-06T01:52:10Z</updated>
		
		<summary type="html">&lt;p&gt;Jancona: Remove toolchain steps&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/.&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. Alternatively, you can use the script [[#Building a jffs2 image|below]]&lt;br /&gt;
# The result of the previos step 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 a 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>Jancona</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-05T01:53:11Z</updated>
		
		<summary type="html">&lt;p&gt;Jancona: Add build Koolu source how-to&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;
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>Jancona</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-11-19T16:27:43Z</updated>
		
		<summary type="html">&lt;p&gt;Jancona: added pre to fix formatting&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Languages|Userspace_root_image}}&lt;br /&gt;
&lt;br /&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;
&amp;lt;pre&amp;gt;&lt;br /&gt;
mkfs.jffs2 --pad=0x700000 -o rootfs.jffs2 -e 0x4000 -n -d/tmp/jffsroot/ # for GTA01?&lt;br /&gt;
mkfs.jffs2 --pad=0x700000 -o rootfs.jffs2 -e 0x20000 -n -d/tmp/jffsroot/ # for GTA02&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
are typical commands.  It creates a FS image for our erase block size of 16k (128k for GTA02), 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 rootfs image ==&lt;br /&gt;
&lt;br /&gt;
=== Prebuilt ===&lt;br /&gt;
&lt;br /&gt;
See [[Downloads]] 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 the Neo FreeRunner]] 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;
==== Configure the kernel for support ====&lt;br /&gt;
For a 2.6.25 kernel:&lt;br /&gt;
*Device Drivers&lt;br /&gt;
**Block Devices&lt;br /&gt;
***Loopback device support&lt;br /&gt;
**Memory Technology Device (MTD) support&lt;br /&gt;
***Caching block device access to MTD device (mtdblock module, required for block2mtd)&lt;br /&gt;
***Self-contained MTD device drivers&lt;br /&gt;
****MTD using block device (block2mtd)&lt;br /&gt;
*File systems&lt;br /&gt;
**Miscellaneous filesystems&lt;br /&gt;
***Journalling Flash File System v2 (JFFS2) support&lt;br /&gt;
****Advanced compression for JFFS2&lt;br /&gt;
*****JFFS2 ZLIB compression support&lt;br /&gt;
*****JFFS2 RTIME compressoin support&lt;br /&gt;
&lt;br /&gt;
==== Mount on loopback device ====&lt;br /&gt;
&lt;br /&gt;
losetup is an application to manage loop devices, if you have the &amp;quot;losetup -f&amp;quot; option (for instance debian etch does not has such option) you can use the following commands:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&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;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;quot;losetup -f&amp;quot; just returns the first unused loop device, if your system do not comes with &amp;quot;losetup -f&amp;quot; just chose the first /dev/loop* device that is unused and change the first line with:&lt;br /&gt;
&lt;br /&gt;
export loop=/dev/loop0&lt;br /&gt;
&lt;br /&gt;
if loop0 is unused&lt;br /&gt;
&lt;br /&gt;
Here is a simple script to do the above automatically, complete with sanity checking: [[Media:Mntjffs.sh|JFFS2-Mount-Script]]&lt;br /&gt;
&lt;br /&gt;
Download it, make it executable and run it:&lt;br /&gt;
&lt;br /&gt;
# chmod +x Mntjffs.sh&lt;br /&gt;
# ./Mntjffs.sh &amp;lt;image.jffs2&amp;gt; &amp;lt;/mountpoint&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Make sure you run the script as root, because it needs to modprobe&lt;br /&gt;
&lt;br /&gt;
$ ./Mntjffs.sh -h | --help&lt;br /&gt;
&lt;br /&gt;
gives you a short summary of usage.&lt;br /&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;
The following is an alternate way of doing the above.&lt;br /&gt;
&amp;lt;pre&amp;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;
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;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Mounting the JFFS2 image on a loopback 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;
&amp;lt;pre&amp;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;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To clean up when you're done:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
umount /mnt&lt;br /&gt;
rmmod mtdram&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:System Developers]]&lt;/div&gt;</summary>
		<author><name>Jancona</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Navit</id>
		<title>Navit</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Navit"/>
				<updated>2008-10-16T21:44:04Z</updated>
		
		<summary type="html">&lt;p&gt;Jancona: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Application|Navit}}&lt;br /&gt;
&lt;br /&gt;
As described on the [http://navit.sourceforge.net/ Navit home page],&lt;br /&gt;
&lt;br /&gt;
&amp;quot;Navit is a car navigation system with routing engine.&lt;br /&gt;
&lt;br /&gt;
It's modular design is capable of using vector maps of various formats for routing and rendering of the displayed map. It's even possible to use multiple maps at a time.&lt;br /&gt;
&lt;br /&gt;
The GTK+ or SDL user interfaces are designed to work well with touch screen displays. Points of Interest of various formats are displayed on the map.&lt;br /&gt;
&lt;br /&gt;
The current vehicle position is either read from gpsd or directly from NMEA GPS sensors.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Some people say Navit is also a good choice for pedestrian and bicycle navigation.&lt;br /&gt;
&lt;br /&gt;
[[Image:Screenshot-3.png|thumb|Navit-0.0.4+cvs]]&lt;br /&gt;
&lt;br /&gt;
== Acknowledgment ==&lt;br /&gt;
&lt;br /&gt;
Thanks to [[User:Alessandro | Alessandro]], stefan_schmidt, cp15 and all Navit developers I have done a small (&amp;quot;not really working&amp;quot;) preview of Navit on Neo1973 at [http://www.telemobilityforum.com/eng/ Telemobility Forum 2007]. Thanks to [http://gfoss.it GFoss] guys to invite me.&lt;br /&gt;
''[[User:Tyrael | Tyrael]]''&lt;br /&gt;
&lt;br /&gt;
==Setting up Navit==&lt;br /&gt;
&lt;br /&gt;
I got navit set up and configured to the point where it follows me on the map.  It doesn't have street names or any other information, just the map and the cursor showing the location and direction.  Here's what I did:&lt;br /&gt;
* Install navit ipkg on NEO (because of a bug in opkg it's necessary to wget then install, instead of pointing opkg at the URL):&lt;br /&gt;
wget http://www.acoveo.org/navit_0.1.0+svnrev1255-r0_armv4t.ipk&lt;br /&gt;
opkg install --force-depends navit_0.1.0+svnrev1255-r0_armv4t.ipk&lt;br /&gt;
This package includes a patch to navit which improves map panning speeds.&lt;br /&gt;
* Or roll your own from svn using the toolchain (having checked out trunk in the navit directory, and assuming you have written navit_control):&lt;br /&gt;
. /usr/local/openmoko/arm/setup-env&lt;br /&gt;
om-conf navit --disable-samplemap&lt;br /&gt;
om-make-ipkg navit navit_control&lt;br /&gt;
You may want to apply the map panning patch from acoveo: http://www.acoveo.org/openmoko/font_scaling_patch.diff&lt;br /&gt;
* Set up your local maps&lt;br /&gt;
** Openstreetmap - follow directions at http://wiki.navit-project.org/index.php/OpenStreetMaps&lt;br /&gt;
*** There are some up-to-date maps already prepared, e.g.:&lt;br /&gt;
wget -O germany.bin http://maps.navit-project.org/api/map/?bbox=5.185546875,46.845703125,15.46875,55.634765625&lt;br /&gt;
** Here's an example of what I did to get the maps for the area around Seattle, Wa where I live:&lt;br /&gt;
*** figured out map coordinates using http://informationfreeway.org/?lat=47.520270037501454&amp;amp;lon=-122.20130713167327&amp;amp;zoom=9&amp;amp;layers=B000F000&lt;br /&gt;
*** Downloaded 4 regions from openstreetmaps ([[Navit#Script_to_download_OSM_maps|see below]] for a script to do this for you automatically for largish areas)&lt;br /&gt;
wget -O map1.osm http://www.openstreetmap.org/api/0.5/map?bbox=-122.2,47.5,-122,47.7&lt;br /&gt;
wget -O map2.osm http://www.openstreetmap.org/api/0.5/map?bbox=-122.4,47.5,-122.2,47.7&lt;br /&gt;
wget -O map3.osm http://www.openstreetmap.org/api/0.5/map?bbox=-122.4,47.3,-122.2,47.5&lt;br /&gt;
wget -O map4.osm http://www.openstreetmap.org/api/0.5/map?bbox=-122.2,47.3,-122,47.5&lt;br /&gt;
*** Made a navit binary map file using the osm2navit binary that comes with the navit package on my linux box (it is also installing to the target from the .ipk)&lt;br /&gt;
cat *.osm | osm2navit --dedupe-ways mymap.bin&lt;br /&gt;
&lt;br /&gt;
http://downloads.cloudmade.com/ also has up-to-date maps from OpenStreetMap by country.&lt;br /&gt;
&lt;br /&gt;
*** Copied the map to the NEO&lt;br /&gt;
scp mymap.bin root@neo:/home/root/card/map&lt;br /&gt;
*** Change the navit.xml file on the NEO to use the new map&lt;br /&gt;
cp /usr/share/navit/navit.xml ~/.navit/navit.xml&lt;br /&gt;
vi ~/.navit/navit.xml&lt;br /&gt;
&amp;lt;map type=&amp;quot;binfile&amp;quot; enabled=&amp;quot;yes&amp;quot; data=&amp;quot;/home/root/card/map/mymap.bin&amp;quot; /&amp;gt;&lt;br /&gt;
* Run navit&lt;br /&gt;
** Start gllin (for GTA01)&lt;br /&gt;
** Start gpsd ( gpsd /tmp/nmeaNP )&lt;br /&gt;
** Start navit&lt;br /&gt;
&lt;br /&gt;
* The version of osm2navit with which you build the maps should match the version of navit you have. If in doubt, build the maps on the Openmoko.&lt;br /&gt;
&lt;br /&gt;
== News ==&lt;br /&gt;
&lt;br /&gt;
=== Street names ===&lt;br /&gt;
They are now displayed on Openmoko using the CVS version of Navit (20071217).&lt;br /&gt;
&lt;br /&gt;
=== Point selection by pen ===&lt;br /&gt;
Easier using the CVS version (20071217).&lt;br /&gt;
&lt;br /&gt;
=== Route &amp;gt; Destination ===&lt;br /&gt;
The Route &amp;gt; Destination menu item crashes the software (20071217 and 0.04, but fixed in 0.1.0+svnrev1255).&lt;br /&gt;
&lt;br /&gt;
A workaround is to set the LANG variable before calling navit. For example:&lt;br /&gt;
&lt;br /&gt;
LANG=fr_FR.UTF-8 navit&lt;br /&gt;
&lt;br /&gt;
Note that a short syntax (e.g. LANG=fr) would not work.&lt;br /&gt;
&lt;br /&gt;
If you put an &amp;quot;export LANG=fr_FR.UTF-8&amp;quot; into your /etc/.profile file, it will automatically set this environment variable every time you boot up.  This way, you can launch Navit from the Icon in Illume.&lt;br /&gt;
&lt;br /&gt;
http://trac.navit-project.org/ticket/51&lt;br /&gt;
&lt;br /&gt;
=== Speech ===&lt;br /&gt;
Navit can speak if you install eSpeak + speech-dispatcher and updates your navit.xml file.&lt;br /&gt;
&lt;br /&gt;
For adventurous people, one way to do this:&lt;br /&gt;
&lt;br /&gt;
* mokoTTS aims to integrate these packages in OM:&lt;br /&gt;
http://projects.openmoko.org/projects/mokotts/&lt;br /&gt;
&lt;br /&gt;
install espeak, dotconf, and then speech-dispatcher.&lt;br /&gt;
note: running 2008.8 updating from zecke's &amp;quot;testing&amp;quot; repo does not require &amp;quot;dotconf&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* change the speech tag in navit.xml:&lt;br /&gt;
&amp;lt;speech type=&amp;quot;cmdline&amp;quot; data=&amp;quot;spd-say '%s'&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
or &amp;quot;spd-say -l fr '%s'&amp;quot; for using the French voice for example.&lt;br /&gt;
&lt;br /&gt;
=== Maps ===&lt;br /&gt;
==== Downloadable Maps ====&lt;br /&gt;
Downloadable OSM maps for most areas of the world are available free in Navit format from Cloudmade at [http://downloads.cloudmade.com/ http://downloads.cloudmade.com/]. Simply navigate to  the country or region you want and download the &amp;lt;code&amp;gt;.navit.bin.zip&amp;lt;/code&amp;gt; version of the map. You'll have to exatract the &amp;lt;code&amp;gt;.bin&amp;lt;/code&amp;gt; file from the ZIP archive before using it with Navit.&lt;br /&gt;
 &lt;br /&gt;
==== Script to download OSM maps ====&lt;br /&gt;
[[User:Wurp|Wurp]] wrote a little python script to download all OSM maps within a lat/long rectangle.  Just copy the script to a file called dlOSM.sh, chmod +x it, and run it like&lt;br /&gt;
dlOSM.sh &amp;lt;minimum latitude&amp;gt; &amp;lt;maximum latitude&amp;gt; &amp;lt;minimum longitude&amp;gt; &amp;lt;maximum longitude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It takes a long time for large maps.  I could optimize it some by having it try to get a big section at once, then if it fails, break it into smaller pieces and recurse.  I'm not sure when/if I'll get around to that...&lt;br /&gt;
&lt;br /&gt;
dlOSM.sh:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/python&lt;br /&gt;
&lt;br /&gt;
import os&lt;br /&gt;
import sys&lt;br /&gt;
#import math&lt;br /&gt;
&lt;br /&gt;
def doIt(cmd):&lt;br /&gt;
os.system(cmd)&lt;br /&gt;
&lt;br /&gt;
def getOsms(basename, minLat, maxLat, minLon, maxLon):&lt;br /&gt;
'''basename - base name of map, maps are named {basename}{count}.osm&lt;br /&gt;
minLat - latitude of the west side of the map&lt;br /&gt;
maxLat - latitude of the east side of the map&lt;br /&gt;
minLon - longitude of the north side of the map&lt;br /&gt;
maxLon - longitude of the south side of the map'''&lt;br /&gt;
&lt;br /&gt;
wgetCmdTemplate = 'wget -O %s%s.osm http://api.openstreetmap.org/api/0.5/map?bbox=%s,%s,%s,%s'&lt;br /&gt;
&lt;br /&gt;
currLat = minLat&lt;br /&gt;
mapCount = 0&lt;br /&gt;
while currLat &amp;lt; maxLat:&lt;br /&gt;
nextLat = min(currLat + 0.1, maxLat)&lt;br /&gt;
&lt;br /&gt;
currLon = minLon&lt;br /&gt;
while currLon &amp;lt; maxLon:&lt;br /&gt;
nextLon = min(currLon + 0.1, maxLon)&lt;br /&gt;
&lt;br /&gt;
doIt(wgetCmdTemplate % (basename, mapCount, currLon, currLat, nextLon, nextLat))&lt;br /&gt;
&lt;br /&gt;
currLon = nextLon&lt;br /&gt;
mapCount = mapCount + 1&lt;br /&gt;
&lt;br /&gt;
currLat = nextLat&lt;br /&gt;
&lt;br /&gt;
(minLat, maxLat, minLon, maxLon) = map(float, sys.argv[1:])&lt;br /&gt;
getOsms('map', minLat, maxLat, minLon, maxLon)&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;onlyinclude&amp;gt;&lt;br /&gt;
{{ApplicationBox|&lt;br /&gt;
Name=[[Navit]]|&lt;br /&gt;
Description=Navit is a car navigation system with routing engine.|&lt;br /&gt;
Screenshot=Screenshot-3.png|&lt;br /&gt;
Homepage=http://navit.sourceforge.net|&lt;br /&gt;
TestedOn=|&lt;br /&gt;
PackageName=&lt;br /&gt;
}}&lt;br /&gt;
&amp;lt;/onlyinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:GPS Applications]]&lt;/div&gt;</summary>
		<author><name>Jancona</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Openmoko_Local_Groups:_Boston</id>
		<title>Openmoko Local Groups: Boston</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Openmoko_Local_Groups:_Boston"/>
				<updated>2008-09-15T21:23:19Z</updated>
		
		<summary type="html">&lt;p&gt;Jancona: /* Boston Freerunner Users! */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I moved all the content from a year ago to [[Openmoko Local Groups: Boston/old]].&lt;br /&gt;
&lt;br /&gt;
== Boston Freerunner Users! ==&lt;br /&gt;
&lt;br /&gt;
There are eight of us, in Downtown Boston with a Freerunner. Of the 8, six of us are likely to do some hacking on it. Currently, 6 phones are running Qtopia, and two phones are running whatever comes out of the box, but likely to be flashed with Qtopia next week.&lt;br /&gt;
&lt;br /&gt;
Would other Freerunner users in the area be interested in a meetup? We have a conference room in our office and the ability to make large cups of reasonable tasting coffee. &lt;br /&gt;
&lt;br /&gt;
-- [[User:Mattl|Mattl]] 01:27, 4 September 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
I've got a Freerunner, and a neo1973, in Cambridge, and have written some code for them. I run 2007.2 on the neo1973, and 2008.8 on the FR, but will probably switch to FSO soon. I think a meetup would be fun. &lt;br /&gt;
&lt;br /&gt;
-- [[User:Dolson|Dolson]] 01:54, 4 September 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
I believe I'm one of the eight that are mentioned, and I'd be into it as well - I just wrote up my initial thoughts and what projects I am interested on working on at first on my user page (see following link). Oh, and if I was included in the 6 Qtopia, then -1 Qtopia / +1 Dual boot FSO / Debian+FSO :-) &lt;br /&gt;
&lt;br /&gt;
-- [[User:Djbclark|Djbclark]] 18:47, 7 September 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
I'm pretty sure I'm not in the 8 mentioned - but I am in metro-Boston. I'd be interested in a meetup. I run OM2008.8 now... but who knows for tomorrow. [[User:Candrews|Candrews]] 20:49, 11 September 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
I'm another Freerunner owner. I live in the Worcester area, but work in Waltham. I'm running 2008.8 most of the time, but have played with Debian, and may well switch once Illume is available on Debian. I've gotten a small Java app to run on my phone, but will probably end up hacking in Python or C.&lt;br /&gt;
&lt;br /&gt;
--[[User:Jancona|Jancona]] 21:23, 15 September 2008 (UTC)&lt;br /&gt;
&lt;br /&gt;
[[Category:Openmoko Local Groups]]&lt;/div&gt;</summary>
		<author><name>Jancona</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/User:Jancona</id>
		<title>User:Jancona</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/User:Jancona"/>
				<updated>2008-09-15T21:19:19Z</updated>
		
		<summary type="html">&lt;p&gt;Jancona: New page: == Jim Ancona == jim -at- anconafamily -dot- com  Location: Massachusetts, USA  Freerunner Owner since September 2, 2008  --~~~~&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Jim Ancona ==&lt;br /&gt;
jim -at- anconafamily -dot- com&lt;br /&gt;
&lt;br /&gt;
Location: Massachusetts, USA&lt;br /&gt;
&lt;br /&gt;
Freerunner Owner since September 2, 2008&lt;br /&gt;
&lt;br /&gt;
--[[User:Jancona|Jancona]] 21:19, 15 September 2008 (UTC)&lt;/div&gt;</summary>
		<author><name>Jancona</name></author>	</entry>

	<entry>
		<id>http://wiki.openmoko.org/wiki/Flashing_the_Neo_FreeRunner</id>
		<title>Flashing the Neo FreeRunner</title>
		<link rel="alternate" type="text/html" href="http://wiki.openmoko.org/wiki/Flashing_the_Neo_FreeRunner"/>
				<updated>2008-09-02T17:07:44Z</updated>
		
		<summary type="html">&lt;p&gt;Jancona: Update Linux dfu-util link (buildhost is no more)&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Openmoko regularly releases updated versions of the Openmoko root filesystem, the [[kernel]], and the [[Bootloader| U-Boot]] as binary images. These may be programmed into the Flash memory (NAND) of Neo FreeRunner. For that, you can use the USB cable and another computer which will run an Openmoko provided tool to flash the Neo FreeRunner &amp;quot;through&amp;quot; USB.&lt;br /&gt;
&lt;br /&gt;
== Overview ==&lt;br /&gt;
All the components of the software in the FreeRunner are bundled together into binary images.&lt;br /&gt;
&lt;br /&gt;
On a desktop computer when you want to replace the operating system (OS), you would boot it from a CD-ROM drive, then copy OS files from the CD to the internal hard drive. The FreeRunner does not have a CD-ROM drive and files must typically be re-written/flashed directly into internal storage (NAND flash).  It is also possible to load all the OS files to and boot from a microSD.&lt;br /&gt;
&lt;br /&gt;
The FreeRunner has two kinds of internal program storage: NOR flash and NAND flash. The NOR flash is small and stores only a special boot program used when you need to re-write the contents of the NAND flash. NAND flash acts more like a hard drive.&lt;br /&gt;
&lt;br /&gt;
The NAND Flash is divided into 3 partitions for the bootloader, kernel, and root filesystem - so each of these components can be flashed separately. For example if you are trying to install a modified kernel, you only have to follow the steps to flash the kernel image.&lt;br /&gt;
&lt;br /&gt;
* '''bootloader''': a small program that runs first and starts everything else when the FreeRunner is powered on or reset (depending on [[Booting the Neo FreeRunner|how you reset it]], the version from NOR or NAND is booted).&lt;br /&gt;
* '''kernel''': the central component in the Linux operating system.&lt;br /&gt;
* '''root filesystem''': contains all the files that make up the commands and applications that you can run.&lt;br /&gt;
 &lt;br /&gt;
'''Before you start: Erasing the root filesystem or flashing the uboot are radical measures. Take the time to ponder the necessity. Sometimes problems can be fixed by updating only the kernel.'''&lt;br /&gt;
&lt;br /&gt;
== Alternative : running from microSD card ==&lt;br /&gt;
&lt;br /&gt;
You may install this distribution on the microSD card, in order to [[Booting from SD | boot from microSD card]]. That allows you to keep another distribution installed in NAND (for instance to test 2008.08 while still having 2007.2 for default boot).&lt;br /&gt;
&lt;br /&gt;
== Collect the things you need ==&lt;br /&gt;
&lt;br /&gt;
=== Download the DFU-util program ===&lt;br /&gt;
&lt;br /&gt;
You will download that program on your desktop computer. It will allow you to connect to the FreeRunner through the USB cable and control its bootloader. That connection uses a special protocol which addresses the bootloader's interface, and differs from USB networking. There is a separate page to describe it in more detail: [[dfu-util]].&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''MacOS X:''' [[MacOS_X#Graphical_Flashing_with_Openmoko_Flasher]]&lt;br /&gt;
&lt;br /&gt;
'''Linux:''' http://downloads.openmoko.org/releases/Om2008.8-update/dfu-util&lt;br /&gt;
&lt;br /&gt;
Make sure it is executable by setting the permissions with this command: chmod a+x dfu-util&lt;br /&gt;
&lt;br /&gt;
'''Note:''' dfu-util seems to consistently fail with a &amp;quot;-62&amp;quot; error on 64-bit Linux. If you have access to a 32-bit machine, use it instead!&lt;br /&gt;
There are some ubuntu64 interpid packages which work just fine for me in hardy too. So you might try at your own risk: [http://packages.ubuntu.com/de/intrepid/dfu-util]&lt;br /&gt;
&lt;br /&gt;
'''Windows:''' http://projects.openmoko.org/frs/?group_id=166&amp;amp;release_id=162 &lt;br /&gt;
&lt;br /&gt;
See additional driver installation instructions for Windows at [[Dfu-util-windows]]&lt;br /&gt;
&lt;br /&gt;
=== Download the image files that you will need ===&lt;br /&gt;
&lt;br /&gt;
Exactly what files you need depends on what you are trying to install. In most cases you will need to install a Kernel (uImage) and a Root Filesystem (rootfs). In rare cases, when there is a bug you need fixed, you will also install a new bootloader.&lt;br /&gt;
&lt;br /&gt;
Please read [[Distributions]] for choosing the distribution which fits your needs, and then see [[Download]] for downloading.&lt;br /&gt;
&lt;br /&gt;
== Boot the FreeRunner from NOR Flash ==&lt;br /&gt;
&lt;br /&gt;
[[Image:menu15.jpg|thumb|Booting from NOR Flash]]&lt;br /&gt;
&lt;br /&gt;
# Read the other sections of this page first, because you will have 30 seconds to enter the flashing commands, come back here when ready.&lt;br /&gt;
# Do not connect the USB cable from the PC to your Neo FreeRunner yet (disconnect it).&lt;br /&gt;
# Boot your Neo FreeRunner into the NOR uBoot menu for flashing.&lt;br /&gt;
## Press and hold AUX button&lt;br /&gt;
## Press the Power button until the boot menu comes up&lt;br /&gt;
## This menu is labelled '''*** BOOT MENU (NOR) ***'''&lt;br /&gt;
## See also [[Booting the Neo FreeRunner]]&lt;br /&gt;
# Stay in NOR uBoot menu, do not to select or enter any item in menu. Now you will be able to flash, make backups of your FreeRunner or query the FreeRunner with dfu-util.&lt;br /&gt;
# The FreeRunner only stays at the NOR boot prompt for about 30 seconds and then shuts off unless you do something.&lt;br /&gt;
# Connect your Neo to the GNU/Linux or Windows host via a USB cable. &lt;br /&gt;
# Now you can enter the dfu-util commands on your PC as described below.&lt;br /&gt;
# If the Neo FreeRunner turns off before you press start flashing ('''screen goes black'''), go back to step 2. If you start flashing in time, the phone will not turn off meanwhile.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- The following, upto dfu-util -l is taken from the thread &amp;quot;Re: FreeRunner (GTK2007.2) has suddenly become unbootable&amp;quot; on the Support list. --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that the dfu-util connection does '''not''' use Ethernet over USB - that is, you should not attempt to set up a usb0 network interface on your GNU/Linux host desktop (on Windows, you need a DFU class driver, or you can use the LibUSB-Win32 driver described on the [[Dfu-util-windows]] page). The dfu-util utility sets up its own connection to the FreeRunner. In fact, you will not be able to make an Ethernet-over-USB connection to the FreeRunner when it is at the uBoot menu; this type of connection is only available when the FreeRunner has booted fully.&lt;br /&gt;
&lt;br /&gt;
After connecting the FreeRunner to your host via USB cable, you can test whether dfu-util &amp;quot;sees&amp;quot; the FreeRunner by executing:&lt;br /&gt;
&lt;br /&gt;
   dfu-util -l&lt;br /&gt;
If you get error messages from the dfu-util command then try again. Often it works on the second try.&lt;br /&gt;
&lt;br /&gt;
== Do a backup ==&lt;br /&gt;
&lt;br /&gt;
If you have a working image that you're happy with but want to try something different, you should probably do a [[Pre-Flash Backup]].&lt;br /&gt;
&lt;br /&gt;
== Using dfu-util ==&lt;br /&gt;
&lt;br /&gt;
dfu-util can be used to read flash memory, write memory, and get information from the device.&lt;br /&gt;
&lt;br /&gt;
This is the general command format to write an image file to a (predefined) &amp;quot;partition name&amp;quot; (referred to as ''altsetting'' in dfu-util help/manual) :&lt;br /&gt;
&lt;br /&gt;
 dfu-util -a ''altsetting'' -R -D ''file_name''&lt;br /&gt;
&lt;br /&gt;
where:&amp;lt;br&amp;gt;&lt;br /&gt;
-a ''altsetting'' : Specify the altsetting of the DFU interface by name or by number&amp;lt;br&amp;gt;&lt;br /&gt;
-R  : Issue USB Reset signalling once we're finished&amp;lt;br&amp;gt;&lt;br /&gt;
-D  ''file_name'' : Write firmware from ''file_name'' into device&lt;br /&gt;
&lt;br /&gt;
On Linux, you run dfu-util from a command shell prompt. If you have not put it somewhere on your command path you probably need to prefix it with a &amp;quot;./&amp;quot; like this '''./dfu-util'''.&lt;br /&gt;
On some systems you need to be root before this will work and on Ubuntu you must preface the command with &amp;quot;sudo&amp;quot; or you will get the following error: &amp;quot;Cannot claim interface: could not claim interface 2: Operation not permitted&amp;quot;&lt;br /&gt;
&lt;br /&gt;
On Windows, you need to open a command window and run from a command line. Use Start-Run Program and type &amp;quot;cmd&amp;quot; to open a Window.&lt;br /&gt;
&lt;br /&gt;
More detailed manual for gfu-util is available here : [[Dfu-util]]&lt;br /&gt;
&lt;br /&gt;
== Flashing the Kernel ==&lt;br /&gt;
&lt;br /&gt;
 Note: The phone needs to be in the U-boot bootup menu for this to work. Get there by holding down the aux button while powering up the device.&lt;br /&gt;
&lt;br /&gt;
The command format is &lt;br /&gt;
&lt;br /&gt;
 dfu-util -a kernel -R -D ''/path/to/uImage''&lt;br /&gt;
&lt;br /&gt;
When flashing succeeds the following will be shown:&lt;br /&gt;
&lt;br /&gt;
 status(0) = No error condition is present&lt;br /&gt;
 Done!&lt;br /&gt;
&lt;br /&gt;
Flashing may fail with an error -110. This indicates that the kernel is too big for the default kernel partition. uboot can be used to change the size of the default partitions on the device. It may also mean that you are trying to put the wrong thing in the kernel space.&lt;br /&gt;
&lt;br /&gt;
== Flashing the Root Filesystem ==&lt;br /&gt;
&lt;br /&gt;
The root filesystem has to be an image in jffs2 format. If the file you downloaded is zipped or compressed (has a .gz, bz2, .zip, tar, tar.gz or .tgz extension) you have to uncompress it first.&lt;br /&gt;
&lt;br /&gt;
The command format is&lt;br /&gt;
&lt;br /&gt;
 dfu-util -a rootfs -R -D ''rootfs_filename.jffs2''&lt;br /&gt;
&lt;br /&gt;
where ''rootfs_filename.jffs2'' is the name of the file containing the root filesystem.&lt;br /&gt;
&lt;br /&gt;
When flashing succeeds the following will be shown:&lt;br /&gt;
&lt;br /&gt;
 status(0) = No error condition is present&lt;br /&gt;
 Done!&lt;br /&gt;
&lt;br /&gt;
== Flashing the boot loader to the NAND==&lt;br /&gt;
&lt;br /&gt;
The boot loader (U-boot) file should have a .bin extension. As with the root filesystem, if the file you downloaded is zipped or compressed (has a .gz or .zip extension) you have to uncompress it first.&lt;br /&gt;
&lt;br /&gt;
The command format is &lt;br /&gt;
&lt;br /&gt;
 dfu-util -a u-boot -R -D ''uboot.bin''&lt;br /&gt;
&lt;br /&gt;
where ''uboot.bin'' is the name of the boot loader binary image file.&lt;br /&gt;
&lt;br /&gt;
''Reminder'': You should have [[Flashing_the_Neo_FreeRunner#Boot_the_FreeRunner_from_NOR_Flash|boot from NOR first]], in order to flash the boot-loader in NAND. After flashing succesfully, make sure you reboot from NAND's newly flashed boot loader, to benefit from the updates.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- Taken from posts by Mikael Berthe &amp;lt;mikael.berthe@lilotux.net&amp;gt; and Torfinn Ingolfsen &amp;lt;tingox@gmail.com&amp;gt; to Support list, subject: Re: Upgrading u-boot needed ? --&amp;gt;&lt;br /&gt;
(Optional) After an upgrade, you may wish to check that the u-boot version matches the one you have just flashed. You can use 'grep  Bootloader /dev/mtdblock1' from a shell on the FreeRunner (and possibly the 1973 as well) to get the '''NAND''' u-boot version, like this:&lt;br /&gt;
   root@om-gta02:~# grep Bootloader /dev/mtdblock1&lt;br /&gt;
   Neo1973 Bootloader U-Boot 1.3.2+gitr18+64eb10cab8055084ae25ea4e73b66dd03cc1a0cb&lt;br /&gt;
&lt;br /&gt;
You can grep for the same string in /dev/mtdblock0 to retrieve the '''NOR''' u-boot version:&lt;br /&gt;
   root@om-gta02:~# grep  Bootloader /dev/mtdblock0&lt;br /&gt;
   Neo1973 Bootloader U-Boot 1.3.2-moko12&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- ENDS ... subject: Re: Upgrading u-boot needed ? --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Reboot the FreeRunner from NAND ==&lt;br /&gt;
&lt;br /&gt;
You should now be able to boot into the new images.&lt;br /&gt;
&lt;br /&gt;
Pay attention '''to booting from the NAND flash this time''', in particular if you upgraded the boot-loader (in short: 1. press and hold ''power button'' down, and then 2. press ''aux button'')&lt;br /&gt;
&lt;br /&gt;
The boot menu should be labelled '''*** BOOT MENU (NAND) ***''' this time (see [[Booting#Log_into_U-Boot_in_the_NAND_Flash|booting from NAND]] for more detailed instructions).&lt;br /&gt;
&lt;br /&gt;
[[Category:Flashing Openmoko| ]]&lt;/div&gt;</summary>
		<author><name>Jancona</name></author>	</entry>

	</feed>