您的位置:首页 > 编程语言 > Qt开发

Qt在blackfin平台的移植(备忘)

2014-04-05 12:31 267 查看
Qt在blackfin平台的移植(备忘)

前提:已经存在一个可以运行ulinux系统(内核需要支持unix socket选项)且支持frambuffer的Blackfin平台环境,并且有了blackfin平台编译工具链。

1.下载QtEmbedde(Qt/E)版本源码,下载地址为:ftp://ftp.trolltech.no/qt/source/qt-embedded-linux-opensource-src-4.5.1.tar.gz;

2.下载Qt/E支持blackfin的补丁,从http://blackfin.uclinux.org/gf/ 下载blackfin-linux-dist-2010R1-RC5.tar.bz2的uClinux版本,因为该版本支持QT,解压后在解压目录下lib/qt-embedded/patches下有相关的补丁(如果有的话也可从其它地方下);

3.解压qt-embedded-linux-opensource-src-4.5.1.tar.gz,在解压后的目录下利用patch命令打上所有的补丁:

patch -p1 -E < (补丁文件)

注意:由于补丁版本的BUG打完补丁后还需要修改触压目录下src/gui/embedded/qscreenlinuxfb_qws.cpp文件,找到412行把MAP_SHARED改为MAP_PRIVATE,否则将无法正常显示,修改如下:

改前:

data =(unsigned char *)-1;

if (d_ptr->fd != -1)

data = (unsigned char *)mmap(0,mapsize, PROT_READ | PROT_WRITE,

MAP_SHARED, d_ptr->fd, 0);

改后:

data =(unsigned char *)-1;

if (d_ptr->fd != -1)

data = (unsigned char *)mmap(0,mapsize, PROT_READ | PROT_WRITE,

MAP_PRIVATE, d_ptr->fd, 0);

如果要支持自己的触摸屏需自更改相关鼠标驱动文件代码,文件所在目录为:src/gui/embedded,最后采用修改qmouselinuxtp_qws.cpp和qmouselinuxtp_qws.h文件,添加自己的触摸屏信息解码相关代码(详细的修改可以参考网上),最后需在配置选项增加-qt-mouse-linuxtp对linuxtp驱动的支持.

4.打完补丁和修改代码后,可以进行Qt的配置,可以通过./configure –help查看相关的配置帮助,配置选项的意思可以在配置帮助查看,最后采用如下配置:

./configure-prefix /usr/local/qtembedded -embedded bfin -xplatformqws/linux-bfin-fdpic-g++ -shared -confirm-license -opensource -verbose-little-endian -no-qt3support -depths 8,16,24,32 -no-webkit -nomaketranslations -no-cups -no-nis -no-dbus -qt-gfx-linuxfb
-no-iconv -no-glib-no-rpath -no-feature-QWS_CURSOR -qt-mouse-linuxtp

注:-no-feature-QWS_CURSOR表示不出现鼠标指针.

5.配置成功后就可以进行make;

6.make成功后生成相关动态库和实例,即基本完成移植;

7.把实例放到平台上运行,先要配置环境变量:

export QWS_MOUSE_PROTO=LinuxTP:(触摸屏设备节点)

再把相关的动态库复制到blackfin平台的/usr/lib目录下,同时也要把font下的*qpf文件复制到指定的目录,复制到什么目录可以运行下实例,出错时会提示出目录;

再运行:

./实例 –qws &

加&表示后台运行,如果没出错表示运行成功;

运行出错分析提示:

(1)直接./实例 运行出现如下错误:

QWSSocket::connectToLocalFilecould not connect:: Bad file descriptor

QWSSocket::connectToLocalFilecould not connect:: Bad file descriptor

QWSSocket::connectToLocalFilecould not connect:: Bad file descriptor

No Qt forEmbedded Linux server appears to be running.

If youwant to run this program as a server,

add the"-qws" command-line option.

需加-qws运行即./实例 –qws 如果还出现socket类的错误可能是内核没有增加Unix socket的支持;

(2)出现如下错误:

QLinuxFbScreen::connect:No such device

Error:failed to map framebuffer device to memory.

表示没把src/gui/embedded/qscreenlinuxfb_qws.cpp文件进行修改,

(3)出现如下错误码:

QFontDatabase: Cannot find font directory /usr/local/qte-arm/lib/fonts - is Qt ?

Aborted

(注:/usr/local/qte-arm/lib/fonts这个具体路径视你安装qte的路径而定)

需要把编译后在lib下的fonts复制到对应提示的目录。

(4)出现如下错误:

lockingqpf: Permission denied

在复制font下的文件时只复制*.qpf文件即可,可能会支持不了中文显示。

8.最后可以在$PATH中增加qt编译后的bin目录,主要是用到qmake,这样就有了QT/blackfin平台的交叉编译环境,可以编译自己的QT代码!

9.完成。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: