移植QT4.5.3到Micro2440常见问题总结
作者:罗毅
时间:2010-12-25
移植QT了,在网上找了一大堆资料资料,很多很多的都是在转载的,有用的信息很少,也不系统,一些搞技术的一天都不负责,总是转来转去的,也不看看到底能不能用,有个时候还会误人,不禁感叹,要想在通过太杂太乱的网络学点东西,真的好难好难,没办法,既然要决定入这一行,就得忍受这种苦难。好了,费话少说,直接进入正题吧。
下面是我在移植的时候碰到一些问题,把它们总结出来,供各位网友学习的时候借鉴参考,通过网络学习嵌入式,现在把我的学习经验供大家参考,也算是有取有予吧,响应Richard Stallman的号召吧。为你能看到这篇文档而庆幸吧,因为你用几分钟的时候就能收获到几个月的经验。
NO.1 Segmentation fault 解决办法
有两种方法可解决问题:
1.此错误其实是图形缓冲区linuxfb的问题,可以修改qt-embedded-opensource-src-4.5.3/src/gui/embedded/qscreenlinuxfb_qws.cpp源码:
424行左右的地方:
726行左右的地方:
除此之外,在./configure中如果没有去掉一些不必要或硬件不支持的选项也可能引发Segmentation Fault问题
2.问题是由于编译器器引起。
编译QT程序的arm-linux-gcc本身的bug。有效的解决方法是,使用4.1.2版本的arm-linux-gcc代替我的arm-linux-gcc-4.3.2。
NO. 2 linuxFB:driver not found
No raw modules loaded
Ts_config:No such file or directory
我遇到这样的问题是由于修改ts.conf时候module raw input时在前面留有空格所至,所以 注意一定要去掉module raw input 前面的空格,否则会提示:
linuxFB: driver not found
最好是去掉所有无用的东西,只留下:
NO.3 ts_open:No such file or directory
dev/touchscreen/ucb1x00:no such file or directory
出现这样的错误的时候,你可以在终端查看一下etc/profile中的触摸屏配置参数有没有配置进入环境变量。
这里还应注意,环境变量参数最好应放在前面,放在后面好像还加不进开机后的环境变量里。
启动开发板,在终端中输入:
env
查看上面配置的环境变量是否加入了开机后的路径里,如没有出现下面如图所示的参数,则说明你所配置的变量没有加入变量。
NO.4 QWSSocket::connectToLocaFile coluld connect::No such File or directory
运行程序的时候没有让其加到显示设备上运行。
在终端运行程序的时候加上:
./hello -qws
NO.5 Error opening framebuffer device /dev/fb0
QScreenLinuxFb::connect: No such file or directory
原因是 Qt-Embedded 在查找系统的显示设备时,默认去寻找 LinuxFb,也即 Linux 的/dev/fb0设备。
在开发板上出现这样的错误还是由于TSLIB_TSDECIVE环境变量没有正确加入开发板。可以用env来查看。
如果是在X86上出现这样的错误,则可能是由于安装了qvfb后,系统找不到显示的设备,你需要在运行程序之前打开显示设备:
source setenv-x86.sh 配置X86运行环境变量
./qvfb 打开QVFB
./hello -qws
如果还是不行,你就需要在编译Qt-Embedded时的configure命令加上如下选项./configure -plugin-gfx-qvfb -plugin-kbd-qvfb -plugin-mouse-qvfb 或
./configure -qt-gfx-qvfb -qt-kbd-qvfb -qt-mouse-qvfb
如果,你不想重新编译Qt-Embedded,也可以单独编译qvfb的gfxdrivers,命令如下cd qt-embedded-linux-opensource-src-4.5.3/src/plugins/gfxdrivers/qvfb/ /usr/local/Trolltech/QtEmbedded-4.5.3/bin/qmake
gmake install
NO.6
[root@FriendlyARM fa]# ./hello -qws
./hello: relocation error: /opt/qt/lib/libQtGui.so.4: symbol __floatsisf, version Gcc_3.0 not defined in file libgcc_s.so.1 with link time reference.
拷贝/usr/local/arm/3.4.2/arm-linux/lib/目录下的libgcc_s.so、libgcc_s.so.1这两个文件覆盖/opt/mini2440/yaffs_fs/root_qtopia/lib目录下的libgcc_s.so、libgcc_s.so.1就可以了(其实这两个文件中,一个是另外一个的符号链接)。
NO.7
运行Qt程序时,如果提示无法加载某些库文件,那么,首先检查环境变量$LD_LIBRARY_PATH是否包含了Qt库文件在开发板上的存放路径;第二,如果环境变量正确,那么,则根据提示,从4.3.2交叉编译工具存放路径下的/lib目录中将所需库文件复制到开发板上的Qt库中去