建立6410平台android开发包编译环境 && eng和user的编译模式

以前一直是在公司别人搭建好的平台上进行编译开发。现在自己的笔记本上XP已经可以访问ubuntu了,所以想自己学习建立编译环境,过程不复杂,但是一波三折,看来以后还是要对shell编程学习一番。
1,原始开发包包括: 
      Cross Tool Chain: 4.3.1-eabi-armv6-20080707.tar.bz2  (交叉编译器)
      U-BOOT: s3c-u-boot-1.1.6_android.tar.bz2             (uboot)
      Linux Kernel: android_kernel_smdk6410.tar.gz         (linux内核)
      Android Cupkake: cupcake.tar.bz2                     (android文件系统OS)
      Delta File: delta.tar.gz                             (补丁包)
      Build Script: script.tar.gz                          (编译脚本)
2,安装交叉编译器:
     mkdir /usr/local/arm 
     cp 4.3.1-eabi-armv6-20080707.tar.bz2 /usr/local/arm
     tar xvjf 4.3.1-eabi-armv6-20080707.tar.bz2
编辑用户目录下.bashrc文件,建立环境变量:
     vi ~/.bashrc
在末尾处添加:
     PATH=$PATH:/usr/local/arm/4.3.1-eabi-armv6/usr/bin
     source ~/.bashrc
3,编译Uboot:
解压Uboot包,进入目录:
     vi makefile
改变编译器路径:
     CROSS_COMPILE = /usr/local/arm/4.3.1-eabi-armv6/usr/bin/arm-linux-  (注意后面的“-”)
执行配置:
     make smdk6410_config
生成Uboot.bin:
     make
4,编译Linux kernel:
编辑用户目录下.bashrc文件,建立生成路径,末尾添加:
     export SEC_PRODUCT=smdk6410   
     export SEC_OUTDIR=/home/zhangcheng/Foxlink2/output
     export PATH=$PATH:/home/zhangcheng/Foxlink2/SMDK6410_IB3/android_script
(注意以上=两侧没有空格,否则会出现编译错误:export:'=':not a valid identifier)
进入内核目录,编译配置:
     make smdk6410_android_defconfig
     build_kernel.sh
通常情况下就可以编译kernel了,如果出现“syantex error:unexpected '('”,需要把build_kernel.sh脚本的头sh换成bash

5,编译android os

解压缩cupcake和delta文件夹,将解压后delta的内容覆盖掉cupcake的部分内容(这步非必须)。

进入cupcake目录:

     build_android.sh

====================================================================================================

         Android 编译选项分为eng、user、userdebug,我们先看一下几种模式的不同吧。eng:为了开发而包含了很多工具;user:出厂时候面向用户的;userdebug:打开了一些debug选项。

(1)eng  工程模式:This is the default flavor. A plain make is the same as make eng.
  ro.secure=0
  ro.debuggable=1  //打开串口调试
  ro.kernel.android.checkjni=1
  adb is enabled by default.

        ADB有root权限
(2)user 用户模式:This is the flavor intended to be the final release bits.
  ro.secure=1
  ro.debuggable=0  //关闭串口调试
  adb is disabled by default.

       ADB只有shell权限

(3)性能比较

         原则上进行性能测试请使用user 版本测试。user 版本为提高第一次开机速度,使用了DVM 的预优化,将dex 文件分解成可直接load 运行的odex 文件,ENG 版本不会开启这项优化;更少的LOG 打印,uart 的关闭,原则上user 版本的性能要优于eng 版本。
(4)如何确认user/eng 版本

        A,Java 层,check android.os.Build 类中的TYPE 值;B,native 层,property_get("ro.build.type", char* value, "eng"); 然后check value 值;C,Debug 时,adb shell getprop ro.build.type 返回值如果是user 即user 版本,eng 即eng 版本。

参考原文:http://blog.csdn.net/xubin341719/article/details/7706867

你可能感兴趣的:(android,debug,内核,调试)