Ubuntu 11.10及android4.0开发环境安装

----------(根据本人安装时遇到的问题,根据网络文档整理而成)

一.  虚拟机及ubuntu11.10环境安装

1. 软件准备

从以下的路径下载ubuntu 11.10,

http://www.ubuntu.org.cn/download/ubuntu/download/

 

准备虚拟机,本人使用vmware 6.5.2 ,新下载的7.0和8.0无法安装

2.软件安装

在vmware中选择从ISO文件安装,有个等待的过程。

 

3.安装vmware tools

 ubuntu.ISO自带该工具,由于工具是rpm格式,ubuntu11.10的可执行文件的安装包格式是deb,所以需要转换。

     alien -d xxx.xxx.rpm     //使用alien将 rpm 格式文件转成deb

sudo dpkg -i xxx.xxx.deb  //安装

 

安装完成后,在/mnt/hgfs目录下没有共享的文件目录,所以需要执行以下的两步命令,如下:

sudo apt-get install open-vm-dkms

sudo mount -t vmhgfs .host:/                   /mnt/hgfs

 写入fstab

.host:/         /mnt/ghfs      vmhgfs   defaults 0 0

 

4. 常用命令

打开终端窗口:ctl+alt+t

rpm -ivh xxx.xxx.rpm

 

5.安装常用的软件和jdk

需要安装JDK和相关的软件:

如下:(Android技术内幕 系统卷)

$sudo apt-get install git-core gnupg valgrind flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl libncurses5-dev zliblg-dev

在实际的操作中有如下的变化:

      Libsdl-dev -------à  libsdl1.2-dev

      Zliblg-dev -------à  没有找到

附:参考链接中的参数

参考: http://source.android.com/source/initializing.html

 

Java 6: for Gingerbread and newer


$ sudo add-apt-repository "deb http://archive.canonical.com/ lucid partner"
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk



运行到后面就显示configuring sun-java6-jre,感觉就像中断了似的,ok键点不了,要先点一下tab键才能选ok键,剩下的一路next就可以了。


二.Android 源码和内核的获取

参考链接:http://source.android.com/source/downloading.html

建立目录 android------|------bin

                                        |------source-----|kernel------|goldfish------|.git

                                                                                                                | kernel详细代码

1.获取repo


1.  
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
$ chmod a+x ~/bin/repo


2. 下载android源码


$ repo init -u https://android.googlesource.com/platform/manifest
$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
执行完以上,会出现提示:
repo initialized in /home/lieye/android/source
然后执行下一步。
$ repo sync


3. 获取kernel

在source目录下建立子目录kernel


$ git clone https://android.googlesource.com/kernel/common.git
$ git clone https://android.googlesource.com/kernel/goldfish.git
$ git clone https://android.googlesource.com/kernel/msm.git
$ git clone https://android.googlesource.com/kernel/omap.git
$ git clone https://android.googlesource.com/kernel/samsung.git
$ git clone https://android.googlesource.com/kernel/tegra.git


我选择了


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


执行以上的命令后,会建立子目录 goldfish和goldfish/.git , 然后在 goldfish目录下执行命令:

     Git branch

     Git branch –a

     Git checkout –b goldfish origin/android-goldfish-2.6.29

这样就把代码拉下来了。

三.编译android源码和工具包

1.编译android源码

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

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

 

编译中出现的问题:

换用gcc与g++的较低版本

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

1 host Prebuilt:monkeyrunner

out/host/linux-x86/obj/EXECUTABLES/monkeyrunner_intermediates/monkeyrunner

2 host C++: obbtool <= frameworks/base/tools/obbtool/Main.cpp

3 <命令行>:0:0: 错误: “_FORTIFY_SOURCE”重定义[-Werror]

4 <built-in>:0:0: 附注: 这是先前定义的位置

5 cc1plus:所有的警告都被当作是错误

解决方法:

网上有文章说修改build/core/combo/HOST_linux-x86.mk文件,将

 1 HOST_GLOBAL_CFLAGS += -D_FORTIFY_SOURCE=0

修改成

1 HOST_GLOBAL_CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0

这种方法虽然能解决该问题,但也会引出新的问题,还要继续不断的修改,很麻烦,而且也会破坏android源码的原生状态。但是如果使用4.4版本的gcc与g++,则不会出现这些错误,方法如下:

通过gcc -v命令可以发现gcc库在/usr/lib/gcc/i686-linux-gnu目录下,该目录下有当前系统支持的各种版本gcc库 。在安装gcc 4.4前该目录下是没有4.4目录的,安装gcc 4.4后该目录下就会多出4.4这个目录,且该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目录下

1 $ls -l gcc*

会显示以下结果

lrwxrwxrwx 1 root root 7 2011-10-29 09:11 gcc -> gcc-4.6

-rwxr-xr-x 1 root root 224544 2011-10-06 05:47 gcc-4.4

-rwxr-xr-x 1 root root 302104 2011-09-17 05:43 gcc-4.6

发现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++*

lrwxrwxrwx 1 root root 7 2011-08-14 15:17 g++ -> g++-4.6

-rwxr-xr-x 1 root root 228640 2011-10-06 05:45 g++-4.4

-rwxr-xr-x 1 root root 306200 2011-09-17 05:39 g++-4.6

 

需要将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 内核(见5.重新编译内核)

1.设置环境变量

 Export PATH=$PATH:/home/android/source/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin

 Export ARCH = arm

2.设置交叉编译参数

 找到kernel目录下的文件makefile,修改如下

      1) CROSS_COMPILE = arm-eabi-

      2) 找到如下行,LDFLAGS_BUILD_ID=$(patsubst  –W1$(comma)%,%, $(call ld-option, -W1$(comma) –build-id,), 将改行置空,如下:

      LDFLAGS_BUILD_ID=

3.       编译镜像

进入kernel目录,输入如下的命令:

 Make goldfish_defconfig         //在5.重新编译内核

Make

编译完成后生成的镜像位于 /kernel/arch/arm/boot目录下的zImage

     

3.编译SDK

运行如下的命令

$make PRODUCT-sdk-sdk

执行该命令前先检查下是否已经生成了,存放在/out/host/linux-x86/sdk下,会删除编译android源码时的部分工作。

 

4.    模拟器

./mksdcard 1024M sdcard.img

./android create avd –target 1 –name lieye –sdcard.img

./android list avd

./emulator –avd lieye

 

./emulator –system  system.img

         -data    userdata.img

         -ramdisk ramdisk.img

         -kernel  zImage

 

用上述编译的,运行结果如下:

emulator: ERROR: Invalid or missing kernel image file: /home/result/zImage

原因待查。

 

5. 重新编译内核

如下:

    Make clean

make goldfish_armv7_defconfig  

make       

重新加载,模拟器可启动。