Wednesday, February 20, 2013

Building and Testing Android Source

Head First Android Development 2015

For building Android 4.1.2_r1, Ubuntu 12.04 64-bit required
 
Installing Java:
Download file jdk-6u38-linux-x64.bin
$ chmod +x jdk-6u38-linux-x64.bin
$ ./jdk-6u38-linux-x64.bin
$ sudo chown root. -R jdk1.6.0_38/
$ sudo mv jdk1.6.0_38/ /usr/lib/jvm/jdk1.6.0_38/

$sudo update-alternatives --install "/usr/bin/java" "java" "/usr/lib/jvm/jdk1.6.0_38/bin/java" 1
$sudo update-alternatives --install "/usr/bin/javac" "javac" "/usr/lib/jvm/jdk1.6.0_38/bin/javac" 1
$sudo update-alternatives --install "/usr/bin/javaws" "javaws" "/usr/lib/jvm/jdk1.6.0_38/bin/javaws" 1

$sudo update-alternatives --config java
$sudo update-alternatives --config javac
$sudo update-alternatives --config javaws


Installing required packages (Ubuntu 12.04)  
$ sudo apt-get install git gnupg flex bison gperf build-essential \ zip curl libc6-dev libncurses5-dev:i386 x11proto-core-dev \ libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \ libgl1-mesa-dev g++-multilib mingw32 tofrodos \ python-markdown libxml2-utils xsltproc zlib1g-dev:i386   
$ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so

******************* Downloading Android Source ********************
To get repo script
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo                  

To make repo script executable
$ chmod a+x ~/bin/repo                                                                             
$ export PATH="$PATH:~/bin/"

$ mkdir android_4.1.2                                                                        
$ cd android_4.1.2
$ repo init -u https://android.googlesource.com/platform/manifest            OR                     
$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.1.2_r1 
  Other android branches are: (https://android.googlesource.com/platform/manifest/)
  4.1.1_r1, 2.3.4_r1, 2.3.3_r1, 2.3.2_r1, 2.3.1_r1, 2.3_r1, 2.2.2_r1, 2.2.1_r1, 2.2_r1.1, 2.1_r2, 2.0_r1, 1.6_r2,1.5_r4

To download & extract source from repo objects
$ repo sync                                                                                     
 
(If you have repo objects in zip 
 1. Extract it
 2. Execute $repo sync)

******************* Compiling Android Source ********************
$ source build/envsetup.sh
$ choosecombo
   Which would you like? [1] 1 (release)
   Which product would you like? [full] full
   Which would you like? [eng] eng
  OR use
$lunch full-eng

To build for ARM Target
$ make -j4    

To build for x86 Target iso
$ make -j4 iso_img TARGET_PRODUCT=generic_x86                                              

****************** Downloading and Compiling Linux Kernel *********************

To download goldfish kernel source
$ git clone https://android.googlesource.com/kernel/goldfish.git                             

To print downloaded branch
$ git branch                                                                                             
To list all remote available branches
$ git branch -r                                                                                    
   origin/HEAD -> origin/android-2.6.27
   origin/android-2.6.25
   origin/android-2.6.27
   origin/android-2.6.29
   origin/android-2.6.32
   origin/android-goldfish-2.6.27
   origin/android-goldfish-2.6.29

To extract from object
$ git checkout --track -b android-goldfish-2.6.29 origin/android-goldfish-2.6.29   

To configure kernel build
$ make O= ~/path_to_kernel_folder/kernel menuconfig

To build for x86 by default                                        
$ make O=~/path_to_kernel_folder/kernel 

To install on current system                                                         
$ sudo make O=~/path_to_kernel_folder/kernel modules_install install                 

To select configuration file
$ make ARCH=arm goldfish_defconfig              

To build for ARM by default                                                   
$ make ARCH=arm CROSS_COMPILE=../prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-   

Kernel Images can be: Image, zImage, bzImage, vmlinuz
Initial Ramdisk can be: initrd.img, ramdisk.img

*********
****************** To run on Emulator ******************************
Method 1:
$ source build/envsetup.sh
$ lunch full-eng
$ emulator

Method 2:
$ emulator -sysdir ../../../target/product/generic -data ../../../target/product/generic/userdata.img
-system ../../../target/product/generic/system.img -kernel ../../../../kernel/arch/arm/boot/zImage -ramdisk ../../../target/product/generic/ramdisk.img -shell -avd vvv -skin 320x480

********
******************** To Flash Unlocked Device **********************************
$adb reboot bootloader   => Shows Tux image in Homescreen
$sudo fastboot devices    => Shows Attached Device
$sudo ./script.sh               => Flash Images to Device

###################### script.sh ########################
#!/bin/sh
echo Starting Fastboot.....

##### Fash Modem bootloader & build #####
#fastboot flash sbl1 sbl1.mbn
#fastboot flash sbl2 sbl2.mbn
#fastboot flash sbl3 sbl3.mbn
#fastboot flash rpm rpm.mbn
#fastboot flash tz tz.mbn
#fastboot flash modem NON-HLOS.bin
#fastboot flash mdm fat.bin

##### Flash Android bootloader & build #####
fastboot flash aboot emmc_appsboot.mbn
fastboot flash userdata userdata.img
fastboot flash system system.img
fastboot flash boot boot.img
fastboot flash cache cache.img
fastboot flash recovery recovery.img
fastboot flash persist persist.img
fastboot flash tombstones tombstones.img
fastboot continue
#################### End of script.sh #######################

******************** USB Debugging Using Hardware Device ********************
$ sudo vi /etc/udev/rules.d/51-android.rules
  SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", MODE="0666", GROUP="plugdev"  => for Samsung Devices
  SUBSYSTEM=="usb", ATTR{idVendor}=="05c6", MODE="0666", GROUP="plugdev"  => for Qualcomm Devices
$ chmod a+r /etc/udev/rules.d/51-android.rules
$ sudo /etc/init.d/udev restart
$ sudo adb kill-server
$ sudo adb devices

*********************
****** Setting Path on Linux System ************************
export PATH="$HOME/adt-bundle/sdk/tools:$HOME/adt-bundle/sdk/platform-tools:$PATH"
#echo 'export PATH=/opt/java/64/jdk1.6.0_29/bin:$PATH' >> ~/.bashrc


To get kernel version from kernel source tree:
$ make kernelversion

To restore repo files:
$ repo diff > difference.patch
$ patch -p0  filepath -R < difference.patch
Also you can remove files that don't need to be restored from difference.patch
OR
To reset repo changes
$ git reset --hard

To see git changes:
$ git status

To run device through NFS and TFTP:
Once <serverip>, <distro>, <project>, and <machine> variables setup, UBoot will search on the server of address <serverip>:
  • a kernel image uImage in the directory "/srv/tftp/<distro>/<project>/<machine>" accessible by TFTP.
  • a rootfs in the directory "/srv/nfs/<distro>/<project>/<machine>" accessible by NFS.
setenv nfs-bootargs 'setenv bootargs ${bootargs-base} root=/dev/nfs nfsroot=${serverip}:/srv/nfs/${distro}/${project}/${machine} ; run addip' 
setenv nfs-boot 'if ping ${serverip}; then run nfs-bootargs; tftp 0x80000000 ${distro}/${project}/${machine}/uImage; bootm; fi;'  

No comments:

Post a Comment