经历几天的努力,终于将QStardict词典移植到了i.MX-287开发板,目前还有一些小bug,还要调试。
首先描述移植过程中遇到的问题:
1) 开发板光盘资料附带arm-linux-mulitilib-gnueabi-gcc4.4.4和嵌入式Qt4.7.3,开发板上的linux系统也自带Qt库和Qtopia,这些都是有利条件,但是QStardict依赖libglib-2.0, libz和libX11库,因此需要移植这些库;
解决方案:
libX11的交叉编译请参阅 交叉编译libX11 一文,其他几个库的编译方法类似,一般交叉编译都可以参考这篇文章,这样会比较规范,不容易出错。 另外由于我用的Qt4.7.3没有 DBUS模块,所以按照libxml-->libdbus-1-->libQtXml的顺序单独编译了QtDBus库,编译时注意包括Qtxxx/include/QtCore和Qtxxx/include/QtDBus中的头文件,Qtxxx/src/dbus中的
源文件必须去掉#ifndef QT_NO_DBUS语句,最后头文件安装到Qt4.7.3/include/QtDBus中,库文件安装到Qt4.7.3/lib中。
2)QStardict的快捷键功能在嵌入式系统中用不到,因此需要裁减这个功能;
解决方案:
在文件keyboard.cpp和qxtglobalshortcut_x11.cpp中增加一个文件如下,并取消头文件#include <QX11Info> 和qx11info_x11.h
1 //qx11info_x11_embed.h
2 #ifndef QX11INFO_X11_H
3 #define QX11INFO_X11_H
4
5 #include <QtCore/qnamespace.h>
6
7 typedef struct _XDisplay Display;
8
9 QT_BEGIN_HEADER
10
11 QT_BEGIN_NAMESPACE
12
13 QT_MODULE(Gui)
14
15
16 class QX11Info;
17
18 class Q_GUI_EXPORT QX11Info
19 {
20 public:
21 QX11Info();
22 ~QX11Info();
23
24 static Display *display() { return 0; };
25
26
27 protected:
28
29 };
30
31 QT_END_NAMESPACE
32
33 QT_END_HEADER
34
35 #endif // QX11INFO_X11_H
3)原软件设计的窗体和控件尺寸过大,需要适当减小,目前还不是很清楚怎样做到减小控件尺寸;
解决方案:
启动后按程序主窗口缩放键即可
4)移植后发现找不到两个插件,在修改QSTARDICT_PLUGINS_DIR的值后找到了两个插件,但还是不能正常工作;
解决方案:
调整宿主机中的QT_BUILD_KEY(在文件\qt4.7.3\include\QtCore\qconfig.h中)使之与开发板中的build key一致;
5)调试时取消了Qtopia的启动,直接启动QStardict,忘记了给程序后面加上“&"以防止程序独占终端,导致minicom无法登陆开发板,可能需要重装系统;
解决方案:
先使用TF卡格式化Nand Flash,然后启动光盘资料中的EasyARM-i.MX28xA_V1.05\3、Linux\5、Linux系统恢复\EasyARM-i.MX28xA V1.13及以后\USB烧写\MfgTool 1.6.2.055程序使用USB方式烧录uImage和rootfs.tar.bz2系统文件,注意MfgTool烧录时为保持系统稳定建议关闭Wifi和其他应用程序,重启后系统文件在ubi0:rootfs分区中,个人文件分区ubi1:opt已经挂载到/opt目录,把QStardict安装到这里即可。
6)重装系统后QStardict程序键盘无法输入;
解决方案:
#vi /etc/profile, 增加一行 export QWS_KEYBOARD="LinuxInput:/dev/input/event1"
这是QStardict初步移植后的外观: