----------(根据本人安装时遇到的问题,根据网络文档整理而成)
从以下的路径下载ubuntu 11.10,
http://www.ubuntu.org.cn/download/ubuntu/download/
准备虚拟机,本人使用vmware 6.5.2 ,新下载的7.0和8.0无法安装
在vmware中选择从ISO文件安装,有个等待的过程。
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
打开终端窗口:ctl+alt+t
rpm -ivh xxx.xxx.rpm
需要安装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就可以了。
参考链接:http://source.android.com/source/downloading.html
建立目录 android------|------bin
|------source-----|kernel------|goldfish------|.git
| kernel详细代码
1.
$ curl https://dl-ssl.google.com/dl/googlesource/git-repo/repo > ~/bin/repo
2. $ chmod a+x ~/bin/repo
$ 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
在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
这样就把代码拉下来了。
进入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安装成功。
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
运行如下的命令
$make PRODUCT-sdk-sdk
执行该命令前先检查下是否已经生成了,存放在/out/host/linux-x86/sdk下,会删除编译android源码时的部分工作。
./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
原因待查。
如下:
Make clean
make goldfish_armv7_defconfig
make
重新加载,模拟器可启动。