尝试编译android-2.3.7_r1

在参考别人的编译记录时,经常会看到如下的修改:

由于我们是32位系统,所以有些文件需要修改一下:

./build/core/main.mk 中的

ifneq (64,$(findstring64,$(build_arch)))
改为:
ifneq (i686,$(findstring i686,$(build_arch)))

android-2.3.7_r1/external/clearsilver/cgi/Android.mk
android-2.3.7_r1/external/clearsilver/java-jni/Android.mk
android-2.3.7_r1/external/clearsilver/util/Android.mk
android-2.3.7_r1/external/clearsilver/cs/Android.mk

四个文件中的:
ifeq ($(HOST_JDK_IS_64BIT_VERSION),true)
LOCAL_CFLAGS += -m64
LOCAL_LDFLAGS += -m64
endif

注释掉,或者将“64”换成“32”
ifeq ($(HOST_JDK_IS_64BIT_VERSION),true)
LOCAL_CFLAGS += -m32
LOCAL_LDFLAGS += -m32
endif


而实际上android-2.3.7_r1/build/core/main.mk 中根本就没有第一条的定义!

而关于第二条的修改,我认为是治标不治本,我猜想在build/下的*.mk中肯定有对于HOST_JDK_IS_64BIT_VERSION的定义,用于判断主机PC上的JDK是不是64位的!

果然在android-2.3.7_r1/build/core/config.mk中,我们可以看到HOST_JDK_IS_64BIT_VERSION的定义:

# Is the host JDK 64-bit version?
HOST_JDK_IS_64BIT_VERSION :=
ifneq ($(filter 64-Bit, $(shell java -version 2>&1)),)
HOST_JDK_IS_64BIT_VERSION := true
endif
这个定义很明确,只有在java -version所输出的信息中64-Bit,HOST_JDK_IS_64BIT_VERSION才被定义为true!

所以关于-m64修改为-m32是没必要的。


如果要改也是改

ifeq ($(HOST_JDK_IS_64BIT_VERSION),true)
为
ifneq ($(HOST_JDK_IS_64BIT_VERSION),)
因为我担心HOST_JDK_IS_64BIT_VERSION := true,true前面的空格会导致上述原始的判断不成立!


下面是java -version运行输出的信息:

java -version

//我的PC输出为32位JDK6:
java version "1.6.0_34"
Java(TM) SE Runtime Environment (build 1.6.0_34-b04)
Java HotSpot(TM) Server VM (build 20.9-b04, mixed mode)

//他人的64位JDK6:
java version "1.6.0_33"
Java(TM) SE Runtime Environment (build 1.6.0_33-b04)
Java HotSpot(TM) 64-Bit Server VM (build 20.8-b03, mixed mode)



关于android-2.3.7_r1的编译,大致同前一篇《尝试编译android-4.0.4_r2.1》没什么区别 http://blog.csdn.net/niyufeng/article/details/8040028

主要就是andorid-2.3.7_r1的补丁和android-4.0.4_r2.1有所不同:


000-gcc4.6.x.patch

#由于使用gcc 4.6.x,最好换为4.4的gcc
--- android-2.3.7_r1/build/core/combo/HOST_linux-x86.mk.orig	2012-10-03 18:54:52.805379013 +0800
+++ android-2.3.7_r1/build/core/combo/HOST_linux-x86.mk	2012-10-03 18:56:28.773376791 +0800
@@ -58,6 +58,6 @@
 	-include $(call select-android-config-h,linux-x86)
 
 # Disable new longjmp in glibc 2.11 and later. See bug 2967937.
-HOST_GLOBAL_CFLAGS += -D_FORTIFY_SOURCE=0
+HOST_GLOBAL_CFLAGS += -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=0
 
 HOST_NO_UNDEFINED_LDFLAGS := -Wl,--no-undefined
--- android-2.3.7_r1/frameworks/base/libs/utils/Android.mk.orig	2012-10-03 19:01:32.273369759 +0800
+++ android-2.3.7_r1/frameworks/base/libs/utils/Android.mk	2012-10-03 19:02:27.041368492 +0800
@@ -57,7 +57,7 @@
 
 LOCAL_MODULE:= libutils
 
-LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS)
+LOCAL_CFLAGS += -DLIBUTILS_NATIVE=1 $(TOOL_CFLAGS) -fpermissive
 LOCAL_C_INCLUDES += external/zlib
 
 ifeq ($(HOST_OS),windows)



001-HOST_JDK_IS_64BIT_VERSION.patch
--- android-2.3.7_r1/external/clearsilver/cgi/Android.mk.orig	2012-10-03 18:38:25.705401876 +0800
+++ android-2.3.7_r1/external/clearsilver/cgi/Android.mk	2012-10-03 18:39:17.349400681 +0800
@@ -12,6 +12,6 @@
 
 LOCAL_CFLAGS := -fPIC
 
-ifeq ($(HOST_JDK_IS_64BIT_VERSION),true)
+ifneq ($(HOST_JDK_IS_64BIT_VERSION),)
 LOCAL_CFLAGS += -m64
 LOCAL_LDFLAGS += -m64
 endif
