java_version := $(shell java -version 2>&1 | head -n 1 | grep '^java .*[ "]1\.6[\. "$]')
ifneq ($(shell java -version 2>&1 | grep -i openjdk),"")
## Jeff >>>>
#java_version :=
## <<<<
endif
A. 不要使用 openJDK , 會有一些詭異的錯誤.
先到 Java 官方網頁下載 jdk-6u34-linux-i586.bin file (可能會有新版本 6uxx ),
我的系統是 Fedora i686 並非 x64 , 所以選擇這個 , 更該為可執行 , 然後執行它.
[jeff@localhost Downloads]$ chmod +x jdk-6u34-linux-i586.bin
[jeff@localhost Downloads]$ ./jdk-6u34-linux-i586.bin
然後會產生一個目錄 "jdk1.6.0_34" !!
在開始 build Android source code 時候將 PATH 改為
export PATH=/${HOME}/Downloads/jdk1.6.0_34/bin/:$PATH
這樣就可以了 !!
B.修改 ./frameworks/compile/slang/Android.mk file .
整個 make 過程會發現下列的 error , 主要是 complier 將沒有使用的變數當作 error 來輸出 , 所以修改一下 Android.mk file , 將這個改為 warning 即可.
frameworks/compile/slang/slang_rs_export_foreach.cpp: In static member function ‘static slang::RSExportForEach* slang::RSExportForEach::Create(slang::RSContext*, const clang::FunctionDecl*)’: frameworks/compile/slang/slang_rs_export_foreach.cpp:249:23: error: variable ‘ParamName’ set but not used [-Werror=unused-but-set-variable] cc1plus: all warnings being treated as errors
# The prebuilt tools should be used when we are doing app-only build.
ifeq ($(TARGET_BUILD_APPS),)
LOCAL_PATH := $(call my-dir)
## Jeff >>>
local_cflags_for_slang := -Wno-sign-promo -Wall -Wno-unused-parameter
##local_cflags_for_slang := -Wno-sign-promo -Wall -Wno-unused-parameter -Werror
## <<<
ifneq ($(TARGET_BUILD_VARIANT),eng)
local_cflags_for_slang += -D__DISABLE_ASSERTS
endif
local_cflags_for_slang += -DTARGET_BUILD_VARIANT=$(TARGET_BUILD_VARIANT)
C. 修正 ./external/webkit/Source/WebCore/make-hash-tools.pl file.
Build 過程 看到下列的 error message ,
Can't locate Switch.pm in @INC (@INC contains: /usr/lib/perl5/site_perl /usr/share/perl5/site_perl /usr/lib/perl5/vendor_perl
/usr/share/perl5/vendor_perl /usr/lib/perl5/core_perl /usr/share/perl5/core_perl .)
at external/webkit/Source/WebCore/make-hash-tools.pl line 23. BEGIN failed--compilation aborted at external/webkit/Source/WebCore/make-hash-tools.pl line 23.原來是 prel 版本的問題 , 需要修改 make-hash-tools.pl file , 修改方式請參考 下列網址說明.http://code.google.com/p/android/issues/detail?id=22231
D. 修正 ./external/gtest/include/gtest/internal/gtest-param-util.h
如果有看到下列這樣的 error message :
external/gtest/src/../include/gtest/internal/gtest-param-util.h:122:11: error: ‘ptrdiff_t’ does not name a type請參考 下列網址中的說明 ,修改http://code.google.com/p/android/issues/detail?id=22005
external/gtest/include/gtest/internal/gtest-param-util.h
#include <vector>
+#include <cstddef>
#include <gtest/internal/gtest-port.h> external/oprofile/libpp/format_output.h:94:22: error: reference ‘counts’ cannot be declared ‘mutable’ [-fpermissive]
make: *** [out/host/linux-x86/obj/STATIC_LIBRARIES/liboprofile_pp_intermediates/arrange_profiles.o] Error 1
E. 修正 hardware/ti/sgx/Makefile.KM.Android File.
依照 User guide 要傳OMAPES=4.x 給 kernel , 但是在這個 makefile 中卻重新設定為INVALIDVAL . 這樣會導致 make 不過.
--- a/Makefile.KM.Android
+++ b/Makefile.KM.Android
@@ -1,6 +1,6 @@
include Rules.make
-OMAPES:=INVALIDVAL
+##OMAPES:=INVALIDVAL
.PHONY: all_km buildkernel
.PHONY: clean_km cleankernelmodule
@@ -76,6 +76,7 @@ else ifeq ($(OMAPES),7.x)
@cp -rf $(GFX_KERNMOD_SRCPATH)/eurasiacon/binary2_omap4430_android_release/target/pvrsrvkm.ko $(GFX_REL_ES7_LIB_SRCPATH_AN
@cp -rf $(GFX_KERNMOD_SRCPATH)/eurasiacon/binary2_omap4430_android_release/target/omaplfb.ko $(GFX_REL_ES7_LIB_SRCPATH_AND
else
+ @echo "OMAPES:$(OMAPES)"
@echo "OMAPES value not specified (Mandatory value)"
exit 1
endif
F. 為了增加make 過程的順利 , 我增加了一個 env.sh file .
內容如下 , 在 make之前先執行 source build/env.sh , 就會設定好一些環境參數.
export PATH=${PWD}/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin:${HOME}/bin/jdk1.6.0_34/bin:$PATH
export PATH=${PWD}/build:$PATH
export TARGET_PRODUCT=am335xevm
export OMAPES=4.x
export USE_CCACHE=1
## ==== for u-boot or kernel used.
export ARCH=arm
export CROSS_COMPILE=arm-eabi-
#!/bin/sh
JDK_BIN_DIR=${HOME}/bin/jdk1.6.0_34/bin
TOOLCHAIN_BIN_DIR=${PWD}/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin
PATH1=`echo ${PATH} | sed "s|[:]${JDK_BIN_DIR}||g"`
PATH2=`echo ${PATH1} | sed "s|${JDK_BIN_DIR}[:]||g"`
PATH3=`echo ${PATH2} | sed "s|[:]${TOOLCHAIN_BIN_DIR}||g"`
PATHX=`echo ${PATH3} | sed "s|${TOOLCHAIN_BIN_DIR}[:]||g"`
export PATH=${TOOLCHAIN_BIN_DIR}:${JDK_BIN_DIR}:${PATHX}
export TARGET_PRODUCT=am335xevm
export OMAPES=4.x
export USE_CCACHE=1
## ==== for u-boot or kernel used.
export ARCH=arm
export CROSS_COMPILE=arm-eabi-
G. 為了自動產生 rootfs.tar.bz file . 我增加了一個 shell file.
依照 User Guide , 要執行5 個指令才能製作出 rootfs.tar.bz file .我將這接指令用一個 shell file 包裝起來 , 使用上就會方便多了, 只要在 top 目錄執行這個 shell 即可.
#!/bin/sh
# $ cd out/target/product/<product-name>
# $ mkdir android_rootfs
# $ cp -r root/* android_rootfs
# $ cp -r system android_rootfs
# $ ../../../../build/tools/mktarball.sh ../../../host/linux-x86/bin/fs_get_stats android_rootfs . rootfs rootfs.tar.bz2
## ===== defind echo color
COLOR_ECHO="echo -e" ## in Fedora the color echo need have -e argument.
COLOR_NORMAL="\033[0m"
COLOR_BOLD="\033[1m"
COLOR_RED="\033[31m"
COLOR_GREEN="\033[32m"
COLOR_YELLOW="\033[33m"
## ==== check doing env.sh .
if [ -z ${TARGET_PRODUCT} ];then
${COLOR_ECHO} "${COLOR_BOLD}${COLOR_RED}## Android Target Product type not defined. "
${COLOR_ECHO} "${COLOR_NORMAL}"
exit
fi
_target_dir=${PWD}/out/target/product/${TARGET_PRODUCT}
_out_root=${_target_dir}/root
_out_system=${_target_dir}/system
_rootfs_dir=${_target_dir}/android_rootfs
MKTARBALL=${PWD}/build/tools/mktarball.sh
FS_GET_DATAS=${PWD}/out/host/linux-x86/bin/fs_get_stats
## ==== Check utility .
if [ ! -e ${MKTARBALL} ] || [ ! -e ${FS_GET_DATAS} ];then
${COLOR_ECHO} "${COLOR_BOLD}${COLOR_RED}## Some utility tools not exist. "
${COLOR_ECHO} "${COLOR_NORMAL}"
exit
fi
## ==== check output data exist.
if [ -e ${_out_root} ] && [ -e ${_out_system} ] ;then
#~ echo "DEBUG >>>> _target_dir=:${_target_dir}"
#~ echo "DEBUG >>>> _out_root=:${_out_root}"
#~ echo "DEBUG >>>> _out_system=:${_out_system}"
#~ echo "DEBUG >>>> _rootfs_dir=:${_rootfs_dir}"
## ==== creat rootfs dir.
if [ -e ${_rootfs_dir} ];then
${COLOR_ECHO} "${COLOR_BOLD}${COLOR_YELLOW}## Clean up old data in \"${_rootfs_dir}\" .... "
${COLOR_ECHO} "${COLOR_NORMAL}"
rm -rf ${_rootfs_dir}
else
${COLOR_ECHO} "${COLOR_BOLD}${COLOR_GREEN}## Create rootfs dir \"${_rootfs_dir}\" "
${COLOR_ECHO} "${COLOR_NORMAL}"
fi
mkdir -p ${_rootfs_dir}
cp -r ${_out_root}/* ${_rootfs_dir}
cp -r ${_out_system} ${_rootfs_dir}
${COLOR_ECHO} "${COLOR_BOLD}${COLOR_GREEN}## Createing rootfs tarball .... "
${COLOR_ECHO} "${COLOR_NORMAL}"
cd ${_target_dir}
${MKTARBALL} ${FS_GET_DATAS} ${_rootfs_dir} . rootfs rootfs.tar.bz2
cd - > /dev/null
else
${COLOR_ECHO} "${COLOR_BOLD}${COLOR_RED}## Android Target output data not exist "
${COLOR_ECHO} "${COLOR_NORMAL}"
exit
fi
### 終於.... 可以執行 TI AM335x 的 ICS 了.
裝個 "憤怒鳥" 來玩玩看吧 !!
http://www.youtube.com/watch?v=JURiyybtT4w&feature=g-upl
沒有留言:
張貼留言