感谢支持
我们一直在努力

如何在32位Ubuntu 11.10 下编译Android 4.0.1源码和goldfish内核

一 准备工作


安装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

#JAVA EVIRENMENT
export JAVA_HOME=/usr/lib/java/jdk1.6.0_29
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

保存后退出编辑,并重启系统。



2 安装依赖包
$ 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


3 repo工具下载源码

(1)初始化repo


 


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

$ export PATH=$PATH:~/bin(导出环境变量)

(2)下载Android最新源码


 


$ mkdir android
$ cd android
$ repo init -u https://android.googlesource.com/platform/manifest -b android-4.0.1_r1
…(输入用户名和邮箱名)

$ repo sync -j5
…(此处用5个线程开始下载源码,下载过程及其漫长,需要耐心等待)


二 编译源码

1 开始编译

 


$ source build/envsetup.sh 
including device/samsung/maguro/vendorsetup.sh
including device/samsung/tuna/vendorsetup.sh
including device/ti/panda/vendorsetup.sh
including sdk/bash_completion/adb.bash
$ make -j4(此处用4个线程编译)



编译完成后,会看到类似的输出:


 


Target ram disk: out/target/product/generic/ramdisk.img
Target userdata fs image: out/target/product/generic/userdata.img
Installed file list: 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)

启动后的截图:


编译Android goldfish内核

 


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中查看内核版本信息。


 



 


赞(0) 打赏
转载请注明出处:服务器评测 » 如何在32位Ubuntu 11.10 下编译Android 4.0.1源码和goldfish内核
分享到: 更多 (0)

听说打赏我的人,都进福布斯排行榜啦!

支付宝扫一扫打赏

微信扫一扫打赏