2013年3月22日 星期五

Build TI-Android-JB-4.1.2_AM335x_4.0.1 BSP in x64 Fedora 18

經過之前的測試  , 發現非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 上執行!!