Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision | |||
en:androidbuildhowto [2014/07/01 12:28] ruppi [ODROID-A4] |
en:androidbuildhowto [2014/07/01 12:28] (current) ruppi [ODROID-PC] |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ====== ODROID-A4, A, PC, X, X2, U2, U3 and Q, Q2 Android(Ice Cream Sandwich & JellyBean) System ====== | ||
+ | ===== Preface ===== | ||
+ | This page will explain how to compile Android for ODROID-A4 & A, PC, X, X2, Q, Q2, U2, U3. Current version is android 4.x based on Samsung rtm1.0 | ||
+ | |||
+ | ===== Build environment ===== | ||
+ | |||
+ | Tested with Ubuntu 10.04/10.10/11.04 64bit version. ubuntu 11.10 in particular is troublesome because it uses gcc-4.6 by default and has no sun-java6-jdk in its repositories. heres's what you'll need to do to get AOSP 4.x to compile on ubuntu 11.10. | ||
+ | |||
+ | ===== Source code download ===== | ||
+ | Source code is stored in bundled micro SD card or you can get the latest source from here. | ||
+ | http://com.odroid.com/sigong/nf_file_board/nfile_board.php | ||
+ | |||
+ | Please note, | ||
+ | |||
+ | To follow below instructions, you need to update your ODROID to latest JB release. | ||
+ | |||
+ | ===== Download and Install essential packages ===== | ||
+ | Android requires the following system packages: | ||
+ | |||
+ | - flex: This lexical analyzer generator is used to read a given input file for a description of a scanner to generate. | ||
+ | - bison: This is a general-purpose parser generator. | ||
+ | - gperf: This is a perfect hash function generator. | ||
+ | - libesd0-dev: This enlightened sound daemon (dev files) is used to mix digitized audio streams for playback by a single device. | ||
+ | - libwxgtk2.6-dev: This package provides GUI components and other facilities for many different platforms. | ||
+ | - build-essential: This package contains a list of packages considered fundamental to building Debian packages. | ||
+ | - Android source code includes a hard dependency on the Java Developer Kit (JDK) 6.0 or greater. | ||
+ | |||
+ | Please refer to this link first !!! | ||
+ | http://source.android.com/source/download.html | ||
+ | |||
+ | - Install dependencies. | ||
+ | |||
+ | Compilers, parsers, file-manipulation tools, libraries, etc; this is mandatory! The list on the source.android.com Inititalizing a Build Environment page is similar, but a few of those packages donot exist in 11.10. Use these: | ||
+ | <code> | ||
+ | #sudo apt-get update | ||
+ | #sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \ | ||
+ | x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils | ||
+ | </code> | ||
+ | - Your system may need a mkimage to make a ramdisk image. | ||
+ | <code> | ||
+ | # sudo apt-get install uboot-mkimage | ||
+ | </code> | ||
+ | |||
+ | |||
+ | - Android also need Phython 2.4 or higher. But, Ubuntu has Python 2.5 in general. | ||
+ | - You must build on Ubuntu 64bit from Ice Cream. | ||
+ | <code> | ||
+ | # sudo apt-get update | ||
+ | # sudo apt-get install sun-java6-jdk | ||
+ | </code> | ||
+ | |||
+ | |||
+ | - Download Sun Java 6 JDK for Ubuntu 11.04/10.10/11.10 | ||
+ | Android 2.3+ requires Java 6 to build correctly. While OpenJDK did work for 2.3, it doesnot work for Android 4.0; you need Sun Java. Download the JDK 1.6 binary release from Sun oracle Java download site and unzip it somewhere in your system, for example: | ||
+ | |||
+ | <code> | ||
+ | #sudo mkdir -p /opt/java/64/ | ||
+ | #sudo cp jdk-6u29-linux-x64.bin /opt/java/64 | ||
+ | #sudo su - | ||
+ | #cd /opt/java/64 | ||
+ | #chmod +x jdk-6u29-linux-x64.bin | ||
+ | #./jdk-6u29-linux-x64.bin | ||
+ | #exit | ||
+ | </code> | ||
+ | Add the new Java to your shell environment $PATH so it takes precedent over other Javas you might have installed: | ||
+ | <code> | ||
+ | echo 'export PATH=/opt/java/64/jdk1.6.0_29/bin:$PATH' >> ~/.bashrc | ||
+ | </code> | ||
+ | To activate new PATH, log out and in again or type "export PATH=/opt/java/64/jdk1.6.0_29/bin:$PATH" | ||
+ | |||
+ | |||
+ | ===== Getting source code and extraction ===== | ||
+ | Android source code is stored in bundled microSD card. | ||
+ | File name of compressed source code may be different. | ||
+ | <code> | ||
+ | # mkdir mydroid | ||
+ | # cd mydroid | ||
+ | # tar xf source.tar | ||
+ | # tar zxf android.tar.gz | ||
+ | # cd android | ||
+ | </code> | ||
+ | With this process, you will have a full source code in mydroid directory. | ||
+ | |||
+ | ===== Obtain restricted files from ODROID ===== | ||
+ | There are some restricted object files which have no source code. | ||
+ | We have no right to release even the objects. | ||
+ | Those files should be extracted from ODROID device. | ||
+ | |||
+ | In the android/device/hardkernel/odroida/AndroidBoard.mk file, confidential library contents have no source code. | ||
+ | Refer to the AndroidBoard.mk file to make a list of restricted ones. | ||
+ | ==== Case 1: ADB from android-sdk ==== | ||
+ | You need to install ADB driver first and connect your ODROID to your host PC. | ||
+ | |||
+ | ===== ODROID-Q & X Exynos-4412 platform ===== | ||
+ | <code> | ||
+ | You don't need to extract any file from ODROID-Q/X. You can skip this process. | ||
+ | </code> | ||
+ | ===== ODROID-A ===== | ||
+ | <code> | ||
+ | == Extract library files == | ||
+ | # mydroid/android/device/samsung/exynos4/lib/mali_ump$ | ||
+ | # mydroid/android/device/samsung/exynos4/lib/mali_ump$ adb pull /system/lib/libMali.so . | ||
+ | # mydroid/android/device/samsung/exynos4/lib/mali_ump$ adb pull /system/lib/libUMP.so . | ||
+ | # mydroid/android/device/samsung/exynos4/lib/mali_ump$ adb pull /system/lib/libion.so . | ||
+ | # mydroid/android/device/samsung/exynos4/lib/mali_ump$ adb pull /system/lib/egl/libEGL_mali.so . | ||
+ | # mydroid/android/device/samsung/exynos4/lib/mali_ump$ adb pull /system/lib/egl/libGLESv1_CM_mali.so . | ||
+ | # mydroid/android/device/samsung/exynos4/lib/mali_ump$ adb pull /system/lib/egl/libGLESv2_mali.so . | ||
+ | |||
+ | == Change access permission == | ||
+ | # mydroid/android/device/samsung/exynos4/lib/mali_ump$ chmod -R 755 * | ||
+ | |||
+ | == Extract library files == | ||
+ | # mydroid/android/device/samsung/exynos4/libgralloc_ump$ adb pull /system/lib/hw/gralloc.odroida.so . | ||
+ | |||
+ | == Change access permission == | ||
+ | # mydroid/android/device/samsung/exynos4/libgralloc_ump$ chmod -R 755 * | ||
+ | |||
+ | == Extract library files == | ||
+ | # mydroid/android/vendor/invensense_v3$ adb pull /system/lib/hw/sensors.odroida.so . | ||
+ | # mydroid/android/vendor/invensense_v3$ adb pull /system/lib/libmpl.so . | ||
+ | # mydroid/android/vendor/invensense_v3$ adb pull /system/lib/libmlplatform.so . | ||
+ | # mydroid/android/vendor/invensense_v3$ adb pull /system/lib/libmllite.so . | ||
+ | |||
+ | == Change access permission == | ||
+ | # mydroid/android/vendor/invensense chmod -R 755 * | ||
+ | </code> | ||
+ | |||
+ | ==== ODROID-A4 ==== | ||
+ | <code> | ||
+ | == Extract library files == | ||
+ | # mydroid/android/device/samsung/exynos4/lib/mali_ump$ | ||
+ | # mydroid/android/device/samsung/exynos4/lib/mali_ump$ adb pull /system/lib/libMali.so . | ||
+ | # mydroid/android/device/samsung/exynos4/lib/mali_ump$ adb pull /system/lib/libUMP.so . | ||
+ | # mydroid/android/device/samsung/exynos4/lib/mali_ump$ adb pull /system/lib/libion.so . | ||
+ | # mydroid/android/device/samsung/exynos4/lib/mali_ump$ adb pull /system/lib/egl/libEGL_mali.so . | ||
+ | # mydroid/android/device/samsung/exynos4/lib/mali_ump$ adb pull /system/lib/egl/libGLESv1_CM_mali.so . | ||
+ | # mydroid/android/device/samsung/exynos4/lib/mali_ump$ adb pull /system/lib/egl/libGLESv2_mali.so . | ||
+ | == Change access permission == | ||
+ | # mydroid/android/device/samsung/exynos4/lib/mali_ump$ chmod -R 755 * | ||
+ | == Extract library files == | ||
+ | # mydroid/android/device/samsung/exynos4/libgralloc_ump$ adb pull /system/lib/hw/gralloc.odroida4.so . | ||
+ | == Change access permission == | ||
+ | # mydroid/android/device/samsung/exynos4/libgralloc_ump$ chmod -R 755 * | ||
+ | == Extract library files == | ||
+ | # mydroid/android/vendor/invensense$ adb pull /system/lib/hw/sensors.odroida4.so . | ||
+ | # mydroid/android/vendor/invensense$ adb pull /system/lib/libinvensense_hal.so . | ||
+ | # mydroid/android/vendor/invensense$ adb pull /system/lib/libmplmpu.so . | ||
+ | # mydroid/android/vendor/invensense$ adb pull /system/lib/libmlplatform.so . | ||
+ | # mydroid/android/vendor/invensense$ adb pull /system/lib/libmllite.so . | ||
+ | # mydroid/android/vendor/invensense$ adb pull /system/lib/libakmd.so . | ||
+ | == Change access permission == | ||
+ | # mydroid/android/vendor/invensense chmod -R 755 * | ||
+ | </code> | ||
+ | |||
+ | ==== ODROID-PC ==== | ||
+ | <code> | ||
+ | == Extract library files == | ||
+ | # mydroid/android/device/samsung/exynos4/lib/mali_ump$ | ||
+ | # mydroid/android/device/samsung/exynos4/lib/mali_ump$ adb pull /system/lib/libMali.so . | ||
+ | # mydroid/android/device/samsung/exynos4/lib/mali_ump$ adb pull /system/lib/libUMP.so . | ||
+ | # mydroid/android/device/samsung/exynos4/lib/mali_ump$ adb pull /system/lib/libion.so . | ||
+ | # mydroid/android/device/samsung/exynos4/lib/mali_ump$ adb pull /system/lib/egl/libEGL_mali.so . | ||
+ | # mydroid/android/device/samsung/exynos4/lib/mali_ump$ adb pull /system/lib/egl/libGLESv1_CM_mali.so . | ||
+ | # mydroid/android/device/samsung/exynos4/lib/mali_ump$ adb pull /system/lib/egl/libGLESv2_mali.so . | ||
+ | == Change access permission == | ||
+ | # mydroid/android/device/sec/lib/mali_ump$ chmod -R 755 * | ||
+ | == Extract library files == | ||
+ | # mydroid/android/device/samsung/exynos4/libgralloc_ump$ adb pull /system/lib/hw/gralloc.odroidpc.so . | ||
+ | == Change access permission == | ||
+ | # mydroid/android/device/samsung/exynos4/libgralloc_ump$ chmod -R 755 * | ||
+ | </code> | ||
+ | |||
+ | Turn off ODROID, and eject the T-Flash card and insert it into T-flash memory card reader. Then plug it to your host PC | ||
+ | In the linux host PC, you need to copy all the restricted files as described in Case-1. | ||
+ | |||
+ | ===== Building the code ===== | ||
+ | |||
+ | You need to install mkimage package | ||
+ | <code> | ||
+ | # sudo apt-get install uboot-mkimage | ||
+ | </code> | ||
+ | or you need to set a PATH of mkimage of uboot directory. | ||
+ | |||
+ | Optional!! If you meet compile error due to JDK version mismatching, add this items in to Synaptic package source. (sudo vi /etc/apt/sources.list) | ||
+ | <code> | ||
+ | deb http://archive.ubuntu.com/ubuntu/ jaunty multiverse | ||
+ | deb http://archive.ubuntu.com/ubuntu/ jaunty-updates multiverse | ||
+ | </code> | ||
+ | <code> | ||
+ | sudo apt-get update | ||
+ | </code> | ||
+ | |||
+ | * To build the files, command below in your working directory: | ||
+ | |||
+ | |||
+ | ==== odroid - A ==== | ||
+ | <code> | ||
+ | # cd ~/mydroid/android | ||
+ | # mydroid/android$ | ||
+ | # chmod u+x ./build_android.sh | ||
+ | # ./build_android.sh odroida | ||
+ | </code> | ||
+ | ==== odroid-A4 ==== | ||
+ | <code> | ||
+ | # cd ~/mydroid/android | ||
+ | # mydroid/android$ | ||
+ | # chmod u+x ./build_android.sh | ||
+ | # ./build_android.sh odroida4 | ||
+ | </code> | ||
+ | |||
+ | ===== odroid - PC ===== | ||
+ | <code> | ||
+ | # cd ~/mydroid/android | ||
+ | # mydroid/android$ | ||
+ | </code> | ||
+ | |||
+ | ===== odroid - X ====== | ||
+ | <code> | ||
+ | # mydroid/android$ | ||
+ | edit device/hardkernel/odroidx/BoardConfig.mk | ||
+ | BOARD_USES_EMMC = true -> Use eMMC | ||
+ | BOARD_USES_EMMC = false -> Use SD Card | ||
+ | # chmod u+x ./build_android.sh | ||
+ | # ./build_android.sh odroidx | ||
+ | </code> | ||
+ | |||
+ | ===== odroid - X2 ===== | ||
+ | <code> | ||
+ | # mydroid/android$ | ||
+ | edit device/hardkernel/odroidx2/BoardConfig.mk | ||
+ | BOARD_USES_EMMC = true -> Use eMMC | ||
+ | BOARD_USES_EMMC = false -> Use SD Card | ||
+ | # chmod u+x ./build_android.sh | ||
+ | # ./build_android.sh odroidx2 | ||
+ | </code> | ||
+ | ===== odroid - Q ===== | ||
+ | <code> | ||
+ | # cd ~/mydroid/android | ||
+ | # mydroid/android$ | ||
+ | # chmod u+x ./build_android.sh | ||
+ | # ./build_android.sh odroidq | ||
+ | </code> | ||
+ | ===== odroid - Q2 ===== | ||
+ | <code> | ||
+ | # cd ~/mydroid/android | ||
+ | # mydroid/android$ | ||
+ | # chmod u+x ./build_android.sh | ||
+ | # ./build_android.sh odroidq2 | ||
+ | </code> | ||
+ | |||
+ | ===== odroid - U2/U3 ===== | ||
+ | <code> | ||
+ | # chmod u+x ./build_android.sh | ||
+ | # ./build_android.sh odroidu | ||
+ | </code> | ||
+ | * If there is no issue, you can see below message. rootfs directory is automatically generated and all root file system of Android is located in that directory.(/mydroid/android/xxxxx-img) | ||
+ | <code> | ||
+ | ok sucess !!! | ||
+ | </code> | ||
+ | |||
+ | ===== write MBR ===== | ||
+ | In the u-boot prompt. | ||
+ | <code> | ||
+ | #fdisk -c 0 | ||
+ | </code> | ||
+ | |||
+ | ===== Format data, cache, fat partitions ===== | ||
+ | In the host PC. | ||
+ | <code> | ||
+ | #fastboot erase userdata | ||
+ | #fastboot erase cache | ||
+ | #fastboot erase fat | ||
+ | </code> | ||
+ | |||
+ | ===== Write ramdisk-uboot.img ===== | ||
+ | not any more ramdisk-boot.img. | ||
+ | intergrate into system.img. | ||
+ | |||
+ | Need to learn u-boot section of Odroid project. http://dev.odroid.com/projects/odroid-t/wiki/UbootPage UBoot_Compile_HowTo | ||
+ | In the host PC. | ||
+ | <code> | ||
+ | #fastboot flash ramdisk out/target/product/odroid[a,a4,pc,x,q]/ramdisk-uboot.img | ||
+ | </code> | ||
+ | |||
+ | ===== Write system.img ===== | ||
+ | In the host PC. | ||
+ | <code> | ||
+ | #fastboot flash system out/target/product/odroid[a,a4,pc,x,q]/system.img | ||
+ | </code> | ||
+ | |||
+ | ===== Reboot system ====== | ||
+ | In the host PC. | ||
+ | <code> | ||
+ | #fastboot reboot | ||
+ | </code> | ||
+ | |||
+ | ===== reformat 2 paritions with ext4 fs for ODROID-X , X2 , Q, Q2 & U2, U3 eMMC storage ===== | ||
+ | You can't format any system partition with EXT4 file system in the u-boot prompt due to license issue. | ||
+ | So you MUST format the system partition as below in Android prompt in ADB shell or USB-UART console. | ||
+ | Please note the eMMC can't be connected to your Host PC and we need this process. | ||
+ | If you use SD-card for OS, just format the partition with your Linux Host PC via card reader. | ||
+ | <code> | ||
+ | root@@android:/ # make_ext4fs /dev/block/mmcblk0p3 | ||
+ | Creating filesystem with parameters: | ||
+ | Size: 1073741824 | ||
+ | Block size: 4096 | ||
+ | Blocks per group: 32768 | ||
+ | Inodes per group: 8192 | ||
+ | Inode size: 256 | ||
+ | Journal blocks: 4096 | ||
+ | Label: | ||
+ | Blocks: 262144 | ||
+ | Block groups: 8 | ||
+ | Reserved block group size: 63 | ||
+ | Created filesystem with 11/65536 inodes and 8536/262144 blocks | ||
+ | root@@android:/ # make_ext4fs /dev/block/mmcblk0p4 | ||
+ | Creating filesystem with parameters: | ||
+ | Size: 134217728 | ||
+ | Block size: 4096 | ||
+ | Blocks per group: 32768 | ||
+ | Inodes per group: 8192 | ||
+ | Inode size: 256 | ||
+ | Journal blocks: 1024 | ||
+ | Label: | ||
+ | Blocks: 32768 | ||
+ | Block groups: 1 | ||
+ | Reserved block group size: 7 | ||
+ | Created filesystem with 11/8192 inodes and 1550/32768 blocks | ||
+ | root@@android:/ # reboot | ||
+ | </code> | ||
+ | |||
+ | ===== References ===== | ||
+ | * http://source.android.com/source/download.html | ||
+ | * http://odroid.foros-phpbb.com/forum.htm | ||
+ | * http://www.hardkernel.com | ||
+ | |||
+ | |||