Android for MSM Project

The Android for MSM project allows users to build an Android based platform containing additional enhancements for Qualcomm chipsets.

The platform is based upon Android Open Source Project process and tools. Documentation, original sources and an overview of Android can be found there.

A Gitweb interface is available to browse the Code Aurora source tree. The Android Open Source Project interface can be used as reference.


Code Aurora Forum Android releases are based upon the source released from the Android Open Source Project (AOSP). AOSP releases are periodically merged into the Code Aurora Forum development branch and public releases made at stable points in the cycle.

The Android Open Source Project (AOSP) makes releases from a named pastry branch (''cupcake'', ''donut'', etc). The AOSP changes are merged and a general AOSP release is made in same pastry branch. For example, the AOSP makes a release in the ''donut'' branch. After merging in AOSP changes Code Aurora Forum makes a general release from its ''donut'' branch. The Linux kernel is included as an Android project but follows a different branch naming scheme based upon released Linux kernel versions (e.g.,  android-msm-2.6.29). The same process of merging the AOSP changes and releasing is followed by the kernel. The Repo manifest specifies which kernel branch or commit is used with a given release.

Code Aurora Forum creates stabilization branches based upon the general release branch. A stabilization branch is created in order to stabilize and fix chipset specific problems with the general release branch. In keeping with AOSPs pastry theme stabilization branches are named after different kinds of pastries. Multiple stabilization branches may exist for each AOSP pastry release branch. ''carrot.cupcake'' and ''coconut.cupcake'' are examples of stabilization branches based upon the AOSP ''cupcake'' release branch.

Both Git tags and Repo manifests are created in the general release branch (''cupcake'', ''donut'', etc) and in stabilization branches (''carrot.cupcake'', ''coconut.cupcake'', etc) when a tested and stable version of Android is released by the Code Aurora Forum. Generally speaking the tag and manifest are named after the corresponding modem Build ID or release. The tags and manifests ensure that the Android source tree can be obtained from the Code Aurora Forum and used with a specific Qualcomm modem build or release.

For reference and comparison purposes an unmodified copy of all AOSP branches is available from both the Code Aurora Gitweb interface and from Git/Repo in Code Aurora downloads. These unmodified AOSP source branches are identified by the ''aosp/'' prefix. The original unmodified AOSP donut branch is called ''aosp/donut'' and the corresponding AOSP kernel branch ''aosp/android-msm-2.6.29''. Each project within Android contains ''aosp'' branches. See the bionic and Linux kernel msm projects as examples.

Branch Releases

Releases are available for download using Repo and Git. A specific release is downloaded by choosing both a branch and manifest from the Releases table.

