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

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 -xplatform qws/linux-bfin-fdpic-g++ -shared -confirm-license -opensource -verbose -little-endian -no-qt3support -depths 8,16,24,32 -no-webkit -nomake translations -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::connectToLocalFile could not connect:: Bad file descriptor

QWSSocket::connectToLocalFile could not connect:: Bad file descriptor

QWSSocket::connectToLocalFile could not connect:: Bad file descriptor

No Qt for Embedded Linux server appears to be running.

If you want 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 )出现如下错误:

locking qpf: Permission denied

 

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

 

 

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

 

       9 .完成。

 



你可能感兴趣的:(Linux/Windows,others)