现在的位置: 首页 > 综合 > 正文

Moto A780机开发环境配置

2013年04月21日 ⁄ 综合 ⁄ 共 3231字 ⁄ 字号 评论关闭
 
构建摩托罗拉A780手机的开发环境....分类:技术文章原创
摩托罗拉A780,基于Linux平台的智能手机,在上面搞程序玩还是比较有意思的:) 最近100米出手了当年俺几千大洋购进的古董V66,又搞定了A780的交叉编译环境,高兴中,发文留念.
 
A780使用的内核是2.4.xx,内核源码sourceforge有下载,但是开发环境就需要自己搭建了,A780使用的CPU是Intel的XScale 312MHz,普通PC是x86,所以要交叉编译.
 
这里要说的是交叉工具链必须得自己搞,像别人做好的常规嵌入式开发板的工具链一般是无法使用的,原因是机器缺少FPU,一浮点运算就会出错,比如float a=1.0,b=3.0,然后printf("%f/n",a/b);的值不等于0.3333...而是一串很怪异的数:)
 
国外有不少Linuxer在研究这个东西,已经搞出来一个脚本了,像这里 http://lsb.blogdns.net/ezx-devkit (Unofficial EZX Software Development Kit)就是一个国外牛人建的站,搞定A780的交叉编译环境,需要这个站上的两个包,ezx-crosstool和dev-ezx.感谢这哥们为俺们提供了省事的路子.
 
首先下载ezx-crosstool,解压缩,改改build.sh里面的RESULT_TOP,这个就是"prefix"--最终包的安装目录,比如改成RESULT_TOP=/usr/local/arm,这个看个人习惯了,然后执行./build.sh,就会自动下载需要的软件包并且编译+安装了,如果网速慢,可以把需要的包全都下载下来,放到TARBALLS_DIR指定的目录下,一般是本目录下面的downloads目录,需要的包有gcc-3.3.6.tar.bz2; glibc-2.3.2.tar.bz2; glibc-linuxthreads-2.3.2.tar.bz2 <--以上三个包都可以从ftp://ftp.gnu.org下载到,还有一个是linux-2.4.26.tar.bz2,这个可以从ftp://ftp.kernel.org下载到:) 当然你也可以参照脚本,手工编译安装(汗...)
 
我这里编译过程中会提示"缺少-lunwind,失败",不理它,其实工具链已经搞定了,只是g++搞的好像有点bug,不知道是脚本的问题还是俺的rpwt,我看libunwind似乎不能在arm上编译,所以怀疑脚本哪个地方给弄错了,遂cd /usr/local/arm/gcc-3.3.6-glibc-2.3.2/arm-linux/arm-linux/lib,然后ln -s libstdc++.so libunwind.so,呵呵,居然蒙混过关,编译出来的C++程序也没啥错误....
 
至此基本的工具链就算搞定了,建议ln -s /usr/local/arm/gcc-3.3.6-glibc-2.3.2/arm-linux/bin/* /usr/local/bin做一下软链接,这样每次敲命令就省事潦.....
 
随便写个C程序,假设叫1.c,用arm-linux-gcc -o 1 1.c 编译一下试试看,如果成功没报啥错,file 1又显示"ELF 32-bit LSB executable, ARM, version 1 (ARM)"之类的字样,C编译器基本就测试成功了,同理可以试试C++的编译器是否好用~~
 
基本的东西搞定以后,就可以写一些服务啥的,放到电话上面去跑,如果想做GUI的程序,那还要接着搞....
 
众所周知桌面Linux是X-Window的窗口系统,窗口提供XLib做为底层的API,上面有许多图形库,像QT或者GTK之类,再上层,比如KDE桌面,又提供了基于QT的KDE库,A780和这个类似,不同的是里面没有X,用的是FrameBuffer的API,相当于XLib那一层,再上面一层就是QT/E,最顶层是Motorola自己的EZX库.
 
QT/E可以自己来构建,但是开发出来的应用会显得很"突兀",就像Qonsole一样,有很"另类"的外观(Qonsole是MOTO Linux手机上跑的一个终端,啥也不装也建议装上这个),要做A780的"原生"程序,那就要用到EZX库,可惜EZX不是开放的,这时候,dev-ezx包就有用了,那里面的*.h文件是我们最需要的,通通拷到/usr/local/arm/gcc-3.3.6-glibc-2.3.2/arm-linux/arm-linux/include下面,然后把手机里/usr/lib下面的东西全拷出来(因为有不少软链接,所以建议tar或者cp -a避免重复拷N多东西)放到/usr/local/arm/gcc-3.3.6-glibc-2.3.2/arm-linux/arm-linux/lib下面.
 
另外还有个moc目录也是比较有用的,直接在下面make,把生成的moc可执行程序挪到/usr/local/bin下面,改名为arm-linux-moc,至此,轻松搞定全部交叉编译工具链....
 
搞定以后可以写个hello,world试试看是不是好用:)
 
//程序hello.cpp
 
#include <zapplication.h>
#include <zmainwidget.h>
 
class MyWidget : public ZMainWidget {
    Q_OBJECT
 
    public:
        MyWidget(QWidget *parent):ZMainWidget("hehe...", true, parent, NULL, 0) {
            QLabel *lp;
            lp = new QLabel("Hello,World!",this,NULL);
            setContentWidget(lp);
            lp->show();
        }
};
 
int main(int argc, char** argv){
    ZApplication app(argc, argv);
    MyWidget *wp = new MyWidget(NULL);
    app.setMainWidget(wp);
    wp->show();
    return app.exec();
}
 
#include "hello.moc"
 
然后arm-linux-moc hello.cpp > hello.moc,再arm-linux-g++ -o hello hello.cpp -lezxappbase-xscale-r -DQWS -fno-exceptions -fno-rtti ,呵呵,生成了个可执行文件hello:)
 
接下来建一个目录,比如叫helloworld,把生成这个hello拷进去,再在hello同级目录下建一个hello.desktop文本文件,里面写:
 
[Desktop Entry]
BigIcon=
Comment=hello
Exec=hello
Icon=
Name=hello
Version=
OsVersion=
Shared=
Type=Application
 
执行tar zcf helloworld.mpkg helloworld,生成helloworld.mpkg,然后把手机设置成大容量存储器模式,把这个包拷进去,安装,点击运行....
 
啥?你的电话不支持mpkg的安装?用的是74版的系统吧....啥好动西只要让移动一"定制",也变lj了,建议刷机,刷官方50-41B1P版或者台湾50-42B1P版的系统,我用的是前者:)
 
 
 
出现这样的画面,证明已经成功了....
 
呵呵.其实dev-ezx包里面带的那个hello,world比俺这个好的多,话说俺比较懒.....
 
透个风声,俺正在实现一个"来电防火墙",A780没有这个软件的确是个遗憾....
 
【上篇】
【下篇】

抱歉!评论已关闭.