$ repo init -u git:// -b [branch] -m [manifest] --repo-url=git:// --repo-branch=caf-stable
$ repo sync
Note: Use the below commands for syncing the code for all the releases from August 8th, 2012 onwards.
$ repo init -u git:// -b release -m [manifest] --repo-url=git:// --repo-branch=caf-stable
$ repo sync
Branch Targets
release  msm7627a, msm7630, msm8660, msm8660_csfb, msm8960, apq8064, mpq8064, msm8930, msm8625, msm8974, apq8084
jb  msm7627a, msm7630, msm8660, msm8660_csfb, msm8960, apq8064, mpq8064, msm8930, msm8625
jb_rel  apq8064
ics  msm7627a, msm7630, msm8660, msm8660_csfb, msm8960, apq8064, mpq8064, msm8930
ics_rb  msm8960
ics_rb1  apq8064
ics_rb2  msm8625
ics_rb3  msm8930
ics_rb4  msm8625
ics_rb6  msm8960
ics_rb7  mpq8064
ics_chocolate  msm7627a, msm7630, msm8660, msm8660_csfb, msm8960
ics_chocolate_rb1  msm8960
ics_chocolate_rb4  msm7627a
ics_chocolate_rb7  msm8660_surf, msm7627a, msm7630_surf, msm7630_fusion
ics_choco_cs  msm8960
ics_es3  msm8960
ics_strawberry  apq8064, msm8625, msm8960
ics_strawberry_rb2  msm8625
ics_strawberry_rb3  msm8930
ics_strawberry_rb5  msm7627a
gingerbread  msm7627, msm7627a, msm7630, msm8660, msm8660_csfb, msm8960
gingerbread_chocolate  msm7627a
gingerbread_house  msm7627, msm7630, msm8660
gingerbread_rel  msm7627, msm7630, msm8660
froyo  msm7627, msm7630, msm7630_fusion, msm8660, qsd8650, qsd8650a_st1x, msm7627_7x
froyo_almond   msm7627, qsd8650
froyo_pumpkin   msm8660, msm7630_fusion, qsd8650a_st1x, msm7630
froyo-release   msm8660
froyo-release-2   msm8660
froyo_squash   qsd8650a_st1x
froyo_strawberry   msm7630
eclair  msm7627, msm7630, msm7630_fusion, msm8660, qsd8650, qsd8650a_st1x
eclair_caramel  msm7630
eclair_chocolate  msm7627, qsd8650
eclair_coffee  msm7627
eclair_rum  msm7627
eclair_strawberry  qsd8650
eclair_vanilla  msm7630
donut  msm7625, msm7627, msm7630, qsd8650
donut_cinnamon  msm7627
donut_cream  msm7627
donut_frosted  msm7627
donut_glazed  msm7627, qsd8650
donut_honey  qsd8650
donut_lemon  qsd8650
donut_strawberry  qsd8650
banana.cupcake  msm7627
blueberry.cupcake  msm7x00
carrot.cupcake  msm7x00
chocolate.cupcake  msm7x00
coconut.cupcake  msm7x00
mango.cupcake  msm7x00 
mocha.cupcake  qsd8650

Patch Releases

Fixes are sometimes available in patch format only.

A listing of Patch Releases

Downloading and Building from Source

Follow the Repo instructions to download and install Repo.

Download the Android source tree by specifying the branch and manifest for a specific Code Aurora release. In this example the download the carrot.cupcake branch using manifest ''M7201JSDCBALYA6380.xml''

$ repo init -u git:// -b carrot.cupcake -m M7201JSDCBALYA6380.xml --repo-url=git:// --repo-branch=caf-stable
$ repo sync

Build the source tree

$ source build/
$ choosecombo 1 1 msm7201a_surf eng
$ make -j4

Running choosecombo with no arguments will prompt for Android build options and target.

Detailed Build Instructions

Make sure that the environment has been completely and correctly as described by the Android Open Source Project instructions before attempting to build. If you get build errors about clearsilver.jni, verify the Java version and path. (javac version 1.5.0_16 is verfied as working).

Once the environment has been configured build Android as follows

$ cd <android-source-tree>
$ source build/

The script is responsible for setting Bash environment variables required by the Android build system.

Now use choosecombo to set the desired build by specifying Build, Type, Product and Variant.

$ choosecombo

Choosecombo is interactive or it can take arguments on the commandline

$ choosecombo 1 1 msm7201a_surf eng

Start the build

$ make -j4

By default, the build system uses the tip of kernel source from <platform>/kernel directory, including any modifications you've made.

If you want to compile the kernel with a specific configuration file other than the one defined in vendor/qcom/<product>/ (e.g. msm7201a_defconfig) pass the KERNEL_DEFCONFIG flag on the Make command line.

$ make -j4 KERNEL_DEFCONFIG=your_defconfig 

The kernel objects, vmlinux and zImage will be at <platform>/out/target/product/msm7201a_surf/obj/KERNEL_OBJ and its subdirectories.

You can override the TARGET_PREBUILT_KERNEL flag with your own kernel image to build android with your kernel, as follows:

$ make -j4 TARGET_PREBUILT_KERNEL="<your_kernel_tree>/arch/arm/boot/zImage"