--- android-2.3.7_r1/external/clearsilver/java-jni/Android.mk.orig	2012-10-03 18:39:47.649399978 +0800
+++ android-2.3.7_r1/external/clearsilver/java-jni/Android.mk	2012-10-03 18:41:01.369398272 +0800
@@ -33,6 +33,6 @@
 
 LOCAL_CFLAGS := -fPIC
 
-ifeq ($(HOST_JDK_IS_64BIT_VERSION),true)
+ifneq ($(HOST_JDK_IS_64BIT_VERSION),)
 LOCAL_CFLAGS += -m64
 LOCAL_LDFLAGS += -m64
 endif
--- android-2.3.7_r1/external/clearsilver/util/Android.mk.orig	2012-10-03 18:42:44.305395886 +0800
+++ android-2.3.7_r1/external/clearsilver/util/Android.mk	2012-10-03 18:43:06.273395377 +0800
@@ -17,6 +17,6 @@
 
 LOCAL_CFLAGS := -fPIC
 
-ifeq ($(HOST_JDK_IS_64BIT_VERSION),true)
+ifneq ($(HOST_JDK_IS_64BIT_VERSION),)
 LOCAL_CFLAGS += -m64
 LOCAL_LDFLAGS += -m64
 endif
--- android-2.3.7_r1/external/clearsilver/cs/Android.mk.orig	2012-10-03 18:44:29.141393459 +0800
+++ android-2.3.7_r1/external/clearsilver/cs/Android.mk	2012-10-03 18:44:49.297392991 +0800
@@ -8,6 +8,6 @@
 
 LOCAL_CFLAGS := -fPIC
 
-ifeq ($(HOST_JDK_IS_64BIT_VERSION),true)
+ifneq ($(HOST_JDK_IS_64BIT_VERSION),)
 LOCAL_CFLAGS += -m64
 LOCAL_LDFLAGS += -m64
 endif


或者001-HOST_JDK_IS_64BIT_VERSION.patch为:(也可以直接不使用001-HOST_JDK_IS_64BIT_VERSION.patch,android编译时能正确判断)
--- android-2.3.7_r1/external/clearsilver/cgi/Android.mk.orig	2012-10-03 18:38:25.705401876 +0800
+++ android-2.3.7_r1/external/clearsilver/cgi/Android.mk	2012-10-03 18:39:17.349400681 +0800
@@ -13,8 +13,8 @@
 LOCAL_CFLAGS := -fPIC
 
 ifeq ($(HOST_JDK_IS_64BIT_VERSION),true)
-LOCAL_CFLAGS += -m64
-LOCAL_LDFLAGS += -m64
+LOCAL_CFLAGS += -m32
+LOCAL_LDFLAGS += -m32
 endif
 # We use the host compilers because the Linux SDK build
 # uses a 32-bit toolchain that can't handle -m64
--- android-2.3.7_r1/external/clearsilver/java-jni/Android.mk.orig	2012-10-03 18:39:47.649399978 +0800
+++ android-2.3.7_r1/external/clearsilver/java-jni/Android.mk	2012-10-03 18:41:01.369398272 +0800
@@ -34,8 +34,8 @@
 LOCAL_CFLAGS += -fPIC
 
 ifeq ($(HOST_JDK_IS_64BIT_VERSION),true)
-LOCAL_CFLAGS += -m64
-LOCAL_LDFLAGS += -m64
+LOCAL_CFLAGS += -m32
+LOCAL_LDFLAGS += -m32
 endif
 # We use the host compilers because the Linux SDK build
 # uses a 32-bit toolchain that can't handle -m64
--- android-2.3.7_r1/external/clearsilver/util/Android.mk.orig	2012-10-03 18:42:44.305395886 +0800
+++ android-2.3.7_r1/external/clearsilver/util/Android.mk	2012-10-03 18:43:06.273395377 +0800
@@ -18,8 +18,8 @@
 LOCAL_CFLAGS := -fPIC
 
 ifeq ($(HOST_JDK_IS_64BIT_VERSION),true)
-LOCAL_CFLAGS += -m64
-LOCAL_LDFLAGS += -m64
+LOCAL_CFLAGS += -m32
+LOCAL_LDFLAGS += -m32
 endif
 # We use the host compilers because the Linux SDK build
 # uses a 32-bit toolchain that can't handle -m64
--- android-2.3.7_r1/external/clearsilver/cs/Android.mk.orig	2012-10-03 18:44:29.141393459 +0800
+++ android-2.3.7_r1/external/clearsilver/cs/Android.mk	2012-10-03 18:44:49.297392991 +0800
@@ -9,8 +9,8 @@
 LOCAL_CFLAGS := -fPIC
 
 ifeq ($(HOST_JDK_IS_64BIT_VERSION),true)
-LOCAL_CFLAGS += -m64
-LOCAL_LDFLAGS += -m64
+LOCAL_CFLAGS += -m32
+LOCAL_LDFLAGS += -m32
 endif
 # We use the host compilers because the Linux SDK build
 # uses a 32-bit toolchain that can't handle -m64










这是原始prebuilt/android-arm/kernel/kernel-qemu内核:



这是自己编译的goldfish内核:








  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值