| 
 
| 1、搭建交叉编译环境 
 https://opensource.motorola.com/sf/sfmain/do/home是有交叉编译工具链源码的(X86_Targeted_Toolchain_Source.tgz),不过目前编译好的只有linux环境下的(e8-gcc.tar.lzma),所以我使用的开发环境是Ubuntu 10.04,下载下来解压到任意目录下,这里我解压到/LinuxDev/work/phone/moto/e8/toolchain目录下。
 
 为方便调用,写了一个脚本cross.sh:
 
 view plaincopy to clipboardprint?
 
 #!/bin/bash
 
 
 
 MOTO_PHONE_MODEL=e8
 
 MOTO_PHONE_DIR=phone/moto
 
 HOST_OS=`uname -o`
 
 if [ "${HOST_OS}" = "Cygwin" ]; then
 
 export PATH_WORK_ROOT=/cygdrive/d/work/${MOTO_PHONE_DIR}/${MOTO_PHONE_MODEL}
 
 else
 
 export PATH_WORK_ROOT=/LinuxDev/work/${MOTO_PHONE_DIR}/${MOTO_PHONE_MODEL}
 
 fi
 
 
 
 export TOOLCHAIN_VERSION=e8-gcc
 
 export TOOLCHAIN_PREFIX=arm-linux-gnueabi
 
 
 
 #
 
 # tool
 
 #
 
 export PATH_WORK_TOOL=${PATH_WORK_ROOT}/toolchain
 
 export PATH_TOOLCHAIN_ROOT=${PATH_WORK_TOOL}/${TOOLCHAIN_VERSION}
 
 export PATH_TOOLCHAIN_BIN=${PATH_TOOLCHAIN_ROOT}/bin
 
 
 
 #
 
 # Export ALL PATH
 
 #
 
 export PATH=${PATH_TOOLCHAIN_BIN}:${PATH}
 
 export CROSS_COMPILE=${TOOLCHAIN_PREFIX}-
 
 #!/bin/bash
 
 MOTO_PHONE_MODEL=e8
 
 MOTO_PHONE_DIR=phone/moto
 
 HOST_OS=`uname -o`
 
 if [ "${HOST_OS}" = "Cygwin" ]; then
 
 export PATH_WORK_ROOT=/cygdrive/d/work/${MOTO_PHONE_DIR}/${MOTO_PHONE_MODEL}
 
 else
 
 export PATH_WORK_ROOT=/LinuxDev/work/${MOTO_PHONE_DIR}/${MOTO_PHONE_MODEL}
 
 fi
 
 export TOOLCHAIN_VERSION=e8-gcc
 
 export TOOLCHAIN_PREFIX=arm-linux-gnueabi
 
 #
 
 # tool
 
 #
 
 export PATH_WORK_TOOL=${PATH_WORK_ROOT}/toolchain
 
 export PATH_TOOLCHAIN_ROOT=${PATH_WORK_TOOL}/${TOOLCHAIN_VERSION}
 
 export PATH_TOOLCHAIN_BIN=${PATH_TOOLCHAIN_ROOT}/bin
 
 #
 
 # Export ALL PATH
 
 #
 
 export PATH=${PATH_TOOLCHAIN_BIN}:${PATH}
 
 export CROSS_COMPILE=${TOOLCHAIN_PREFIX}-
 
 2、SDK开发环境
 
 指的是motorola封装的QT图形库以及一些系统API的开发包,下载下面几个包即可:
 
 E8SDK_by_ilove3d.tar.gz                      --- 1.0版开发包
 
 E8 EZX SDK v1.1 by tulanix.zip              --- 1.1版开发包,修复了1.0版本的一些错误
 
 bin和tmakelib目录                                   --- 1.1版本的SDK中不带这两个目录,可以从1.0版本中复制过来
 
 E8-lib.tar.bz2                                         --- 库文件,也可以从手机复制出来,不过不同的软件版本库文件有所不同,可能不通用
 
 ilove3d_ezxSample_zn5_e8.tar.gz        --- 示例代码
 
 这里我把SDK放在/LinuxDev/work/phone/moto/e8/sdk/e8_ezx_sdk-1.1.0目录下,这个目录即是${QTDIR}。下载的那个E8-lib包整的不好,很多链接都变成真实文件了,大概是没有在手机中打包出来,将示例代码解压出来的ezxSample目录放到${QTDIR}/test路径下,按照下面的方法进行编译。
 
 其中修改了一些文件:
 
 ${QTDIR}/env.sh
 
 view plaincopy to clipboardprint?
 
 #!/bin/bash
 
 
 
 . ../../cross.sh
 
 
 
 export MOTO_PHONE_MODEL=e8
 
 export MOTO_PHONE_SDK=e8_ezx_sdk-1.1.0
 
 export QTDIR=${PATH_WORK_ROOT}/sdk/${MOTO_PHONE_SDK}
 
 export TMAKEPATH=${QTDIR}/tmakelib/pwd/arm-linux-g++/
 
 export PATH=${QTDIR}/bin:${PATH}
 
 #!/bin/bash
 
 . ../../cross.sh
 
 export MOTO_PHONE_MODEL=e8
 
 export MOTO_PHONE_SDK=e8_ezx_sdk-1.1.0
 
 export QTDIR=${PATH_WORK_ROOT}/sdk/${MOTO_PHONE_SDK}
 
 export TMAKEPATH=${QTDIR}/tmakelib/pwd/arm-linux-g++/
 
 export PATH=${QTDIR}/bin:${PATH}
 
 ${TMAKEPATH}/tmake.conf
 
 第一次不修改此文件编译通过了,但是第二天再编译不知怎的就老是出现动态链接库(liblm.so等)找不到的错误,${QTDIR}/lib目录下是存在这个文件的,并且也将这个目录加到库文件的搜索路径中了,设置了LIBRARY_PATH、LD_LIBRARY_PATH等环境变量都没有用,将库文件复制到toolchain的lib目录下则可以找到。后来google了一下,链接时强制设置一下rpath就OK了。
 
 view plaincopy to clipboardprint?
 
 ...
 
 
 
 TMAKE_LFLAGS        = -Wl,-rpath ${QTDIR}/lib
 
 
 
 ...
 
 ...
 
 TMAKE_LFLAGS  = -Wl,-rpath ${QTDIR}/lib
 
 ...
 
 增加以下文件:
 
 ${QTDIR}/make.sh
 
 view plaincopy to clipboardprint?
 
 #!/bin/bash
 
 
 
 APP=$1
 
 
 
 progen -o ${APP}.pro
 
 tmake ${APP}.pro -o Makefile
 
 make
 
 rm -f *~ moc_*.cpp *.o ${APP}.pro Makefile
 
 #!/bin/bash
 
 APP=$1
 
 progen -o ${APP}.pro
 
 tmake ${APP}.pro -o Makefile
 
 make
 
 rm -f *~ moc_*.cpp *.o ${APP}.pro Makefile
 
 ${QTDIR}/test/ezxSample/build.sh
 
 view plaincopy to clipboardprint?
 
 #!/bin/bash
 
 
 
 APP=ezxSample
 
 
 
 ${QTDIR}/make.sh ${APP}
 
 #!/bin/bash
 
 APP=ezxSample
 
 ${QTDIR}/make.sh ${APP}
 
 编译ezxSample:
 
 (1) 进入E8_EZX_SDK_v1.1所在目录,执行:
 
 . env.sh
 
 (2) 进入ezxSample目录,执行:
 
 ./build.sh
 
 不过把编译出来的elf放到手机上不能运行了,执行出错,后来发现是FTP上传elf文件传输不全,几十KB的文件到了手机上就只有几百字节了,难怪运行出错,索性直接拷贝了一个现成的mgx,将编译出来的ezxSample替换进去重新打包成mgx,再用FTP上传到手机中安装,在MagicBox中运行成功。
 | 
 |