You can also build ''tiny android'' which is an Android build with a limited user-space environment useful for kernel development and verification. The ''tiny android'' build will not boot into the full UI. It will stay at one of the loading screens. ADB will be active, allowing you to run unit tests, etc. The build time for ''tiny android'' is significantly less than a full Android build.

$ BUILD_TINY_ANDROID=true make -j4

You can also tell the build system to echo to stdout the full commands and parameters that it would use in building each file without actually building the file. This is useful to see all the compiler options provided

$ make --just-print


What changed between releases?

Each release has its own Repo manifest and Git tag. Git's ''diff'' command can be used to view the commit history and source changes between releases.

For example to see what changed between the M7201JSDCBALYA63752001 and M7201JSDCBALYA63752003 release tags on the coconut.cupcake branch

$ repo init -u git:// -b coconut.cupcake -m M7201JSDCBALYA63752003.xml
$ repo sync
$ repo forall -p -c 'git diff M7201JSDCBALYA63752001..M7201JSDCBALYA63752003'
How is a patch of the changes between two release tags, branches or commits generated?

The Git ''diff'' command can generate patches suitable for use with the Unix ''diff'' and ''patch'' utilities. Tags, branches and commit IDs can be used interchangeably.

For example to generate a patch of the changes made across all Android projects between the M7201JSDCBALYA63752001 and M7201JSDCBALYA63752003 release tags

$ repo init -u git:// -b coconut.cupcake -m M7201JSDCBALYA63752003.xml
$ repo sync
$ repo forall -c 'git diff -p M7201JSDCBALYA63752001..M7201JSDCBALYA63752003' > release-delta.patch
What are the ''aosp/*'' branches?

Branches prefixed with ''aosp/'' are the upstream sources from the original Android Open Source Project releases. For example, ''aosp/donut'' is a copy of the ''donut'' branch found on

What is the ''m/*'' branch?

Repo uses a remote tracking branch to track the original upstream branch the workspace was initialised against. Running '''git branch''' with the '''-a''' or '''-r''' options will display Repo's ''m/*'' branch. This branch is created when a '''repo init''' is performed and used by Repo to synchronise with the upstream source. The name of the branch corresponds to the branch name Repo was initialized with, e.g. '''repo init -u URL -b donut''' creates a local ''m/donut'' branch in your workspace.

How is a patch of all Code Aurora changes to the AOSP (Android Open Source Project) release generated?

The ''aosp/cupcake'' branch is a unmodified copy of the cupcake branch from the AOSP release. A diff of the ''aosp/cupcake'' branch with the ''cupcake'' branch will show the changes added to the base AOSP (Android Open Source Project) release. The Linux kernel uses a different branch naming convention and must be handled separately from other AOSP projects.  

$ repo init -u git:// -b coconut.cupcake -m M7201JSDCBALYA63752003.xml
$ repo sync
$ repo forall -c 'git diff -p caf/aosp/cupcake..caf/coconut.cupcake' > aosp-delta.patch
$ repo forall -c 'git diff -p caf/aosp/android-msm-2.6.27..caf/coconut.cupcake' >> aosp-delta.patch
What files, branches or tags changed and and how to output the commit text?

In this example generate a listing of changes between the AOSP cupcake release branch and the Code Aurora carrot.cupcake release branch 

$ repo init -u git:// -b coconut.cupcake -m M7201JSDCBALYA63752003.xml
$ repo sync
$ repo forall -c 'git log stat caf/aosp/cupcake..caf/coconut.cupcake' > aosp-delta.log

Tags, branches and commit IDs can be used interchangeably.


The source code available for download from Code Aurora may be covered by one or more different licenses.  The files in Code Aurora may contain changes and additions on top of the code from the original source.  These changes and additions are covered under the same license as the original source.  In many cases, the license is explicitly listed at the beginning of the file.  A list of licenses is included for reference purposes only.

Created by ninja on 2010/09/02 11:35
This wiki is licensed under a Creative Commons 2.0 license
XWiki Enterprise 7.4.3 - Documentation