Chinaunix首页 | 论坛 | 博客
  • 博客访问: 48697
  • 博文数量: 26
  • 博客积分: 1175
  • 博客等级: 少尉
  • 技术积分: 300
  • 用 户 组: 普通用户
  • 注册时间: 2010-02-14 19:16
文章分类
文章存档

2011年(1)

2010年(25)

我的朋友

分类: LINUX

2010-03-10 20:07:44

由于自己写的QT程序在PC机能跑了。想尝试一下移植到自己的板子上试试。看看效果怎么样。在网上找了相当多的移植资料。但是都是大同小异。来来去去都是一样的。基本上什么都试过了。但是都是不行。没办法了。只有自己靠自己一步一的移植了。。。
开发环境:
【操作系统】:RHCL 5

【交叉编译器】:arm-linux-gcc-3.4.1 这个版本很重要。如果版本过低编译不过。或者运行不成功的。
1. 下载源码包
到下载你所需要的QT版本!
qt-x11-opensource-src-4.5.1.tar.bz2
qt-embedded-linux-opensource-src-4.5.1.tar.bz2
2.编译及安装qt-x11-opensource-src-4.5.1
qt-x11版本可以产生Qt开发工具,如designer等等,最重要的是可以得到qvfb,嵌入式的开发有了qvfb,就可以不需要实际的开发板,也可以开发Qt应程序。qt-embedded版本就是专门用于嵌入式方面的版本。
tar xjvf qt-x11-opensource-src-4.5.1.tar.bz2
cd qt-x11-opensource-src-4.5.1
./configure 
make
make install

3:编译及安装qt-embedded-linux-opensource-src-4.5.1
QTE就是一个库用来移植到板子上的
编译及安装qt-embedded-linux-opensource-src-4.5.1
mv qt-embedded-linux-opensource-src-4.5.1 qt-embedded-linux-opensource-src-4.5.1-x86
./configure -prefix /usr/local/Trolltech/QtEmbedded-4.5.1-x86 -embedded x86 -qvfb
make
make install 编译约2-3小时不等
qvfb 是用来测试你移植到板子上的程序的

测试QT的时候输入环境变量 生成适合用qvfb用的代码,
测试QT的时候输入环境变量 生成适合用qvfb用的代码,
export PATH=/usr/local/arm/3.4.1/bin/:$PATH
export QTEDIR=/usr/local/Trolltech/QtEmbedded-4.5.1-x86/
export PATH=/usr/local/Trolltech/QtEmbedded-4.5.1-x86/bin/:$PATH
export LD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.5.1-x86/lib/:$LD_LIBRARY_PATH

4:再编译和移植TSLIB
在解压tslib-1.3
1.     export PATH=/usr/local/arm/3.4.1/bin/:$PATH

2.     ./autogen.sh  --host=arm-linux

3.   ./configure --host=arm-linux --target=arm-linux --prefix=$PWD/build --enable-inputapi=yes

4.     export PLUGIN_DIR=tslib-1.3/plugins

5.     vim config.h在里面加上 #define USE_INPUT_API 1 这一句的

6.     make;make install
vim /root/build/etc/ts.conf将里面被注掉的#module mousebuts恢复即可
把生成的bulid 改为tslib
在PC上
mv tslib /usr/local/
再打包tar -cjf tslib.tar.gz tslib
再发到板子的系统 /usr/local 解压
再测试校验触摸。为以后qt程序用
在目标版那里设环境变量     环境变量很重要的。一步错误都导致出不了结果

 export V_ROOT=/usr/local/tslib         目录
 export TSLIB_TSEVENTTYPE=H3600    对tslib的设备结构体定义
 export TSLIB_CONSOLEDEVICE=none   tslib运行需要的控制台,这里就是LCD屏幕,设定控制台设备为none,否则默认为/dev/tty
 export TSLIB_FBDEVICE=/dev/fb0     指定帧缓冲设备
 export TSLIB_TSDEVICE=/dev/event1    指定触摸屏设备节点文件(这个要看cat /proc/bus/input/devices里面触摸屏对应的事件)
 export TSLIB_CALIBFILE=$V_ROOT/etc/pointercal 指定触摸屏校准文件pintercal的存放位置。在设定这个文件的位置时候,要注意存放校准文件的位置是否允许读写,校准文件一定要存放在允许读写的位置。
 export TSLIB_CONFFILE=$V_ROOT/etc/ts.conf      tslib模块配置文件
 export TSLIB_PLUGINDIR=$V_ROOT/share/ts/plugins   tslib插件库目录
 export LD_LIBRARY_PATH=$V_ROOT/lib:$LD_LIBRARY_PATH      指定tslib库文件路径

如果没有生成或者读出失败就是权限问题了。/把tslib/etc/里面的权限改777
把生成的pointercal考到/etc下

