1,编译 Linux kernel的时候,原先的Android 2.1都可以通过的,但是这个android 2.2的就不行,而且操作都一样的。
即使把原先编译 andriod应用的两个操作提前:
. build/envsetup.sh
lunch
也还是会出如下错误
CHK include/linux/version.h
make[1]: “include/asm-arm/mach-types.h”是最新的。
CHK include/linux/utsrelease.h
SYMLINK include/asm -> include/asm-arm
CC kernel/bounds.s
cc1: error: unrecognized command line option "-mlittle-endian"
cc1: error: unrecognized command line option "-mabi=aapcs-linux"
cc1: error: unrecognized command line option "-mno-thumb-interwork"
kernel/bounds.c:1: error: bad value (armv5t) for -march= switch
kernel/bounds.c:1: error: bad value (strongarm) for -mtune= switch
上述这个问题,网上查到了系CROSS_COMPILE没设置正确导致的。
后来发现,2.2版中linux kernel的makefile中CROSS_COMPILE确实没有设置,而2.1中就有设置。
所以2.2中的CROSS_COMPILE应该是由其他相关环境变量设定来获取的。
后来发现,使用 sudo passwd root 明了创建了root 命令后,以root命令操作如上的编译,就可以编译通过了。
2,编译android程序的出错
现象比较多,主要是java的不正常。
敲入 java -version
则可能出现如下错误:
程序“java”已包含在以下软件包中:
* gcj-4.4-jre-headless
* openjdk-6-jre-headless
* cacao
* gij-4.3
* jamvm
* kaffe
或者说java找不到。
如果java正常安装了,并且版本为正确1.5版,那只有一种可能就是环境变量的问题。
由于本人使用的是引用外部的sh来设置环境变量(source android.sh)。并没有修改系统的开机bash设定。
android.sh中设定了如下
export JAVA_HOME=/usr/java/jdk1.5.0_22
export CLASSPATH=$JAVA_HOME/lib/tools.jar:${JAVA_HOME}/lib/dt.jar:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH
设定后,用env查看页好像是对的。
后多方查找,发现了一个现象,如果是在linux下面新建一个android.sh文件,将这些设定写入,用source android.sh引用后,一切正常。
这个时候,java -version也能看到版本。
如果是在Windows下面建立一个android.sh,将其设定写入后,在linux 中调用source android.sh,就会出这种莫名其妙问题。
但是用文件比较工具比较这两个文件,都是相同的。
看来Windows文件系统和linux 文件系统还是很多不同啊!