分享

[ARM Linux] [Qt] 移植Qt程序到ARM Linux上 (包括如何构建专业的...

 =静心居= 2012-05-11

[ARM Linux] [Qt] 移植Qt程序到ARM Linux上 (包括如何构建专业的PDA界面、phone界面)

分类: Embedded ARM Linux Qt 264人阅读 评论(0) 收藏 举报

http://blogold./u2/86537/showart_1666271.html

qtopia-core-opensource-src-4.3.5.tar.gz 在up-netarm2410-s上的移植

  我的目标平台是博创的up-netarm s3c2410-s,
  内核:uname -a 显示 Linux (none) 2.4.18-rmk7-pxa1 #251 Fri Sep 22 15:11:45 CST 2006 armv4l unknown
  虚拟机环境:red hat linux 9  version :2.4.20  硬件环境:AMD 双核 2G SDRAM
 下面是Qtopia Core 4移植过程:
        1.  安装交叉编译器
博创光盘 2410-s\Linux V7.2\gui\Qt\tools 下提供。不要用cross-2.95.3,Qtopia Core 4指明要3.2以上的版本。
tar xjvf linux-gcc-3.4.1.tar.bz2 -C /
设置交叉编译的环境变量:
将export PATH=/usr/local/arm/3.4.1/bin:$PATH加入到/root/.bash_profile文件中
source /root/.bash_profile
[root@localhost /]# arm-linux-gcc  -v
Reading specs from 
/usr/local/arm/3.4.1/lib/gcc/arm-linux/3.4.1/specs
Configured with: 
/work/crosstool-0.27/build/arm-linux/gcc-3.4.1-glibc-2.
3.2/gcc-3.4.1/configure --target=arm-linux 
--host=i686-host_pc-linux-gnu 
--prefix=/usr/local/arm/3.4.1 
--with-headers=/usr/local/arm/3.4.1/arm-linux/include 
--with-local-prefix=/usr/local/arm/3.4.1/arm-linux 
--disable-nls --enable-threads=posix 
--enable-symvers=gnu --enable-__cxa_atexit 
--enable-languages=c,c++ --enable-shared --enable-c99 
--enable-long-long
Thread model: posix
gcc version 3.4.1

        2.  下载Qtopia Core 4的源代码
从Trolltech公司主页上去下载qtopia-core-opensource-src-4.3.5.tar.gz
http://www./download/
http://www.360doc.com/ftp://ftp.trolltech.com/
解压缩
[root@localhost /]# tar zxvf qtopia-core-opensource-src-4.3.5.tar.gz

下一步是编译,先别忙,源代码有需要该的地方,因为基本上所有的开发板都是带触摸屏的,所以要让源代码支持,实际上就是加上2个宏定义,很简单的。
打开qtopia-core-opensource-src-4.3.3\src\gui\embedded\qmouselinuxtp_qws.h
加上这2行:#define QT_QWS_IPAQ
           #define QT_QWS_IPAQ_RAW
还有需要注意的地方是:看一下 qmouselinuxtp_qws.cpp /dev/h3600_tsraw, 是不是你板子上的驱动文件名字,如果不是改成一样就可以了。

[root@localhost /]# cd qtopia-core-opensource-src-4.3.5
[root@localhost qtopia-core-opensource-src-4.3.5]#

#./configure -embedded arm -xplatform qws/linux-arm-g++ -depths 4,8,12,16 -no-qt3support -little-endian  -prefix /mnt/nfs/Qtopia-new

在配置过程中,需要选择"yes"
稍微等待一下,然后
# gmake
可以去干点别的事了,时间会比较久,这个时间和机器配置和上面的configure有关系的,建议机器的配置高一点,这样可以节省很多时间。
注意不是make,configure结束后有提示
# gmake install
需root 权限,注意不是make install.编译完成后,软件会安装在 /usr/local/Trolltech/Qtopia-Core-4.3.5-arm/
目录结构如下:
bin  demos  doc  examples  include  lib  mkspecs  plugins  translations

下面是qt-embedded-linux-opensource-src-4.4.0.tar.gz编译后的结果,基本差不多,好像qt-embedded-linux-opensource-src-4.4.0就是把qtopia-core-opensource-src改了一个名字(猜的,不知对否?)

[root@localhost QtEmbedded-4.4.0-arm]# ls
bin  demos  examples  include  lib  mkspecs  plugins  translations
将文件移到目标平台,我是通过nfs mount到/mnt/yaffs目录下
因为QT的共享库很大,所以在使用nfs服务的时候最好是能给他指定大点的缓冲区
mount -t nfs -o nolock,rsize=4096,wsize=4096 192.168.0.108:/mnt/yaffs/Qtopia /mnt/yaffs/Qtopia-new
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/mnt/yaffs/Qtopia-new/lib/
cd /mnt/yaffs/Qtopia-new/examples/mainwindows/application
./application -qws
注意软链接。如提示缺失libstdc++.so.6,libgcc_s.so.*等库文件,可从/usr/local/arm/3.4.1/arm-linux/lib复制过来。 
下面的错误是因为需要/tmp/qtembedded-0/QtEmbedded-0,在博创提供的yaffs下已经存在,而自己无法创建。所以,这里借用了Qtopia/tmp,自己的Qtopia改名为Qtopia-new。
提示权限不够,应该是文件系统的原因。
QWSServerSocket::init: Permission denied
QWSServerSocket: could not bind to file /tmp/qtembedded-0/QtEmbedded-0
QWSServerPrivate::initServer: server socket not listening: Illegal seek
Failed to bind to /tmp/qtembedded-0/QtEmbedded-0

目前屏幕能够出现应用程序界面,但还是提示一些错误
[/mnt/yaffs/Qtopia-new/examples/tutorial/t1]./t1 -qws
QWSServerSocket::init: Cannot allocate memory
QWSServerSocket: could not bind to file /tmp/.qt_soundserver-0
目前触摸屏,鼠标,键盘等还未加入或测试,仍需要进一步研究。

下面的文字可以参照,由于作者的根文件系统和应用程序文件系统已经做好,写权限受限,因此,没有继续测试,应该是没问题的。
步骤三:移植
       只要把刚才编译的库文件,字体放到文件系统里面就可以了
       具体操作:在文件系统下新建一个文件夹,我是放到已经有的一个文件夹/opt/qt/下的
       #cd opt
       #mkdir qt
       把/usr/local/Trolltech/Qtopia Core-4.3.3-arm/下的lib文件夹复制到opt/qt/下,复制前看下大小,你的flash是否放得下,我得flash是64M的,没问题。再在opt/qt下建立一个文件夹 qtopia,可以把你的应用程序放到这个里面。
       QT运行环境的设置,建一个脚本文件qtopia_setup,放到/bin下吧。
      # vi qtopia_setup 打开后加入下面的配置信息
       export set HOME=/root
export set QTDIR=/opt/qt
export set QPEDIR=/opt/qtopia
export set KDEDIR=/opt/qt
export set QWS_KEYBOARD="USB:/dev/input/event1"
export set QWS_MOUSE_PROTO="linuxtp:/dev/h3600_tsraw"
export set PATH=$QPEDIR/bin:$PATH
export QWS_DISPLAY="LinuxFb:mmWidth35:mmHeight45:0"
export QWS_SIZE=320x240
export set LD_LIBRARY_PATH=$PATH:$QTDIR/lib:$QPEDIR/lib

如果要开机运行QT程序的话,在上面的末尾加上
$QPEDIR/qttest -qws &
把qttest这个程序放在/opt/qt/qtopia下,可以从/usr/local/Trolltech/Qtopia Core-4.3.3-arm 的demo下随便拷一个过来,改个名字就可以了。
然后,在/etc/init.d/rcS里面加上这句:/bin/qtopia_setup
Linux启动的时候会自动运行rcs
步骤四:运行    
把新的文件系统发放到开发板上,上电就可以运行了,但不幸的是有提示错误。
在/usr/local/Trolltech/Qtopia Core-4.3.3-arm/lib/fonts 找不到字体库,解决办法很简单,在你的板子上建立这个文件夹,然后把/opt/qt/lib/fonts下的字体文件移动到你建的文件下:/usr/local/Trolltech/Qtopia Core-4.3.3-arm/lib/fonts 下就可以了。
再重启板子,或直接运行/bin/qtopia,这下就可以看到你的图形界面了吧 ,^_^!
界面上有个鼠标指针,程序中可以把它搞掉,你再点点触摸屏,可能会点不准,那是因为你还没有校准触摸屏,程序运行的时候,也会提示找不到/etc/下的校正参数,所以你需要下载一个校正程序来用 如:tslib-1.3.tar.bz2,这部分我还没搞定,有时间再弄。


如何构建专业的PDA界面、phone界面,也需要研究。

此文档主要参照
http://blog./u2/65122/showart.php?id=1083177
http://blog.csdn.net/meteor1516/archive/2008/05/03/2365540.aspx

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多