5:再解压qt-embedded-linux-opensource-src-4.5.1
mv qt-embedded-linux-opensource-src-4.5.1 qt-embedded-linux-opensource-src-4.5.1-arm
这个生成的东西用来移到板子上的
./configure -prefix /usr/local/Trolltech/QtEmbedded-4.5.1-arm -embedded arm \
-release -shared -fast -no-largefile -qt-sql-sqlite -no-qt3support -no-xmlpatterns -no-mmx -no-3dnow -no-sse -no-sse2 -no-svg -no-webkit -qt-zlib -qt-gif \
-qt-libtiff -qt-libpng -qt-libmng -qt-libjpeg -make libs -nomake tools -nomake examples -nomake docs -nomake demo -no-nis -no-cups -no-iconv -no-dbus \
-no-openssl -xplatform qws/linux-arm-g++ -little-endian -qt-freetype -depths 16,18 -qt-gfx-linuxfb -no-gfx-transformed -no-gfx-multiscreen \
-no-gfx-vnc -no-gfx-qvfb -qt-kbd-usb -no-glib -qt-mouse-tslib -I/usr/local/tslib/include -L/usr/local/tslib/lib

   注意这个目录要跟你的tslib安装目录相同!!
 make && make install
 进入/usr/local/Trolltech
 tar czvf QtEmbedded-4.5.1-arm.tar.gz

移植到板子上的程序编译前设好环境变不
编译的时候要用ARM-LINUX-G++ 3。4。1的版本

    export PATH=/usr/local/arm/3.4.1/bin/:$PATH
    export QTEDIR=/usr/local/Trolltech/QtEmbedded-4.5.1-arm/
    export PATH=/usr/local/Trolltech/QtEmbedded-4.5.1-arm/bin/:$PATH
    export LD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.5.1-arm/lib/:$LD_LIBRARY_PATH

在目标板子上/usr/local/
 mdkir Trolltech
把打包好的库文件:QtEmbedded-4.5.1-arm.tar.gz复制到目标板子/usr/local/Trolltech目录下


在目标板子上设好环境变量
        export V_ROOT=/usr/local/tslib
        export TSLIB_CONSOLEDEVICE=none
        export TSLIB_FBDEVICE=/dev/fb0
        export TSLIB_TSDEVICE=/dev/event1
        export TSLIB_CALIBFILE=/etc/pointercal
        export TSLIB_CONFFILE=$V_ROOT/etc/ts.conf
        export TSLIB_PLUGINDIR=$V_ROOT/share/ts/plugins
        export LD_LIBRARY_PATH=$V_ROOT/lib:$LD_LIBRARY_PATH
        export QWS_MOUSE_PROTO=Tslib:/dev/event1
        export QTDIR=/usr/local/Trolltech/QtEmbedded-4.5.1-arm
        export QPEDIR=/usr/local/Trolltech/QtEmbedded-4.5.1-arm
        export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
        export  QWS_DISPLAY="LinuxFb:mmWidth480:mmHeight272:0"
        export QT_QWS_FONTDIR=/usr/local/Trolltech/QtEmbedded-4.5.1-arm/lib/fonts/ 

校验运行QT之前先校验
        export V_ROOT=/usr/local/tslib
        export TSLIB_CONSOLEDEVICE=none
        export TSLIB_FBDEVICE=/dev/fb0
        export TSLIB_TSDEVICE=/dev/event1
        export TSLIB_CALIBFILE=/etc/pointercal
        export TSLIB_CONFFILE=$V_ROOT/etc/ts.conf
        export TSLIB_PLUGINDIR=$V_ROOT/share/ts/plugins
        export LD_LIBRARY_PATH=$V_ROOT/lib:$LD_LIBRARY_PATH
        export QWS_MOUSE_PROTO=Tslib:/dev/event1  //重要QT对应触摸的

6:测试和问题结局
弄好了再测试程序
qt-embedded-linux-opensource-src-4.5.1-arm
内面的例子方到板子上
./books -qws
下面说的所有操作都是在板子上的
嘿嘿。。问题来了
1 :Cannot create Qt/Embedded data directory: /tmp/qtembedded-0
好。在/上建立/tmp 给上 777 的命令。这命令可以在PC机上错作
建立了/tmp了。如果出现Qt for Embedded Linux data directory is not owned by user 0
那就知道怎么做了。。不能给超级用户用。。。有没搞错阿。我都不能用了。还能谁用了。没办法。QT就是那么叼。
只能在板子上建立用户咯。。建立一个/home目录咯
然后到你的BUSYBOX那里添加增加用户的命令 如果不懂的话。我就不会教你了哦
好拉。增加了命令后。就添加用户咯
添加用户后会在你的/etc/那里生成一个passwd修改里面的内容吧第二个数字!!就是相同的那个数字第二个改为0,就是给一般用户超级权限。。好似是吧
然后再执行那些程序看看怎么样。。
如果再不行就把他们权限全改777
记得环境变量!!
一般出现断错误基本上是ARM-LINUX-GCC的版本问题

编译简单的QT程序或者QtEmbedded-4.5.1-arm自带的程序例子挂载到开发板执行看是否成功

一般会提示找不到fonts  libQtGui.so.4  libstdc++.so.6  libQtNetwork.so.4 libQtCore.so.4 librt.so.1等库文件

从/usr/local/trolltech/QtEmbedded-4.5.1-arm/lib 和 /usr/local/arm/3.4.1/arm-linux/lib中拷贝到开发板上即可
 libstdc++.so.5可以从usr/local/arm/3.3.2/arm-linux/lib/libstdc++.so.5获得

   #arm-linux-readelf -a myqtprogram | grep Shared  //Shared首字母大写;
   #arm-linux-readelf  -a books | grep lib //需要的库文件     


OK。。。就这样完成。不知道是否我用的板子和网上他们说的不一样。导致只能这样才能跑起自己的程序
如有什么问题。请大家提出来

阅读(583) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~