Android环境建立之编译Android内核源码笔记---2

三.编译android源码和工具包

1.编译android源码

进入source目录下,执行make 即可。

编译完成后,可以在源码目录的out/target/product/generic/目录下看到编译好的ramdisk.img、system.img和userdata.img了。

 

编译中出现的问题:

Ubuntu11.10自带的gcc与g++版本为4.6,用该版本编译android时会遇到一些错误,错误如下所示:

 

$ java -version

java version "1.6.0_23"
OpenJDK Runtime Environment (IcedTea6 1.11pre) (6b23~pre11-0ubuntu1.11.10.2)
OpenJDK Client VM (build 20.0-b11, mixed mode, sharing)
原来可能是没有安装JDK1.6。

 

有的说是JDK安装不对,再来安装:

在ubuntu11.10上安装jdk1.6
JDK:Linux X86下SUN公司的 jdk-6u30-linux-i586.bin

搭建步骤

第一:下载JDK。下载地址http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u30-download-1377139.html,选择Linux X86下的 jdk-6u30-linux-i586.bin,这样直接用迅雷下载,速度快,放在本机上。

第二:将文件转移到Ubuntu系统下,具体转移的方式采用网上邻居的方式。具体参见我的另外一篇博文http://www.cnblogs.com/BreakMind/archive/2012/01/31/2332522.html。

第三:打开Ubuntu 11.10的终端。这里说一下,Ubuntu 11.10的终端已经很难点击查看到,我知道打开Ubuntu 11.10的终端方式有两种。1、快捷键,Ctrl+Atl+T ,这三个键联合起来用就可以打开终端。2、鼠标点击左上角的Ubuntu图标(或者点击微软键),输入Terminal,这个时候就显示出终端了。

第四:命令行,实现整个安装过程。(说明一下,Ubuntu 11.10有自带的OpenJDK,这是整个安装过程中,需要注意的问题)

首先把JDK拷贝到指定的目录,然后解压缩拷贝后的文件到指定的目录中,具体命令行如下:
    $ sudo cp jdk-6u30-linux-i586.bin /usr/lib/jvm
    $ cd /usr/lib/jvm
    $ sudo ./jdk-6u30-linux-i586.bin
    $ sudo mv jdk1.6.0_30/ java-1.6.0_30-sun/
    $ sudo ln -s java-1.6.0_30-sun java-6-sun
    $ sudo rm jdk-6u30-linux-i586.bin
其次设置环境变量,主要是PATH、CLASSPATH和JAVA_HOME,注意PATH最后所添加的bin目录:
    $ sudo vi /etc/environment
    PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/u
    sr/lib/jvm/java-6-sun/bin"
    CLASSPATH="/usr/lib/jvm/java-6-sun/lib"
    JAVA_HOME="/usr/lib/jvm/java-6-sun"
然后就是要告诉系统,我们使用的sun的JDK,而非OpenJDK了:
    $ sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-6-sun/bin/java 300
    $ sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/java-6-sun/bin/javac 300
    $ sudo update-alternatives --config java
此时屏幕会有如下显示:
选择 路径 优先级 状态
    ------------------------------------------------------------
    0 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 自动模式
    1 /usr/lib/jvm/java-6-openjdk/jre/bin/java 1061 手动模式
    * 2 /usr/lib/jvm/java-6-sun/bin/java 300 手动模式
要维持当前值

请按回车键,或者键入选择的编号:我们输入值:2 回车
如上所示,这样就设置好了要使用的java了。最后我们验证一下:
    $ java -version
    java version "1.6.0_27"
    Java(TM) SE Runtime Environment (build 1.6.0_27-b07)
    Java HotSpot(TM) Server VM (build 20.2-b06, mixed mode)

/*

haili@haili-desktop:~$sudo gedit ~/.bashrc
在文件的尾部追加:
export JAVA_HOME=/usr/bin/jdk
export JRE_HOME=JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
 
使更改生效。保存文件,执行
haili@haili-desktop:~$source ~/.bashrc
有的说这样可以解决,但是对我来说似乎只有一个结果,那就是失败。好像每走一步哪怕是小得微乎其微的一步都是如此的艰难和充满荆棘。不过既然选择了这条路,没别的捷径,那就一直往前走吧,哪怕是头破血流又如何,大不了再来一次。可以肯定的是这其中的过程和酸甜苦辣绝对只有自己可以体会得到。

*/

把JDK1.6重新安装,现在可以make了,原来的问题是:在安装时执行下面步骤后:

$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"

$ sudo apt-get update

有一提示,说是不能读取源,需要用“apt-get  update”来更新才能解决问题,这时要执行:

$ apt-get update

到这里要注意了,此时还要重新执行:

$ sudo apt-get update

后才能执行:

$ sudo apt-get install sun-java6-jdk

否则就可能出现上面的棘手奇怪问题,下面总结一下安装JDK1.6的步骤:

$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"

$ sudo apt-get update

$ apt-get update //这一步在我这里要有

$ sudo apt-get update //这步也必须执行,否则make总是不成功,这个问题整整弄得小弟多开销了一天时间

$ sudo apt-get install sun-java6-jdk

 

这里就是make后生成的ramdisk.img、system.img和userdata.img了,期待以久的东西。其实它到底编译多长时间我也不清楚,听说是挺长的,不过我是在下班前直接编译,不关电脑,第二天过来时已经全部编译完成,像我的电脑配置一般要两到三个小时这样吧。

应该是因为版本的原因,可以考虑用低一些版本比如4.4。

