转载时请注明出处和作者联系方式
文章出处:http://blog.csdn.com/keensword007
作者联系方式:琴剑 <keensword007 at sina dot com>
最近因工作需要移植Helix player到Moto的linux手机上,拿到的开发机是Moto E6.
E6是一个2.4内核的arm体系的Linux。首先是上各大论坛恶补了一下基础知识,
E6新手快速入门教程这篇文档总结得非常全面,推荐初次玩Moto手机的看看。
要开发程序,首先是需要交叉编译工具链。上网找了一些资料,的确有人整理了一些这样的toolchain,非常著名的是
A1200/E6之交叉编译贴子所引用的Release_yan0.rar,可惜下载链接都已经失效了,google了一把,也没有找到下载的地方,只能放弃。我最后选择了ezx-crosstool-0.6(写本文时的最新版本,可以在这里下载),因为这个比较简单容易理解。解压之后运行build.sh,它会去下载所需的组件并自动编译。编译出来的交叉编译工具链是非常老的版本,对应版本为:
binutils 2.15
gcc 3.3.6
glibc 2.3.2
glibc-linuxthreads 2.3.2
linux 2.4.26
注意在运行build之前,安装flex, bison这两个包。
在Ubuntu下
sudo apt-get install flex bison
就可以了。装完之后编译仍然出错,这次的错误信息为:
In file included from /usr/include/fcntl.h:217,
from /home/chenzhengyong/ezx-crosstool-0.5/build/arm-linux/gcc-3.3.6-glibc-2.3.2/gcc-3.3.6/gcc/system.h:208,
from /home/chenzhengyong/ezx-crosstool-0.5/build/arm-linux/gcc-3.3.6-glibc-2.3.2/gcc-3.3.6/gcc/collect2.c:30:
In function ‘open’,
inlined from ‘collect_execute’ at /home/chenzhengyong/ezx-crosstool-0.5/build/arm-linux/gcc-3.3.6-glibc-2.3.2/gcc-3.3.6/gcc/collect2.c:1575:
/usr/include/bits/fcntl2.h:51: error: call to ‘__open_missing_mode’ declared with attribute error: open with O_CREAT in second argument needs 3 arguments
make[1]: *** [collect2.o] Error 1
make[1]: Leaving directory `/home/chenzhengyong/ezx-crosstool-0.5/build/arm-linux/gcc-3.3.6-glibc-2.3.2/build-gcc-core/gcc'
make: *** [all-gcc] Error 2
因为ubuntu9.10自带的是gcc-4.3.2,这个版本的编译器对编译问题检查比较严格,所以必须安装gcc-4.1,但是不必卸载4.3.2。方法是用新立得软件包管理器安装gcc-4.1,之后
sudo rm /usr/bin/gcc (删除GCC,它只是个到gcc-4.3.2的软连接文件)
sudo ln -s /usr/bin/gcc-4.1 /usr/bin/gcc (建立GCC到gcc-4.1的软连接)
此外如果你运行
ls -la /bin/sh
命令,会看到/bin/sh其实是一个指向dash的软链接,请运行以下命令,将/bin/sh链接到bash。
sudo mv /bin/sh /bin/sh.old
sudo ln -sf bash /bin/sh
再次
运行build.sh,这时,你应该得到了一份可以用于交叉编译的编译环境。如果你没有修改过build.sh里的RESULT_TOP变量的话,它应该在ezx-crosstool-0.6/gcc-arm-iwmmxt目录下。
有了这一份交叉编译环境,理论上来说我们就可以来编译手机上的程序了。先做个测试吧。
写一个经典程序test.c:
#include <stdio.h>
int main(int argc, char* argv[])
{
printf("Hello world, MOTO E6!/n";
}
然后编译:
首先设置路径:
PATH=$PATH:~/mkezx/arm/gcc/gcc-3.3.6-glibc-2.3.2/arm-linux/bin
然后执行编译命令:
arm-linux-gcc -o test test.c
然后将生成的test复制到手机上,用eKonsole执行一下./test,果然输出了Hello world, MOTO E6!