經過之前的測試 , 發現非64 位元 不行 , 好吧 , Fedora 16 i686 更新成為 Fedora 18 x64 吧 !!
按照 TI 網頁的說明將 TI-Android-JB-4.1.2_AM335x_4.0.1.bin 下載 , 並且解開 .
先按照 TI 說明build 一次 , 將缺少的 package 和 有錯誤的修正 , 就可以在 AM335x_EVM_SK board 上凍做了 .
下列說明修改的部份:
A.建立一個環境設定 shell file. ( env.sh )
#!/bin/sh
#
# vi: set ts=4 :
## ======== setting PATH ========
TOOLCHAIN_BIN="${PWD}/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6/bin"
PATH1=`echo ${PATH} | sed "s|[:]${TOOLCHAIN_BIN}||g" | sed "s|${TOOLCHAIN_BIN}[:]||g"`
PATH2=`echo ${PATH1} | sed "s|[:]${PWD}/build||g" | sed "s|${PWD}/build[:]||g"`
PATHE=${PATH2}
export PATH=${TOOLCHAIN_BIN}:${PWD}/build:${PATHE}
## ========
export USE_CCACHE=1
export CROSS_COMPILE=arm-eabi-
export ARCH=arm
export TARGET_PRODUCT=am335xevm_sk
export OMAPES=4.x
## ===================================
B. 和之前一樣會遇到 perl 版本不合, 修改 "make-hash-tools.pl" 檔案.
詳細請參考之前文章.
Index: make-hash-tools.pl
===================================================================
--- make-hash-tools.pl (revision 1)
+++ make-hash-tools.pl (working copy)
@@ -20,7 +20,8 @@
# Boston, MA 02110-1301, USA.
use strict;
-use Switch;
+# use Switch;
+use feature qw(switch);
use File::Basename;
my $outdir = $ARGV[0];
@@ -28,9 +29,9 @@
my $option = basename($ARGV[0],".gperf");
-switch ($option) {
+given ($option) {
-case "DocTypeStrings" {
+when ("DocTypeStrings") {
my $docTypeStringsGenerated = "$outdir/DocTypeStrings.cpp";
my $docTypeStringsGperf = $ARGV[0];
@@ -40,7 +41,7 @@
} # case "DocTypeStrings"
-case "ColorData" {
+when ("ColorData") {
my $colorDataGenerated = "$outdir/ColorData.cpp";
my $colorDataGperf = $ARGV[0];
@@ -51,3 +52,4 @@
} # case "ColorData"
} # switch ($option)
+
B.在 buil sqx driver 的時候會發現有 bug , 這是 Makefile的錯誤.
修正 ./hardware/ti/sgx/Makefile.KM.Android file.
Index: hardware/ti/sgx/Makefile.KM.Android
===================================================================
--- hardware/ti/sgx/Makefile.KM.Android (revision 1)
+++ hardware/ti/sgx/Makefile.KM.Android (working copy)
@@ -1,6 +1,6 @@
include Rules.make
-OMAPES:=INVALIDVAL
+#OMAPES:=INVALIDVAL
.PHONY: all_km buildkernel
.PHONY: clean_km cleankernelmodule
@@ -11,21 +11,21 @@
buildkernel:
ifeq ($(OMAPES),4.x)
- @echo "building the sgx kernel modules..."
-
- @export KERNELDIR=$(KERNEL_INSTALL_DIR) && \
- export PATH=$(CSTOOL_PATH):$(PATH) && \
- export CROSS_COMPILE=$(CSTOOL_PREFIX) && \
- export EURASIAROOT=$(EURASIAROOT) && \
- export ANDROID_ROOT=$(ANDROID_ROOT) && \
- export ARCH=arm && \
- make -C $(GFX_KERNMOD_SRCPATH)/eurasiacon/build/linux2/omap4430_android KERNELDIR=$(KERNEL_INSTALL_DIR) TARGET_PRODUCT=$(TARGET_PRODUCT) SGXCORE=530 SGXCOREREV=125 BUILD=release
- @echo "copying the sgx kernel modules to $(GFX_REL_ES4_LIB_SRCPATH_ANDROID)"
+ @echo "######## building the sgx kernel modules.... ########"
+ export KERNELDIR=$(KERNEL_INSTALL_DIR) \
+ PATH=$(CSTOOL_PATH):$(PATH) \
+ CROSS_COMPILE=$(CSTOOL_PREFIX) \
+ EURASIAROOT=$(EURASIAROOT) \
+ ANDROID_ROOT=$(ANDROID_ROOT) \
+ ARCH=arm && \
+ make -C $(GFX_KERNMOD_SRCPATH)/eurasiacon/build/linux2/omap4430_android \
+ KERNELDIR=$(KERNEL_INSTALL_DIR) TARGET_PRODUCT=$(TARGET_PRODUCT) SGXCORE=530 SGXCOREREV=125 BUILD=release
+ @echo "######## copying the sgx kernel modules to $(GFX_REL_ES4_LIB_SRCPATH_ANDROID) ########"
@cp -rf $(GFX_KERNMOD_SRCPATH)/eurasiacon/binary2_omap4430_android_release/target/pvrsrvkm.ko $(GFX_REL_ES4_LIB_SRCPATH_ANDROID)/.
@cp -rf $(GFX_KERNMOD_SRCPATH)/eurasiacon/binary2_omap4430_android_release/target/omaplfb.ko $(GFX_REL_ES4_LIB_SRCPATH_ANDROID)/.
+
else ifeq ($(OMAPES),5.x)
@echo "building the sgx kernel modules..."
-
@export KERNELDIR=$(KERNEL_INSTALL_DIR) && \
export PATH=$(CSTOOL_PATH):$(PATH) && \
export CROSS_COMPILE=$(CSTOOL_PREFIX) && \
@@ -45,8 +45,8 @@
clean_km: cleankernelmodule cleandevmem2
builddevmem2:
- @echo "building devmem2..."
- make -C $(GFX_DEVMEM2_SRCPATH) && make -C $(GFX_DEVMEM2_SRCPATH) install
+ @echo "######## building devmem2.... ########"
+ @make -C $(GFX_DEVMEM2_SRCPATH) && make -C $(GFX_DEVMEM2_SRCPATH) install
cleandevmem2:
make -C $(GFX_DEVMEM2_SRCPATH) clean
C. 因為這個版本沒有 git , 不過在 Make 過程卻用 .git/HEAD 來產生版本編號.
修正 "./hardware/ti/wlan/mac80211/compat_wl12xx/drivers/net/wireless/wl12xx/Makefile" File.
Index: hardware/ti/wlan/mac80211/compat_wl12xx/drivers/net/wireless/wl12xx/Makefile
===================================================================
--- hardware/ti/wlan/mac80211/compat_wl12xx/drivers/net/wireless/wl12xx/Makefile (revision 1)
+++ hardware/ti/wlan/mac80211/compat_wl12xx/drivers/net/wireless/wl12xx/Makefile (working copy)
@@ -4,10 +4,10 @@
define filechk_version.h
(echo 'static const char *wl12xx_timestamp = __TIMESTAMP__;'; \
echo 'static const char *wl12xx_git_head = \
- "$(shell git describe --dirty)";')
+ "$(shell hostname)";')
endef
-$(obj)/version.h: .git/HEAD .git/index .git/refs/tags
+$(obj)/version.h: Makefile
@$(call filechk,version.h)
$(obj)/main.c: $(src)/version.h
E. Build kernel 過程中會發現少了mkimag file .
這個 utility 是由 u-boot 產生 , 所以修改一下 ./Makefile , 讓 u-boot 在 build kernel 之前會先 build 出來, 並且會將 mkimage 複製到下 ./build/ .
Index: Makefile
===================================================================
--- Makefile (revision 2)
+++ Makefile (working copy)
@@ -38,7 +38,7 @@
endif
endif
-kernel_build: droid
+kernel_build: u-boot_build droid
ifeq ($(strip $(kernel_not_configured)),)
ifeq ($(TARGET_PRODUCT), am335xevm_sk)
$(MAKE) -C kernel ARCH=arm am335x_evm_android_defconfig
@@ -94,7 +94,7 @@
$(MAKE) -C u-boot ARCH=arm am335x_evm_config
endif
ifeq ($(TARGET_PRODUCT), am335xevm_sk)
- $(MAKE) -C u-boot ARCH=arm am335x_evm_config
+ @$(MAKE) -C u-boot ARCH=arm am335x_evm_config
endif
ifeq ($(TARGET_PRODUCT), am335xevm)
$(MAKE) -C u-boot ARCH=arm am335x_evm_config
@@ -108,11 +108,21 @@
ifeq ($(TARGET_PRODUCT), flashboard)
$(MAKE) -C u-boot ARCH=arm flashboard_config
endif
- $(MAKE) -C u-boot ARCH=arm CROSS_COMPILE=arm-eabi-
+ @$(MAKE) -C u-boot ARCH=arm CROSS_COMPILE=arm-eabi-
+ @cp u-boot/tools/mkimage build/
u-boot_clean:
- $(MAKE) -C u-boot ARCH=arm CROSS_COMPILE=arm-eabi- distclean
+ @$(MAKE) -C u-boot ARCH=arm CROSS_COMPILE=arm-eabi- distclean
+ @cd u-boot ;\
+ rm MLO* > /dev/null 2>&1 ; \
+ rm -rf spl/arch spl/board spl/common spl/disk spl/drivers spl/fs \
+ spl/lib spl/net spl/spl ; \
+ cd - > /dev/null
+ @if [ -e "build/mkimage" ];then \
+ rm build/mkimage ; \
+ fi
+
# x-loader is required only for AM37x-based devices
# TODO: Handle non-supported devices gracefully
x-loader_build:
@@ -150,4 +160,7 @@
(cd $(ANDROID_INSTALL_DIR)/out/target/product/$(TARGET_PRODUCT); \
tar cvjf nfs-rootfs.tar.bz2 android_rootfs)
-rowboat_clean: $(CLEAN_RULE)
+rowboat_clean: $(CLEAN_RULE) u-boot_clean
+ @if [ -e "./.ccache" ];then \
+ rm -rf ./.ccache ; \
+ fi
F.在執行 make rowboat_clean 的時候會發現 sgx 又有錯誤.
主要是認不得 Android SDK 版本 , 修正 "./hardware/ti/sgx/eurasiacon/build/linux2/common/android/platform_version.mk" Files
Index: hardware/ti/sgx/eurasiacon/build/linux2/common/android/platform_version.mk
===================================================================
--- hardware/ti/sgx/eurasiacon/build/linux2/common/android/platform_version.mk (revision 1)
+++ hardware/ti/sgx/eurasiacon/build/linux2/common/android/platform_version.mk (working copy)
@@ -46,7 +46,7 @@
cat $(TARGET_ROOT)/product/$(TARGET_PRODUCT)/system/build.prop | \
grep ^ro.build.version.release | cut -f2 -d'=' | cut -f1 -d'-'; \
else \
- echo 1.6; \
+ echo 4.9.9; \
fi)
G.在 clean 過程 wlan driver 會有 error .
主要是某個 config file 已經被刪除 , makefile 卻要 include 這個 file .
修正 ./hardware/ti/wlan/mac80211/compat_wl12xx/Makefile.
Index: hardware/ti/wlan/mac80211/compat_wl12xx/Makefile
===================================================================
--- hardware/ti/wlan/mac80211/compat_wl12xx/Makefile (revision 2)
+++ hardware/ti/wlan/mac80211/compat_wl12xx/Makefile (working copy)
@@ -43,7 +43,7 @@
export CREL_PRE:=.compat_autoconf_
export CREL_CHECK:=$(CREL_PRE)$(CREL)
-include $(PWD)/$(COMPAT_CONFIG)
+-include $(PWD)/$(COMPAT_CONFIG)
all: modules
這樣就可以正確 在 Fedora 18 x64 下 build出所有東西 , 並可以在 am335xevm_sk 上執行!!