解决方法:

   ubuntu 32bit系统下安装gcc 4.4的最好方法是仅用以下两条命令,不需要其它命令,否则编译时可能会出错:

1 $sudo apt-get install gcc-4.4

2 $sudo apt-get install g++-4.4

装完后进入到/usr/bin目录下

$ls -l gcc*   会显示以下结果:

发现gcc链接到gcc-4.6, 需要将它改为链接到 gcc-4.4,方法如下:

1 $sudo mv gcc gcc.bak

2 $sudo ln -s gcc-4.4 gcc

同理,对g++也做同样的修改:

1 $ls -l g++*

 

需要将g++链接改为g++-4.4:

 

1 $sudo mv g++ g++.bak

 

2 $sudo ln -s g++-4.4 g++

 

再查看gcc和g++版本号:

gcc -v

g++ -v

均显示gcc version 4.4.6 ,说明gcc 4.4安装成功。 

2.编译android 内核

1.设置环境变量

 export  PATH=$PATH:/Android/source/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin

 export  ARCH=arm //注意=后面不要有空格,export不要写成Export,否则会有提示找不到命令

source  ~/.hashrc    //使修改生效

2.设置交叉参数

把 kernel/goldfish目录下面的Makefile中把这行:

CROSS_COMPILE ?=

修改为:

CROSS_COMPILE ?=arm-eabi-

别外还有把LDFLAGS_BUILD_ID=$(patsubst  –W1$(comma)%,%, $(call ld-option, -W1$(comma) –build-id,),改为:

                LDFLAGS_BUILD_ID=

有的网友说也可以通过下面的方式来设置:

  1. $ export ARCH=arm  
  2. $ export SUBARCH=arm  
  3. $ export CROSS_COMPILE=arm-eabi-
  1. $ source build/envsetup.sh  //缺少这条指令,可能会导致无法编译通过  
  2. $ lunch full-eng            //缺少这条指令,可能会导致无法启动模块器,系统报无法找到AVD,并要求你创建AVD

       其实还要注意,一定要执行这两步:

export  PATH=$PATH:/Android/source/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin

 export  ARCH=arm  //注意=后面不要有空格,export不要写成Export,否则会有提示找不到命令

否则会的提示:

 当时就是因为这个也走了不少的弯路,浪费不少时间,开始还以为是上面的Makefile的设置出现问题。

 

到这里可以开始执行配置操作:

$ make  clean

$ make goldfish_armv7_defconfig    //不能用配置文件:make goldfish_defconfig,否则后面步骤可能出现意想不到的结果

$ make  

make goldfish_armv7_defconfig 后得到如下截图:

到这里圆满完成编译。在arch/arm/boot目录下面会有生成的zImage文件。ls arch/arm/boot

 

3. 下面步骤不是编译SDK

         现在不知道编译出来的镜像是否可用,要测试和使用SDK进行开发,就需要编译SDK,当然也是可以从官方网站上下载SDK。由于编译Android源码和内核时并不会自动编译SDK,需要我们自已动手来完成,进入Android源码目录执行:

$ make PRODUCT-sdk-sdk

 

注意:

         为了避免在搭建环境时编译的SDK无效,最好是第一次不要使用make sdk来编译,而应该使用上面的make PRODUCT-sdk-sdk。还有在编译完成后后在目录/out/host/linux-x86/sdk下面生成android-sdk_eng.xxx_linux-x86.zip和android-sdk_eng.xxx_linux-x86。做好SDK的备份,因为后面的模块编译是可能会把SDK目录下面的文件给清除掉。

 

4.  编译单独模块

      Android允许对应用程序进行单独编译,但是这样必需重新生成system.img,现在为了省时间,我不编译单独模块。

 

5.  编译ADT

       编译ADT的主要目的是使用Eclipse来开发应用程序,当然如果不想自己编译也是可以从官方网站上下载安装或者干脆在线更新都可以。

5.1  配置环境

       要编译ADT首先要确保系统中已经安装了Eclipse。如果没有安装,则在编译ADT时会下载安装,注意这个是要超级用户的权限,否则不能安装也不能编译。我是直接编译ADT,再让它自己下载安装Eclipse。执行:

$  sdk/eclipse/scripts/build_server.sh    /Android/source/adt(这里是自己的源码存放目录,要根据自己情况来写)

但是编译时它却不会自己下载,有下面提示:

看来得真要自己到官方网站去下载再安装。从提示来看应该是可以从这个网站下载所需要的:

http://download.eclipse.org/technology/epp/downloads/release/galileo/SR2/eclipse-rcp-galileo-SR2-linux-gtk.tar.gz

我是从这里下载:http://www.bergfiles.com/i/bf4a1420f0h32i0

                               eclipse-rcp-galileo-SR2-linux-gtk.tar.gz

只要单击eclipse-rcp-galileo-SR2-linux-gtk.tar.gz就可以通过迅雷下载。

 

 

要是从前者下载则点击下列兰色部分即可用迅雷下载:

 

 下载完后,从提示可以看到:

Downloading and installing Eclipse in /buildbot/eclipse-android/3.5.2

要求我们把Eclipse安装在/buildbot/eclipse-android/3.5.2目录下。

 

 gedit  ~/.bashrc在文件后面加上:

export

ECLIPSE_HOME=$PATH:/opt/Boardcon/Android/source_4.0.1/adt

$ sdk/eclipse/scripts/build_server.sh     /Android/source/adt

ADT编译完成。

 

 

展开阅读全文

没有更多推荐了,返回首页