如何在32位ubuntu11.10 下编译android 4.0.1源码和goldfish内核
一 准备工作
1 安装 java sdk 6
(1 )从jdk 官方网站http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u29-download-513648.html 下载jdk-6u29-linux-i586.bin 文件。
(2 )执行jdk 安装文件
- $chmod a+x jdk-6u29-linux-i586.bin
- $jdk-6u29-linux-i586.bin
(3) 配置jdk 环境变量
- $sudo vim /etc/profile
- #JAVAEVIRENMENT
- exportJAVA_HOME =/usr/lib/java/jdk1.6.0_29
- exportJRE_HOME =$JAVA_HOME/jre
- exportCLASSPATH =$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
- exportPATH =$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
保存后退出编辑,并重启系统。
2 安装依赖包
/*=============================================
- $sudo apt-get install git-core gnupg flex bison gperf build-essential\
- zipcurlzlib1g-devlibc6-devlib32ncurses5-devia32-libs\
- x11proto-core-devlibx11-devlib32readline5-devlib32z-dev\
- libgl1-mesa-devg++-multilibmingw32tofrodospython-markdown\
- libxml2-utils
===============================================*/
原文改为:
接下来,如果是32位系统的话,在终端中运行
$ sudo apt-get install git-core gnupg flex bison gperf build-essential \ zip curl zlib1g-dev libc6-dev libncurses5-dev x11proto-core-dev \ libx11-dev libreadline6-dev libgl1-mesa-dev tofrodos python-markdown \ libxml2-utils xsltproc
如果是64位,运行
$ sudo apt-get install git-core gnupg flex bison gperf build-essential \ zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs \ x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev \ libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown \ libxml2-utils xsltproc
官方推荐用64位的,我当时没看到,用32位也不会有太大的问题,执行到这步,就已经安装好了Git和Python,除了JDK,这两个也是必须的。下面就要准备下载源码了。。。
3 用 repo 工具下载源码
(1) 初始化repo
- $cd ~
- $mkdir bin
- $curlhttps://dl-ssl.google.com/dl/googlesource/git-repo/repo> ~/bin/repo
- $chmod a+x ~/bin/repo
- $exportPATH =$PATH:~/bin(导出环境变量)
(2) 下载 android 最新源码
- $mkdir android
- $cd android
- $ repo init -u https://android.googlesource.com/platform/manifest -bandroid-4.0.1_r1
- ...(输入用户名和邮箱名)
- $repo sync -j5
- ...(此处用5个线程开始下载源码,下载过程及其漫长,需要耐心等待)
二 编译源码
1 开始编译
- $source build/envsetup.sh
- includingdevice/samsung/maguro/vendorsetup.sh
- includingdevice/samsung/tuna/vendorsetup.sh
- includingdevice/ti/panda/vendorsetup.sh
- includingsdk/bash_completion/adb.bash
- $make-j4(此处用4个线程编译)
编译完成后,会看到类似的输出:
- Targetramdisk:out/target/product/generic/ramdisk.img
- Targetuserdatafsimage:out/target/product/generic/userdata.img
- Installedfilelist:out/target/product/generic/installed-files.txt
2 编译遇到的问题
编译错误:
- < 命令行 > :0:0:错误:“_FORTIFY_SOURCE”重定义[-Werror]
- < built-in > :0:0:附注: 这是先前定义的位置
- cc1plus:所有的警告都被当作是错误
- make:*** [out/host/linux-x86/obj/EXECUTABLES/obbtool_intermediates/Main.o]错误 1
原因:
因机器上的gcc 版本过高,需替换成4.4.6 重新进行编译。
解决方法:
1 )安装4.4 版本的gcc 和g++
- $ sudo apt-get install gcc-4.4
- $ sudo apt-get install g++-4.4
2 )设置gcc 版本,使gcc 链接到gcc-4.4
- $ ls -l /usr/bin/gcc*
- lrwxrwxrwx 1 root root 7 2011-11-01 23:56 /usr/bin/gcc -> gcc-4.6
- -rwxr-xr-x 1 root root 224544 2011-10-06 05:47 /usr/bin/gcc-4.4
- -rwxr-xr-x 1 root root 302104 2011-09-17 05:43 /usr/bin/gcc-4.6
- $ cd /usr/bin
- $ sudo mv gcc gcc.bak
- $ sudo ln -s gcc-4.4 gcc
3 )设置g++ 版本,使g++ 链接到g++-4.4
- $ sudo mv g++ g++.bak
- $ sudo ln -s g++-4.4 g++
4 )设置完毕后,重新进行编译即可
3 从模拟器启动编译后的镜像文件
1 )设置环境变量:
- export PATH =~/android/out/host/linux-x86/bin:$PATH
- export ANDROID_PRODUCT_OUT =~/android/out/target/product/generic
其中linux-x86/bin 存放模拟器emulator 工具,product/generic 存在编译后的镜像文件。
2 )启动模拟器
- $emulator
- emulator:WARNING: system partition size adjusted to match image file (162 MB > 66 MB)
启动后的截图:
三 编译androidgoldfish 内核
1 )进入android4.0.1 源码目录,下载goldfish 内核源码
- $ mkdir kernel
- $ cd kernel
- $ git clone http://android.googlesource.com/kernel/goldfish.git
- $ cd goldfish
- $ git branch -a
- * (no branch)
- master
- remotes/origin/HEAD -> origin/master
- remotes/origin/android-goldfish-2.6.29
- remotes/origin/master
- $ git checkout remotes/origin/android-goldfish-2.6.29
2) 修改Makefile
- goldfish$ gedit Makefile
修改
- ARCH ?=$(SUBARCH)
- CROSS_COMPILE ?=
为
- ARCH ?=arm
- CROSS_COMPILE ?=arm-eabi-
3) 导出交叉 编译器 目录为环境变量
$ export PATH=$PATH:~/android/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin
4 )编译内核
- goldfish$ make goldfish_armv7_defconfig
- goldfish$ make
编译完成后,可看到类似如下的输出:
- OBJCOPY arch/arm/boot/zImage
- Kernel: arch/arm/boot/zImage is ready
5) 从模拟器中启动内核镜像
- $emulator -kernel ~/android/kernel/goldfish/arch/arm/boot/zImage &
启动模拟器后,可从Settings->System->About Phone 中查看内核版本信息。
android 官方:
Initializing a Build Environment
http://source.android.com/source/initializing.html