Difference between revisions of "CM-QS600: Android: Building from source code"
(New page: === This section is under construction. === Category:Android Category:CM-QS600) |
(→Flash ''boot.img'' onto eMMC) |
||
(3 intermediate revisions by one other user not shown) | |||
Line 1: | Line 1: | ||
− | == | + | = Overview = |
+ | The following outlines the procedure necessary to acquire the Android source code and build it for CM-QS600 System-on-Module / Computer-on-Module.<br/> | ||
+ | CompuLab Android package is obtained by applying CompuLab patches on top of Code Aurora Forum's Android package for APQ8064 CDP platform. | ||
+ | = Prerequisites = | ||
+ | The required steps, as described below, were tested on Ubuntu 14.04 (Trusty).<br/> | ||
+ | Install required packages, as outlined on [http://source.android.com/source/initializing.html#installing-required-packages-ubuntu-1404 AOSP web-page].<br/> | ||
+ | Install additional packages (not listed on AOSP web-page): | ||
+ | $ sudo apt-get install xz-utils make flex lib32z1 zip curl | ||
+ | Install {{filename|repo}} tool for work with multiple {{filename|git}} repositories in the context of Android: | ||
+ | $ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo | ||
+ | $ chmod a+x ~/bin/repo | ||
+ | |||
+ | = Getting Android Source Code = | ||
+ | == Deploy Code Aurora Forum base == | ||
+ | Download the code base from Code Aurora Forum (CAF): | ||
+ | |||
+ | $ mkdir ~/android | ||
+ | $ cd ~/android | ||
+ | $ repo init -u git://codeaurora.org/platform/manifest.git -b release -m '''LNX.LA.2.7-06310-8064.0.xml''' --repo-url=git://codeaurora.org/tools/repo.git --repo-branch=caf-stable | ||
+ | $ repo sync -j4 | ||
+ | $ repo forall -c "git checkout -b codeaurora" | ||
+ | |||
+ | {{Note | The last instruction maintains git branch naming convention, which is useful for clarity, but is not strictly necessary.}} | ||
+ | |||
+ | == Deploy Wireless kernel driver == | ||
+ | Clone out of tree wireless kernel driver: | ||
+ | <pre> | ||
+ | $ cd ~/android/external | ||
+ | $ git clone git://codeaurora.org/platform/external/compat-wireless.git compat-wireless | ||
+ | $ git checkout -b codeaurora LNX.LF.3.2-27500-8x10.1 | ||
+ | </pre> | ||
+ | |||
+ | == Deploy CompuLab Android package == | ||
+ | === Download software package === | ||
+ | Download CM-QS600 [http://www.compulab.co.il/products/computer-on-modules/cm-qs600/#devres Android software package] in order to access the development resources: | ||
+ | * Prebuilt Qualcomm proprietary libraries for bluetooth, audio, camera, etc. | ||
+ | * CompuLab patches on top of Android for APQ8064 including Linux kernel patches, Android device configuration files and firmware binary blobs. | ||
+ | |||
+ | Uncompress the software package to {{filename|~/tmp}} directory. | ||
+ | |||
+ | === Unpack Qualcomm proprietary prebuilt libraries === | ||
+ | Extract prebuilt Qualcomm proprietary libraries: | ||
+ | <pre> | ||
+ | $ tar -xJf ~/tmp/cm-qs600-android/development/cm-qs600-qcom-proprietary.tar.xz -C ~/android/vendor/qcom/ | ||
+ | </pre> | ||
+ | |||
+ | === Apply CompuLab patch === | ||
+ | Apply CompuLab patch with the aid of the provided utility: | ||
+ | <pre> | ||
+ | $ cd ~/android | ||
+ | $ ~/tmp/cm-qs600-android/development/compulab-patch-apply.sh ~/tmp/cm-qs600-android/development/patches | ||
+ | </pre> | ||
+ | |||
+ | |||
+ | |||
+ | = Building Android image = | ||
+ | <pre> | ||
+ | $ cd ~/android | ||
+ | $ export USE_CCACHE=1 | ||
+ | $ source build/envsetup.sh | ||
+ | $ choosecombo 1 bellatrix 3 | ||
+ | $ make -j4 BUILD_ID=CM-QS600 BUILD_NUMBER=20140901 | ||
+ | </pre> | ||
+ | |||
+ | {{note|In case Java version required by the build system is different from the system default, download and install the required JDK version, and export path to its root directory:<pre>$ export JAVA_HOME=/path/to/JDK</pre>}} | ||
+ | |||
+ | While the {{cmd|make}} instruction above builds the whole Android image, including all its partitions, it is possible to build {{filename|boot}} partition alone, which is useful for most Android hacking use cases as the {{filename|boot}} partition contains the '''kernel''' and the '''ramfs''' with most of configuration files: | ||
+ | * Bring up kernel configuration menu for adjusting the kernel configuration:<pre>$ make kernelconfig</pre> | ||
+ | * Build boot image (kernel + initramfs):<pre>$ make bootimage -j4</pre> | ||
+ | |||
+ | == Build Summary == | ||
+ | Upon successful build, the output directory ({{filename|~/android/out/target/product/bellatrix}}) contains ready to deploy OS partitions represented both as directories with appropriate files and compressed image files ready to deploy onto the eMMC: | ||
+ | {| class="wikitable" border="1" cellspacing="0" | ||
+ | ! partition<br/>name | ||
+ | ! directory | ||
+ | ! image file | ||
+ | ! file system<br/>type | ||
+ | ! access | ||
+ | ! mount point | ||
+ | ! default<br/>partition<br/>size [MB] | ||
+ | ! designation | ||
+ | ! notes | ||
+ | |- | ||
+ | | boot | ||
+ | | root | ||
+ | | boot.img | ||
+ | | style="text-align:center;" | - | ||
+ | | read only | ||
+ | | style="text-align:center;" | - | ||
+ | | style="text-align:center;" | 20 | ||
+ | | kernel, ramdisk | ||
+ | | style="text-align:center;" | - | ||
+ | |- | ||
+ | | recovery | ||
+ | | recovery | ||
+ | | recovery.img | ||
+ | | style="text-align:center;" | - | ||
+ | | read only | ||
+ | | style="text-align:center;" | - | ||
+ | | style="text-align:center;" | 20 | ||
+ | | alternative to ''boot'' for recovery and upgrade | ||
+ | | currently not in use | ||
+ | |- | ||
+ | | system | ||
+ | | system | ||
+ | | system.img | ||
+ | | style="text-align:center;" | ext4 | ||
+ | | read only | ||
+ | | /system | ||
+ | | style="text-align:center;" | 512 | ||
+ | | the entire OS:<br/> | ||
+ | Android UI, system applications | ||
+ | | style="text-align:center;" | - | ||
+ | |- | ||
+ | | cache | ||
+ | | cache | ||
+ | | cache.img | ||
+ | | style="text-align:center;" | ext4 | ||
+ | | read / write | ||
+ | | /cache | ||
+ | | style="text-align:center;" | 64 | ||
+ | | frequently accessed data cache | ||
+ | | style="text-align:center;" | - | ||
+ | |- | ||
+ | | userdata | ||
+ | | data | ||
+ | | userdata.img | ||
+ | | style="text-align:center;" | ext4 | ||
+ | | read / write | ||
+ | | /data | ||
+ | | style="text-align:center;" | 2048 | ||
+ | | user applications and content | ||
+ | | style="text-align:center;" | - | ||
+ | |- | ||
+ | |} | ||
+ | <br/> | ||
+ | |||
+ | = Deploying Android Image on Target Medium = | ||
+ | The root of Android file system is located on a RAM-disk. Physical storage device partitions, such as {{filename|system}}, {{filename|cache}}, {{filename|userdata}}, are mounted under the root. | ||
+ | These partitions mounting rules are specified in {{filename|/fstab}} file.<br/> | ||
+ | Root on a physical device or on NFS are also viable options. Those options are useful throughout development stage.<br/> | ||
+ | On CM-QS600, LK bootloader expects a valid boot partition ({{filename|boot.img}}) to be present on the eMMC. | ||
+ | In case LK cannot identify a valid boot partition, it falls back to [[Android: Fastboot setup|fastboot mode]]. | ||
+ | |||
+ | === Deploy file system on eMMC === | ||
+ | * Enter ''fastboot mode''. | ||
+ | * Flash each partition image file to the eMMC with the aid of ''fastboot'' utility: | ||
+ | <pre> | ||
+ | $ fastboot flash boot boot.img | ||
+ | $ fastboot flash system system.img | ||
+ | $ fastboot flash cache cache.img | ||
+ | $ fastboot flash userdata userdata.img | ||
+ | </pre> | ||
+ | |||
+ | {{note|More detailed description of the file system deployment on the eMMC is available on the [[CM-QS600: Android: Getting started#Installation onto eMMC | Getting started]] page.}} | ||
+ | |||
+ | === Deploy file system on SD-card === | ||
+ | ==== Prepare SD-card ==== | ||
+ | * [http://linux.die.net/man/8/gdisk GPT-partition] SD-card, creating ''system'', ''cache'', ''userdata'' partitions, and setting GPT names of the partitions appropriately. | ||
+ | * Format each partition with ''ext4'' file system. | ||
+ | * Copy {{filename|system}} partition contents, maintaining proper file permissions: | ||
+ | <pre> | ||
+ | $ export OUT=~/android/out/target/product/bellatrix | ||
+ | $ export SYSTEM=/media/user/system | ||
+ | $ cp -a ${OUT}/system/* ${SYSTEM}/. | ||
+ | $ for f in `find ${SYSTEM}`; do [ -f ${f} ] && chmod go-w ${f}; [ `echo ${f} | awk /\.so$/` ] && chmod a-x ${f}; done | ||
+ | </pre> | ||
+ | |||
+ | {{note|The {{parameter|SYSTEM}} location above is specified as it appears in Ubuntu 14.04. It may differ in other Ubuntu versions or distributions.}} | ||
+ | |||
+ | ==== Re-build ''boot.img'' with patched ''fstab'' ==== | ||
+ | * Edit {{filename|device/qcom/bellatrix/fstab.qcom}} file, in order to override default destination storage medium: | ||
+ | <pre> | ||
+ | --- HEAD.fstab.qcom 2015-09-22 11:48:27.958235845 +0300 | ||
+ | +++ fstab.qcom 2015-09-22 11:48:36.962236014 +0300 | ||
+ | @@ -9,5 +9,5 @@ | ||
+ | #boot time mount | ||
+ | -/dev/block/platform/msm_sdcc.1/by-name/system /system ext4 ro,barrier=1 wait | ||
+ | -/dev/block/platform/msm_sdcc.1/by-name/cache /cache ext4 nosuid,nodev,noatime,barrier=1 wait,check | ||
+ | -/dev/block/platform/msm_sdcc.1/by-name/userdata /data ext4 nosuid,nodev,noatime,barrier=1,noauto_da_alloc wait,check,length=1073741824,encryptable=footer | ||
+ | +/dev/block/platform/msm_sdcc.3/by-name/system /system ext4 ro,barrier=1 wait | ||
+ | +/dev/block/platform/msm_sdcc.3/by-name/cache /cache ext4 nosuid,nodev,noatime,barrier=1 wait,check | ||
+ | +/dev/block/platform/msm_sdcc.3/by-name/userdata /data ext4 nosuid,nodev,noatime,barrier=1,noauto_da_alloc wait,check,length=1073741824,encryptable=footer | ||
+ | </pre> | ||
+ | |||
+ | * Rebuild {{filename|boot.img}}: | ||
+ | <pre>$ make bootimage -j4</pre> | ||
+ | |||
+ | ==== Flash ''boot.img'' onto eMMC ==== | ||
+ | As pointed out above, ''boot.img'' has to reside on the eMMC. | ||
+ | Flash it via ''fastboot'' utility: | ||
+ | <pre> | ||
+ | $ fastboot flash boot boot.img | ||
+ | </pre> | ||
+ | |||
+ | {{Note|The same considerations are applicable to file system deployment on mSATA drive.}} | ||
+ | |||
+ | = See Also = | ||
+ | * [[CM-QS600: Android: Software package | Software package contents]] | ||
+ | * [https://www.codeaurora.org CodeAurora Forum website] | ||
+ | * [http://source.android.com/source/building.html Android|Downloading and Building] | ||
+ | * [http://source.android.com/source/developing.html Android|Developing with Repo and Git] | ||
+ | * [http://source.android.com/devices/index.html Android|Subsystems explained] | ||
+ | * [http://www.kandroid.org/online-pdk/guide/build_system.html AOSP|Android Build System] | ||
+ | * [http://blogofterje.wordpress.com/2012/01/14/optimizing-fs-on-sd-card Some thoughts about partitioning flash storage devices] | ||
[[Category:Android]] | [[Category:Android]] | ||
[[Category:CM-QS600]] | [[Category:CM-QS600]] |
Latest revision as of 13:23, 1 November 2015
Contents
Overview
The following outlines the procedure necessary to acquire the Android source code and build it for CM-QS600 System-on-Module / Computer-on-Module.
CompuLab Android package is obtained by applying CompuLab patches on top of Code Aurora Forum's Android package for APQ8064 CDP platform.
Prerequisites
The required steps, as described below, were tested on Ubuntu 14.04 (Trusty).
Install required packages, as outlined on AOSP web-page.
Install additional packages (not listed on AOSP web-page):
$ sudo apt-get install xz-utils make flex lib32z1 zip curl
Install repo tool for work with multiple git repositories in the context of Android:
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo $ chmod a+x ~/bin/repo
Getting Android Source Code
Deploy Code Aurora Forum base
Download the code base from Code Aurora Forum (CAF):
$ mkdir ~/android $ cd ~/android $ repo init -u git://codeaurora.org/platform/manifest.git -b release -m LNX.LA.2.7-06310-8064.0.xml --repo-url=git://codeaurora.org/tools/repo.git --repo-branch=caf-stable $ repo sync -j4 $ repo forall -c "git checkout -b codeaurora"
The last instruction maintains git branch naming convention, which is useful for clarity, but is not strictly necessary. |
Deploy Wireless kernel driver
Clone out of tree wireless kernel driver:
$ cd ~/android/external $ git clone git://codeaurora.org/platform/external/compat-wireless.git compat-wireless $ git checkout -b codeaurora LNX.LF.3.2-27500-8x10.1
Deploy CompuLab Android package
Download software package
Download CM-QS600 Android software package in order to access the development resources:
- Prebuilt Qualcomm proprietary libraries for bluetooth, audio, camera, etc.
- CompuLab patches on top of Android for APQ8064 including Linux kernel patches, Android device configuration files and firmware binary blobs.
Uncompress the software package to ~/tmp directory.
Unpack Qualcomm proprietary prebuilt libraries
Extract prebuilt Qualcomm proprietary libraries:
$ tar -xJf ~/tmp/cm-qs600-android/development/cm-qs600-qcom-proprietary.tar.xz -C ~/android/vendor/qcom/
Apply CompuLab patch
Apply CompuLab patch with the aid of the provided utility:
$ cd ~/android $ ~/tmp/cm-qs600-android/development/compulab-patch-apply.sh ~/tmp/cm-qs600-android/development/patches
Building Android image
$ cd ~/android $ export USE_CCACHE=1 $ source build/envsetup.sh $ choosecombo 1 bellatrix 3 $ make -j4 BUILD_ID=CM-QS600 BUILD_NUMBER=20140901
While the make instruction above builds the whole Android image, including all its partitions, it is possible to build boot partition alone, which is useful for most Android hacking use cases as the boot partition contains the kernel and the ramfs with most of configuration files:
- Bring up kernel configuration menu for adjusting the kernel configuration:
$ make kernelconfig
- Build boot image (kernel + initramfs):
$ make bootimage -j4
Build Summary
Upon successful build, the output directory (~/android/out/target/product/bellatrix) contains ready to deploy OS partitions represented both as directories with appropriate files and compressed image files ready to deploy onto the eMMC:
partition name |
directory | image file | file system type |
access | mount point | default partition size [MB] |
designation | notes |
---|---|---|---|---|---|---|---|---|
boot | root | boot.img | - | read only | - | 20 | kernel, ramdisk | - |
recovery | recovery | recovery.img | - | read only | - | 20 | alternative to boot for recovery and upgrade | currently not in use |
system | system | system.img | ext4 | read only | /system | 512 | the entire OS: Android UI, system applications |
- |
cache | cache | cache.img | ext4 | read / write | /cache | 64 | frequently accessed data cache | - |
userdata | data | userdata.img | ext4 | read / write | /data | 2048 | user applications and content | - |
Deploying Android Image on Target Medium
The root of Android file system is located on a RAM-disk. Physical storage device partitions, such as system, cache, userdata, are mounted under the root.
These partitions mounting rules are specified in /fstab file.
Root on a physical device or on NFS are also viable options. Those options are useful throughout development stage.
On CM-QS600, LK bootloader expects a valid boot partition (boot.img) to be present on the eMMC.
In case LK cannot identify a valid boot partition, it falls back to fastboot mode.
Deploy file system on eMMC
- Enter fastboot mode.
- Flash each partition image file to the eMMC with the aid of fastboot utility:
$ fastboot flash boot boot.img $ fastboot flash system system.img $ fastboot flash cache cache.img $ fastboot flash userdata userdata.img
More detailed description of the file system deployment on the eMMC is available on the Getting started page. |
Deploy file system on SD-card
Prepare SD-card
- GPT-partition SD-card, creating system, cache, userdata partitions, and setting GPT names of the partitions appropriately.
- Format each partition with ext4 file system.
- Copy system partition contents, maintaining proper file permissions:
$ export OUT=~/android/out/target/product/bellatrix $ export SYSTEM=/media/user/system $ cp -a ${OUT}/system/* ${SYSTEM}/. $ for f in `find ${SYSTEM}`; do [ -f ${f} ] && chmod go-w ${f}; [ `echo ${f} | awk /\.so$/` ] && chmod a-x ${f}; done
The SYSTEM location above is specified as it appears in Ubuntu 14.04. It may differ in other Ubuntu versions or distributions. |
Re-build boot.img with patched fstab
- Edit device/qcom/bellatrix/fstab.qcom file, in order to override default destination storage medium:
--- HEAD.fstab.qcom 2015-09-22 11:48:27.958235845 +0300 +++ fstab.qcom 2015-09-22 11:48:36.962236014 +0300 @@ -9,5 +9,5 @@ #boot time mount -/dev/block/platform/msm_sdcc.1/by-name/system /system ext4 ro,barrier=1 wait -/dev/block/platform/msm_sdcc.1/by-name/cache /cache ext4 nosuid,nodev,noatime,barrier=1 wait,check -/dev/block/platform/msm_sdcc.1/by-name/userdata /data ext4 nosuid,nodev,noatime,barrier=1,noauto_da_alloc wait,check,length=1073741824,encryptable=footer +/dev/block/platform/msm_sdcc.3/by-name/system /system ext4 ro,barrier=1 wait +/dev/block/platform/msm_sdcc.3/by-name/cache /cache ext4 nosuid,nodev,noatime,barrier=1 wait,check +/dev/block/platform/msm_sdcc.3/by-name/userdata /data ext4 nosuid,nodev,noatime,barrier=1,noauto_da_alloc wait,check,length=1073741824,encryptable=footer
- Rebuild boot.img:
$ make bootimage -j4
Flash boot.img onto eMMC
As pointed out above, boot.img has to reside on the eMMC. Flash it via fastboot utility:
$ fastboot flash boot boot.img
The same considerations are applicable to file system deployment on mSATA drive. |