http://openmoko.org/api.php?action=feedcontributions&user=Inwardlyhero&feedformat=atomOpenmoko - User contributions [en]2024-03-28T17:49:36ZUser contributionsMediaWiki 1.19.24http://openmoko.org/wiki/Manuals/AndroidManuals/Android2009-01-27T11:34:22Z<p>Inwardlyhero: /* SMS */</p>
<hr />
<div>{{Languages|Android usage}}<br />
<br />
{|align=right<br />
|__TOC__<br />
|}<br />
[[Image:android.png]]<br />
<br />
= Introduction = <br />
This page is dedicated to the daily usage of Android on the [[Neo 1973]] and [[Neo FreeRunner]] handsets.<br />
<br />
The informations here have been updated for the following release : [http://freerunner.android.koolu.com/release-files Koolu Beta2 Android release]. But should be the same for any not too old release.<br />
<br />
You can find general informations (porting/development and day to day usage) about Android and Neo phones here : [[Android]]<br />
<br />
<br />
= Subsystems =<br />
<br />
<br />
== Accelerometers ==<br />
Works, can be tested with simple game called [http://andappstore.com/AndroidPhoneApplications/apps/8872 Amazed]<br />
<br />
== Bluetooth ==<br />
Works, latest kernels need permissions for second rfkill interface in init.rc to turn it on.<br />
<br />
== GPS ==<br />
Once it works, you can [[#Install new software|install]] [http://www.andnav.org AndNav2] to test it.<br />
<br />
== GPRS ==<br />
Does not work, GSM get's confused when you try to use it<br />
<br />
== GSM ==<br />
Sources for libmuxgsm-ril.so not released yet, latest images have binary from ML that works quite fine.<br />
The SIM's PIN code cannot be validated. For now disable the PIN code using another phone.<br />
Registering on a Network seems to be slow and sometimes doesn't work.<br />
<br />
== Wifi ==<br />
Works, but i have problems with scanning when just one AP is in range, it fails most of the time.<br />
<br />
<br />
<br />
= Data management =<br />
<br />
== Contacts ==<br />
<br />
=== Importing ===<br />
==== From Vcard ====<br />
# [[#Install new software|install]] [http://www.dusystems.com/importContacts.html "Android Contacts Import"] (this applications is also available from AndAppStore)<br />
# export your contact(s) as a vcard file from your contact application<br />
# [[#Copy files|copy]] the file to your phone /sdcard/ directory<br />
# on your phone run the ImportContacts application, choose the file you copied and select import. Wait until the phone says x vcards imported<br />
<br />
That's it if you don't see your contacts, make sure you selected "view all contacts" in the contacts applications options<br />
<br />
==== From SIM ====<br />
Works, Contacts->menu->Settings->SIM contacts importer.<br />
<br />
=== Synchronization ===<br />
<br />
== Calendar ==<br />
<br />
=== Alarm ===<br />
Works.<br />
<br />
=== Importing ===<br />
<br />
=== Synchronization ===<br />
<br />
== Files ==<br />
<br />
=== Copying ===<br />
You can copy files to your phone using either <br />
* [[#USB mass storage|USB mass storage]]<br />
<br />
or, from the command line using<br />
<br />
* the [[Android debug bridge]] to copy files to your phone :<br />
ADBHOST=192.168.0.202 ./adb push file.txt /sdcard/<br />
<br />
== Media ==<br />
Can play OGG audio files, picture application crashes<br />
<br />
== SMS ==<br />
Can't read long SMS messages.<br />
<br />
= Others =<br />
<br />
== Software keyboard ==<br />
Works, can be brought up with short press to power button.<br />
<br />
== Suspend ==<br />
Waking up your phone might be a little bit tricky at the moment, there are several recipe/hints submitted by different people :<br />
* 1-2s press of power button goes to sleep, wake up with long power button press, don't use screen timeouts, disable it in Settings->Sound & display->Screen timeout->Never timeout.<br />
* Michael Trimarchi's images allow resume from suspend after two short presses. However, sometimes it takes a few tries for the phone to wake up.<br />
* For me resume works best if i long press power until the main screen appears and the short power press that unlocks screen.<br />
* During suspend the phone seems to wake up make an audible click and go back to sleep.<br />
<br />
== USB networking ==<br />
Android doesn't come with an ssh server installed by default. In order to gain shell access without an additional ssh server you can follow the instructions on the [[Android debug bridge]]. If you have an ssh server installed, following the general [[USB Networking]] guide should do.<br />
<br />
== USB Host mode ==<br />
If you know how to change the USB mode with Android, please explain it here.<br />
<br />
== USB keyboard ==<br />
I bought a mini USB keyboard that for my Neo, if someone has simple directions to use it with android, please explain it here.<br />
<br />
== USB mass storage ==<br />
This setting is named "Enable USB mass storage". If you don't find it on Settings -> SD card & phone storage, you have to unhide it with [http://www.4shared.com/account/file/76203324/508fa871/Anycut.html Anycut]. Install it then make a new shortcut Activity -> SD Card. Use this new shortcut to activate the option. This is not persistant after a reboot. See also [http://rivviepop.wordpress.com/2008/11/19/mount-your-g1-android-sd-card-automatically-rc29-rc30/]<br />
<br />
= Software installation and updates =<br />
For initial Android flashing, take a look at: [[Android on Freerunner]]<br />
<br />
== Install new software ==<br />
=== Manual install ===<br />
Applications are packaged in .apk packages, to install a package (downloaded on your computer) do <br />
<br />
./adb install app.apk<br />
<br />
After making sure you can talk to your phone using the [[Android debug bridge]]<br />
<br />
=== Package managers ===<br />
==== Android Market Place ====<br />
Currently it is not possible to use the Android Market Place with the Neo Freerunner.<br />
<br />
==== AndAppStore ====<br />
AndAppStore is an alternate source for Android software and works on the Neo Freerunner. Start by [[#Manual install|manually installing]] their [http://andappstore.com/AndroidPhoneApplications/apps/7661 client].<br />
<br />
== Update software (without reflashing) ==<br />
<br />
= Troubleshooting =<br />
<br />
== Android Debug Bridge ==<br />
<br />
To assist in debugging and to gain shell access to the phone with Android, you can use the instructions found here: [[Android debug bridge]]<br />
<br />
= Links =</div>Inwardlyherohttp://openmoko.org/wiki/DistributionsDistributions2008-12-17T13:40:11Z<p>Inwardlyhero: /* Others / unreleased */</p>
<hr />
<div>{{Languages|Distributions}}<br />
<br />
{| class="wikitable" style="float:right;width:200px;background-color:#FF6600;text-align:center;border-collapse:collapse;font-weight:bold"<br />
|<font color=white>Distributions</font><br />
|-<br />
! style='background-color:#333333;color:#FFFFFF'|<br />
<div align=left><br />
* <font color='#BBBBBB'>Openmoko (official)</font><br />
** [[Om 2008.9 Update]]<br />
** [[Om 2008.8]]<br />
** [[Om 2007.2]]<br />
** [[OpenmokoFramework|FSO]]<br />
* <font color='#BBBBBB'>Community</font><br />
** [[SHR]]<br />
** [[FDOM]]<br />
* <font color='#BBBBBB'>Other</font><br />
** [[Qtopia]]<br />
** [[Debian]]<br />
** [[Gentoo]]<br />
** [[Android]]<br />
** [[Hackable:1]]<br />
</div><br />
|-<br />
|}<br />
Openmoko distributions are designed to run on various mobile devices, with the primary aim of supporting Openmoko Inc.'s [[GTA01:Neo 1973|Neo 1973]] and [[Neo FreeRunner]] phones. They are GNU/Linux distributions -- complete operating systems with more or less user applications. You can install any of them on your phone or even have a multiboot system with two distributions installed.<br />
<br />
While the Openmoko distributions will run on [[Supported devices|other mobile devices]] too, some other software distributions will also run on the Openmoko Inc. phones (see below).<br />
<br />
For downloads see [[Download]], for installation instructions see [[Flashing the Neo FreeRunner]].<br />
<br />
== About distributions ==<br />
<br />
=== Which distribution should I use ?===<br />
* Most new users find [[FDOM]] the most comprehensive and functional distribution.<br />
* If you want "just a phone", try [[Qtopia]].<br />
* If you want to develop anything that last, your platform is [[FSO]] (and the choice between EFL, GTK+, Qt, Java, Python or whatever is open).<br />
* [[SHR]], [[Debian]], [[Gentoo]] and [[Android]] are for people who do not need to ask which distribution they should use.<br />
* Tracking the "base image" by updating daily from testing/unstable is a different game either.<br />
<br />
===Status as of November 9th, 2008 ===<br />
* The phones ship with [[Om 2007.2]]. It is not supported by Openmoko Inc. anymore. But community developpers continue to work on its phone stack in the [[SHR]] project.<br />
* The branch currently supported by Openmoko Inc. is [[Om 2008.9 Update]], which is a minor upgrade of [[Om 2008.8]] (formerly named ASU). Based on that, the community made the [[FDOM]] distribution by adding lots of fixes and applications to it.<br />
* The trunk tip is a "base image" on which the next major release should be based. This next release can be previewed by installing milestones of the [[FSO]] - Free Smartphone.Org project. The [[Debian]] packaging team also track that branch.<br />
* The FreeRunner is a reference platform for TrollTech's Qt Extended (formerly [[Qtopia]]) distribution.<br />
* The Android port is work-in-progress.<br />
<br />
=== Warnings ===<br />
<br />
* Stable in the FreeRunner world does not mean the same thing as stable in Debian world.<br />
* Most distributions use the same bootloader, kernel, drivers and hardware. Therefore, the same low level bugs are commonly found in all distributions. The latest and greatest software usually has most bug fixes, plus a whole set of new fresh bugs.<br />
* Most of these distributions also have package repositories. It is a BAD idea to feed from another distribution's repository.<br />
* Upgrade path between these distributions are mostly not tested, thus updating by changing the feeds will most likely end in broken packages or even an unbootable system. It is advisable to reflash the whole filesystem with [[dfu-util]] to switch between the different distributions, with the reminder that a dual-boot setup (e.g. via sdcard or NFS) can be used.<br />
<br />
== Openmoko Inc. driven release targets ==<br />
<br />
These different 'release targets' are built out of different branches of the [[OpenEmbedded]] metadistribution source tree.<br />
<br />
=== Om 2008.9 ===<br />
<br />
The Om 2008.9 Update is the first point release after the initial Om 2008.8 release. Openmoko recommends that all existing installations of Om 2008.8 should be updated to that version. Quality-wise, we are still far from the goal, but this version includes general stability enhancing operating system improvements and a new splash screen. No applications were added or removed. Users with basic telephony needs will find it tolerable as an everyday phone.<br />
<br />
{{Main|Om 2008.9 Update}}<br />
<br />
=== Om 2008.8 ===<br />
<br />
Om 2008.8 was released on August 8, 2008, to replace 2007.2. Prior to that, its codename was ASU (April/August Software Update). This is still the name of the branch in the version control system. This distribution integrates the [http://trolltech.com/products/qtopia Qtopia] phone stack with a set of new Openmoko applications based on the Enlightenment Foundation Libraries. Qtopia being a more mature product than the GNOME Mobile stack, the standard phone applications (dialer, contacts, calculator, calendar) work better than in 2007.2. The Qtopia used in 2008.8 was ported to run on X11, contrary to standard Qtopia which uses the framebuffer. This allows non-Qt applications to safely share the screen with Qt applications. This is a .0 release, many unresolved issues remain in the lower layers (kernel power management, sound, wifi drivers...).<br />
<br />
{{Main|Om2008.8}}<br />
<br />
=== Om 2007.2 ===<br />
<br />
[[Om 2007.2]] is the base-system which is installed on FreeRunner when it leaves the factory. The interface was totally finger-oriented, optimized for 285ppi, and very orange. It used the GTK+ stack, which is part of the [http://www.gnome.org/mobile/ GNOME Mobile] platform. This distribution is now considered obsolete and not being worked on by Openmoko Inc or by OpenedHand. There is a community effort (see [[SHR]]) to port the GTK based telephony applications to the future middleware from [[FSO]].<br />
<br />
{{Main|Om 2007.2}}<br />
<br />
=== FSO Milestone IV ===<br />
<br />
FSO is an abbreviation for FreeSmartphone.Org. Openmoko is working on a stable system services back-end. Focus is on stable highlevel services that you can access from whatever language or UI that supports [http://dbus.freesmartphone.org/ dbus]. The framework will be used in forthcoming Openmoko distributions. FSO is all about middleware, but if one stacks a bootloader+kernel under it and telephony applications on top, one gets a functional distribution. These are made available as FSO-image milestones. Openmoko Framework Image milestone IV was released on November 11th, 2008 and named 'Homework'. People report that despite its infancy, the phone server part in FSO is already more solid than anywhere else. The kernel under it is a Linux 2.6.24 with modules packaged separately. The telephony application on top of it is Zhone. This is a basic Python dialer/homescreen designed as scaffolding to test the FSO functionalities (even if Zhone is pretty, code path coverage is more critical to it than user-friendliness).<br />
<br />
{{Main|FSO}}<br />
<br />
== Openmoko Community driven release targets ==<br />
<br />
=== SHR - Stable Hybrid Release ===<br />
<br />
SHR is a community driven distribution. It contains some basic GTK+ based applications which make use of the FSO. There currently is a EFL (with elementary) dialer, messages and contacts application programmed in C. As of November 9th, 2008, there is no stable release of this distribution yet, as the SHR team doesn't feel it to be good enough. You can find images though on the [http://shr.bearstech.com/shr-testing SHR buildhost].<br />
<br />
{{Main|Stable Hybrid Release}}<br />
<br />
=== FDOM (FAT and Dirty Openmoko) ===<br />
<br />
[[FDOM]] is a distribution based on Openmoko's currently supported image, updated with many ready-to-use applications and with fixes posted in the mailing lists. A combination of applications (everything goes) and fixes to demonstrate the capabilities of the Freerunner and to have a functional phone (sort of). This all while retaining the ability to update through the official feeds.<br />
<br />
{{Main|FDOM}}<br />
<br />
== Non-Openmoko distributions ==<br />
<br />
These are not Openmoko (and OE) based distributions. These are alternatives you can run on your Openmoko phones.<br />
<br />
=== Qt Extended ===<br />
<br />
The Qt Extended distribution was formerly known as Qtopia up to version 4.3.x included. It comes from [http://www.trolltech.com Trolltech], a Nokia company, the makers of the Qt cross-platform application framework. This distribution aims to provide a ready-to-use image for Openmoko devices. It features a noticeably robust telephony stack. Recent release 4.4.2 also sports a webkit-based web browser and Gtalk support.<br />
<br />
{{Main|Qtopia / Qt Extended on FreeRunner}}<br />
<br />
=== Debian ===<br />
<br />
Debian is "the universal operating system". It comes with thousands and thousands of packages (most of them designed for desktops or servers so far). So in the words of Joachim "nomeata" Breitner from the [http://wiki.debian.org/Teams/DebianFSO pkg-fso] team, this is not really a distribution in the Openmoko sense of the word, but rather a different underlying system for Openmoko distributions. At the moment, we ship the software from the FSO stack, but hopefully we’ll also have, for example, the Stable Hybrid Release software in our archive. So for now, Debian is a different way of installing FSO, which takes more space and provides more programs :-)<br />
<br />
{{Main|Debian}}<br />
<br />
=== Gentoo ===<br />
<br />
Gentoo is all about choices. When installing Gentoo, this is made clear to you several times -- you can choose how much you want to compile yourself, how to install Gentoo, what system logger you want, etc. Gentoo is a fast, modern metadistribution with a clean and flexible design. Gentoo is built around free software and doesn't hide from its users what is beneath the hood. Portage, the package maintenance system which Gentoo uses, is written in Python, meaning you can easily view and modify the source code. Gentoo's packaging system uses source code (although support for precompiled packages is included too) and configuring Gentoo happens through regular textfiles. In other words, openness everywhere.<br />
<br />
{{Main|Gentoo}}<br />
<br />
=== Android ===<br />
<br />
Android is a mobile phone platform by Google, and later the Open Handset Alliance (OHA). Openmoko is fully supporting Android running on the Freerunner. Details along with images are being constructed at the moment. Visit the user web page for [http://wiki.openmoko.org/wiki/User:Seanmcneil3 Sean McNeil] for further details. And you can download kernel and image [http://people.openmoko.org/sean_mcneil/ here].<br />
<br />
{{Main|Android}}<br />
<br />
<br />
=== Hackable:1===<br />
Hackable1 is a community distribution for hackable devices like the Neo Freerunner. It is based on Debian and implements the GNOME mobile platform. <br />
{{Main|Hackable:1}}<br />
<br />
=== Others / unreleased ===<br />
<br />
* The [http://www.neopwn.com/software.php NeoPwn] network auditng system's core is a modified Linux 2.6.24 kernel, with cross-compiled module driver support for the numerous compatible addon devices running on a FULL Debian (ARMEL) operating system. The filesystem has been optimized for performance and size and includes the NeoPwn menu system and several GUI dialogs for hardware control and attack automation. ''Status: Unknown, the GPL requires source code to be distributed only to customers''.<br />
* [http://runningbear.org/trac RunningBear] is an innovating yet free and open-source Operating System for hackable devices driven by Bearstech. Lightweight, Portable, Secure, Friendly and Useful. ''Status: In development''.<br />
* [http://pokylinux.org/ Poky] and Sato, by OpenedHand/Intel. An open source platform build tool derived from OE. It is a complete software development environment for the creation of Linux devices. It enables you to design, develop, build, debug, and test a complete, modern, software stack using Linux, the X Window System and GNOME Mobile based application frameworks for both ARM and x86 based platforms. ''Status: The "Nightly Build" Image works fine on Neo Freerunner, but phone functionality doesn't.''<br />
* [http://pyneo.org/ PyNeo] lead dev writes that Mickey Lauer gave the whole pyneo stack and his work to build a flashable image the name "moko underground". This was an alias for pyneo at that moment. He then started his own stack using most of the technics & architecture, library & language choices used in pyneo. ''Status: still active, ask around on #neo1973-germany ''<br />
* [http://www.quantum-step.com/ mySTEP] by Openmoko distributor Golden Delicious Computers is based on GNUstep and brings a Objective-C API to the Neo. Core GUI frameworks are "Foundation" & "AppKit". It has been shown on FOSDEM 2008, LinuxTag 2008 and SYSTEMS 2008 to run on the Neo 1973. If someone reengineers UIKit, (open) source code compatibility to iPhone apps appears achievable. ''Status: it does not have its own kernel so a Freerunner distribution waits for a solid basis and an arm-linux-gnueabi toolchain that runs natively on Mac OS X is currently lacking.''<br />
<br />
== Features by distribution/release target ==<br />
<br />
Generally, distributions can differ on one or more of the following components:<br />
* The bootsplash screen image. This is purely decorative.<br />
* The bootloader. Theoretically, any version of ''uboot'' could be used with any distribution. In the future ''Qi'' will replace ''uboot''.<br />
* The kernel. GNU/Linux kernels versions 2.6.24, 2.6.26 or 2.6.28 can be found. Some have modules compiled in, others have modules compiled separately. If compiled separately, modules can be distributed in the same package file as the kernel or separately.<br />
* Middleware: daemons to handle GSM calls or GPS, sound system, personal information storage and so on. Qt and Android have their own subsystems, FreeSmartphone.Org (FSO) is working towards a standard-based Free Software one.<br />
* Display driver. The original ''Qt Extended'' uses the framebuffer, most other distributions today use ''X11''.<br />
* Libraries and application framework (widget toolkit and and graphical environment) : EFL, Qt, Gtk+ or Java ?<br />
* Basic telephony applications: voice calls, SMS, alarm clock...<br />
* Smartphone applications: GPS, media player, simple games, web browser...<br />
* Open source applications: more games, scientific, you name it...<br />
<br />
=== Hardware Support ===<br />
{|class="wikitable" border="1" cellpadding="5" cellspacing="0" width=100%<br />
! width=10%| !! width=9%|Om 2008.9 !! width=9%|Om 2008.8 !! width=9%|Om 2007.2 !! width=9%|FSO !! width=9%|SHR !! width=9%|FDOM !! width=9%|Qt Extended !! width=9%|Debian !! width=9%|Gentoo !! width=9%|Android<br />
|-<br />
| GTA01 || {{No}} || ?? || ?? || ?? || {{Yes}} || ?? || ?? || {{Yes}} || ?? || ??<br />
|-<br />
| GTA02 || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}}<br />
|-<br />
|}<br />
<br />
=== Connectivity ===<br />
{|class="wikitable" border="1" cellpadding="5" cellspacing="0" width=100%<br />
! width=10%| !! width=9%|Om 2008.9 !! width=9%|Om 2008.8 !! width=9%|Om 2007.2 !! width=9%|FSO !! width=9%|SHR !! width=9%|FDOM !! width=9%|Qt Extended !! width=9%|Debian !! width=9%|Gentoo !! width=9%|Android<br />
|-<br />
| Telephony || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} (1) || ?? || {{Yes}}<br />
|-<br />
| SMS || ?? || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} (1) || ?? || {{Yes}}<br />
|-<br />
| [[GPRS]] || ?? || Not through UI || Not through UI|| Not through UI || Not through UI || {{Yes}} || {{Yes}} || {{Yes}} (1) || ?? || {{Yes}}<br />
|-<br />
| [[WiFi]] || {{Yes}} || {{Yes}} (*) || {{Yes}} || Not through UI || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || ?? || {{Yes}}<br />
|-<br />
| VoIP || ?? || ?? || ?? || ?? || ?? || {{Yes}} || {{Yes}} (1) || {{Yes}} || ?? || {{no}}<br />
|-<br />
| Bluetooth || ?? || {{Yes}} || {{Yes}} || {{No}} || ?? || {{Yes}} || {{Yes}} || {{Yes}} || ?? || {{Yes}}<br />
|-<br />
| GPS (1) || ?? || {{Yes}} (1) || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} (1) || ?? || {{Yes}}<br />
|-<br />
|}<br />
<br />
=== Power ===<br />
{|class="wikitable" border="1" cellpadding="5" cellspacing="0" width=100%<br />
! width=10%| !! width=9%|Om 2008.9 !! width=9%|Om 2008.8 !! width=9%|Om 2007.2 !! width=9%|FSO !! width=9%|SHR !! width=9%|FDOM !! width=9%|Qt Extended !! width=9%|Debian !! width=9%|Gentoo !! width=9%|Android<br />
|-<br />
| Suspend || ?? || ?? || ?? || ?? || {{Yes}} || {{Yes}} || {{Yes}} || ?? || ?? || ??<br />
|-<br />
| Resumes on Event || ?? || ?? || ?? || ?? || ?? || {{Yes}} || {{No}} || ?? || ?? || ??<br />
|-<br />
| Functions after Resume || ?? || ?? || ?? || ?? || {{Yes}} || {{No}} || {{No}} ||?? || ?? || ??<br />
|-<br />
|}<br />
<br />
=== User Interaction ===<br />
{|class="wikitable" border="1" cellpadding="5" cellspacing="0" width=100%<br />
! width=10%| !! width=9%|Om 2008.9 !! width=9%|Om2008.8 !! width=9%|2007.2 !! width=9%|FSO !! width=9%|SHR !! width=9%|FDOM !! width=9%|Qt Extended !! width=9%|Debian !! width=9%|Gentoo !! width=9%|Android<br />
|-<br />
| Stylus friendly || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || ?? || {{Yes}}<br />
|-<br />
| Finger friendly || ?? || Partially || Partially || Partially || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || ?? || {{Yes}}<br />
|-<br />
| Accelerometer || {{Yes}} [[Rotate|(1)]][[Gestures|(1)]] || {{Yes}} [[Gestures|(1)]] || {{No}} || {{No}} || {{No}} || {{Yes}} || {{No}} || {{Yes}} || ?? || {{Yes}}<br />
|-<br />
|}<br />
<br />
=== Applications ===<br />
{|class="wikitable" border="1" cellpadding="5" cellspacing="0" width=100%<br />
! width=10%| !! width=9%|Om 2008.9 !! width=9%|Om2008.8 !! width=9%|2007.2 !! width=9%|FSO !! width=9%|SHR !! width=9%|FDOM !! width=9%|Qt Extended !! width=9%|Debian !! width=9%|Gentoo !! width=9%|Android<br />
|-<br />
| Terminal || ?? || {{Yes}} (1) || Basic (2) || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || ?? || ??<br />
|-<br />
| PIM || ?? || {{Yes}} || {{Yes}} || {{No}} || N/A || {{Yes}} || {{Yes}} || {{Yes}} (1) || ?? || ??<br />
|-<br />
| Phonebook || ?? || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} (1) || ?? || {{Yes}}<br />
|-<br />
| Dialer || ?? || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} (1) || ?? || {{Yes}}<br />
|-<br />
| Web Browser || ?? || {{Yes}} (1) || {{Yes}} (1) || ? || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} (1) || ?? || {{Yes}}<br />
|-<br />
| Mail Client || ?? || {{Yes}} || ? || ? || ? || {{Yes}} || {{Yes}} || {{Yes}} (1) || ?? || {{Yes}}<br />
|-<br />
| XMPP Client || ?? || {{Yes}} [[Instant Messaging|(1)]] || {{Yes}} (1) || ? || ? || {{Yes}} || {{Yes}} || {{Yes}} (1) || || ??<br />
|-<br />
| Media Player || ?? || {{Yes}} (1) || {{Yes}} || ? || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} (1) || ?? || {{Yes}}<br />
|-<br />
|}<br />
<br />
=== Toolkits / Runtimes ===<br />
{|class="wikitable" border="1" cellpadding="5" cellspacing="0"<br />
! width=10%| !! width=9%|Om 2008.9 !! width=9%|Om2008.8 !! width=9%|2007.2 !! width=9%|FSO !! width=9%|SHR !! width=9%|FDOM !! width=9%|Qt Extended !! width=9%|Debian !! width=9%|Gentoo !! width=9%|Android<br />
|-<br />
| GTK+ || ?? || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || ?? || ??<br />
|-<br />
| Qt/Qt Extended || ?? || {{Yes}} || {{No}} || {{Yes}} ? || {{Yes}}? || {{Yes}} || {{Yes}} || {{Yes}} || ?? || ??<br />
|-<br />
| Middleware || ?? || qtopia-x11 || gsmd/neod || FSO || FSO || qtopia-x11 || Qt Extended || FSO || ?? || ??<br />
|-<br />
| [[Java]] || ?? || {{Yes|Jalimo}} || {{Yes|Jalimo}} || {{Yes|Jalimo}} || {{Yes|Jalimo}} || {{Yes}} || ?? || {{Yes|CacaoVM, JamVM}} || ?? || ??<br />
|-<br />
| [[Python]] || ?? || {{Yes}} || {{Yes}} || {{Yes}} || {{yes}} || {{Yes}} || {{Yes}} || {{Yes}} || ?? || ??<br />
|-<br />
| [[Mono]] || ?? || {{Yes}} (1) || {{Yes}} (1) || ?? || {{no}} || ?? || ?? || {{Yes}} (1) || ?? || ??<br />
|}<br />
<br />
=== Images ===<br />
Latest and stable combinations for Neo FreeRunner gta02<br />
{|class="wikitable" border="1" cellpadding="5" cellspacing="0"<br />
| || OM || FDOM || Qt Extended || Android<br />
|-<br />
| current bootloader || [[U-boot|U-Boot]] from [http://downloads.openmoko.org/daily/ OM daily] version [http://downloads.openmoko.org/daily/gta02v5_and_up-u-boot.bin gta02v5_and_up] || [[U-boot|U-Boot]] from [http://downloads.openmoko.org/daily/ OM daily] version [http://downloads.openmoko.org/daily/gta02v5_and_up-u-boot.bin gta02v5_and_up] || [[U-boot|U-Boot]] from [http://downloads.openmoko.org/daily/ OM daily] version [http://downloads.openmoko.org/daily/gta02v5_and_up-u-boot.bin gta02v5_and_up] ||<br />
|-<br />
| future bootloader || [[Qi]] from [http://people.openmoko.org/andy/ Andy] latest qi-andy.udfu || [[Qi]] from [http://people.openmoko.org/andy/ Andy] latest qi-andy.udfu || [[Qi]] from [http://people.openmoko.org/andy/ Andy] latest qi-andy.udfu ||<br />
|-<br />
| splash || [[Configuring_the_boot_splash_screens|U-Boot]] from [http://downloads.openmoko.org/releases/ OM releases] or [http://downloads.openmoko.org/daily/ OM daily] latest splash.gz || [[Configuring_the_boot_splash_screens|U-Boot]] from [http://downloads.openmoko.org/releases/ OM releases] or [http://downloads.openmoko.org/daily/ OM daily] latest splash.gz || [[Configuring_the_boot_splash_screens|U-Boot]] from [http://downloads.openmoko.org/releases/ OM releases] or [http://downloads.openmoko.org/daily/ OM daily] latest splash.gz ||<br />
|-<br />
| kernel || [[Linux]] from [http://downloads.openmoko.org/releases/ OM releases] or [http://downloads.openmoko.org/daily/ OM daily] latest uImage.bin || [[Linux]] from [http://moko.mwester.net/download/ mwester] latest uImage-gta02-mwester-stable.bin or from [http://downloads.tuxfamily.org/3v1deb/openmoko/ treviño] latest uImage-gta02-stable-3v1n0.bin || [[Linux]] from [http://moko.mwester.net/download/ mwester] latest uImage-gta02-mwester-stable.bin or from [http://downloads.tuxfamily.org/3v1deb/openmoko/ treviño] latest uImage-gta02-stable-3v1n0.bin || [[Linux]] from [http://wiki.openmoko.org/wiki/User:Seanmcneil3 McNiel] version [http://people.openmoko.org/sean_mcneil/uImage-android 2.6.26-android]<br />
|-<br />
| modules || ? || [[Linux]] from [http://moko.mwester.net/download/ mwester] latest modules-min-gta02-mwester-stable.tgz or modules-all-gta02-mwester-stable.tgz || [[Linux]] from [http://moko.mwester.net/download/ mwester] latest modules-min-gta02-mwester-stable.tgz or modules-all-gta02-mwester-stable.tgz ||<br />
|-<br />
| rootfs || [[Main_Page|OM]] from [http://downloads.openmoko.org/releases/ OM releases] or [http://downloads.openmoko.org/daily/ OM daily] latest rootfs.jffs2 || [[FDOM]] from [ftp://ftp.tuxbrain.com/openmoko/fdom/releases/ TuxBrain] version [ftp://ftp.tuxbrain.com/openmoko/fdom/releases/Fat_and_Dirty_OM.200809_20081023.rootfs.jff2 200809_20081023] || [[Qtopia_/_Qt_Extended_on_FreeRunner|QtExtended]] from [http://qtextended.org/modules/mydownloads/viewcat.php?cid=6 TrollTech] latest qtextended-gta02-flash.tgz or from [http://other.lastnetwork.net/OpenMoko/ Hypnotize] latest qtextended-gta02-rootfs-release-working.jffs2 || [[Android]] from [http://wiki.openmoko.org/wiki/User:Seanmcneil3 McNiel] version [http://people.openmoko.org/sean_mcneil/androidfs.jffs2 android]<br />
|}<br />
<br />
Footnotes:<br />
<br />
(1) works, but need additional software to be installed<br />
<br />
(2) unusable due to lack of certain keyboard characters. [[Switching_Keyboards#Matchbox_keyboard|Various fixes available.]]<br />
<br />
(*) unstable<br />
<br />
==Quick download page==<br />
<br />
[[Download]]<br />
<br />
== See also ==<br />
<br />
* Mickey Lauer's post "[http://www.vanille-media.de/site/index.php/2008/06/28/gtk-asu-fso-tmtla/ GTK, ASU, FSO, TMTLA!]" describes the differences between distributions 2007.2, ASU and FSO.<br />
<br />
[[Category:Distributions|*]]</div>Inwardlyherohttp://openmoko.org/wiki/DistributionsDistributions2008-12-08T18:17:50Z<p>Inwardlyhero: </p>
<hr />
<div>{{Languages|Distributions}}<br />
<br />
{| class="wikitable" style="float:right;width:200px;background-color:#FF6600;text-align:center;border-collapse:collapse;font-weight:bold"<br />
|<font color=white>Distributions</font><br />
|-<br />
! style='background-color:#333333;color:#FFFFFF'|<br />
<div align=left><br />
* <font color='#BBBBBB'>Openmoko (official)</font><br />
** [[Om 2008.9 Update]]<br />
** [[Om 2008.8]]<br />
** [[Om 2007.2]]<br />
** [[OpenmokoFramework|FSO]]<br />
* <font color='#BBBBBB'>Community</font><br />
** [[SHR]]<br />
** [[FDOM]]<br />
* <font color='#BBBBBB'>Other</font><br />
** [[Qtopia]]<br />
** [[Debian]]<br />
** [[Gentoo]]<br />
** [[Android]]<br />
</div><br />
|-<br />
|}<br />
Openmoko distributions are designed to run on various mobile devices, with the primary aim of supporting Openmoko Inc.'s [[GTA01:Neo 1973|Neo 1973]] and [[Neo FreeRunner]] phones. They are GNU/Linux distributions -- complete operating systems with more or less user applications. You can install any of them on your phone or even have a multiboot system with two distributions installed.<br />
<br />
While the Openmoko distributions will run on [[Supported devices|other mobile devices]] too, some other software distributions will also run on the Openmoko Inc. phones (see below).<br />
<br />
For downloads see [[Download]], for installation instructions see [[Flashing the Neo FreeRunner]].<br />
<br />
== About distributions ==<br />
<br />
=== Which distribution should I use ?===<br />
* Most new users find [[FDOM]] the most comprehensive and functional distribution.<br />
* If you want "just a phone", try [[Qtopia]].<br />
* If you want to develop anything that last, your platform is [[FSO]] (and the choice between EFL, GTK+, Qt, Java, Python or whatever is open).<br />
* [[SHR]], [[Debian]], [[Gentoo]] and [[Android]] are for people who do not need to ask which distribution they should use.<br />
* Tracking the "base image" by updating daily from testing/unstable is a different game either.<br />
<br />
===Status as of November 9th, 2008 ===<br />
* The phones ship with [[Om 2007.2]]. It is not supported by Openmoko Inc. anymore. But community developpers continue to work on its phone stack in the [[SHR]] project.<br />
* The branch currently supported by Openmoko Inc. is [[Om 2008.9 Update]], which is a minor upgrade of [[Om 2008.8]] (formerly named ASU). Based on that, the community made the [[FDOM]] distribution by adding lots of fixes and applications to it.<br />
* The trunk tip is a "base image" on which the next major release should be based. This next release can be previewed by installing milestones of the [[FSO]] - Free Smartphone.Org project. The [[Debian]] packaging team also track that branch.<br />
* The FreeRunner is a reference platform for TrollTech's Qt Extended (formerly [[Qtopia]]) distribution.<br />
* The Android port is work-in-progress.<br />
<br />
=== Warnings ===<br />
<br />
* Stable in the FreeRunner world does not mean the same thing as stable in Debian world.<br />
* Most distributions use the same bootloader, kernel, drivers and hardware. Therefore, the same low level bugs are commonly found in all distributions. The latest and greatest software usually has most bug fixes, plus a whole set of new fresh bugs.<br />
* Most of these distributions also have package repositories. It is a BAD idea to feed from another distribution's repository.<br />
* Upgrade path between these distributions are mostly not tested, thus updating by changing the feeds will most likely end in broken packages or even an unbootable system. It is advisable to reflash the whole filesystem with [[dfu-util]] to switch between the different distributions, with the reminder that a dual-boot setup (e.g. via sdcard or NFS) can be used.<br />
<br />
== Openmoko Inc. driven release targets ==<br />
<br />
These different 'release targets' are built out of different branches of the [[OpenEmbedded]] metadistribution source tree.<br />
<br />
=== Om 2008.9 ===<br />
<br />
The Om 2008.9 Update is the first point release after the initial Om 2008.8 release. Openmoko recommends that all existing installations of Om 2008.8 should be updated to that version. Quality-wise, we are still far from the goal, but this version includes general stability enhancing operating system improvements and a new splash screen. No applications were added or removed. Users with basic telephony needs will find it tolerable as an everyday phone.<br />
<br />
{{Main|Om 2008.9 Update}}<br />
<br />
=== Om 2008.8 ===<br />
<br />
Om 2008.8 was released on August 8, 2008, to replace 2007.2. Prior to that, its codename was ASU (April/August Software Update). This is still the name of the branch in the version control system. This distribution integrates the [http://trolltech.com/products/qtopia Qtopia] phone stack with a set of new Openmoko applications based on the Enlightenment Foundation Libraries. Qtopia being a more mature product than the GNOME Mobile stack, the standard phone applications (dialer, contacts, calculator, calendar) work better than in 2007.2. The Qtopia used in 2008.8 was ported to run on X11, contrary to standard Qtopia which uses the framebuffer. This allows non-Qt applications to safely share the screen with Qt applications. This is a .0 release, many unresolved issues remain in the lower layers (kernel power management, sound, wifi drivers...).<br />
<br />
{{Main|Om2008.8}}<br />
<br />
=== Om 2007.2 ===<br />
<br />
[[Om 2007.2]] is the base-system which is installed on FreeRunner when it leaves the factory. The interface was totally finger-oriented, optimized for 285ppi, and very orange. It used the GTK+ stack, which is part of the [http://www.gnome.org/mobile/ GNOME Mobile] platform. This distribution is now considered obsolete and not being worked on by Openmoko Inc or by OpenedHand. There is a community effort (see [[SHR]]) to port the GTK based telephony applications to the future middleware from [[FSO]].<br />
<br />
{{Main|Om 2007.2}}<br />
<br />
=== FSO Milestone IV ===<br />
<br />
FSO is an abbreviation for FreeSmartphone.Org. Openmoko is working on a stable system services back-end. Focus is on stable highlevel services that you can access from whatever language or UI that supports [http://dbus.freesmartphone.org/ dbus]. The framework will be used in forthcoming Openmoko distributions. FSO is all about middleware, but if one stacks a bootloader+kernel under it and telephony applications on top, one gets a functional distribution. These are made available as FSO-image milestones. Openmoko Framework Image milestone IV was released on November 11th, 2008 and named 'Homework'. People report that despite its infancy, the phone server part in FSO is already more solid than anywhere else. The kernel under it is a Linux 2.6.24 with modules packaged separately. The telephony application on top of it is Zhone. This is a basic Python dialer/homescreen designed as scaffolding to test the FSO functionalities (even if Zhone is pretty, code path coverage is more critical to it than user-friendliness).<br />
<br />
{{Main|FSO}}<br />
<br />
== Openmoko Community driven release targets ==<br />
<br />
=== SHR - Stable Hybrid Release ===<br />
<br />
SHR is a community driven distribution. It contains some basic GTK+ based applications which make use of the FSO. There currently is a EFL (with elementary) dialer, messages and contacts application programmed in C. As of November 9th, 2008, there is no stable release of this distribution yet, as the SHR team doesn't feel it to be good enough. You can find images though on the [http://shr.bearstech.com/shr-testing SHR buildhost].<br />
<br />
{{Main|Stable Hybrid Release}}<br />
<br />
=== FDOM (FAT and Dirty Openmoko) ===<br />
<br />
[[FDOM]] is a distribution based on Openmoko's currently supported image, updated with many ready-to-use applications and with fixes posted in the mailing lists. A combination of applications (everything goes) and fixes to demonstrate the capabilities of the Freerunner and to have a functional phone (sort of). This all while retaining the ability to update through the official feeds.<br />
<br />
{{Main|FDOM}}<br />
<br />
== Non-Openmoko distributions ==<br />
<br />
These are not Openmoko (and OE) based distributions. These are alternatives you can run on your Openmoko phones.<br />
<br />
=== Qt Extended ===<br />
<br />
The Qt Extended distribution was formerly known as Qtopia up to version 4.3.x included. It comes from [http://www.trolltech.com Trolltech], a Nokia company, the makers of the Qt cross-platform application framework. This distribution aims to provide a ready-to use image for Openmoko devices. It features a noticeably robust telephony stack. Recent release 4.4.2 also sports a webkit-based web browser and Gtalk support.<br />
<br />
{{Main|Qtopia / Qt Extended on FreeRunner}}<br />
<br />
=== Debian ===<br />
<br />
Debian is "the universal operating system". It comes with thousands and thousands of packages (most of them designed for desktops or servers so far). So in the words of Joachim "nomeata" Breitner from the [http://wiki.debian.org/Teams/DebianFSO pkg-fso] team, this is not really a distribution in the Openmoko sense of the word, but rather a different underlying system for Openmoko distributions. At the moment, we ship the software from the FSO stack, but hopefully we’ll also have, for example, the Stable Hybrid Release software in our archive. So for now, Debian is a different way of installing FSO, which takes more space and provides more programs :-)<br />
<br />
{{Main|Debian}}<br />
<br />
=== Gentoo ===<br />
<br />
Gentoo is all about choices. When installing Gentoo, this is made clear to you several times -- you can choose how much you want to compile yourself, how to install Gentoo, what system logger you want, etc. Gentoo is a fast, modern metadistribution with a clean and flexible design. Gentoo is built around free software and doesn't hide from its users what is beneath the hood. Portage, the package maintenance system which Gentoo uses, is written in Python, meaning you can easily view and modify the source code. Gentoo's packaging system uses source code (although support for precompiled packages is included too) and configuring Gentoo happens through regular textfiles. In other words, openness everywhere.<br />
<br />
{{Main|Gentoo}}<br />
<br />
=== Android ===<br />
<br />
Android is a mobile phone platform by Google, and later the Open Handset Alliance (OHA). Openmoko is fully supporting Android running on the Freerunner. Details along with images are being constructed at the moment. Visit the user web page for [http://wiki.openmoko.org/wiki/User:Seanmcneil3 Sean McNeil] for further details. And you can download kernel and image [http://people.openmoko.org/sean_mcneil/ here].<br />
<br />
{{Main|Android}}<br />
<br />
<br />
=== Hackable:1===<br />
Hackable1 is a community distribution for hackable devices like the Neo Freerunner. It is based on Debian and implements the GNOME mobile platform. <br />
{{Main|Hackable:1}}<br />
<br />
=== Others / unreleased ===<br />
<br />
* The [http://www.neopwn.com/software.php NeoPwn] network auditng system's core is a modified Linux 2.6.24 kernel, with cross-compiled module driver support for the numerous compatible addon devices running on a FULL Debian (ARMEL) operating system. The filesystem has been optimized for performance and size and includes the NeoPwn menu system and several GUI dialogs for hardware control and attack automation. ''Status: Unknown, the GPL requires source code to be distributed only to customers''.<br />
* [http://runningbear.org/trac RunningBear] is an innovating yet free and open-source Operating System for hackable devices driven by Bearstech. Lightweight, Portable, Secure, Friendly and Useful. ''Status: In development''.<br />
* [[Hackable:1|Hackable1]] is a community distribution for hackable devices like the Neo Freerunner. It is based on Debian and implements the GNOME mobile platform. ''Status: In development. Link with RunningBear to be clarified.''<br />
* [http://pokylinux.org/ Poky] and Sato, by OpenedHand/Intel. An open source platform build tool derived from OE. It is a complete software development environment for the creation of Linux devices. It enables you to design, develop, build, debug, and test a complete, modern, software stack using Linux, the X Window System and GNOME Mobile based application frameworks for both ARM and x86 based platforms. ''Status: Not sure if it ever ran on the FreeRunner, but it surely could if they wanted.''<br />
* [http://pyneo.org/ PyNeo] lead dev writes that Mickey Lauer gave the whole pyneo stack and his work to build a flashable image the name "moko underground". This was an alias for pyneo at that moment. He then started his own stack using most of the technics & architecture, library & language choices used in pyneo. ''Status: still active, ask around on #neo1973-germany ''<br />
* [http://www.quantum-step.com/ mySTEP] by Openmoko distributor Golden Delicious Computers is based on GNUstep and brings a Objective-C API to the Neo. Core GUI frameworks are "Foundation" & "AppKit". It has been shown on FOSDEM 2008, LinuxTag 2008 and SYSTEMS 2008 to run on the Neo 1973. If someone reengineers UIKit, (open) source code compatibility to iPhone apps appears achievable. ''Status: it does not have its own kernel so a Freerunner distribution waits for a solid basis and an arm-linux-gnueabi toolchain that runs natively on Mac OS X is currently lacking.''<br />
<br />
== Features by distribution/release target ==<br />
<br />
Generally, distributions can differ on one or more of the following components:<br />
* The bootsplash screen image. This is purely decorative.<br />
* The bootloader. Theoretically, any version of ''uboot'' could be used with any distribution. In the future ''Qi'' will replace ''uboot''.<br />
* The kernel. GNU/Linux kernels versions 2.6.24, 2.6.26 or 2.6.28 can be found. Some have modules compiled in, others have modules compiled separately. If compiled separately, modules can be distributed in the same package file as the kernel or separately.<br />
* Middleware: daemons to handle GSM calls or GPS, sound system, personal information storage and so on. Qt and Android have their own subsystems, FreeSmartphone.Org (FSO) is working towards a standard-based Free Software one.<br />
* Display driver. The original ''Qt Extended'' uses the framebuffer, most other distributions today use ''X11''.<br />
* Libraries and application framework (widget toolkit and and graphical environment) : EFL, Qt, Gtk+ or Java ?<br />
* Basic telephony applications: voice calls, SMS, alarm clock...<br />
* Smartphone applications: GPS, media player, simple games, web browser...<br />
* Open source applications: more games, scientific, you name it...<br />
<br />
=== Connectivity ===<br />
{|class="wikitable" border="1" cellpadding="5" cellspacing="0" width=100%<br />
! width=10%| !! width=9%|Om 2008.9 !! width=9%|Om 2008.8 !! width=9%|Om 2007.2 !! width=9%|FSO !! width=9%|SHR !! width=9%|FDOM !! width=9%|Qt Extended !! width=9%|Debian !! width=9%|Gentoo !! width=9%|Android<br />
|-<br />
| Telephony || ?? || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} (1) || ?? || {{Yes}}<br />
|-<br />
| SMS || ?? || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} (1) || ?? || {{Yes}}<br />
|-<br />
| [[GPRS]] || ?? || Not through UI || Not through UI|| Not through UI || Not through UI || {{Yes}} || {{Yes}} || {{Yes}} (1) || ?? || {{Yes}}<br />
|-<br />
| WiFi || ?? || {{Yes}} (*) || {{Yes}} || Not through UI || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || ?? || {{Yes}}<br />
|-<br />
| VoIP || ?? || ?? || ?? || ?? || ?? || {{Yes}} || {{Yes}} (1) || {{Yes}} || ?? || {{no}}<br />
|-<br />
| Bluetooth || ?? || {{Yes}} || {{Yes}} || {{No}} || ?? || {{Yes}} || {{Yes}} || {{Yes}} || ?? || {{Yes}}<br />
|-<br />
| GPS (1) || ?? || {{Yes}} (1) || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} (1) || ?? || {{Yes}}<br />
|-<br />
|}<br />
<br />
=== User Interaction ===<br />
{|class="wikitable" border="1" cellpadding="5" cellspacing="0" width=100%<br />
! width=10%| !! width=9%|Om 2008.9 !! width=9%|Om2008.8 !! width=9%|2007.2 !! width=9%|FSO !! width=9%|SHR !! width=9%|FDOM !! width=9%|Qt Extended !! width=9%|Debian !! width=9%|Gentoo !! width=9%|Android<br />
|-<br />
| Stylus friendly || ?? || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || ?? || {{Yes}}<br />
|-<br />
| Finger friendly || ?? || Partially || Partially || Partially || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || ?? || {{Yes}}<br />
|-<br />
| Accelerometer || ?? || {{Yes}} [[Gestures|(1)]] || {{No}} || {{No}} || {{No}} || {{Yes}} || {{No}} || {{Yes}} || ?? || {{Yes}}<br />
|-<br />
|}<br />
<br />
=== Applications ===<br />
{|class="wikitable" border="1" cellpadding="5" cellspacing="0" width=100%<br />
! width=10%| !! width=9%|Om 2008.9 !! width=9%|Om2008.8 !! width=9%|2007.2 !! width=9%|FSO !! width=9%|SHR !! width=9%|FDOM !! width=9%|Qt Extended !! width=9%|Debian !! width=9%|Gentoo !! width=9%|Android<br />
|-<br />
| Terminal || ?? || {{Yes}} (1) || Basic (2) || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || ?? || ??<br />
|-<br />
| PIM || ?? || {{Yes}} || {{Yes}} || {{No}} || N/A || {{Yes}} || {{Yes}} || {{Yes}} (1) || ?? || ??<br />
|-<br />
| Phonebook || ?? || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} (1) || ?? || {{Yes}}<br />
|-<br />
| Dialer || ?? || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} (1) || ?? || {{Yes}}<br />
|-<br />
| Web Browser || ?? || {{Yes}} (1) || {{Yes}} (1) || ? || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} (1) || ?? || {{Yes}}<br />
|-<br />
| Mail Client || ?? || {{Yes}} || ? || ? || ? || {{Yes}} || {{Yes}} || {{Yes}} (1) || ?? || {{Yes}}<br />
|-<br />
| XMPP Client || ?? || {{Yes}} [[Instant Messaging|(1)]] || {{Yes}} (1) || ? || ? || {{Yes}} || {{Yes}} || {{Yes}} (1) || || ??<br />
|-<br />
| Media Player || ?? || {{Yes}} (1) || {{Yes}} || ? || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} (1) || ?? || {{Yes}}<br />
|-<br />
|}<br />
<br />
=== Toolkits / Runtimes ===<br />
{|class="wikitable" border="1" cellpadding="5" cellspacing="0"<br />
! width=10%| !! width=9%|Om 2008.9 !! width=9%|Om2008.8 !! width=9%|2007.2 !! width=9%|FSO !! width=9%|SHR !! width=9%|FDOM !! width=9%|Qt Extended !! width=9%|Debian !! width=9%|Gentoo !! width=9%|Android<br />
|-<br />
| GTK+ || ?? || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{Yes}} || {{No}} || {{Yes}} || ?? || ??<br />
|-<br />
| Qt/Qt Extended || ?? || {{Yes}} || {{No}} || {{Yes}} ? || {{Yes}}? || {{Yes}} || {{Yes}} || {{Yes}} || ?? || ??<br />
|-<br />
| Middleware || ?? || qtopia-x11 || gsmd/neod || FSO || FSO || qtopia-x11 || Qt Extended || FSO || ?? || ??<br />
|-<br />
| [[Java]] || ?? || {{Yes|Jalimo}} || {{Yes|Jalimo}} || {{Yes|Jalimo}} || {{Yes|Jalimo}} || {{Yes}} || ?? || {{Yes|CacaoVM, JamVM}} || ?? || ??<br />
|-<br />
| [[Python]] || ?? || {{Yes}} || {{Yes}} || {{Yes}} || {{yes}} || {{Yes}} || {{Yes}} || {{Yes}} || ?? || ??<br />
|-<br />
| [[Mono]] || ?? || {{Yes}} (1) || {{Yes}} (1) || ?? || {{no}} || ?? || ?? || {{Yes}} (1) || ?? || ??<br />
|}<br />
<br />
=== Images ===<br />
Latest and stable combinations for Neo FreeRunner gta02<br />
{|class="wikitable" border="1" cellpadding="5" cellspacing="0"<br />
| || OM || FDOM || Qt Extended || Android<br />
|-<br />
| current bootloader || [[U-boot|U-Boot]] from [http://downloads.openmoko.org/daily/ OM daily] version [http://downloads.openmoko.org/daily/gta02v5_and_up-u-boot.bin gta02v5_and_up] || [[U-boot|U-Boot]] from [http://downloads.openmoko.org/daily/ OM daily] version [http://downloads.openmoko.org/daily/gta02v5_and_up-u-boot.bin gta02v5_and_up] || [[U-boot|U-Boot]] from [http://downloads.openmoko.org/daily/ OM daily] version [http://downloads.openmoko.org/daily/gta02v5_and_up-u-boot.bin gta02v5_and_up] ||<br />
|-<br />
| future bootloader || [[Qi]] from [http://people.openmoko.org/andy/ Andy] latest qi-andy.udfu || [[Qi]] from [http://people.openmoko.org/andy/ Andy] latest qi-andy.udfu || [[Qi]] from [http://people.openmoko.org/andy/ Andy] latest qi-andy.udfu ||<br />
|-<br />
| splash || [[Configuring_the_boot_splash_screens|U-Boot]] from [http://downloads.openmoko.org/releases/ OM releases] or [http://downloads.openmoko.org/daily/ OM daily] latest splash.gz || [[Configuring_the_boot_splash_screens|U-Boot]] from [http://downloads.openmoko.org/releases/ OM releases] or [http://downloads.openmoko.org/daily/ OM daily] latest splash.gz || [[Configuring_the_boot_splash_screens|U-Boot]] from [http://downloads.openmoko.org/releases/ OM releases] or [http://downloads.openmoko.org/daily/ OM daily] latest splash.gz ||<br />
|-<br />
| kernel || [[Linux]] from [http://downloads.openmoko.org/releases/ OM releases] or [http://downloads.openmoko.org/daily/ OM daily] latest uImage.bin || [[Linux]] from [http://moko.mwester.net/download/ mwester] latest uImage-gta02-mwester-stable.bin or from [http://downloads.tuxfamily.org/3v1deb/openmoko/ treviño] latest uImage-gta02-stable-3v1n0.bin || [[Linux]] from [http://moko.mwester.net/download/ mwester] latest uImage-gta02-mwester-stable.bin or from [http://downloads.tuxfamily.org/3v1deb/openmoko/ treviño] latest uImage-gta02-stable-3v1n0.bin || [[Linux]] from [http://wiki.openmoko.org/wiki/User:Seanmcneil3 McNiel] version [http://people.openmoko.org/sean_mcneil/uImage-android 2.6.26-android]<br />
|-<br />
| modules || ? || [[Linux]] from [http://moko.mwester.net/download/ mwester] latest modules-min-gta02-mwester-stable.tgz or modules-all-gta02-mwester-stable.tgz || [[Linux]] from [http://moko.mwester.net/download/ mwester] latest modules-min-gta02-mwester-stable.tgz or modules-all-gta02-mwester-stable.tgz ||<br />
|-<br />
| rootfs || [[Main_Page|OM]] from [http://downloads.openmoko.org/releases/ OM releases] or [http://downloads.openmoko.org/daily/ OM daily] latest rootfs.jffs2 || [[FDOM]] from [ftp://ftp.tuxbrain.com/openmoko/fdom/releases/ TuxBrain] version [ftp://ftp.tuxbrain.com/openmoko/fdom/releases/Fat_and_Dirty_OM.200809_20081023.rootfs.jff2 200809_20081023] || [[Qtopia_/_Qt_Extended_on_FreeRunner|QtExtended]] from [http://qtextended.org/modules/mydownloads/viewcat.php?cid=6 TrollTech] latest qtextended-gta02-flash.tgz or from [http://other.lastnetwork.net/OpenMoko/ Hypnotize] latest qtextended-gta02-rootfs-release-working.jffs2 || [[Android]] from [http://wiki.openmoko.org/wiki/User:Seanmcneil3 McNiel] version [http://people.openmoko.org/sean_mcneil/androidfs.jffs2 android]<br />
|}<br />
<br />
Footnotes:<br />
<br />
(1) works, but need additional software to be installed<br />
<br />
(2) unusable due to lack of certain keyboard characters. [[Switching_Keyboards#Matchbox_keyboard|Various fixes available.]]<br />
<br />
(*) unstable<br />
<br />
== See also ==<br />
<br />
* Mickey Lauer's post "[http://www.vanille-media.de/site/index.php/2008/06/28/gtk-asu-fso-tmtla/ GTK, ASU, FSO, TMTLA!]" describes the differences between distributions 2007.2, ASU and FSO.<br />
<br />
[[Category:Distributions|*]]</div>Inwardlyherohttp://openmoko.org/wiki/User:InwardlyheroUser:Inwardlyhero2008-11-07T17:41:07Z<p>Inwardlyhero: New page: echo "inwardlyhero"</p>
<hr />
<div>echo "inwardlyhero"</div>Inwardlyherohttp://openmoko.org/wiki/AndroidAndroid2008-11-06T10:46:13Z<p>Inwardlyhero: </p>
<hr />
<div>{{Distributions|Android}}<br />
<br />
= Updates =<br />
<br />
* 20081104 The first Android-image has been successfully created by Sean McNeil! You can try on your own: [http://people.openmoko.org/sean_mcneil/ android image and kernel] - sms and calling works, wifi and bluetooth doesn't. [http://onlinedev.blogspot.com/2008/11/porting-android-phase-3-done.html ''news-source'']<br />
* 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://64.233.169.104/search?q=cache:e8czlAdKTn0J:gentoo-wiki.com/JFFS2/Mounting+gentoo+jffs2&hl=en&ct=clnk&cd=1&gl=ca&client=firefox-a 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]])<br />
* 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<br />
* 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).<br />
* 20081021 [[User:Cfriedt]] Android -> FreeRunner updates on my [http://perpetual-notion.blogspot.com/search/label/android blog]<br />
* 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.<br />
* 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 "maddog" Hall] is CTO and Ambassador for Koolu.<br />
<br />
= Introduction =<br />
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.<br />
<br />
== Goals ==<br />
# Systematically introduce patches for ARMv4T in the Android codebase<br />
# 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<br />
# Provide a useable Android filesystem and kernel on the [[Distributions]] page that conform to current Openmoko installation routines<br />
<br />
== Early Attempts ==<br />
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.<br />
<br />
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.<br />
<br />
== Current State ==<br />
<br />
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.<br />
<br />
Currently, porting efforts are underway in many circles. Patches should be submitted via the [http://source.android.com/submit-patches official Android channels].<br />
<br />
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]]<br />
<br />
[[User:Seanmcneil3|Sean McNeil]] said that he was able to get Androind running (including telephony) in his Freerunner [http://3v1n0.tuxfamily.org/tumblelog/post/368 source].<br />
<br />
Ben Leslie mentioned on the android-porting list that he was able to get the 'Android' logo to appear on his Neo 1973.<br />
<br />
= How to Help =<br />
<br />
== Getting Started ==<br />
<br />
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.<br />
<br />
== Publicize Your Efforts ==<br />
<br />
It's generally a good idea to make your efforts known via wiki systems, public mailing lists, forums, and publically open version control systems.<br />
<br />
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 (??).<br />
<br />
If you create something new and have the ability to designate the license for it, please consider license compatibility issues.<br />
<br />
== Porting Strategy ==<br />
<br />
* Analysis and leverage of the existing build system<br />
** buid/core/combo/arm-linux.mk<br />
*** -D__ARCH_ARM_4__ -D__ARCH_ARM_4T__<br />
*** -march=armv4t -mcpu=arm920t<br />
** fix various static references to 'armv5'<br />
* Isolating ARMv5TE ISA dependent code<br />
** e.g. grep -n -R -i "${armv5te_isa_pattern}" ~/android<br />
* Abstracting<br />
** ( C/C++ )<br />
*** Use inlined functions / #ifdef statments to implement functions in a portable manner<br />
*** 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.<br />
** ( ASM )<br />
*** Proprocessor statements based on ISA / architecture, e.g. #ifdef __ARCH_ARM_5__ ... #endif #ifdef __ARCH_ARM_4__ ... #endif<br />
*** It's highly suggested that preprocessor statements should not be nested (i.e. make them mutually exclusive)<br />
*** 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 .<br />
<br />
For each ARMv5TE instruction, one could potentially<br />
* Implement the instruction using general registers instead of DSP calls (i.e. eabi / softfloat)<br />
* If that is a) nondeterministic, or b) slow, then sections of code need to be analyzed and hand-optimized for the ARMv4T isa<br />
<br />
== List of Unsupported Instructions ==<br />
<br />
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.<br />
<br />
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<br />
* the requirement of additional context<br />
* the tendencies of certain opcodes to change condition registers that may or may not be present in the arm920t core<br />
<br />
=== Opcodes ===<br />
<br />
{{scroll box|height=480px|text=<br />
<TABLE BORDER="1"><br />
<TR><br />
<TH>Opcode</TH><br />
<TH>Desription</TH><br />
<TH>[[http://www.arm.com/miscPDFs/14128.pdf PDF]] Page Number</TH><br />
<TH>C</TH><br />
<TH>ASM</TH><br />
</TR><br />
<TR><br />
<TH VALIGN="TOP">BLX(1)</TH><br />
<TD>Branch, Link, and Exchange</TD><br />
<TD>166</TD><br />
<TD>N/A (Unused in Android)</TD><br />
<TD>N/A (Unused in Android)</TD><br />
</TR><br />
<TR><br />
<TH VALIGN="TOP">BLX(2)</TH><br />
<TD>Branch, Link, and Exchange</TD><br />
<TD>168</TD><br />
<TD><br />
[[User:Cfriedt]] 20081028<br />
Remove from inline assembly with something like<br />
<pre><br />
#ifdef HAVE_BLX<br />
... (inline asm) ...<br />
#else<br />
... (inline asm with equivalent blx code, as shown to the right) ...<br />
#endif<br />
</pre><br />
</TD><br />
<TD><br />
[[User:Cfriedt]] 20081028<br />
Substitute with a macro reference such as<br />
<pre><br />
#ifdef HAVE_BLX<br />
#define BLX(a) \<br />
blx a<br />
#else<br />
#define BLX(a) \<br />
mov pc,lr \<br />
bx a<br />
#endif<br />
</pre><br />
</TD><br />
</TR><br />
<TR><br />
<TH VALIGN="TOP">CLZ</TH><br />
<TD>Count Leading Zeros</TD><br />
<TD>175</TD><br />
<TD><br />
[[User:Cfriedt]] 20081028<br />
Remove from inline assembly with something like<br />
<pre><br />
#ifdef HAVE_CLZ<br />
... (inline asm) ...<br />
#else<br />
... (inline asm with equivalent clz code, as shown to the right) ...<br />
#endif<br />
</pre><br />
</TD><br />
<TD><br />
[[User:Cfriedt]] 20081029<br />
<pre><br />
#ifdef HAVE_CLZ<br />
#define CLZ(Rd,Rm) \<br />
clz Rd,Rm<br />
#else<br />
#define CLZ(Rd,Rm) \<br />
...<br />
#endif<br />
...<br />
CLZ(Rd,Rm)<br />
</pre><br />
</TD><br />
</TR><br />
<TR><br />
<TH VALIGN="TOP">LDRD</TH><br />
<TD>Load Registers Doubleword</TD><br />
<TD>200</TD><br />
<TD><br />
[[User:Cfriedt]] 20081028<br />
Substitute different inline assembly code with something like<br />
<pre><br />
#ifdef HAVE_LDRD<br />
... (inline asm) ...<br />
#else<br />
... (inline asm with ldrd substituted) ...<br />
#endif<br />
</pre><br />
</TD><br />
<TD><br />
[[User:Cfriedt]] 20081028<br />
Substitute with a macro reference such as<br />
<pre><br />
#ifdef HAVE_LDRD<br />
#define LDRD(a,b) \<br />
ldrd a,b<br />
#else<br />
#define LDRD(a,b) \<br />
...<br />
#endif<br />
</pre><br />
</TD><br />
</TR><br />
<TR><br />
<TH VALIGN="TOP">PLD</TH><br />
<TD>Preload Data</TD><br />
<TD>240</TD><br />
<TD><br />
[[User:Cfriedt]] 20081028<br />
Remove from inline assembly with something like<br />
<pre><br />
#ifdef HAVE_PLD<br />
... (inline asm) ...<br />
#else<br />
... (inline asm with pld removed) ...<br />
#endif<br />
</pre><br />
</TD><br />
<TD><br />
[[User:Cfriedt]] 20081028<br />
Remove or substitute with a macro reference such as<br />
<pre><br />
#ifdef HAVE_PLD<br />
#define PLD(a,b) \<br />
pld a,b<br />
#else<br />
#define PLD(a,b)<br />
#endif<br />
...<br />
PLD(r0,#0)<br />
</pre><br />
</TD><br />
</TR><br />
<TR><br />
<TH VALIGN="TOP">SMLA&lt;x&gt;&lt;y&gt;</TH><br />
<TD>Signed Multiply-Accumulate</TD><br />
<TD>291</TD><br />
<TD></TD><br />
<TD></TD><br />
</TR><br />
<TR><br />
<TH VALIGN="TOP">SMLAL&lt;x&gt;&lt;y&gt;</TH><br />
<TD>Signed Multiply Accumulate Long</TD><br />
<TD>298</TD><br />
<TD></TD><br />
<TD></TD><br />
</TR><br />
<TR><br />
<TH VALIGN="TOP">SMLAW&lt;y&gt;</TH><br />
<TD>Signed Multiply-Accumulate Word</TD><br />
<TD>302</TD><br />
<TD></TD><br />
<TD></TD><br />
</TR><br />
<TR><br />
<TH VALIGN="TOP">SMUL&lt;x&gt;&lt;y&gt;</TH><br />
<TD>Signed Multiply</TD><br />
<TD>316</TD><br />
<TD></TD><br />
<TD></TD><br />
</TR><br />
<TR><br />
<TH VALIGN="TOP">SMULW&lt;y&gt;</TH><br />
<TD>Signed Multiply Word</TD><br />
<TD>320</TD><br />
<TD></TD><br />
<TD></TD><br />
</TR><br />
<TR><br />
<TH VALIGN="TOP">QADD</TH><br />
<TD>Saturating Add</TD><br />
<TD>242</TD><br />
<TD></TD><br />
<TD></TD><br />
</TR><br />
<TR><br />
<TH VALIGN="TOP">QDADD</TH><br />
<TD>Saturating Double and Add</TD><br />
<TD>249</TD><br />
<TD></TD><br />
<TD></TD><br />
</TR><br />
<TR><br />
<TH VALIGN="TOP">QDSUB</TH><br />
<TD>Saturating Double and Subtract</TD><br />
<TD>251</TD><br />
<TD></TD><br />
<TD></TD><br />
</TR><br />
<TR><br />
<TH VALIGN="TOP">QSUB</TH><br />
<TD>Saturating Subtract</TD><br />
<TD>253</TD><br />
<TD></TD><br />
<TD></TD><br />
</TR><br />
<TR><br />
<TH VALIGN="TOP">STRD</TH><br />
<TD>Store Registers Doubleword</TD><br />
<TD>349</TD><br />
<TD><br />
[[User:Cfriedt]] 20081028<br />
Substitute different inline assembly code with something like<br />
<pre><br />
#ifdef HAVE_STRD<br />
... (inline asm) ...<br />
#else<br />
... (inline asm without strd) ...<br />
#endif<br />
</pre><br />
</TD><br />
<TD><br />
[[User:Cfriedt]] 20081028<br />
Substitute with a macro reference such as<br />
<pre><br />
#ifdef HAVE_STRD<br />
#define STRD(a,b) \<br />
strd a,b<br />
#else<br />
#define STRD(a,b) \<br />
...<br />
#endif<br />
</pre><br />
<br />
</TD><br />
</TR><br />
</TABLE><br />
}}<br />
<br />
=== Scanning for Files That Use the ARMv5TE ISA ===<br />
<br />
Using the above list of opcodes, one can scan the Android source code for ARMv4T-incompatible instruction sequences.<br />
<br />
'''Code:'''<br />
{{scroll box|height=240px|text=<br />
<pre><br />
#!/bin/sh<br />
<br />
# $1 is the android directory<br />
<br />
if [ $# -ne 1 ]; then<br />
exit -1<br />
fi<br />
<br />
cd "${1}"<br />
<br />
opcodes="blx clz ldrd pld smlabb smlabt smlatt<br />
smlal smlawb smlawt smulbb smulbt smultt smulwb<br />
smulwt qadd qdadd qdsub qsub strd"<br />
<br />
for op in ${opcodes}; do<br />
<br />
echo "* ${op} ====================================="<br />
<br />
if [ ! -e .files.${op} ]; then<br />
<br />
files="$(grep -R -i "${op} " * 2>/dev/null)"<br />
files="$(echo $files | grep -v "^Binary file" | sed -e 's/:.*//')"<br />
files="$(echo $files| grep -v "CREDIT\|README\|^\(kernel/\|.git/\)\|\(\.txt\)$" | sort -u)"<br />
<br />
echo "${files}" > .files.${op}<br />
<br />
else<br />
files="$(cat .files.${op})"<br />
fi<br />
<br />
for fil in ${files}; do<br />
lines="$(grep -n -i "${op} " ${fil} | sed -e 's/:.*//g' )"<br />
lines="$(echo $lines | sed -e 's/ /,/g')"<br />
echo "** ${fil}: lines {${lines}}"<br />
done<br />
done<br />
</pre><br />
}}<br />
<br />
=== Source Files in Android that Use the ARMv5TE ISA ===<br />
<br />
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?).<br />
<br />
{{scroll box|height=150px|text=<br />
* blx =====================================<br />
** bionic/libc/tools/gensyscalls.py: lines {168,186}<br />
** bootloader/legacy/nandwrite/init.S: lines {77}<br />
** bootloader/legacy/usbloader/init.S: lines {95}<br />
** dalvik/vm/arch/arm/CallEABI.S: lines {239}<br />
** dalvik/vm/arch/arm/CallOldABI.S: lines {145}<br />
** development/emulator/qtools/thumbdis.cpp: lines {187,265}<br />
** external/qemu/target-arm/translate.c: lines {1151,1971,2444}<br />
** external/qemu/trace.c: lines {774,1353,1358}<br />
** system/core/libpixelflinger/codeflinger/disassem.c: lines {416}<br />
* clz =====================================<br />
** development/emulator/qtools/armdis.cpp: lines {654}<br />
** external/opencore/codecs_v2/audio/aac/dec/src/pv_normalize.h: lines {67,84}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/norm_l.h: lines {137}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/normalize_amr_wb.h: lines {78,95}<br />
** external/opencore/codecs_v2/audio/mp3/dec/src/pvmp3_normalize.h: lines {67,84}<br />
** external/opencore/codecs_v2/video/avc_h264/dec/src/vlc.cpp: lines {23}<br />
** external/opencore/codecs_v2/video/m4v_h263/enc/src/vlc_encode_inline.h: lines {125,162,168,204,218}<br />
** external/qemu/target-arm/translate.c: lines {1247}<br />
** external/skia/libcorecg/Sk64.cpp: lines {340,341,343}<br />
** external/skia/libcorecg/SkMatrix.cpp: lines {500,501}<br />
** external/skia/libsgl/effects/SkColorMatrixFilter.cpp: lines {135}<br />
** external/skia/libsgl/sgl/SkBitmap.cpp: lines {945,946,947}<br />
** external/skia/libsgl/sgl/SkBitmapShader.cpp: lines {32,33,34}<br />
** external/skia/libsgl/sgl/SkGraphics.cpp: lines {429,437}<br />
* ldrd =====================================<br />
** dalvik/vm/mterp/armv5/OP_AGET_WIDE.S: lines {28}<br />
** dalvik/vm/mterp/armv5/OP_IGET_WIDE.S: lines {37}<br />
** dalvik/vm/mterp/armv5/OP_IGET_WIDE_QUICK.S: lines {10}<br />
** dalvik/vm/mterp/armv5/OP_SGET_WIDE.S: lines {17}<br />
** dalvik/vm/mterp/out/InterpAsm-armv5.S: lines {2653,7464,8318,8390}<br />
** system/core/libpixelflinger/rotate90CW_4x4_16v6.S: lines {40,41,42,43}<br />
* pld =====================================<br />
** bionic/libc/arch-arm/bionic/memcmp.S: lines {37,44,45,56,57,107,108,195,196}<br />
** bionic/libc/arch-arm/bionic/memcmp16.S: lines {37,44,45,67,68,116,117,198,199}<br />
** bionic/libc/arch-arm/bionic/memcpy.S: lines {55,56,57,145,266,293,320}<br />
** bionic/libc/arch-arm/bionic/strlen.c: lines {59,65}<br />
** bionic/libc/kernel/arch-arm/asm/arch/irqs.h: lines {162}<br />
** external/elfutils/src/Makefile: lines {243}<br />
** external/elfutils/src/Makefile.am: lines {32}<br />
** external/elfutils/src/Makefile.in: lines {243}<br />
** external/jpeg/jidctfst.S: lines {69,235,247}<br />
** external/qemu/target-arm/translate.c: lines {1149}<br />
** system/core/libpixelflinger/codeflinger/ARMAssembler.cpp: lines {368}<br />
** system/core/libpixelflinger/codeflinger/ARMAssemblerInterface.cpp: lines {104,108,117}<br />
** system/core/libpixelflinger/t32cb16blend.S: lines {111,112,134,143}<br />
* smlabb =====================================<br />
** external/jpeg/jidctfst.S: lines {110,115,155,156}<br />
** external/neven/Embedded/common/src/b_BasicEm/Math.c: lines {584,589}<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {147,166}<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {120,129}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {514,533}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {418,429}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {202}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {250}<br />
** external/opencore/codecs_v2/video/m4v_h263/enc/src/dct_inline.h: lines {119,155,167,278,326,341}<br />
** external/opencore/codecs_v2/video/m4v_h263/enc/src/fastquant_inline.h: lines {178,225,437,517}<br />
** frameworks/base/libs/audioflinger/AudioMixer.cpp: lines {405,436}<br />
* smlabt =====================================<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {184}<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {138}<br />
** external/opencore/codecs_v2/video/m4v_h263/enc/src/dct_inline.h: lines {131,143,294,310}<br />
* smlatt =====================================<br />
** external/neven/Embedded/common/src/b_BasicEm/Math.c: lines {585,590}<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {157}<br />
** frameworks/base/libs/audioflinger/AudioMixer.cpp: lines {441}<br />
* smlal =====================================<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v4.h: lines {179,223,236,257,267}<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v4_gcc.h: lines {264,341}<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {178,188,198}<br />
** 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}<br />
** 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}<br />
** 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}<br />
** 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}<br />
** 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}<br />
** 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}<br />
** 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}<br />
** 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}<br />
** external/opencore/codecs_v2/audio/mp3/dec/src/pv_mp3dec_fxd_op_arm.h: lines {148}<br />
** external/qemu/trace.c: lines {813}<br />
** frameworks/base/opengl/libagl/iterators.S: lines {66,67}<br />
** frameworks/base/opengl/libagl/matrix.h: lines {67,68,96,126,127,282,283,314,315,316}<br />
* smlawb =====================================<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {203,259}<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {166,416}<br />
** frameworks/base/libs/audioflinger/AudioResamplerSinc.cpp: lines {93,109}<br />
** frameworks/base/opengl/libagl/matrix.h: lines {163,203}<br />
* smlawt =====================================<br />
** frameworks/base/libs/audioflinger/AudioResamplerSinc.cpp: lines {114}<br />
** frameworks/base/opengl/libagl/matrix.h: lines {162,202,243,244}<br />
* smulbb =====================================<br />
** external/jpeg/jidctfst.S: lines {109,114,151,153}<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {79}<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {71,81}<br />
** 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}<br />
** 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}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_mac.h: lines {121,137}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_msu.h: lines {123,142}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_mult.h: lines {122,140}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mpy_32.h: lines {132,134,138,164,177,191}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mpy_32_16.h: lines {127,129,150,163}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mult.h: lines {121,141}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {115,139,151,163,189,190,212}<br />
** 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}<br />
** external/opencore/codecs_v2/video/m4v_h263/enc/src/fastquant_inline.h: lines {250,457,531}<br />
** external/skia/include/corecg/SkMath.h: lines {170}<br />
** frameworks/base/libs/audioflinger/AudioMixer.cpp: lines {420,462}<br />
** system/core/libpixelflinger/t32cb16blend.S: lines {39,66,74,82}<br />
* smulbt =====================================<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {115}<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {109}<br />
** system/core/libpixelflinger/codeflinger/texturing.cpp: lines {1091}<br />
** system/core/libpixelflinger/t32cb16blend.S: lines {47,55}<br />
* smultt =====================================<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {131}<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {100}<br />
** frameworks/base/libs/audioflinger/AudioMixer.cpp: lines {467}<br />
** frameworks/base/libs/audioflinger/AudioResamplerSinc.cpp: lines {73}<br />
* smulwb =====================================<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {221}<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {373}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {222}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {283}<br />
** external/opencore/codecs_v2/audio/sbc/enc/src/sbcenc_filter.h: lines {33}<br />
** frameworks/base/opengl/libagl/matrix.h: lines {161,201,242}<br />
* smulwt =====================================<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {202,240}<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {385,415}<br />
* qadd =====================================<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {64}<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {60}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {130,256}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {128,235}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_add.h: lines {122,137}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_mult.h: lines {123,145}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {71,102,152,176,192}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {91,115,148,202,234}<br />
** external/openssl/crypto/bn/bn_prime.c: lines {454,455}<br />
* qdadd =====================================<br />
** external/opencore/codecs_v2/audio/aac/dec/src/calc_sbr_synfilterbank.cpp: lines {116,162}<br />
** external/opencore/codecs_v2/audio/aac/dec/src/trans4m_freq_2_time_fxp.cpp: lines {472,494}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {212,356,370,385,435,449}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {200,315,321,331,368,371}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_mac.h: lines {122,142}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mpy_32.h: lines {133,136,140,172,186,201}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mpy_32_16.h: lines {128,131,158,172}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {116}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {184}<br />
* qdsub =====================================<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {302}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {275}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_msu.h: lines {124,147}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {140}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {165}<br />
* qsub =====================================<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {167}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {162}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_sub.h: lines {121,138}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {88,127}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {70,133}<br />
* strd =====================================<br />
** dalvik/vm/mterp/armv5/OP_APUT_WIDE.S: lines {31}<br />
** dalvik/vm/mterp/armv5/OP_IPUT_WIDE.S: lines {39}<br />
** dalvik/vm/mterp/armv5/OP_IPUT_WIDE_QUICK.S: lines {14}<br />
** dalvik/vm/mterp/armv5/OP_SPUT_WIDE.S: lines {21}<br />
** dalvik/vm/mterp/out/InterpAsm-armv5.S: lines {2834,7530,8331,8542}<br />
** dalvik/vm/oo/Object.h: lines {589}<br />
** external/opencore/fileformats/avi/parser/include/pv_avifile_streamlist.h: lines {179}<br />
** external/opencore/fileformats/avi/parser/src/pv_avifile_streamlist.cpp: lines {153}<br />
** system/core/libpixelflinger/rotate90CW_4x4_16v6.S: lines {47,52,56,60}<br />
}}<br />
<br />
=== Discussion ===<br />
=== Notes ===<br />
The file<br />
<pre><br />
system/core/libpixelflinger/codeflinger/ARMAssembler.cpp<br />
</pre><br />
<br />
will need special attention. It's responsible for dynamic generation of DSP code.<br />
<br />
== Suggestions ==<br />
* [[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.<br />
<br />
= Important Links =<br />
(Please Update Me)<br />
<br />
== Documentation ==<br />
* [http://source.android.com/documentation Android Documentation]<br />
* [http://www.arm.com/documentation/ ARM Documentation], (keywords: armv4t, armv5t, armv5te, arm920t, arm926ej-s)<br />
* [http://www.arm.com/miscPDFs/9658.pdf ARM Assembly Language Programming]<br />
* [http://www.cse.unsw.edu.au/~cs3221/labs/assembler-intro.pdf An Introduction to the GNU Assembler]<br />
* [http://www.heyrick.co.uk/assembler/apcsintro.html ARM Procedure Call Standard], [http://en.wikipedia.org/wiki/Calling_convention#ARM ARM Calling Conventions]<br />
<br />
== Instruction Set References ==<br />
* [http://www.arm.com/miscPDFs/14128.pdf ARM Architecture Reference Manual], The definitive ISA documentation<br />
* [http://www.simplemachines.it/doc/QRC0001H_rvct_v2.1_arm.pdf ARM Instruction Set Quick Reference Card]<br />
* [http://infocenter.arm.com/help/topic/com.arm.doc.qrc0001l/QRC0001_UAL.pdf ARM and Thumb -2 Instruction Set Quick Reference Card]<br />
* [http://infocenter.arm.com/help/topic/com.arm.doc.dvi0025b/DVI0025.pdf ARMv4T] (See section 1.4.13)<br />
* [http://infocenter.arm.com/help/topic/com.arm.doc.dvi0014a/DVI0014A_ARM10T_PO.pdf ARMv5T] (See section 4.16)<br />
* [http://www.arm.com/pdfs/ARM-DSP.pdf ARM DSP Enhanced Instruction Set]<br />
* [http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042c/IHI0042C_aapcs.pdf Procedure Call Standard for the ARM Architecture]<br />
<br />
== Hardware Reference ==<br />
<br />
* [[Neo1973 Hardware]]<br />
* [[Neo FreeRunner GTA02 Hardware]]<br />
<br />
== Communities ==<br />
* [http://source.android.com/discuss Android Public Mailing Lists]<br />
** Specifically, [http://groups.google.com/group/android-porting android-porting]<br />
* [http://lists.openmoko.org/mailman/listinfo OpenMoko Mailing Lists]<br />
** Specifically, [http://lists.openmoko.org/mailman/listinfo/openmoko-kernel openmoko-kernel]<br />
* [http://forum.koolu.org/viewforum.php?f=10 Android on FreeRunner] at KoolU.com<br />
* [[Openmoko Local Groups]]<br />
* [[Openmoko:Community_Portal]]<br />
<br />
= See also =<br />
<br />
* [[Debug_Board]]<br />
<br />
= External Links =<br />
<br />
[[Category:Distributions]]</div>Inwardlyherohttp://openmoko.org/wiki/AndroidAndroid2008-11-04T18:40:10Z<p>Inwardlyhero: /* Updates */</p>
<hr />
<div>{{Distributions|Android}}<br />
<br />
= Updates =<br />
<br />
* 20081104 The first Android-image has been successfully created by Sean McNeil! You can try on your own: [http://people.openmoko.org/sean_mcneil/ android image and kernel] - sms, calling and wifi doesn't work at this time. [http://onlinedev.blogspot.com/2008/11/porting-android-phase-3-done.html ''news-source'']<br />
* 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.<br />
* 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 "maddog" Hall] is CTO and Ambassador for Koolu.<br />
* 20081021 [[User:Cfriedt]] Android -> FreeRunner updates on my [http://perpetual-notion.blogspot.com/search/label/android blog]<br />
* 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).<br />
* 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<br />
* 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://64.233.169.104/search?q=cache:e8czlAdKTn0J:gentoo-wiki.com/JFFS2/Mounting+gentoo+jffs2&hl=en&ct=clnk&cd=1&gl=ca&client=firefox-a 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]])<br />
<br />
= Introduction =<br />
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.<br />
<br />
== Goals ==<br />
# Systematically introduce patches for ARMv4T in the Android codebase<br />
# 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<br />
# Provide a useable Android filesystem and kernel on the [[Distributions]] page that conform to current Openmoko installation routines<br />
<br />
== Early Attempts ==<br />
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.<br />
<br />
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.<br />
<br />
== Current State ==<br />
<br />
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.<br />
<br />
Currently, porting efforts are underway in many circles. Patches should be submitted via the [http://source.android.com/submit-patches official Android channels].<br />
<br />
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]]<br />
<br />
[[User:Seanmcneil3|Sean McNeil]] said that he was able to get Androind running (including telephony) in his Freerunner [http://3v1n0.tuxfamily.org/tumblelog/post/368 source].<br />
<br />
Ben Leslie mentioned on the android-porting list that he was able to get the 'Android' logo to appear on his Neo 1973.<br />
<br />
= How to Help =<br />
<br />
== Getting Started ==<br />
<br />
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.<br />
<br />
== Publicize Your Efforts ==<br />
<br />
It's generally a good idea to make your efforts known via wiki systems, public mailing lists, forums, and publically open version control systems.<br />
<br />
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 (??).<br />
<br />
If you create something new and have the ability to designate the license for it, please consider license compatibility issues.<br />
<br />
== Porting Strategy ==<br />
<br />
* Analysis and leverage of the existing build system<br />
** buid/core/combo/arm-linux.mk<br />
*** -D__ARCH_ARM_4__ -D__ARCH_ARM_4T__<br />
*** -march=armv4t -mcpu=arm920t<br />
** fix various static references to 'armv5'<br />
* Isolating ARMv5TE ISA dependent code<br />
** e.g. grep -n -R -i "${armv5te_isa_pattern}" ~/android<br />
* Abstracting<br />
** ( C/C++ )<br />
*** Use inlined functions / #ifdef statments to implement functions in a portable manner<br />
*** 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.<br />
** ( ASM )<br />
*** Proprocessor statements based on ISA / architecture, e.g. #ifdef __ARCH_ARM_5__ ... #endif #ifdef __ARCH_ARM_4__ ... #endif<br />
*** It's highly suggested that preprocessor statements should not be nested (i.e. make them mutually exclusive)<br />
*** 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 .<br />
<br />
For each ARMv5TE instruction, one could potentially<br />
* Implement the instruction using general registers instead of DSP calls (i.e. eabi / softfloat)<br />
* If that is a) nondeterministic, or b) slow, then sections of code need to be analyzed and hand-optimized for the ARMv4T isa<br />
<br />
== List of Unsupported Instructions ==<br />
<br />
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.<br />
<br />
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<br />
* the requirement of additional context<br />
* the tendencies of certain opcodes to change condition registers that may or may not be present in the arm920t core<br />
<br />
=== Opcodes ===<br />
<br />
{{scroll box|height=480px|text=<br />
<TABLE BORDER="1"><br />
<TR><br />
<TH>Opcode</TH><br />
<TH>Desription</TH><br />
<TH>[[http://www.arm.com/miscPDFs/14128.pdf PDF]] Page Number</TH><br />
<TH>C</TH><br />
<TH>ASM</TH><br />
</TR><br />
<TR><br />
<TH VALIGN="TOP">BLX(1)</TH><br />
<TD>Branch, Link, and Exchange</TD><br />
<TD>166</TD><br />
<TD>N/A (Unused in Android)</TD><br />
<TD>N/A (Unused in Android)</TD><br />
</TR><br />
<TR><br />
<TH VALIGN="TOP">BLX(2)</TH><br />
<TD>Branch, Link, and Exchange</TD><br />
<TD>168</TD><br />
<TD><br />
[[User:Cfriedt]] 20081028<br />
Remove from inline assembly with something like<br />
<pre><br />
#ifdef HAVE_BLX<br />
... (inline asm) ...<br />
#else<br />
... (inline asm with equivalent blx code, as shown to the right) ...<br />
#endif<br />
</pre><br />
</TD><br />
<TD><br />
[[User:Cfriedt]] 20081028<br />
Substitute with a macro reference such as<br />
<pre><br />
#ifdef HAVE_BLX<br />
#define BLX(a) \<br />
blx a<br />
#else<br />
#define BLX(a) \<br />
mov pc,lr \<br />
bx a<br />
#endif<br />
</pre><br />
</TD><br />
</TR><br />
<TR><br />
<TH VALIGN="TOP">CLZ</TH><br />
<TD>Count Leading Zeros</TD><br />
<TD>175</TD><br />
<TD><br />
[[User:Cfriedt]] 20081028<br />
Remove from inline assembly with something like<br />
<pre><br />
#ifdef HAVE_CLZ<br />
... (inline asm) ...<br />
#else<br />
... (inline asm with equivalent clz code, as shown to the right) ...<br />
#endif<br />
</pre><br />
</TD><br />
<TD><br />
[[User:Cfriedt]] 20081029<br />
<pre><br />
#ifdef HAVE_CLZ<br />
#define CLZ(Rd,Rm) \<br />
clz Rd,Rm<br />
#else<br />
#define CLZ(Rd,Rm) \<br />
...<br />
#endif<br />
...<br />
CLZ(Rd,Rm)<br />
</pre><br />
</TD><br />
</TR><br />
<TR><br />
<TH VALIGN="TOP">LDRD</TH><br />
<TD>Load Registers Doubleword</TD><br />
<TD>200</TD><br />
<TD><br />
[[User:Cfriedt]] 20081028<br />
Substitute different inline assembly code with something like<br />
<pre><br />
#ifdef HAVE_LDRD<br />
... (inline asm) ...<br />
#else<br />
... (inline asm with ldrd substituted) ...<br />
#endif<br />
</pre><br />
</TD><br />
<TD><br />
[[User:Cfriedt]] 20081028<br />
Substitute with a macro reference such as<br />
<pre><br />
#ifdef HAVE_LDRD<br />
#define LDRD(a,b) \<br />
ldrd a,b<br />
#else<br />
#define LDRD(a,b) \<br />
...<br />
#endif<br />
</pre><br />
</TD><br />
</TR><br />
<TR><br />
<TH VALIGN="TOP">PLD</TH><br />
<TD>Preload Data</TD><br />
<TD>240</TD><br />
<TD><br />
[[User:Cfriedt]] 20081028<br />
Remove from inline assembly with something like<br />
<pre><br />
#ifdef HAVE_PLD<br />
... (inline asm) ...<br />
#else<br />
... (inline asm with pld removed) ...<br />
#endif<br />
</pre><br />
</TD><br />
<TD><br />
[[User:Cfriedt]] 20081028<br />
Remove or substitute with a macro reference such as<br />
<pre><br />
#ifdef HAVE_PLD<br />
#define PLD(a,b) \<br />
pld a,b<br />
#else<br />
#define PLD(a,b)<br />
#endif<br />
...<br />
PLD(r0,#0)<br />
</pre><br />
</TD><br />
</TR><br />
<TR><br />
<TH VALIGN="TOP">SMLA&lt;x&gt;&lt;y&gt;</TH><br />
<TD>Signed Multiply-Accumulate</TD><br />
<TD>291</TD><br />
<TD></TD><br />
<TD></TD><br />
</TR><br />
<TR><br />
<TH VALIGN="TOP">SMLAL&lt;x&gt;&lt;y&gt;</TH><br />
<TD>Signed Multiply Accumulate Long</TD><br />
<TD>298</TD><br />
<TD></TD><br />
<TD></TD><br />
</TR><br />
<TR><br />
<TH VALIGN="TOP">SMLAW&lt;y&gt;</TH><br />
<TD>Signed Multiply-Accumulate Word</TD><br />
<TD>302</TD><br />
<TD></TD><br />
<TD></TD><br />
</TR><br />
<TR><br />
<TH VALIGN="TOP">SMUL&lt;x&gt;&lt;y&gt;</TH><br />
<TD>Signed Multiply</TD><br />
<TD>316</TD><br />
<TD></TD><br />
<TD></TD><br />
</TR><br />
<TR><br />
<TH VALIGN="TOP">SMULW&lt;y&gt;</TH><br />
<TD>Signed Multiply Word</TD><br />
<TD>320</TD><br />
<TD></TD><br />
<TD></TD><br />
</TR><br />
<TR><br />
<TH VALIGN="TOP">QADD</TH><br />
<TD>Saturating Add</TD><br />
<TD>242</TD><br />
<TD></TD><br />
<TD></TD><br />
</TR><br />
<TR><br />
<TH VALIGN="TOP">QDADD</TH><br />
<TD>Saturating Double and Add</TD><br />
<TD>249</TD><br />
<TD></TD><br />
<TD></TD><br />
</TR><br />
<TR><br />
<TH VALIGN="TOP">QDSUB</TH><br />
<TD>Saturating Double and Subtract</TD><br />
<TD>251</TD><br />
<TD></TD><br />
<TD></TD><br />
</TR><br />
<TR><br />
<TH VALIGN="TOP">QSUB</TH><br />
<TD>Saturating Subtract</TD><br />
<TD>253</TD><br />
<TD></TD><br />
<TD></TD><br />
</TR><br />
<TR><br />
<TH VALIGN="TOP">STRD</TH><br />
<TD>Store Registers Doubleword</TD><br />
<TD>349</TD><br />
<TD><br />
[[User:Cfriedt]] 20081028<br />
Substitute different inline assembly code with something like<br />
<pre><br />
#ifdef HAVE_STRD<br />
... (inline asm) ...<br />
#else<br />
... (inline asm without strd) ...<br />
#endif<br />
</pre><br />
</TD><br />
<TD><br />
[[User:Cfriedt]] 20081028<br />
Substitute with a macro reference such as<br />
<pre><br />
#ifdef HAVE_STRD<br />
#define STRD(a,b) \<br />
strd a,b<br />
#else<br />
#define STRD(a,b) \<br />
...<br />
#endif<br />
</pre><br />
<br />
</TD><br />
</TR><br />
</TABLE><br />
}}<br />
<br />
=== Scanning for Files That Use the ARMv5TE ISA ===<br />
<br />
Using the above list of opcodes, one can scan the Android source code for ARMv4T-incompatible instruction sequences.<br />
<br />
'''Code:'''<br />
{{scroll box|height=240px|text=<br />
<pre><br />
#!/bin/sh<br />
<br />
# $1 is the android directory<br />
<br />
if [ $# -ne 1 ]; then<br />
exit -1<br />
fi<br />
<br />
cd "${1}"<br />
<br />
opcodes="blx clz ldrd pld smlabb smlabt smlatt<br />
smlal smlawb smlawt smulbb smulbt smultt smulwb<br />
smulwt qadd qdadd qdsub qsub strd"<br />
<br />
for op in ${opcodes}; do<br />
<br />
echo "* ${op} ====================================="<br />
<br />
if [ ! -e .files.${op} ]; then<br />
<br />
files="$(grep -R -i "${op} " * 2>/dev/null)"<br />
files="$(echo $files | grep -v "^Binary file" | sed -e 's/:.*//')"<br />
files="$(echo $files| grep -v "CREDIT\|README\|^\(kernel/\|.git/\)\|\(\.txt\)$" | sort -u)"<br />
<br />
echo "${files}" > .files.${op}<br />
<br />
else<br />
files="$(cat .files.${op})"<br />
fi<br />
<br />
for fil in ${files}; do<br />
lines="$(grep -n -i "${op} " ${fil} | sed -e 's/:.*//g' )"<br />
lines="$(echo $lines | sed -e 's/ /,/g')"<br />
echo "** ${fil}: lines {${lines}}"<br />
done<br />
done<br />
</pre><br />
}}<br />
<br />
=== Source Files in Android that Use the ARMv5TE ISA ===<br />
<br />
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?).<br />
<br />
{{scroll box|height=150px|text=<br />
* blx =====================================<br />
** bionic/libc/tools/gensyscalls.py: lines {168,186}<br />
** bootloader/legacy/nandwrite/init.S: lines {77}<br />
** bootloader/legacy/usbloader/init.S: lines {95}<br />
** dalvik/vm/arch/arm/CallEABI.S: lines {239}<br />
** dalvik/vm/arch/arm/CallOldABI.S: lines {145}<br />
** development/emulator/qtools/thumbdis.cpp: lines {187,265}<br />
** external/qemu/target-arm/translate.c: lines {1151,1971,2444}<br />
** external/qemu/trace.c: lines {774,1353,1358}<br />
** system/core/libpixelflinger/codeflinger/disassem.c: lines {416}<br />
* clz =====================================<br />
** development/emulator/qtools/armdis.cpp: lines {654}<br />
** external/opencore/codecs_v2/audio/aac/dec/src/pv_normalize.h: lines {67,84}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/norm_l.h: lines {137}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/normalize_amr_wb.h: lines {78,95}<br />
** external/opencore/codecs_v2/audio/mp3/dec/src/pvmp3_normalize.h: lines {67,84}<br />
** external/opencore/codecs_v2/video/avc_h264/dec/src/vlc.cpp: lines {23}<br />
** external/opencore/codecs_v2/video/m4v_h263/enc/src/vlc_encode_inline.h: lines {125,162,168,204,218}<br />
** external/qemu/target-arm/translate.c: lines {1247}<br />
** external/skia/libcorecg/Sk64.cpp: lines {340,341,343}<br />
** external/skia/libcorecg/SkMatrix.cpp: lines {500,501}<br />
** external/skia/libsgl/effects/SkColorMatrixFilter.cpp: lines {135}<br />
** external/skia/libsgl/sgl/SkBitmap.cpp: lines {945,946,947}<br />
** external/skia/libsgl/sgl/SkBitmapShader.cpp: lines {32,33,34}<br />
** external/skia/libsgl/sgl/SkGraphics.cpp: lines {429,437}<br />
* ldrd =====================================<br />
** dalvik/vm/mterp/armv5/OP_AGET_WIDE.S: lines {28}<br />
** dalvik/vm/mterp/armv5/OP_IGET_WIDE.S: lines {37}<br />
** dalvik/vm/mterp/armv5/OP_IGET_WIDE_QUICK.S: lines {10}<br />
** dalvik/vm/mterp/armv5/OP_SGET_WIDE.S: lines {17}<br />
** dalvik/vm/mterp/out/InterpAsm-armv5.S: lines {2653,7464,8318,8390}<br />
** system/core/libpixelflinger/rotate90CW_4x4_16v6.S: lines {40,41,42,43}<br />
* pld =====================================<br />
** bionic/libc/arch-arm/bionic/memcmp.S: lines {37,44,45,56,57,107,108,195,196}<br />
** bionic/libc/arch-arm/bionic/memcmp16.S: lines {37,44,45,67,68,116,117,198,199}<br />
** bionic/libc/arch-arm/bionic/memcpy.S: lines {55,56,57,145,266,293,320}<br />
** bionic/libc/arch-arm/bionic/strlen.c: lines {59,65}<br />
** bionic/libc/kernel/arch-arm/asm/arch/irqs.h: lines {162}<br />
** external/elfutils/src/Makefile: lines {243}<br />
** external/elfutils/src/Makefile.am: lines {32}<br />
** external/elfutils/src/Makefile.in: lines {243}<br />
** external/jpeg/jidctfst.S: lines {69,235,247}<br />
** external/qemu/target-arm/translate.c: lines {1149}<br />
** system/core/libpixelflinger/codeflinger/ARMAssembler.cpp: lines {368}<br />
** system/core/libpixelflinger/codeflinger/ARMAssemblerInterface.cpp: lines {104,108,117}<br />
** system/core/libpixelflinger/t32cb16blend.S: lines {111,112,134,143}<br />
* smlabb =====================================<br />
** external/jpeg/jidctfst.S: lines {110,115,155,156}<br />
** external/neven/Embedded/common/src/b_BasicEm/Math.c: lines {584,589}<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {147,166}<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {120,129}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {514,533}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {418,429}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {202}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {250}<br />
** external/opencore/codecs_v2/video/m4v_h263/enc/src/dct_inline.h: lines {119,155,167,278,326,341}<br />
** external/opencore/codecs_v2/video/m4v_h263/enc/src/fastquant_inline.h: lines {178,225,437,517}<br />
** frameworks/base/libs/audioflinger/AudioMixer.cpp: lines {405,436}<br />
* smlabt =====================================<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {184}<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {138}<br />
** external/opencore/codecs_v2/video/m4v_h263/enc/src/dct_inline.h: lines {131,143,294,310}<br />
* smlatt =====================================<br />
** external/neven/Embedded/common/src/b_BasicEm/Math.c: lines {585,590}<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {157}<br />
** frameworks/base/libs/audioflinger/AudioMixer.cpp: lines {441}<br />
* smlal =====================================<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v4.h: lines {179,223,236,257,267}<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v4_gcc.h: lines {264,341}<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {178,188,198}<br />
** 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}<br />
** 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}<br />
** 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}<br />
** 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}<br />
** 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}<br />
** 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}<br />
** 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}<br />
** 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}<br />
** external/opencore/codecs_v2/audio/mp3/dec/src/pv_mp3dec_fxd_op_arm.h: lines {148}<br />
** external/qemu/trace.c: lines {813}<br />
** frameworks/base/opengl/libagl/iterators.S: lines {66,67}<br />
** frameworks/base/opengl/libagl/matrix.h: lines {67,68,96,126,127,282,283,314,315,316}<br />
* smlawb =====================================<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {203,259}<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {166,416}<br />
** frameworks/base/libs/audioflinger/AudioResamplerSinc.cpp: lines {93,109}<br />
** frameworks/base/opengl/libagl/matrix.h: lines {163,203}<br />
* smlawt =====================================<br />
** frameworks/base/libs/audioflinger/AudioResamplerSinc.cpp: lines {114}<br />
** frameworks/base/opengl/libagl/matrix.h: lines {162,202,243,244}<br />
* smulbb =====================================<br />
** external/jpeg/jidctfst.S: lines {109,114,151,153}<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {79}<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {71,81}<br />
** 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}<br />
** 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}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_mac.h: lines {121,137}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_msu.h: lines {123,142}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_mult.h: lines {122,140}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mpy_32.h: lines {132,134,138,164,177,191}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mpy_32_16.h: lines {127,129,150,163}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mult.h: lines {121,141}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {115,139,151,163,189,190,212}<br />
** 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}<br />
** external/opencore/codecs_v2/video/m4v_h263/enc/src/fastquant_inline.h: lines {250,457,531}<br />
** external/skia/include/corecg/SkMath.h: lines {170}<br />
** frameworks/base/libs/audioflinger/AudioMixer.cpp: lines {420,462}<br />
** system/core/libpixelflinger/t32cb16blend.S: lines {39,66,74,82}<br />
* smulbt =====================================<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {115}<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {109}<br />
** system/core/libpixelflinger/codeflinger/texturing.cpp: lines {1091}<br />
** system/core/libpixelflinger/t32cb16blend.S: lines {47,55}<br />
* smultt =====================================<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {131}<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {100}<br />
** frameworks/base/libs/audioflinger/AudioMixer.cpp: lines {467}<br />
** frameworks/base/libs/audioflinger/AudioResamplerSinc.cpp: lines {73}<br />
* smulwb =====================================<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {221}<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {373}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {222}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {283}<br />
** external/opencore/codecs_v2/audio/sbc/enc/src/sbcenc_filter.h: lines {33}<br />
** frameworks/base/opengl/libagl/matrix.h: lines {161,201,242}<br />
* smulwt =====================================<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {202,240}<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {385,415}<br />
* qadd =====================================<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_gcc.h: lines {64}<br />
** external/opencore/codecs_v2/audio/aac/dec/src/fxp_mul32_arm_v5.h: lines {60}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {130,256}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {128,235}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_add.h: lines {122,137}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_mult.h: lines {123,145}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {71,102,152,176,192}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {91,115,148,202,234}<br />
** external/openssl/crypto/bn/bn_prime.c: lines {454,455}<br />
* qdadd =====================================<br />
** external/opencore/codecs_v2/audio/aac/dec/src/calc_sbr_synfilterbank.cpp: lines {116,162}<br />
** external/opencore/codecs_v2/audio/aac/dec/src/trans4m_freq_2_time_fxp.cpp: lines {472,494}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {212,356,370,385,435,449}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {200,315,321,331,368,371}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_mac.h: lines {122,142}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mpy_32.h: lines {133,136,140,172,186,201}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/mpy_32_16.h: lines {128,131,158,172}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {116}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {184}<br />
* qdsub =====================================<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {302}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {275}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_msu.h: lines {124,147}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {140}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {165}<br />
* qsub =====================================<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_gcc_v5.h: lines {167}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/basic_op_arm_v5.h: lines {162}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_nb/common/include/l_sub.h: lines {121,138}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_armv5.h: lines {88,127}<br />
** external/opencore/codecs_v2/audio/gsm_amr/amr_wb/dec/src/pvamrwbdecoder_basic_op_gcc_armv5.h: lines {70,133}<br />
* strd =====================================<br />
** dalvik/vm/mterp/armv5/OP_APUT_WIDE.S: lines {31}<br />
** dalvik/vm/mterp/armv5/OP_IPUT_WIDE.S: lines {39}<br />
** dalvik/vm/mterp/armv5/OP_IPUT_WIDE_QUICK.S: lines {14}<br />
** dalvik/vm/mterp/armv5/OP_SPUT_WIDE.S: lines {21}<br />
** dalvik/vm/mterp/out/InterpAsm-armv5.S: lines {2834,7530,8331,8542}<br />
** dalvik/vm/oo/Object.h: lines {589}<br />
** external/opencore/fileformats/avi/parser/include/pv_avifile_streamlist.h: lines {179}<br />
** external/opencore/fileformats/avi/parser/src/pv_avifile_streamlist.cpp: lines {153}<br />
** system/core/libpixelflinger/rotate90CW_4x4_16v6.S: lines {47,52,56,60}<br />
}}<br />
<br />
=== Discussion ===<br />
=== Notes ===<br />
The file <br />
<pre><br />
system/core/libpixelflinger/codeflinger/ARMAssembler.cpp<br />
</pre><br />
<br />
will need special attention. It's responsible for dynamic generation of DSP code.<br />
<br />
== Suggestions ==<br />
* [[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.<br />
<br />
= Important Links =<br />
(Please Update Me)<br />
<br />
== Documentation ==<br />
* [http://source.android.com/documentation Android Documentation]<br />
* [http://www.arm.com/documentation/ ARM Documentation], (keywords: armv4t, armv5t, armv5te, arm920t, arm926ej-s)<br />
* [http://www.arm.com/miscPDFs/9658.pdf ARM Assembly Language Programming]<br />
* [http://www.cse.unsw.edu.au/~cs3221/labs/assembler-intro.pdf An Introduction to the GNU Assembler]<br />
* [http://www.heyrick.co.uk/assembler/apcsintro.html ARM Procedure Call Standard], [http://en.wikipedia.org/wiki/Calling_convention#ARM ARM Calling Conventions]<br />
<br />
== Instruction Set References ==<br />
* [http://www.arm.com/miscPDFs/14128.pdf ARM Architecture Reference Manual], The definitive ISA documentation<br />
* [http://www.simplemachines.it/doc/QRC0001H_rvct_v2.1_arm.pdf ARM Instruction Set Quick Reference Card]<br />
* [http://infocenter.arm.com/help/topic/com.arm.doc.qrc0001l/QRC0001_UAL.pdf ARM and Thumb -2 Instruction Set Quick Reference Card]<br />
* [http://infocenter.arm.com/help/topic/com.arm.doc.dvi0025b/DVI0025.pdf ARMv4T] (See section 1.4.13)<br />
* [http://infocenter.arm.com/help/topic/com.arm.doc.dvi0014a/DVI0014A_ARM10T_PO.pdf ARMv5T] (See section 4.16)<br />
* [http://www.arm.com/pdfs/ARM-DSP.pdf ARM DSP Enhanced Instruction Set]<br />
* [http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042c/IHI0042C_aapcs.pdf Procedure Call Standard for the ARM Architecture]<br />
<br />
== Hardware Reference ==<br />
<br />
* [[Neo1973 Hardware]]<br />
* [[Neo FreeRunner GTA02 Hardware]]<br />
<br />
== Communities ==<br />
* [http://source.android.com/discuss Android Public Mailing Lists]<br />
** Specifically, [http://groups.google.com/group/android-porting android-porting]<br />
* [http://lists.openmoko.org/mailman/listinfo OpenMoko Mailing Lists]<br />
** Specifically, [http://lists.openmoko.org/mailman/listinfo/openmoko-kernel openmoko-kernel]<br />
* [http://forum.koolu.org/viewforum.php?f=10 Android on FreeRunner] at KoolU.com<br />
* [[Openmoko Local Groups]]<br />
* [[Openmoko:Community_Portal]]<br />
<br />
= See also =<br />
<br />
* [[Debug_Board]]<br />
<br />
= External Links =<br />
<br />
[[Category:Distributions]]</div>Inwardlyherohttp://openmoko.org/wiki/Manually_using_GPRSManually using GPRS2008-11-01T17:50:34Z<p>Inwardlyhero: /* Some APN names for reference */</p>
<hr />
<div>{{note| These instructions are for OM2008.8 . If you are using the FSO stack, see [[GPRS_FSO]].}}<br />
<br />
The GPRS connection is made using the PPP protocol to a server identified by an "APN" at the network operator. Once a GPRS connection is made, it is possible to [[#Sharing_the_GPRS_connection_with_a_computer|share that connection with a connected computer]], allowing that computer to access the internet through the phone!<br />
<br />
= Option 1: With GSM multiplexing and with a GUI =<br />
<br />
{{note|The following does not appear to work if you have a SIM PIN. The dialog to enter your SIM PIN never pops up and the GSM multiplexing daemon continuous loops and runs into a SIM PIN error.}}<br />
<br />
GSM multiplexing allows both a GPRS connection and a phone call to be handled at the same time. By default, [[Om 2008.8]] does not multiplex the GSM device. The [[FSO]] distribution, however, introduces GSM multiplexing with a new service and a DBus API to that service. The instructions to modify the OM2008.8 distribution to make use of GSM multiplexing and allow you to start GPRS from a GUI can be found here: http://freeyourphone.de/portal_v1/viewtopic.php?f=21&t=295 ('''Note:''' Script package seems to be no longer be available, but a later post in the thread links to a version at [http://fyp-archiv.relei.de/ http://fyp-archiv.relei.de/].)<br />
<br />
== gsm0710muxd from Angstrom Repositories ==<br />
<br />
However, using those instructions, you will encounter a few hurdles. Do not use the gsm0710muxd that is found in the OM2008.8 repository. It will not work, instead, use the one from the Angstrom Repositories (see [[Repositories]]).<br />
<br />
Alternatively, if you simply want to download all the packages, you can get them from here:<br />
<br />
http://www.angstrom-distribution.org/feeds/2008/ipk/glibc/armv4t/base/gsm0710muxd_0.9.1+r0-gitr3ff86b129640b647ccba3d86eb243d864671b039-r0_armv4t.ipk<br />
<br />
and the dependencies from here:<br />
<br />
http://www.angstrom-distribution.org/repo/?pkgname=gsm0710muxd<br />
<br />
Make sure that you install the armv4t versions of all packages.<br />
<br />
The most important step after installing gsm0710muxd is to tell QPE to use the MUX instead of the device directly. If you follow the instructions in the link above, there is a step that replaces the 89qtopia init script with one from their script package. The key difference is the addition of the following lines that tells QPE to use the MUX:<br />
<br />
in /etc/X11/Xsession.d/89qtopia<br />
<br />
identvar=$(date +%s)<br />
ptsvar=$(dbus-send --system --print-reply --type=method_call --dest=org.pyneo.muxer /org/pyneo/Muxer<br />
org.freesmartphone.GSM.MUX.AllocChannel string:$identvar | grep<br />
string | awk -F '"' '{ print $2 }')<br />
export QTOPIA_PHONE_DEVICE=$ptsvar<br />
<br />
<br />
The [[#Some APN names for reference|APN Reference]] table may come in handy when you are looking for the required network specific information for the other scripts.<br />
<br />
Once you follow through with all the instructions, you will notice that the "Services" GUI will crash. This has to do with this bug: http://docs.openmoko.org/trac/ticket/1718<br />
<br />
The fix is to change the "init()" call on line 82 of /usr/lib/python2.5/site-packages/gtk-2.0/gtk/_init_.py to "_init()" (add an underscore).<br />
<br />
You may also have to modify your /etc/resolv.conf file and add the nameserver (DNS Server) of your service provider if you have DNS resolution problems.<br />
<br />
Then, hopefully, you should be up in running with GPRS and a GUI to turn it on and off. Note that you can use the command line scripts "gprson" and "gprsoff" in place of the GUI if you need to do some debugging.<br />
<br />
= Option 2: With GSM multiplexing and without a GUI =<br />
<br />
You will have to get gsm0710muxd the same way as detailed in Option 1.<br />
<br />
'''1) In /etc/rc5.d start gsm0710muxd before gsmd:'''<br />
* S34gsm0710muxd -> ../init.d/gsm0710muxd<br />
* S35gsmd -> ../init.d/gsmd<br />
<br />
'''2) Modify S35gsmd so it can start either with or without gsm0710muxd:'''<br />
<pre><br />
...<br />
case "$1" in<br />
start)<br />
if [ "$(pidof gsm0710muxd)" ] ; then<br />
id=$(date +%s)<br />
GSM_DEV=$(dbus-send --system --print-reply --type=method_call --dest=org.pyneo.muxer /org/pyneo/Muxer org.freesmartphone.GSM.MUX.AllocChannel string:$id | grep string | cut -d \" -f 2)<br />
else<br />
[ -n "$GSM_POW" ] && ( echo "0" >$GSM_POW; sleep 1 )<br />
[ -n "$GSM_POW" ] && ( echo "1" >$GSM_POW; sleep 1 )<br />
[ -n "$GSM_RES" ] && ( echo "1" >$GSM_RES; sleep 1 )<br />
[ -n "$GSM_RES" ] && ( echo "0" >$GSM_RES; sleep 2 )<br />
fi<br />
<br />
if [ ! "$GSM_DEV" ] ; then<br />
echo "GSM_DEV was not set"<br />
exit 1<br />
fi<br />
<br />
echo -n "Starting GSM daemon: "<br />
start-stop-daemon -S -x /usr/sbin/gsmd -- gsmd -p $GSM_DEV $GSMD_OPTS -d -l /var/log/gsmd<br />
<br />
if [ $? = 0 ]; then<br />
echo "gsmd."<br />
else<br />
echo "(failed.)"<br />
fi<br />
;;<br />
stop)<br />
if [ ! "$(pidof gsm0710muxd)" ] ; then<br />
[ -n "$GSM_POW" ] && echo "0" >$GSM_POW<br />
fi<br />
<br />
echo -n "Stopping GSM daemon: "<br />
...<br />
</pre><br />
<br />
'''3) Remove the tty from /etc/ppp/peers/simyo''' (replace simyo with your provider).<br />
<br />
'''4) Use a ppp start script like this:'''<br />
<pre><br />
$ cat /usr/local/bin/ppp-start<br />
#!/bin/sh<br />
<br />
id=$(date +%s)<br />
TTY=$(dbus-send --system --print-reply --type=method_call --dest=org.pyneo.muxer /org/pyneo/Muxer org.freesmartphone.GSM.MUX.AllocChannel string:$id | grep string | cut -d \" -f 2)<br />
logger -t ppp-start "using tty $TTY"<br />
pppd $TTY call simyo<br />
</pre><br />
<br />
'''5) Use "killall pppd" to terminate the PPP connection.'''<br />
<br />
<br />
[[:Image:Gsmmuxd.trace.txt|Here]] is some strace information from gsm0710muxd, showing how the daemon responds when receiving a call when GPRS is up.<br />
<br />
[http://www.teaparty.net/technotes/openmoko-2.html#GPRS Here] is Tom's documentation on how he got it working (under 2008.08), with config files and example output.<br />
<br />
= Option 3: Without GSM multiplexing and without a GUI =<br />
<br />
[Important Note: It has been pointed out that this is only for 2007.2 and not for the 2008.8 images. If someone can confirm this and update this comment with more detail it would help out this page. Thanks]<br />
<br />
The program that implements PPP on Linux is [[pppd]], which we need to configure and run to get a connection. When that is working, we can configure pppd to wait until it's needed before it connects, and to disconnect if the connection becomes idle. Further, we can start pppd in the background during the boot process.<br />
<br />
== Configuring pppd for manual connections ==<br />
<br />
You'll need /etc/ppp/peers/gprs:<br />
<pre><br />
# Uncomment the following if you want some debug.<br />
#debug<br />
#logfile /var/volatile/log/pppd.log<br />
lock<br />
/dev/ttySAC0 115200<br />
crtscts<br />
connect /etc/ppp/gprs-connect-chat<br />
disconnect /etc/ppp/gprs-disconnect-chat<br />
hide-password<br />
usepeerdns<br />
ipcp-accept-local<br />
noauth<br />
noipdefault<br />
novj<br />
novjccomp<br />
defaultroute<br />
replacedefaultroute<br />
# Reopen the connection if it fails, pausing for a while.<br />
persist<br />
holdoff 15<br />
# Check the line every 20 seconds and presume<br />
# the peer is gone if no replay for 4 times.<br />
lcp-echo-interval 20<br />
lcp-echo-failure 4<br />
</pre><br />
<br />
Depending on the APN, you may need password authentication using CHAP or PAP. In /etc/ppp/pap-secrets you can add the following default line for "password-less" connections:<br />
<br />
<pre><br />
# client server secret IP addresses<br />
* * "" *<br />
</pre><br />
<br />
For CHAP, lines in /etc/ppp/chap-secrets are used. For PAP, the lines are in /etc/ppp/pap-secrets. The client should match the "user" option in pppd the config file (below). You can use * to mean any here, but the option user "" doesn't mean empty!<br />
<br />
For example:<br />
<br />
<pre><br />
# Secrets for authentication using CHAP<br />
# client server secret IP addresses<br />
"user" * "password" *<br />
</pre><br />
<br />
For this you need the following options in /etc/ppp/peers/gprs:<br />
<br />
<pre><br />
# username to use for authentication, should match "client" in /etc/ppp/{chap,pap}-secrets<br />
user "user"<br />
</pre><br />
<br />
== gprs-connect-chat, version 1 ==<br />
<br />
You'll also need /etc/ppp/gprs-connect-chat (needs "chmod +x"):<br />
<br />
<pre><br />
#!/bin/sh -e<br />
exec chat -v -S -s\<br />
TIMEOUT 15\<br />
"" "\K\K\K\d+++ATH"\<br />
OK-AT-OK ATZ\<br />
OK ATE1\<br />
ABORT BUSY\<br />
ABORT DELAYED\<br />
ABORT "NO ANSWER"\<br />
ABORT "NO DIALTONE"\<br />
ABORT VOICE\<br />
ABORT ERROR\<br />
ABORT RINGING\<br />
TIMEOUT 60\<br />
OK AT+CFUN=1\<br />
OK AT+COPS\<br />
OK AT+CGDCONT=1,\"IP\",\"internet\"\<br />
OK ATD*99#\<br />
CONNECT /n/d<br />
</pre><br />
<br />
<b>Note:</b> In the 3rd last line, replace the word <i>internet</i> by your provider's APN (listed below).<br />
<br />
<b>(08/18/08) Note:</b> I needed to add the command "AT+CMOD=2" (formatted as "OK AT+CMOD=2\" without the quotes) in order to get GPRS working with the above script (otherwise it would ERROR on the CFUN, COPS, or the ATD if the other two were removed). I have T-Mobile (US) with the $5.99 "tzones" addon, which works with Minimo as it supports HTTP proxy setups.<br />
<br />
== gprs-connect-chat, version 2 ==<br />
<br />
Update: On my freerunner the first AT+CFUN=1 always generated ERROR. I managed to get gprs work by using the following script from http://lists.openmoko.org/pipermail/community/2008-July/023246.html:<br />
<br />
<pre><br />
#!/bin/sh -e<br />
exec /usr/sbin/chat -v \<br />
TIMEOUT 10 \<br />
OK-AT-'' ''\<br />
ABORT BUSY\<br />
ABORT DELAYED\<br />
ABORT "NO ANSWER"\<br />
ABORT "NO DIALTONE"\<br />
ABORT VOICE\<br />
ABORT ERROR\<br />
ABORT RINGING\<br />
TIMEOUT 30 \<br />
'' ATZ\<br />
OK ATE1\<br />
OK AT+CFUN=1\<br />
ERROR AT+CPIN=\"XXXX\"\ << USE YOUR OWN<br />
OK AT+COPS\<br />
OK AT+CGDCONT=1,\"IP\",\"internet\"\<br />
OK 'ATDT*99***1#'\<br />
CONNECT ''<br />
</pre><br />
<br />
The error seems to vary a bit, sometimes it's before AT+COPS, sometimes as above. I have two versions of the gprs-connect-chat, which I vary between depending on which is needed. Or is there a way to specify two acceptable answers like {OK,ERROR}?<br />
<br />
You will need to adjust the APN name "internet" in at+cgdcont line and possibly the phone number in the ATD line to match what your network operator provides. See below in the table "Some APN names for reference" for the right settings for your operator.<br />
<br />
== gprs-disconnect-chat ==<br />
<br />
Also good to have is /etc/ppp/gprs-disconnect-chat (needs "chmod +x"):<br />
<br />
<pre><br />
#!/bin/sh -e<br />
/usr/sbin/chat -v\<br />
ABORT OK\<br />
ABORT BUSY\<br />
ABORT DELAYED\<br />
ABORT "NO ANSWER"\<br />
ABORT "NO CARRIER"\<br />
ABORT "NO DIALTONE"\<br />
ABORT VOICE\<br />
ABORT ERROR\<br />
ABORT RINGING\<br />
TIMEOUT 12\<br />
"" "\K\K\K\d+++ATH"\<br />
"NO CARRIER-AT-OK" "\c"<br />
</pre><br />
<br />
== Starting PPP connection ==<br />
<br />
The following script can be used to start the ppp connection. First it stops gsmd because gsmd may put the phone in a unknown state. It then turns on the power to the phone, modifies the ownership, and then creates a tty connection. Finally it starts [[pppd]] with the gprs settings.<br />
<br />
<pre><br />
/etc/init.d/gsmd stop<br />
echo "1" > /sys/bus/platform/devices/neo1973-pm-gsm.0/power_on<br />
chown uucp.uucp /dev/ttySAC0<br />
stty -F /dev/ttySAC0 crtscts<br />
pppd call gprs<br />
</pre><br />
<br />
If you are having problems connecting ensure you have a good GSM signal and replace the last line with the below line. This will allow you to see the details of the connection on the console.<br />
<br />
<pre><br />
pppd debug nodetach call gprs<br />
</pre><br />
<br />
The config above will establish a persistant link over gprs. The battery will run low in less than an hour. See an example for an on-demand config below.<br />
<br />
=== Resolve.conf issues ===<br />
<br />
The latest build seems to have solved the following issue, it should be automatically updated by pppd.<br />
<br />
If you expeience DNS issues after connecting to DNS you may need a proper /etc/resolv.conf:<br />
<br />
<pre><br />
ln -sf /var/run/resolv.conf /etc<br />
</pre><br />
<br />
If needed put your nameserver for usb-net into /var/run/resolv.conf, not in /etc.<br />
<br />
The image does not set a correct resolv.conf. i do so with an<br />
<br />
<pre><br />
echo nameserver 192.168.0.201 > /var/run/resolv.conf<br />
</pre><br />
<br />
in the right place. because a post-up in /etc/network/interfaces is not supported i do that in /etc/network/if-up.d/08setupdns<br />
<br />
another problem is pppd's /etc/ppp/ip-down.d/92removedns which does not properly remove the link when shuting down ppp. my fix is this script:<br />
<br />
<pre><br />
#!/bin/sh<br />
ACTUALCONF=/var/run/resolv.conf<br />
PPPCONF=/var/run/ppp/resolv.conf<br />
if [ -f $PPPCONF ] ; then<br />
if [ -f $ACTUALCONF ] ; then<br />
if [ ! -h $ACTUALCONF -o ! "`readlink $ACTUALCONF 2>&1`" = "$PPPCONF" ] ; then<br />
mv $ACTUALCONF $ACTUALCONF.ppporig<br />
fi<br />
fi<br />
<br />
ln -sf $PPPCONF $ACTUALCONF<br />
fi<br />
</pre><br />
<br />
<br />
<br />
=== Some APN names for reference ===<br />
<br />
{| border="1"<br />
! Country<br />
! Carrier<br />
! Plan<br />
! APN/Phone<br />
! user/password if required<br />
! Working pppd scripts<br />
|-<br />
| Australia || Virgin || Any || VirginInternet || ||<br />
|-<br />
| Australia || Vodafone || Any || vfinternet.au || ||<br />
|-<br />
| Austria|| Orange/One|| Any || web.one.at || web/web || works with gsm0710d under om2008.9: [http://freeyourphone.de/portal_v1/viewtopic.php?f=21&t=295 howto] - complete /etc/ppp/ directory with settings can be found here: [http://www.true-binary.com/wp-content/uploads/2008/11/orange_ppp.tar.gz orange_ppp.tar.gz]<br />
|-<br />
| Canada || Fido || Any, behind NAT || internet.fido.ca || fido/fido || use pap authetication<br />
proxy address 205.151.011.011:8080<br />
<br />
mdbus -s org.freesmartphone.frameworkd /org/freesmartphone/GSM/Device<br />
org.freesmartphone.GSM.PDP.ActivateContext internet.fido.ca fido<br />
fido<br />
|-<br />
| Canada || Rogers || Any, behind NAT || internet.com || wapuser1/wap || nameserver 207.181.101.4<br />
|-<br />
| Canada || Rogers || $7 unlimited browsing || goam.com || wapuser1/wap || Must use a proxy server 10.128.1.69:80 (or 172.25.0.107:80 or 208.200.67.150:8080)<br />
|-<br />
| Czech Republic || Vodafone || any postpaid || internet || must be empty || [[GPRS_FSO|Works with FSO]] Behind NAT.<br />
|-<br />
| Czech Republic || Vodafone || prepaid || ointernet || must be empty || [[GPRS_FSO|Works with FSO]] Behind NAT.<br />
|-<br />
| Czech Republic || 02 || Unlimited data plan || internet || must be empty || [[http://wiki.openmoko.org/index.php?title=Manually_using_GPRS&action=submit#Option_3:_Without_GSM_multiplexing_and_without_a_GUI Works with OM2008.9]].<br />
|-<br />
<br />
| Denmark || Telmore || || wap || must be empty ||<br />
|-<br />
| Denmark || Unotel || || internet || must be empty || Note: APN not tested<br />
|-<br />
| Estonia || Elisa || Any, behind NAT || internet || ||<br />
|-<br />
| Estonia || EMT || Any, behind NAT || internet.emt.ee || ||<br />
|-<br />
| Fiji || Digicel || Any || wap.digicelpacific.com || || nameserver 10.150.123.41 10.150.102.240 Must use a proxy server 10.150.122.12:8080<br />
|-<br />
| Finland || Saunalahti || Any || internet.saunalahti || ||<br />
|-<br />
| Finland || Sonera || Any, behind NAT || internet || ||<br />
|-<br />
| Finland || Sonera || Any, public IP || prointernet || ||<br />
|-<br />
| France || SFR || 10.x.x.x? || websfr || || under tests<br />
|-<br />
| France || SFR || 10.x.x.x? || wapsfr<sup>[1]</sup>|| || under tests<br />
|-<br />
| France || Orange || ??? || orange.fr || || under tests<br />
|-<br />
| France || Bouyges Telecom || Web & Mail || mmsbouygtel.com || || Work great under FSO. Just follow instructions at http://wiki.openmoko.org/wiki/GPRS_FSO. Proxy: 62.201.129.225:8080. For emails, only ports 25 (smtp) and 110 (pop) are allowed. (They use a transparent proxy ...)<br />
|-<br />
| Germany || E-Plus || BASE (and others?) || internet.eplus.de || eplus gprs || [[Base pppd scripts]]<br />
|-<br />
| Germany || E-Plus || Simyo || internet.eplus.de || simyo simyo || [[simyo pppd scripts]]<br />
|-<br />
| Germany || T-Mobile || || internet.t-mobile || ||<br />
|-<br />
| Germany || Vodafone || Any, behind NAT || web.vodafone.de || ||<br />
|-<br />
| Hungary || T-Mobile || Any || internet / *99***1# || must be empty || must disable chap auth: refuse-chap, refuse-mschap, refuse-mschap-v2<br />
|-<br />
| India || AirTel || MobileOffice || airtelgprs.com || ||<br />
|-<br />
| Ireland || Vodafone || || isp.vodafone.ie || vodafone/vodafone ||<br />
|-<br />
| Italy || Wind || Superinternet, public IP || internet.wind / *99# || wind/wind (any string) || [[Wind pppd scripts]]<br />
|-<br />
| Netherlands || Vodafone || Any || live.vodafone.com / *99***1#|| || [[Vodafone pppd scripts]]<br />
|-<br />
| New Zealand || Vodafone || Any || live.vodafone.com / *99***2#|| ||<br />
|-<br />
| Norway || Netcom || Any || internet.netcom.no || ||<br />
|-<br />
| Norway || OneCall || Any || internet || ||<br />
|-<br />
| Norway || Telenor || Any || telenor || ||<br />
|-<br />
| Russia || Megafon || Any || internet || ||<br />
|-<br />
| Spain || Yoigo || Any || internet / *99***1 || must be empty || [[Yoigo pppd scripts]]<br />
|-<br />
| Spain || Simyo || Any || gprs-service.com / *99# || ||<br />
|-<br />
| Sweden || Parlino || || internet.parlino.se || || [[GPRS_FSO|Works with FSO]]<br />
|-<br />
| Sweden || Telia || || online.telia.se || || [[GPRS_FSO|Works with FSO]]<br />
|-<br />
| Switzerland || Sunrise || || internet || ||<br />
|-<br />
| Switzerland || Sunrise || MMS || mms.sunrise.ch || ||<br />
|-<br />
| Switzerland || Swisscom || e.g. Natel Basic Liberty, behind NAT || gprs.swisscom.ch || ||<br />
|-<br />
| UK || T-Mobile|| || general.t-mobile.uk || ||<br />
|-<br />
| UK || Virgin || || goto.virginmobile.uk || user ||<br />
|-<br />
| UK || [http://www.filesaveas.com/gprs.html other providers] || || || ||<br />
|-<br />
| USA || AT&T || Unlimited data plan (attached to pay-as-you-go voice plan) || wap.cingular / *99***1# || WAP@CINGULARGPRS.COM/CINGULAR1 ||<br />
|-<br />
| USA || Cincinnati Bell Wireless || || wap.gocbw.com || cbw ||<br />
|-<br />
| USA || Cingular (AT&T) || Less than full internet || wap.cingular / may require *99***1# || ||<br />
|-<br />
| USA || T-mobile || Anything less than full internet || wap.voicestream.com || || Need to set proxy to 216.155.165.50 T-Mobile docs say "216.155.165.050". 050 octal = 40 decimal and will *not* work. I think port is 8080 or 9100. No luck w/ pppd scripts. GPRS_FSO directions work under FSO though.<br />
|-<br />
| USA || T-mobile || Regular internet plan || internet2.voicestream.com || || [[T-Mobile pppd scripts]]<br />
|-<br />
| USA || T-mobile || "VPN" internet plan || internet3.voicestream.com || ||<br />
|-<br />
| Venezuela || Digitel || Pre- y post-pago || gprsweb.digitel.ve || ||<br />
|-<br />
|}<br />
<br />
[1] connected through a WAP proxy (slower, but the only way to access Vodafone live! and SFR portal)<br />
<br />
[2] Unless stated otherwise the phone number to call is "*99#"<br />
<br />
Also see Ross Barkman's page for a detailed list of more [http://www.taniwha.org.uk/gprs.html global GPRS providers APN details]<br />
<br />
== Starting pppd automatically ==<br />
<br />
Once you have finished debugging your gprs-connect-chat and gprs options files, you may wish to automatically connect whenever needed and hang up when finished. Make sure you understand the impact of this change to your carrier plan billing. This is not recommended unless you have a large-use or unlimited data plan. These scripts do NOT prompt you before connecting.<br />
<br />
=== On-demand connection settings ===<br />
<br />
Additional settings are needed if you want the actual connection to be up only while there is traffic. In the 'gprs' file above, insert the following, making sure 'nodetach' is commented out. If 'nodetach' is on, the boot process will stop when it starts pppd. Also remove the option 'persist' mentioned above.<br />
<br />
<pre><br />
<br />
# Wait until needed before connecting<br />
demand<br />
<br />
# Disconnect if idle for given amount of seconds<br />
idle 20<br />
<br />
</pre><br />
<br />
=== Start on boot (method 1) ===<br />
<br />
Add the following definition to /etc/network/interfaces:<br />
<pre><br />
auto ppp0<br />
iface ppp0 inet ppp<br />
provider gprs<br />
</pre><br />
<br />
That should be it. Now you can use 'ifup ppp0' and 'ifdown ppp0' manually too.<br />
<br />
=== Start on boot (method 2) ===<br />
<br />
Create the following file as /etc/ppp/ppp_on_boot (needs chmod +x). The /etc/init.d/ppp script will call it to set up the daemon.<br />
<pre><br />
#!/bin/sh<br />
#<br />
# Rename this file to ppp_on_boot and pppd will be fired up as<br />
# soon as the system comes up, connecting to `provider'.<br />
#<br />
# If you also make this file executable, and replace the first line<br />
# with just "#!/bin/sh", the commands below will be executed instead.<br />
#<br />
<br />
# The location of the ppp daemon itself (shouldn't need to be changed)<br />
PPPD=/usr/sbin/pppd<br />
<br />
# The default provider to connect to<br />
$PPPD call gprs<br />
<br />
# Additional connections, which would just use settings from<br />
# /etc/ppp/options.<tty><br />
#$PPPD ttyS0<br />
#$PPPD ttyS1<br />
#$PPPD ttyS2<br />
#$PPPD ttyS3<br />
</pre><br />
<br />
<br />
Finally, you need to add the /etc/init.d/ppp script to the init process by creating symbolic links from the appropriate directories. I chose the following:<br />
<br />
<pre><br />
/etc/rc0.d/K25ppp<br />
/etc/rc1.d/K45ppp<br />
/etc/rc2.d/S45ppp<br />
/etc/rc3.d/S45ppp<br />
/etc/rc4.d/S45ppp<br />
/etc/rc5.d/S45ppp<br />
/etc/rc6.d/K25ppp<br />
</pre><br />
<br />
= Sharing the GPRS connection with a computer =<br />
<br />
See [[Tethering]]<br />
<br />
== See also ==<br />
* [[pppd]]<br />
* [[Manually using GSM]]<br />
* [[Manually using Bluetooth]]<br />
* [[GPRS FSO]]<br />
{{Languages|Manually_using_GPRS}}<br />
<br />
[[Category:Application Developer]]<br />
[[Category:Networking]]<br />
[[Category:GSM]]</div>Inwardlyherohttp://openmoko.org/wiki/Manually_using_GPRSManually using GPRS2008-10-23T08:46:40Z<p>Inwardlyhero: /* Some APN names for reference */</p>
<hr />
<div>{{note| These instructions are for OM2008.8 . If you are using the FSO stack, see [[GPRS_FSO]].}}<br />
<br />
The GPRS connection is made using the PPP protocol to a server identified by an "APN" at the network operator. Once a GPRS connection is made, it is possible to [[#Sharing_the_GPRS_connection_with_a_computer|share that connection with a connected computer]], allowing that computer to access the internet through the phone!<br />
<br />
= Option 1: With GSM multiplexing and with a GUI =<br />
<br />
{{note|The following does not appear to work if you have a SIM PIN. The dialog to enter your SIM PIN never pops up and the GSM multiplexing daemon continuous loops and runs into a SIM PIN error.}}<br />
<br />
GSM multiplexing allows both a GPRS connection and a phone call to be handled at the same time. By default, [[Om 2008.8]] does not multiplex the GSM device. The [[FSO]] distribution, however, introduces GSM multiplexing with a new service and a DBus API to that service. The instructions to modify the OM2008.8 distribution to make use of GSM multiplexing and allow you to start GPRS from a GUI can be found here: http://freeyourphone.de/portal_v1/viewtopic.php?f=21&t=295 ('''Note:''' Script package seems to be no longer be available, but a later post in the thread links to a version at [http://fyp-archiv.relei.de/ http://fyp-archiv.relei.de/].)<br />
<br />
== gsm0710muxd from Angstrom Repositories ==<br />
<br />
However, using those instructions, you will encounter a few hurdles. Do not use the gsm0710muxd that is found in the OM2008.8 repository. It will not work, instead, use the one from the Angstrom Repositories (see [[Repositories]]).<br />
<br />
Alternatively, if you simply want to download all the packages, you can get them from here:<br />
<br />
http://www.angstrom-distribution.org/feeds/2008/ipk/glibc/armv4t/base/gsm0710muxd_0.9.1+r0-gitr3ff86b129640b647ccba3d86eb243d864671b039-r0_armv4t.ipk<br />
<br />
and the dependencies from here:<br />
<br />
http://www.angstrom-distribution.org/repo/?pkgname=gsm0710muxd<br />
<br />
Make sure that you install the armv4t versions of all packages.<br />
<br />
The most important step after installing gsm0710muxd is to tell QPE to use the MUX instead of the device directly. If you follow the instructions in the link above, there is a step that replaces the 89qtopia init script with one from their script package. The key difference is the addition of the following lines that tells QPE to use the MUX:<br />
<br />
in /etc/X11/Xsession.d/89qtopia<br />
<br />
identvar=$(date +%s)<br />
ptsvar=$(dbus-send --system --print-reply --type=method_call --dest=org.pyneo.muxer /org/pyneo/Muxer<br />
org.freesmartphone.GSM.MUX.AllocChannel string:$identvar | grep<br />
string | awk -F '"' '{ print $2 }')<br />
export QTOPIA_PHONE_DEVICE=$ptsvar<br />
<br />
<br />
The [[#Some APN names for reference|APN Reference]] table may come in handy when you are looking for the required network specific information for the other scripts.<br />
<br />
Once you follow through with all the instructions, you will notice that the "Services" GUI will crash. This has to do with this bug: http://docs.openmoko.org/trac/ticket/1718<br />
<br />
The fix is to change the "init()" call on line 82 of /usr/lib/python2.5/site-packages/gtk-2.0/gtk/_init_.py to "_init()" (add an underscore).<br />
<br />
You may also have to modify your /etc/resolv.conf file and add the nameserver (DNS Server) of your service provider if you have DNS resolution problems.<br />
<br />
Then, hopefully, you should be up in running with GPRS and a GUI to turn it on and off. Note that you can use the command line scripts "gprson" and "gprsoff" in place of the GUI if you need to do some debugging.<br />
<br />
= Option 2: With GSM multiplexing and without a GUI =<br />
<br />
You will have to get gsm0710muxd the same way as detailed in Option 1.<br />
<br />
'''1) In /etc/rc5.d start gsm0710muxd before gsmd:'''<br />
* S34gsm0710muxd -> ../init.d/gsm0710muxd<br />
* S35gsmd -> ../init.d/gsmd<br />
<br />
'''2) Modify S35gsmd so it can start either with or without gsm0710muxd:'''<br />
<pre><br />
...<br />
case "$1" in<br />
start)<br />
if [ "$(pidof gsm0710muxd)" ] ; then<br />
id=$(date +%s)<br />
GSM_DEV=$(dbus-send --system --print-reply --type=method_call --dest=org.pyneo.muxer /org/pyneo/Muxer org.freesmartphone.GSM.MUX.AllocChannel string:$id | grep string | cut -d \" -f 2)<br />
else<br />
[ -n "$GSM_POW" ] && ( echo "0" >$GSM_POW; sleep 1 )<br />
[ -n "$GSM_POW" ] && ( echo "1" >$GSM_POW; sleep 1 )<br />
[ -n "$GSM_RES" ] && ( echo "1" >$GSM_RES; sleep 1 )<br />
[ -n "$GSM_RES" ] && ( echo "0" >$GSM_RES; sleep 2 )<br />
fi<br />
<br />
if [ ! "$GSM_DEV" ] ; then<br />
echo "GSM_DEV was not set"<br />
exit 1<br />
fi<br />
<br />
echo -n "Starting GSM daemon: "<br />
start-stop-daemon -S -x /usr/sbin/gsmd -- gsmd -p $GSM_DEV $GSMD_OPTS -d -l /var/log/gsmd<br />
<br />
if [ $? = 0 ]; then<br />
echo "gsmd."<br />
else<br />
echo "(failed.)"<br />
fi<br />
;;<br />
stop)<br />
if [ ! "$(pidof gsm0710muxd)" ] ; then<br />
[ -n "$GSM_POW" ] && echo "0" >$GSM_POW<br />
fi<br />
<br />
echo -n "Stopping GSM daemon: "<br />
...<br />
</pre><br />
<br />
'''3) Remove the tty from /etc/ppp/peers/simyo''' (replace simyo with your provider).<br />
<br />
'''4) Use a ppp start script like this:'''<br />
<pre><br />
$ cat /usr/local/bin/ppp-start<br />
#!/bin/sh<br />
<br />
id=$(date +%s)<br />
TTY=$(dbus-send --system --print-reply --type=method_call --dest=org.pyneo.muxer /org/pyneo/Muxer org.freesmartphone.GSM.MUX.AllocChannel string:$id | grep string | cut -d \" -f 2)<br />
logger -t ppp-start "using tty $TTY"<br />
pppd $TTY call simyo<br />
</pre><br />
<br />
'''5) Use "killall pppd" to terminate the PPP connection.'''<br />
<br />
<br />
[[:Image:Gsmmuxd.trace.txt|Here]] is some strace information from gsm0710muxd, showing how the daemon responds when receiving a call when GPRS is up.<br />
<br />
[http://www.teaparty.net/technotes/openmoko-2.html#GPRS Here] is Tom's documentation on how he got it working (under 2008.08), with config files and example output.<br />
<br />
= Option 3: Without GSM multiplexing and without a GUI =<br />
<br />
[Important Note: It has been pointed out that this is only for 2007.2 and not for the 2008.8 images. If someone can confirm this and update this comment with more detail it would help out this page. Thanks]<br />
<br />
The program that implements PPP on Linux is [[pppd]], which we need to configure and run to get a connection. When that is working, we can configure pppd to wait until it's needed before it connects, and to disconnect if the connection becomes idle. Further, we can start pppd in the background during the boot process.<br />
<br />
== Configuring pppd for manual connections ==<br />
<br />
You'll need /etc/ppp/peers/gprs:<br />
<pre><br />
# Uncomment the following if you want some debug.<br />
#debug<br />
#logfile /var/volatile/log/pppd.log<br />
lock<br />
/dev/ttySAC0 115200<br />
crtscts<br />
connect /etc/ppp/gprs-connect-chat<br />
disconnect /etc/ppp/gprs-disconnect-chat<br />
hide-password<br />
usepeerdns<br />
ipcp-accept-local<br />
noauth<br />
noipdefault<br />
novj<br />
novjccomp<br />
defaultroute<br />
replacedefaultroute<br />
# Reopen the connection if it fails, pausing for a while.<br />
persist<br />
holdoff 15<br />
# Check the line every 20 seconds and presume<br />
# the peer is gone if no replay for 4 times.<br />
lcp-echo-interval 20<br />
lcp-echo-failure 4<br />
</pre><br />
<br />
Depending on the APN, you may need password authentication using CHAP or PAP. In /etc/ppp/pap-secrets you can add the following default line for "password-less" connections:<br />
<br />
<pre><br />
# client server secret IP addresses<br />
* * "" *<br />
</pre><br />
<br />
For CHAP, lines in /etc/ppp/chap-secrets are used. For PAP, the lines are in /etc/ppp/pap-secrets. The client should match the "user" option in pppd the config file (below). You can use * to mean any here, but the option user "" doesn't mean empty!<br />
<br />
For example:<br />
<br />
<pre><br />
# Secrets for authentication using CHAP<br />
# client server secret IP addresses<br />
"user" * "password" *<br />
</pre><br />
<br />
For this you need the following options in /etc/ppp/peers/gprs:<br />
<br />
<pre><br />
# username to use for authentication, should match "client" in /etc/ppp/{chap,pap}-secrets<br />
user "user"<br />
</pre><br />
<br />
== gprs-connect-chat, version 1 ==<br />
<br />
You'll also need /etc/ppp/gprs-connect-chat (needs "chmod +x"):<br />
<br />
<pre><br />
#!/bin/sh -e<br />
exec chat -v -S -s\<br />
TIMEOUT 15\<br />
"" "\K\K\K\d+++ATH"\<br />
OK-AT-OK ATZ\<br />
OK ATE1\<br />
ABORT BUSY\<br />
ABORT DELAYED\<br />
ABORT "NO ANSWER"\<br />
ABORT "NO DIALTONE"\<br />
ABORT VOICE\<br />
ABORT ERROR\<br />
ABORT RINGING\<br />
TIMEOUT 60\<br />
OK AT+CFUN=1\<br />
OK AT+COPS\<br />
OK AT+CGDCONT=1,\"IP\",\"internet\"\<br />
OK ATD*99#\<br />
CONNECT /n/d<br />
</pre><br />
<br />
<b>Note:</b> In the 3rd last line, replace the word <i>internet</i> by your provider's APN (listed below).<br />
<br />
<b>(08/18/08) Note:</b> I needed to add the command "AT+CMOD=2" (formatted as "OK AT+CMOD=2\" without the quotes) in order to get GPRS working with the above script (otherwise it would ERROR on the CFUN, COPS, or the ATD if the other two were removed). I have T-Mobile (US) with the $5.99 "tzones" addon, which works with Minimo as it supports HTTP proxy setups.<br />
<br />
== gprs-connect-chat, version 2 ==<br />
<br />
Update: On my freerunner the first AT+CFUN=1 always generated ERROR. I managed to get gprs work by using the following script from http://lists.openmoko.org/pipermail/community/2008-July/023246.html:<br />
<br />
<pre><br />
#!/bin/sh -e<br />
exec /usr/sbin/chat -v \<br />
TIMEOUT 10 \<br />
OK-AT-'' ''\<br />
ABORT BUSY\<br />
ABORT DELAYED\<br />
ABORT "NO ANSWER"\<br />
ABORT "NO DIALTONE"\<br />
ABORT VOICE\<br />
ABORT ERROR\<br />
ABORT RINGING\<br />
TIMEOUT 30 \<br />
'' ATZ\<br />
OK ATE1\<br />
OK AT+CFUN=1\<br />
ERROR AT+CPIN=\"XXXX\"\ << USE YOUR OWN<br />
OK AT+COPS\<br />
OK AT+CGDCONT=1,\"IP\",\"internet\"\<br />
OK 'ATDT*99***1#'\<br />
CONNECT ''<br />
</pre><br />
<br />
The error seems to vary a bit, sometimes it's before AT+COPS, sometimes as above. I have two versions of the gprs-connect-chat, which I vary between depending on which is needed. Or is there a way to specify two acceptable answers like {OK,ERROR}?<br />
<br />
You will need to adjust the APN name "internet" in at+cgdcont line and possibly the phone number in the ATD line to match what your network operator provides. See below in the table "Some APN names for reference" for the right settings for your operator.<br />
<br />
== gprs-disconnect-chat ==<br />
<br />
Also good to have is /etc/ppp/gprs-disconnect-chat (needs "chmod +x"):<br />
<br />
<pre><br />
#!/bin/sh -e<br />
/usr/sbin/chat -v\<br />
ABORT OK\<br />
ABORT BUSY\<br />
ABORT DELAYED\<br />
ABORT "NO ANSWER"\<br />
ABORT "NO CARRIER"\<br />
ABORT "NO DIALTONE"\<br />
ABORT VOICE\<br />
ABORT ERROR\<br />
ABORT RINGING\<br />
TIMEOUT 12\<br />
"" "\K\K\K\d+++ATH"\<br />
"NO CARRIER-AT-OK" "\c"<br />
</pre><br />
<br />
== Starting PPP connection ==<br />
<br />
The following script can be used to start the ppp connection. First it stops gsmd because gsmd may put the phone in a unknown state. It then turns on the power to the phone, modifies the ownership, and then creates a tty connection. Finally it starts [[pppd]] with the gprs settings.<br />
<br />
<pre><br />
/etc/init.d/gsmd stop<br />
echo "1" > /sys/bus/platform/devices/neo1973-pm-gsm.0/power_on<br />
chown uucp.uucp /dev/ttySAC0<br />
stty -F /dev/ttySAC0 crtscts<br />
pppd call gprs<br />
</pre><br />
<br />
If you are having problems connecting ensure you have a good GSM signal and replace the last line with the below line. This will allow you to see the details of the connection on the console.<br />
<br />
<pre><br />
pppd debug nodetach call gprs<br />
</pre><br />
<br />
The config above will establish a persistant link over gprs. The battery will run low in less than an hour. See an example for an on-demand config below.<br />
<br />
=== Resolve.conf issues ===<br />
<br />
The latest build seems to have solved the following issue, it should be automatically updated by pppd.<br />
<br />
If you expeience DNS issues after connecting to DNS you may need a proper /etc/resolv.conf:<br />
<br />
<pre><br />
ln -sf /var/run/resolv.conf /etc<br />
</pre><br />
<br />
If needed put your nameserver for usb-net into /var/run/resolv.conf, not in /etc.<br />
<br />
The image does not set a correct resolv.conf. i do so with an<br />
<br />
<pre><br />
echo nameserver 192.168.0.201 > /var/run/resolv.conf<br />
</pre><br />
<br />
in the right place. because a post-up in /etc/network/interfaces is not supported i do that in /etc/network/if-up.d/08setupdns<br />
<br />
another problem is pppd's /etc/ppp/ip-down.d/92removedns which does not properly remove the link when shuting down ppp. my fix is this script:<br />
<br />
<pre><br />
#!/bin/sh<br />
ACTUALCONF=/var/run/resolv.conf<br />
PPPCONF=/var/run/ppp/resolv.conf<br />
if [ -f $PPPCONF ] ; then<br />
if [ -f $ACTUALCONF ] ; then<br />
if [ ! -h $ACTUALCONF -o ! "`readlink $ACTUALCONF 2>&1`" = "$PPPCONF" ] ; then<br />
mv $ACTUALCONF $ACTUALCONF.ppporig<br />
fi<br />
fi<br />
<br />
ln -sf $PPPCONF $ACTUALCONF<br />
fi<br />
</pre><br />
<br />
<br />
<br />
=== Some APN names for reference ===<br />
<br />
{| border="1"<br />
! Country<br />
! Carrier<br />
! Plan<br />
! APN/Phone<br />
! user/password if required<br />
! Working pppd scripts<br />
|-<br />
| Australia || Virgin || Any || VirginInternet || ||<br />
|-<br />
| Australia || Vodafone || Any || vfinternet.au || ||<br />
|-<br />
| Austria|| Orange/One|| Any || web.one.at || must be empty || under test<br />
|-<br />
| Canada || Fido || Any, behind NAT || internet.fido.ca || fido/fido || use pap authetication<br />
proxy address 205.151.011.011:8080<br />
<br />
mdbus -s org.freesmartphone.frameworkd /org/freesmartphone/GSM/Device<br />
org.freesmartphone.GSM.PDP.ActivateContext internet.fido.ca fido<br />
fido<br />
|-<br />
| Canada || Rogers || Any, behind NAT || internet.com || wapuser1/wap || nameserver 207.181.101.4<br />
|-<br />
| Canada || Rogers || $7 unlimited browsing || goam.com || wapuser1/wap || Must use a proxy server 10.128.1.69:80 (or 172.25.0.107:80 or 208.200.67.150:8080)<br />
|-<br />
| Czech Republic || Vodafone || any postpaid || internet || must be empty || [[GPRS_FSO|Works with FSO]] Behind NAT.<br />
|-<br />
| Czech Republic || Vodafone || prepaid || ointernet || must be empty || [[GPRS_FSO|Works with FSO]] Behind NAT.<br />
|-<br />
| Czech Republic || 02 || Unlimited data plan || internet || must be empty || [[http://wiki.openmoko.org/index.php?title=Manually_using_GPRS&action=submit#Option_3:_Without_GSM_multiplexing_and_without_a_GUI Works with OM2008.9]].<br />
|-<br />
<br />
| Denmark || Telmore || || wap || must be empty ||<br />
|-<br />
| Denmark || Unotel || || internet || must be empty || Note: APN not tested<br />
|-<br />
| Estonia || Elisa || Any, behind NAT || internet || ||<br />
|-<br />
| Estonia || EMT || Any, behind NAT || internet.emt.ee || ||<br />
|-<br />
| Finland || Saunalahti || Any || internet.saunalahti || ||<br />
|-<br />
| Finland || Sonera || Any, behind NAT || internet || ||<br />
|-<br />
| Finland || Sonera || Any, public IP || prointernet || ||<br />
|-<br />
| France || SFR || 10.x.x.x? || websfr || || under tests<br />
|-<br />
| France || SFR || 10.x.x.x? || wapsfr<sup>[1]</sup>|| || under tests<br />
|-<br />
| France || Orange || ??? || orange.fr || || under tests<br />
|-<br />
| France || Bouyges Telecom || Web & Mail || mmsbouygtel.com || || Work great under FSO. Just follow instructions at http://wiki.openmoko.org/wiki/GPRS_FSO. Proxy: 62.201.129.225:8080. For emails, only ports 25 (smtp) and 110 (pop) are allowed. (They use a transparent proxy ...)<br />
|-<br />
| Germany || E-Plus || BASE (and others?) || internet.eplus.de || eplus gprs || [[Base pppd scripts]]<br />
|-<br />
| Germany || E-Plus || Simyo || internet.eplus.de || simyo simyo || [[simyo pppd scripts]]<br />
|-<br />
| Germany || T-Mobile || || internet.t-mobile || ||<br />
|-<br />
| Germany || Vodafone || Any, behind NAT || web.vodafone.de || ||<br />
|-<br />
| Hungary || T-Mobile || Any || internet / *99***1# || must be empty || must disable chap auth: refuse-chap, refuse-mschap, refuse-mschap-v2<br />
|-<br />
| India || AirTel || MobileOffice || airtelgprs.com || ||<br />
|-<br />
| Italy || Wind || Superinternet, public IP || internet.wind / *99# || wind/wind (any string) || [[Wind pppd scripts]]<br />
|-<br />
| Netherlands || Vodafone || Any || live.vodafone.com / *99***1#|| || [[Vodafone pppd scripts]]<br />
|-<br />
| New Zealand || Vodafone || Any || live.vodafone.com / *99***2#|| ||<br />
|-<br />
| Norway || Netcom || Any || internet.netcom.no || ||<br />
|-<br />
| Norway || OneCall || Any || internet || ||<br />
|-<br />
| Norway || Telenor || Any || telenor || ||<br />
|-<br />
| Spain || Simyo || Any || gprs-service.com / *99# || ||<br />
|-<br />
| Sweden || Parlino || || internet.parlino.se || || [[GPRS_FSO|Works with FSO]]<br />
|-<br />
| Sweden || Telia || || online.telia.se || || [[GPRS_FSO|Works with FSO]]<br />
|-<br />
| Switzerland || Sunrise || || internet || ||<br />
|-<br />
| Switzerland || Sunrise || MMS || mms.sunrise.ch || ||<br />
|-<br />
| Switzerland || Swisscom || e.g. Natel Basic Liberty, behind NAT || gprs.swisscom.ch || ||<br />
|-<br />
| UK || T-Mobile|| || general.t-mobile.uk || ||<br />
|-<br />
| UK || Virgin || || goto.virginmobile.uk || user ||<br />
|-<br />
| UK || [http://www.filesaveas.com/gprs.html other providers] || || || ||<br />
|-<br />
| USA || AT&T || Unlimited data plan (attached to pay-as-you-go voice plan) || wap.cingular / *99***1# || WAP@CINGULARGPRS.COM/CINGULAR1 ||<br />
|-<br />
| USA || Cincinnati Bell Wireless || || wap.gocbw.com || cbw ||<br />
|-<br />
| USA || Cingular (AT&T) || Less than full internet || wap.cingular / may require *99***1# || ||<br />
|-<br />
| USA || T-mobile || Anything less than full internet || wap.voicestream.com || || Need to set proxy to 216.155.165.50 T-Mobile docs say "216.155.165.050". 050 octal = 40 decimal and will *not* work. I think port is 8080 or 9100. No luck w/ pppd scripts. GPRS_FSO directions work under FSO though.<br />
|-<br />
| USA || T-mobile || Regular internet plan || internet2.voicestream.com || || [[T-Mobile pppd scripts]]<br />
|-<br />
| USA || T-mobile || "VPN" internet plan || internet3.voicestream.com || ||<br />
|-<br />
| Venezuela || Digitel || Pre- y post-pago || gprsweb.digitel.ve || ||<br />
|-<br />
|}<br />
<br />
[1] connected through a WAP proxy (slower, but the only way to access Vodafone live! and SFR portal)<br />
<br />
[2] Unless stated otherwise the phone number to call is "*99#"<br />
<br />
Also see Ross Barkman's page for a detailed list of more [http://www.taniwha.org.uk/gprs.html global GPRS providers APN details]<br />
<br />
== Starting pppd automatically ==<br />
<br />
Once you have finished debugging your gprs-connect-chat and gprs options files, you may wish to automatically connect whenever needed and hang up when finished. Make sure you understand the impact of this change to your carrier plan billing. This is not recommended unless you have a large-use or unlimited data plan. These scripts do NOT prompt you before connecting.<br />
<br />
=== On-demand connection settings ===<br />
<br />
Additional settings are needed if you want the actual connection to be up only while there is traffic. In the 'gprs' file above, insert the following, making sure 'nodetach' is commented out. If 'nodetach' is on, the boot process will stop when it starts pppd. Also remove the option 'persist' mentioned above.<br />
<br />
<pre><br />
<br />
# Wait until needed before connecting<br />
demand<br />
<br />
# Disconnect if idle for given amount of seconds<br />
idle 20<br />
<br />
</pre><br />
<br />
=== Start on boot (method 1) ===<br />
<br />
Add the following definition to /etc/network/interfaces:<br />
<pre><br />
auto ppp0<br />
iface ppp0 inet ppp<br />
provider gprs<br />
</pre><br />
<br />
That should be it. Now you can use 'ifup ppp0' and 'ifdown ppp0' manually too.<br />
<br />
=== Start on boot (method 2) ===<br />
<br />
Create the following file as /etc/ppp/ppp_on_boot (needs chmod +x). The /etc/init.d/ppp script will call it to set up the daemon.<br />
<pre><br />
#!/bin/sh<br />
#<br />
# Rename this file to ppp_on_boot and pppd will be fired up as<br />
# soon as the system comes up, connecting to `provider'.<br />
#<br />
# If you also make this file executable, and replace the first line<br />
# with just "#!/bin/sh", the commands below will be executed instead.<br />
#<br />
<br />
# The location of the ppp daemon itself (shouldn't need to be changed)<br />
PPPD=/usr/sbin/pppd<br />
<br />
# The default provider to connect to<br />
$PPPD call gprs<br />
<br />
# Additional connections, which would just use settings from<br />
# /etc/ppp/options.<tty><br />
#$PPPD ttyS0<br />
#$PPPD ttyS1<br />
#$PPPD ttyS2<br />
#$PPPD ttyS3<br />
</pre><br />
<br />
<br />
Finally, you need to add the /etc/init.d/ppp script to the init process by creating symbolic links from the appropriate directories. I chose the following:<br />
<br />
<pre><br />
/etc/rc0.d/K25ppp<br />
/etc/rc1.d/K45ppp<br />
/etc/rc2.d/S45ppp<br />
/etc/rc3.d/S45ppp<br />
/etc/rc4.d/S45ppp<br />
/etc/rc5.d/S45ppp<br />
/etc/rc6.d/K25ppp<br />
</pre><br />
<br />
= Sharing the GPRS connection with a computer =<br />
<br />
See [[Tethering]]<br />
<br />
== See also ==<br />
* [[pppd]]<br />
* [[Manually using GSM]]<br />
* [[Manually using Bluetooth]]<br />
* [[GPRS FSO]]<br />
{{Languages|Manually_using_GPRS}}<br />
<br />
[[Category:Application Developer]]<br />
[[Category:Networking]]<br />
[[Category:GSM]]</div>Inwardlyhero